LLM・エージェントを使い倒して分かった、なぜ人によって成果が異常に違うのか
AIタグが付けられた新着記事 - Qiita
最近、AIに関するニュースを見ていると、似たような話題をよく見かける。 「最新モデルが一晩でゲームを作り上げた」 「このWebアプリをAIがほぼ自律的に実装した」 「人間なら何日もかかるものを数時間で完成させた」 「AIが未解決だった数学の問題に進展を与えた」 どれも...
Score: 57.37Confidence: 54%
View offerLoading the catalog…
THE AI OPPORTUNITY INDEX
Find your next AI tool. Explore free access, trials, and credits — all in one place.
AIタグが付けられた新着記事 - Qiita
最近、AIに関するニュースを見ていると、似たような話題をよく見かける。 「最新モデルが一晩でゲームを作り上げた」 「このWebアプリをAIがほぼ自律的に実装した」 「人間なら何日もかかるものを数時間で完成させた」 「AIが未解決だった数学の問題に進展を与えた」 どれも...
Score: 57.37Confidence: 54%
View offerReadhub
9 月零跑全球交付量达 105656 台,同比增长 59%,连续三个月月销超 10 万台。2026 年 1 至 9 月其海外累计出口超 15 万台,截至 2026 年 9 月底零跑全球累计交付超 180 万台。
Score: 57.27Confidence: 54%
View offerReadhub
极氪公布 9 月交付新车 37216 辆,连续 8 个月同环比双增长,同比增 103.85%,1-9 月共交付 28.84 万辆,同比增 100.84%。其中上市一年的极氪 9X 月销超 7000 辆,近期以百万级售价登陆德国市场。极氪 009 蝉联马来西亚等地细分市场销冠。极氪 7X 连续 3 个月销量破万,全球累计突破 20 万辆。
Score: 57.27Confidence: 54%
View offer掘金
Vibe Coding 开发模式下,规范后端能用 IDEA Apifox 插件自动同步接口文档。但碰到不写注解、代码混乱的后端怎么办?Apifox 官方 Skill 耗 Token,手动整理费时...
Score: 57.25Confidence: 54%
View offeriThome 新聞
微軟威脅情報團隊揭露NeedyMantis惡意程式,該惡意程式通常在攻擊者取得目標環境存取權後才被部署,用來維持存取權並執行後續攻擊。
Score: 56.82Confidence: 54%
View offervelog
네트워크를 설계하거나 호스트 IP를 할당할 때 기본이 되는 서브넷 마스크(Subnet Mask)의 동작 원리와 CIDR 표기법 기반의 대역 분할(Subnetting) 계산 과정을 알아보자. 1. 서브넷 마스크의 역할 IPv4 주소는 32비트 체계이며, 하나의 IP는 네트워크 ID(Network ID) 와 호스트 ID(Host ID) 두 부분으로 구성된다. 네트워크 ID : 특정 네트워크 브로드캐스트 도메인을 식별하는 영역 호스트 ID : 해당 네트워크 내부에서 개별 단말(인터페이스)을 식별하는 영역 서브넷 마스크는 32비트 IP 주소에서 어디까지가 네트워크 영역이고, 어디서부터가 호스트 영역인지를 구분하는 기준값 이다. 비트가 1 인 부분은 네트워크 ID, 0 인 부분은 호스트 ID로 매핑된다. 2. 2진수 AND 연산을 통한 네트워크 주소 도출 호스트는 목적지 IP로 패킷을 전송하기 전, 대상이 나와 동일한 로컬 네트워크에 있는지 라우터를 거쳐야 하는 외부 네트워크인지 판단해야 한다. 이때 자신의 IP와 서브넷 마스크를 2진수 AND 연산 하여 네트워크 주소를 추출한다. IP 주소 : 192.168.10.35 서브넷 마스크 : 255.255.255.0 구분 10진수 표기 2진수 표기 (32비트) IP 주소 192.168.10.35 11000000.10101000.00001010.00100011 서브넷 마스크 255.255.255.0 11111111.11111111.11111111.00000000 AND 연산 결과 192.168.10.0 11000000.10101000.00001010.00000000 비트 AND 연산 특성상 둘 다 1 인 자리만 1 이 되므로, 호스트 비트 자리는 모두 0 으로 소거되어 소속 네트워크 주소인 192.168.10.0 이 도출된다. 3. CIDR(Classless Inter-Domain Routing) 표기법 과거 클래스풀(Class A, B, C) 방식의 고정 길이 할당으로 인한 IP 낭비를 방지하기 위해, 서브넷 마스크의 1 비트 개수를 접두사(Prefix) 길이로 표기하는 방식이다. 255.255.255.0 $\rightarrow$ 1비트 24개 $\rightarrow$ /24 255.255.255.192 $\rightarrow$ 1비트 26개 $\rightarrow$ /26 255.255.255.240 $\rightarrow$ 1비트 28개 $\rightarrow$ /28 255.255.255.252 $\rightarrow$ 1비트 30개 $\rightarrow$ /30 4. 실무 빈출 서브넷 프리픽스 계산 예제 각 서브넷에서 첫 번째 주소(호스트 비트 전부 0) 는 네트워크 식별 주소, 마지막 주소(호스트 비트 전부 1) 는 브로드캐스트 주소로 예약된다. 따라서 실제 호스트에 할당 가능한 유효 IP 수는 다음과 같다. $$\text{가용 IP 수} = 2^{(\text{호스트 비트 수})} - 2$$ 예제 1. /26 대역 분할 (소규모 팀/VPC 서브넷) 호스트 비트 : $32 - 26 = 6$비트 전체 IP 수 : $2^6 = 64$개 실제 가용 IP 수 : $64 - 2 = 62$개 서브넷 마스크 : 255.255.255.192 192.168.1.0/24 를 /26 으로 분할할 경우: 서브넷 네트워크 주소 실제 할당 가능한 IP 범위 (Usable IP) 브로드캐스트 주소 1번 192.168.1.0 192.168.1.1 ~ 192.168.1.62 192.168.1.63 2번 192.168.1.64 192.168.1.65 ~ 192.168.1.126 192.168.1.127 3번 192.168.1.128 192.168.1.129 ~ 192.168.1.190 192.168.1.191 4번 192.168.1.192 192.168.1.193 ~ 192.168.1.254 192.168.1.255 예제 2. /28 대역 분할 (서버 팜/특정 서비스 그룹) 호스트 비트 : $32 - 28 = 4$비트 전체 IP 수 : $2^4 = 16$개 실제 가용 IP 수 : $16 - 2 = 14$개 서브넷 마스크 : 255.255.255.240 192.168.10.0/28 대역을 사용할 경우: 네트워크 주소 : 192.168.10.0 가용 IP 범위 : 192.168.10.1 ~ 192.168.10.14 브로드캐스트 주소 : 192.168.10.15 다음 서브넷 시작 주소: 192.168.10.16 예제 3. /30 대역 분할 (라우터 간 Point-to-Point 통신) 라우터와 라우터 사이 1:1 직결 구간처럼 단 2개의 인터페이스 IP만 필요할 때 IP 낭비를 최소화하기 위해 사용한다. 호스트 비트 : $32 - 30 = 2$비트 전체 IP 수 : $2^2 = 4$개 실제 가용 IP 수 : $4 - 2 = 2$개 서브넷 마스크 : 255.255.255.252 10.0.0.0/30 대역을 사용할 경우: 네트워크 주소 : 10.0.0.0 라우터 A IP : 10.0.0.1 라우터 B IP : 10.0.0.2 브로드캐스트 주소 : 10.0.0.3 5. 핵심 요약 및 빠른 참조표 CIDR Prefix 서브넷 마스크 호스트 비트 전체 IP 가용 IP 주 용도 /24 255.255.255.0 8 256 254 표준 로컬 네트워크(C클래스 기본) /26 255.255.255.192 6 64 62 클라우드 서브넷 분할 /28 255.255.255.240 4 16 14 소규모 격리망, DMZ /30 255.255.255.252 2 4 2 라우터 간 1:1 P2P 링크
velog
In India, bone marrow transplant (BMT) or more precisely called hematopoietic stem cell transplantation (HSCT) can be a potentially curative alternative therapy for Nigerian patients with severe sickle cell disease (SCD). Allogeneic HSCT is the only proven curative therapy for SCD but is a very risky treatment and should be carefully selected for each patient as recommended by the American Society of Hematology . What takes place in sickle cell anemia? The mutation of hemoglobin gene is the cause of the phenomenon of Sickle Cell Anemia wherein the red blood cells become stiff and sickle-shaped, which results in the following: Pain crises Anemia Organ damage Increased infection risk How the Treatment Works Sickle Cell Anemia is a genetic mutation of the hemoglobin, which causes red blood cells to be sickle-shaped, which causes pain, anemia and organ damage. A bone marrow transplant is effective because: Destruction of the Diseased Bone Marrow of the Patient The defective blood-forming stem cells are removed by high-dose chemotherapy (and in some cases, radiation). Healthy Stem Cell Transplantation The infusion of the patient with the donor blood of a matched donor (typically a sibling) is performed with stem cells. The synthesis of Healthy Red Blood Cells These donor stem cells implant themselves in the bone marrow where they start to make normal hemoglobin, getting rid of sickling. Who Is Eligible? Bone marrow transplant is considered in most cases in case of: Severe symptoms patients. Repeat of pain crises or complications (stroke, organ damage) Access to an appropriate donor. Risks vs Benefits Benefits: Potential lifelong cure Eliminates the necessity of frequent hospitalizations. Enhances life quality to a considerable extent. Risks: Severe side effects of chemotherapy. Risk of GVHD Slow recovery (months to a year). New Advancements Emerging treatments like: Gene therapy Haploidentical transplants Bone Marrow Transplant for Sickle Cell Procedure: Patient assessment and qualification Physicians evaluate the suitability of the patient to undergo transplant by examining: Severity of the disease (regular pain crises, had a stroke) Organ functioning. Age and overall health This makes the patient be able to make the procedure safe. Donor Matching Best alternative: Fully matched sibling donor (HLA-matched). Alternatives: Matched unrelated donor Haploidentical donor (parent or partial relative) Closer match minimizes the chances of complication such as Graft-versus-host disease. Pre-Transplant Conditioning Prior to transplant, the patient is subjected to: Sometimes radiation in combination with chemotherapy. Purpose: Destroy cancerous bone marrow. Suppress the immune system Avoid the rejection of donor cells. The stage generally takes 5-10 days. Stem Cell Donation There are two primary methods of the collection of stem cells: Peripheral blood stem cell (most common) collection. In bone marrow, harvest (pelvic bone under anaesthesia) The resultant stem cells are treated and infused. Transplant (Stem Cell Infusion) Ten healthy stem cells are introduced into the patient via an IV line. This is an painless procedure and akin to a blood transfusion. No surgery is required Engraftment Phase The donor stem cells are transported to the bone marrow where they start synthesizing healthy blood cells. Takes about 2–4 weeks During this time: Immunity is very low Isolations are done to avoid infections in the patients. Post-Transplant Recovery Close monitoring for: Infections Organ function Signs of rejection or Graft-versus-host disease. Conclusion India offers access to experienced bone marrow transplant centres at relatively low prices and may be the solution for Nigerian families looking for a comparatively low-cost bone marrow transplant for sickle cell disease in India. Eligibility will have to be determined by the specialist with the patient's medical history and donor availability. Getting a comprehensive treatment plan and hospital cost estimate prior to travels may assist families to understand the medical and non-medical costs they can expect.
velog
1. 빅데이터 열풍과 회의론 빅데이터에 대한 관심이 높아지면서 많은 기업이 데이터를 수집하고 분석하기 시작했다. 하지만 데이터를 많이 확보하는 것만으로 기업의 성과가 자동으로 만들어지는 것은 아니다. 데이터에서 가치와 통찰을 끌어내고 이를 실제 성과로 연결하는 것 이 핵심이다. 핵심 데이터의 양 자체가 중요한 것이 아니라, 데이터에서 의미 있는 통찰을 발견하고 성과를 만들어내는 것이 중요하다. 2. 왜 싸이월드는 페이스북이 되지 못했나? 싸이월드와 페이스북의 사례를 통해 데이터 분석을 경영에 활용하는 문화와 전략적 통찰의 중요성 을 생각해볼 수 있다. 주요 원인 데이터 분석 기반의 경영 문화가 부족했다. 비즈니스의 핵심 가치와 연관된 심도 있는 분석 을 수행하지 못했다. 싸이월드의 핵심 고객과 관련된 주요 지표가 악화되고 있었지만 적절하게 대응하지 못했다. 즉, 데이터를 가지고 있었다는 사실만으로는 충분하지 않다. 중요한 지표의 변화를 발견하고 그 원인을 분석하여 실제 경영 전략에 반영하는 과정 이 필요하다. 3. 빅데이터 분석에서 'Big'은 핵심이 아니다 빅데이터라는 이름 때문에 데이터의 크기(Volume) 가 가장 중요한 것처럼 보일 수 있다. 하지만 실제로 중요한 것은 데이터의 크기 자체가 아니라 분석을 통해 의미 있는 가치를 만들어내는 것 이다. 중요한 관점 분석 문화가 경영 자체에 뿌리 깊게 자리 잡아야 한다. 새롭고 다양한 정보 원천을 활용하는 것이 빅데이터의 중요한 특징이다. 단순히 비용 문제만이 아니라 분석 방법과 분석 성과에 대한 이해 부족 이 문제가 될 수 있다. 따라서 빅데이터를 도입할 때는 "얼마나 많은 데이터를 가지고 있는가?" 보다 "이 데이터를 활용해 어떤 문제를 해결하고 어떤 가치를 만들어낼 것인가?" 를 먼저 생각해야 한다. 4. 전략적 통찰이 없는 분석의 함정 데이터 분석을 많이 한다고 해서 반드시 좋은 전략이 만들어지는 것은 아니다. 전략적 목적 없이 분석 자체에만 집중하면 오히려 잘못된 의사결정을 할 수 있다. 우수한 기업의 특징 우수한 기업들은 데이터를 특별한 프로젝트에서만 사용하는 것이 아니라 일상적인 업무와 의사결정 과정에 전략적으로 활용 한다. 복잡한 최적화가 항상 좋은 것은 아니다 복잡한 분석 모델이나 최적화 기법을 사용한다고 해서 비즈니스 성과가 반드시 좋아지는 것은 아니다. 다른 기업들도 비슷한 분석 역량을 갖출 수 있다. 분석 결과가 근본적으로 경쟁력이 없는 비즈니스 모델 을 뒷받침하는 데 사용되어서는 안 된다. 최적화를 통해 비용이나 가격을 낮추더라도 다른 기업이 더 단순한 비즈니스 모델을 이용하여 더 낮은 가격을 제시한다면 경쟁 우위를 확보하기 어렵다. 예시 A 기업이 매우 복잡한 데이터 분석을 통해 상품 가격을 1,000원 낮췄다고 하자. 그런데 B 기업이 훨씬 단순한 사업 구조를 가지고 있어 처음부터 A 기업보다 더 낮은 가격을 제시할 수 있다면, A 기업의 복잡한 최적화가 반드시 경쟁 우위로 이어지는 것은 아니다. 따라서 분석에서는 "얼마나 정교하게 분석했는가?" 보다 "이 분석이 실제 비즈니스의 핵심 문제를 해결하는가?" 가 중요하다. 5. 일차적인 분석 vs 전략 도출을 위한 가치 기반 분석 일차적인 분석 일차적인 분석만으로도 해당 부서나 업무 영역에서 상당한 업무 개선 효과 를 얻을 수 있다. 예를 들어 판매량, 고객 수, 비용 등의 데이터를 분석하여 현재 업무의 문제점을 발견하고 개선할 수 있다. 전략 도출을 위한 가치 기반 분석 전략적인 인사이트를 얻기 위해서는 특정 업무만 바라보는 것이 아니라 비즈니스 전체의 큰 그림 을 볼 수 있어야 한다. 즉, 단순히 데이터를 분석하는 것을 넘어 비즈니스의 핵심 문제와 연결하여 통찰력 있는 분석 을 수행해야 한다. 구분 특징 일차적인 분석 특정 부서나 업무 영역의 문제 해결 및 효율성 향상 가치 기반 분석 큰 그림을 바라보고 비즈니스 전략과 연결하여 통찰 도출 6. 전략 인사이트 도출을 위한 필요 역량 6-1. 데이터 사이언스의 의미와 역할 데이터 사이언스(Data Science) 는 다양한 데이터를 분석하여 비즈니스와 사회의 문제를 해결하고 전략적 통찰을 얻는 분야이다. 데이터 사이언스의 대상 데이터 사이언스는 정형 데이터뿐만 아니라 비정형 데이터까지 다양한 유형의 데이터를 대상으로 한다. 인터넷에서 생성되는 데이터 휴대전화에서 생성되는 데이터 감시용 카메라에서 생성되는 영상 데이터 숫자 및 문자 데이터 이미지 및 영상 데이터 기타 다양한 형태의 데이터 통계학과 데이터 사이언스의 차이 데이터 사이언스는 기존 통계학의 분석 방법을 활용하면서도 데이터를 보다 총체적인 관점에서 바라보는 접근법 을 사용한다. 단순히 통계적 수치를 계산하는 데 그치지 않고, 비즈니스의 핵심 이슈에 답하고 전략적 통찰을 도출하여 실제 사업 성과를 이끌어내는 것 을 중요하게 생각한다. 7. 데이터 사이언스의 3대 구성 요소 데이터 사이언스는 크게 IT, Analytics, 비즈니스 분석 의 세 영역으로 구성된다. 구성 요소 내용 IT Data Management, 데이터 수집·저장·관리 등 Analytics 데이터를 분석하고 모델링하여 의미 있는 결과 도출 비즈니스 분석 분석 결과를 비즈니스 문제와 연결하고 전략 및 의사결정에 활용 즉, 데이터 사이언스는 단순한 데이터 분석 기술만을 의미하지 않는다. 데이터를 관리하고 → 분석하고 → 비즈니스 문제와 연결하는 과정 전체를 포함한다. 8. 데이터 사이언티스트의 역량 가장 중요한 특징 - 강력한 호기심 데이터 사이언티스트에게 중요한 특징 중 하나는 강력한 호기심 이다. 단순히 주어진 데이터를 분석하는 것이 아니라 문제의 이면을 파고들고 새로운 질문을 발견하며, 검증 가능한 가설을 세우는 능력 이 필요하다. 8-1. Hard Skill Hard Skill 은 기술적이고 전문적인 능력을 의미한다. 빅데이터에 대한 이론적 지식 데이터 분석 기술 통계 및 분석 방법에 대한 숙련 데이터 처리 및 모델링 능력 8-2. Soft Skill Soft Skill 은 데이터를 분석한 결과를 실제 문제 해결과 의사결정으로 연결하는 데 필요한 능력이다. 통찰력 있는 분석 → 창의적 사고, 호기심, 논리적 비판 설득력 있는 전달 → 스토리텔링 다분야 간 협력 → 다양한 직무 및 전문가와의 협업 구분 주요 역량 Hard Skill 빅데이터 이론, 분석 기술, 통계, 모델링 등 Soft Skill 창의적 사고, 호기심, 논리적 비판, 스토리텔링, 협업 등 9. 데이터 사이언스 : 과학과 인문의 교차로 데이터 사이언스는 단순히 컴퓨터 기술이나 통계학만을 다루는 분야가 아니다. 과학적 분석 능력과 인문학적 사고가 함께 필요한 분야 이다. 데이터 사이언티스트에게는 다음과 같은 인문학적 역량도 중요하다. 스토리텔링 커뮤니케이션 창의력 열정 직관력 비판적 시각 글쓰기 능력 대화 능력 분석 결과를 단순히 숫자로 제시하는 것만으로는 충분하지 않다. "이 결과가 무엇을 의미하는가?", "왜 이런 결과가 나타났는가?", "앞으로 무엇을 해야 하는가?" 를 설명할 수 있어야 한다. 10. 데이터 사이언티스트에게 요구되는 인문학적 사고 데이터 사이언스에서는 단순한 현상 파악에서 끝나지 않고 과거 → 현재 → 미래 를 연결하여 생각하는 능력이 중요하다. 구분 과거 현재 미래 Information 무슨 일이 일어났는가? (리포팅) 무슨 일이 일어나고 있는가? (경고) 무슨 일이 일어날 것인가? (추측) Insight 어떻게, 왜 일어났는가? (모델링) 차선 행동은 무엇인가? (권고) 최악·최선의 상황은 무엇인가? (예측·최적화) 핵심적으로 이해하기 Information 은 현상을 파악하는 데 초점을 둔다. 반면 Insight 는 한 단계 더 나아가 원인을 분석하고, 앞으로 어떤 행동을 해야 하는지 판단하며, 미래의 여러 가능성을 예측하고 최적의 방향을 찾는 것 까지 포함한다. 따라서 데이터 사이언스에서 중요한 것은 단순히 "무슨 일이 일어났는가?" 를 알려주는 것을 넘어 "왜 일어났고, 앞으로 무엇을 해야 하는가?" 까지 연결하는 것이다. 11. 데이터 분석 모델링에서 인문학적 통찰력의 적용 데이터를 분석할 때도 사람을 어떤 관점에서 바라보느냐에 따라 분석 방법과 해석이 달라질 수 있다. 인간을 바라보는 세 가지 관점 1 타고난 성향의 관점 인간은 기본적으로 쉽게 변하지 않는 성향을 가진 존재 라고 보는 관점이다. 예를 들어 어떤 사람의 성격이나 타고난 성향이 그 사람의 행동에 지속적인 영향을 준다고 보는 방식이다. 2 행동적 관점 사람을 판단할 때 그 사람의 내면적인 성향만 추측하기보다 실제로 어떤 행동을 지속적으로 하는지 관찰하는 것 이 더 정확할 수 있다고 보는 관점이다. 즉, 실제 행동 데이터를 통해 사람의 특성을 파악 한다. 3 상황적 관점 사람의 행동은 개인의 고정된 성향뿐만 아니라 주어진 상황이나 환경에 따라 달라질 수 있다 고 보는 관점이다. 따라서 데이터를 분석할 때도 단순히 "이 사람은 원래 이런 사람이다"라고 단정하기보다는 어떤 상황에서 어떤 행동이 나타났는가 를 함께 살펴볼 필요가 있다. 관점 사람을 바라보는 방식 분석 시 관심 대상 타고난 성향 사람은 쉽게 변하지 않는 성향을 가짐 개인의 고유한 성향 행동적 실제 행동을 관찰하여 사람을 판단 행동 패턴 상황적 행동은 상황과 환경에 따라 달라질 수 있음 상황과 행동의 관계 12. 빅데이터 그리고 데이터 사이언스의 미래 12-1. 빅데이터의 시대 빅데이터 시대에는 데이터의 양뿐만 아니라 데이터의 종류, 생성 속도, 분석 기술 등이 함께 발전하고 있다. 데이터의 양과 종류가 다양해짐 실시간 분석 의 중요성 증가 심층신경망(DNN, Deep Neural Network) 등의 기술 활용 특히 다양한 데이터가 빠르게 생성되면서 과거의 데이터를 분석하는 것뿐만 아니라 실시간으로 데이터를 분석하고 즉각적으로 의사결정에 활용하는 능력 이 중요해지고 있다. 13. 빅데이터 회의론을 넘어 : 가치 패러다임의 변화 빅데이터의 발전은 단순히 데이터의 양이 증가하는 것을 넘어 데이터와 기술을 바라보는 가치 패러다임 자체의 변화 로 이어지고 있다. 대표적인 변화가 디지털화 → 연결 → 에이전시 로 이어지는 과정이다. 1 디지털화(Digitalization) 아날로그 세상의 다양한 정보와 현상을 어떻게 효과적으로 디지털 데이터로 변환할 것인가 가 중요하다. 즉, 현실 세계의 정보를 데이터로 바꾸는 단계이다. 2 연결(Connection) 디지털화된 정보와 대상들이 서로 연결되면서 연결을 얼마나 효과적이고 효율적으로 활용할 수 있는가 가 중요해진다. 특히 사물인터넷(IoT)의 성숙 과 함께 사람과 사람, 사람과 사물, 사물과 사물 사이의 연결은 앞으로 더욱 증가하고 복잡해질 것으로 예상된다. 3 에이전시(Agency) 연결이 복잡해질수록 단순히 연결하는 것만으로는 부족하다. 복잡한 연결 관계를 얼마나 효과적이고 신뢰성 있게 관리할 수 있는가 가 중요해진다. 단계 핵심 질문 의미 디지털화 어떻게 데이터를 만들 것인가? 아날로그 정보를 디지털 데이터로 변환 연결 어떻게 서로 연결할 것인가? 디지털화된 정보와 대상들을 연결 에이전시 복잡한 연결을 어떻게 관리할 것인가? 연결된 환경을 효과적이고 신뢰성 있게 관리 암기: 디지털화 → 연결 → 에이전시 14. 데이터 사이언스의 한계와 인문학 데이터 사이언스가 아무리 발전하더라도 데이터와 분석 모델만으로 현실의 모든 문제를 완벽하게 설명할 수는 없다. 데이터 사이언티스트는 분석 모델의 결과를 무조건적으로 신뢰하기보다 모델의 한계와 가정에 대해 끊임없이 의심하고 검토하는 태도 가 필요하다. 데이터 사이언티스트가 가져야 할 태도 분석 모델의 능력과 한계를 항상 의심한다. 모델이 가지고 있는 가정 을 확인한다. 가정과 실제 현실 사이에 불일치가 없는지 살펴본다. 분석 모델이 예측하지 못하는 잠재적 위험 을 확인한다. 분석 결과만 바라보지 않고 현실 세계를 함께 관찰 한다. 즉, 데이터 사이언스에서는 "데이터가 이렇게 말하고 있으니 무조건 맞다" 라고 생각하는 것이 아니라, "이 분석 결과가 현실에서도 정말 타당한가?" 를 끊임없이 검토하는 자세가 중요하다. 15. ADsP 시험 대비 핵심 암기 포인트 1 빅데이터의 핵심 Big = 데이터의 크기만을 의미하지 않는다. 핵심은 데이터 → 분석 → 통찰 → 비즈니스 성과 로 연결하는 것이다. 2 전략적 통찰 분석 자체가 목적이 되어서는 안 된다. 비즈니스의 핵심 문제와 연결 해야 한다. 특정 업무만 보는 것이 아니라 큰 그림 을 볼 필요가 있다. 복잡한 최적화가 항상 경쟁 우위를 의미하는 것은 아니다. 3 데이터 사이언스 3대 구성 요소 IT + Analytics + 비즈니스 분석 구성 요소 키워드 IT Data Management Analytics 분석 비즈니스 분석 비즈니스 컨설팅 및 전략 연결 4 데이터 사이언티스트의 핵심 역량 호기심 → 문제의 이면을 파고들고 가설을 세움 Hard Skill → 이론적 지식, 분석 기술 Soft Skill → 창의적 사고, 논리적 비판, 스토리텔링, 협업 5 Information과 Insight 구분 핵심 질문 Information 무슨 일이 일어났는가? / 일어나고 있는가? / 일어날 것인가? Insight 왜 일어났는가? / 무엇을 해야 하는가? / 최선·최악의 상황은 무엇인가? 6 인간을 바라보는 세 가지 관점 타고난 성향 → 사람은 쉽게 변하지 않는 성향을 가짐 행동적 → 실제 행동을 관찰하여 사람을 판단 상황적 → 상황과 환경에 따라 행동이 달라질 수 있음 7 가치 패러다임의 변화 디지털화 → 연결 → 에이전시 16. 전체 내용 한눈에 정리 빅데이터 시대에서 중요한 것은 단순히 많은 데이터를 확보하는 것 이 아니다. 데이터에서 의미 있는 통찰을 발견하고 이를 비즈니스 전략과 연결하여 실제 성과를 만들어내는 것 이 핵심이다. 이를 위해 데이터 사이언티스트는 단순한 분석 기술뿐만 아니라 호기심, 창의적 사고, 논리적 비판, 스토리텔링, 커뮤니케이션, 협업 능력 을 갖추어야 한다. 또한 분석 모델의 결과를 무조건적으로 신뢰해서는 안 된다. 모델의 가정과 현실의 차이를 확인하고, 모델이 예측하지 못하는 위험을 살펴보는 인문학적·비판적 사고 가 필요하다. 결국 데이터 사이언스는 데이터를 분석하는 기술 에서 끝나는 것이 아니라, 데이터를 통해 현실을 이해하고 비즈니스의 전략적 문제를 해결하는 과정 이라고 볼 수 있다.
velog
대역의 필요성 테스트를 작성하다 보면 외부 요인이 필요한 시점이 있다. 다음은 외부 요인이 테스트에 관여하는 주요 예이다. 테스트 대상에서 파일 시스템을 사용 테스트 대상에서 DB로부터 데이터를 조회하거나 데이터를 추가 테스트 대상에서 외부의 HTTP 서버와 통신 테스트 대상이 이런 외부 요인에 의존하면 테스트를 작성하고 실행하기 어려워진다. 테스트 대상 코드에서 사용하는 외부 API 서버가 일시적으로 장애가 나면 테스트를 원활하게 수행할수 없다. 내부에서 사용하는 DB라도 상황에 맞게 데이터를 구성하는 것이 항상 가능한 것은 아니다. 자동이체 기능을 예로 들어보자. 이 기능은 외부 업체가 제공하는 API를 이용해서 카드번호가 유효한지 확인하고 그 결과에 따라 자동이체 정보를 등록한다. 이 기능을 테스트하려면 정상 카드번호, 도난 카드번호, 만료일이 지난 카드번호가 필요하기 때문에 외부 업체에서 상황별로 테스트할 수 있는 카드번호를 받아와야 한다. TDD는 "테스트 작성 — 통과시킬 만큼 구현 → 리팩토링"의 과정을 짧은 흐름으로 반복해야 하는데 외부 업체에서 상황별 카드번호를 제공하지 않으면 테스트를 진행할 수 없게 된다. 외부 요인은 테스트 작성을 어렵게 만들 뿐만 아니라 테스트 결과도 예측할 수 없게 만든다. 예를 들어 카드 정보 검사 대행업체에서 테스트할 때 사용하라고 제공한 카드번호의 유효 기간이 한 달 뒤일 수 있다. 이 카드번호를 사용해서 성공한 자동이체 정보 등록 기능 테스트는 한 달 뒤에 유효 기간 만료로 실패하게 된다. 테스트에서는 외부 요인으로 인해 테스트가 어려울 때 외부 요인을 대신하는 대역이 외부 요인을 대신해서 테스트에 참여한다. 영어로 된 테스트 관련 글을 읽으면 test double이란 표현이 자주 나오는데 여기서 double은 본 장에서 설명하는 대역에 해당한다. 즉, test double은 테스트에서 진짜 대신 사용할 대역을 의미한다. 대역을 이용한 테스트 public class StubCardNumberValidator extends CardNumberValidator { private String invalidNo; private String theftNo; public void setInvalidNo(String invalidNo) { this.invalidNo = invalidNo; } public void setTheftNo(String theftNo) { this.theftNo = theftNo; } @Override public CardValidity validate(String cardNumber) { if (invalidNo != null && invalidNo.equals(cardNumber)) { return CardValidity.INVALID; } if (theftNo != null && theftNo.equals(cardNumber)) { return CardValidity.THEFT; } return CardValidity.VALID; } } public class AutoDebitRegister_Stub_Test { private AutoDebitRegister register; private StubCardNumberValidator stubValidator; private StubAutoDebitInfoRepository stubRepository; @BeforeEach void setUp() { stubValidator = new StubCardNumberValidator(); stubRepository = new StubAutoDebitInfoRepository(); register = new AutoDebitRegister(stubValidator, stubRepository); } @Test void invalidCard() { stubValidator.setInvalidNo("111122223333"); AutoDebitReq req = new AutoDebitReq("user1", "111122223333"); RegisterResult result = this.register.register(req); assertEquals(INVALID, result.getValidity()); } @Test void theftCard() { stubValidator.setTheftNo("1234567890123456"); AutoDebitReq req = new AutoDebitReq("user1", "1234567890123456"); RegisterResult result = this.register.register(req); assertEquals(CardValidity.THEFT, result.getValidity()); } @Test void validCard() { AutoDebitReq req = new AutoDebitReq("user1", "1234123412341234"); RegisterResult result = this.register.register(req); assertEquals(VALID, result.getValidity()); } } public interface AutoDebitInfoRepository { void save(AutoDebitInfo info); AutoDebitInfo findOne(String userId); } public class MemoryAutoDebitInfoRepository implements AutoDebitInfoRepository { private Map<String, AutoDebitInfo> infos = new HashMap<>(); @Override public void save(AutoDebitInfo info) { infos.put(info.getUserId(), info); } @Override public AutoDebitInfo findOne(String userId) { return infos.get(userId); } } public class AutoDebitRegister_Fake_Test { private AutoDebitRegister register; private StubCardNumberValidator cardNumberValidator; private MemoryAutoDebitInfoRepository repository; @BeforeEach void setUp() { cardNumberValidator = new StubCardNumberValidator(); repository = new MemoryAutoDebitInfoRepository(); register = new AutoDebitRegister(cardNumberValidator, repository); } @Test void alreadyRegistered_InfoUpdated() { repository.save( new AutoDebitInfo("user1", "111222333444", LocalDateTime.now())); AutoDebitReq req = new AutoDebitReq("user1", "123456789012"); RegisterResult result = this.register.register(req); AutoDebitInfo saved = repository.findOne("user1"); assertEquals("123456789012", saved.getCardNumber()); } @Test void notYetRegistered_newInfoRegistered() { AutoDebitReq req = new AutoDebitReq("user1", "1234123412341234"); RegisterResult result = this.register.register(req); AutoDebitInfo saved = repository.findOne("user1"); assertEquals("1234123412341234", saved.getCardNumber()); } } 대역을 사용한 외부 상황 흉내와 결과 검증 앞서 대역을 사용한 테스트에서 주목할 점은 다음 두 가지 없이 AutoDebitRegister에 대한 테스트를 수행했다는 점이다. 외부 카드 정보 API 연동 자동이체 정보를 저장한 DB StubCardNumberValidator를 사용해서 유효하지 않은 카드번호에 대한 테스트를 수행했다. 외부 업체에서 제공하는 카드 정보 API 연동 없이 AutoDebitRegister가 유효하지 않은 카드번호에 대해 올바르게 동작하는지 확인할 수 있었다. 비슷하게 도난 카드번호에 대한 테스트도 대역인 StubCardNumberValidator을 이용해서 진행할 수 있었다. 또한, 메모리를 사용한 MemoryAutoDebitInfoRepository를 이용해서 데이터가 올바르게 바뀌고 저장되는지 확인했다. 실제 DB를 연동하지 않고 AutoDebitRegister가 데이터 저장소에 데이터를 올바르게 반영하는지 확인할 수 있었다. DB를 연동하지 않고 메모리를 사용했기에 테스트 속도도 매우 빠르다. 아래 공통점은 대역을 이용해서 외부의 상황을 흉내 낸다는 점이다. StubCardNumberValidator: 카드 정보 API를 대신해서 유효한 카드번호, 도난 카드번호와 같은 상황을 흉내 낸다 MemoryAutoDebitInfoRepository: 특정 사용자에 대한 자동이체 정보가 이미 등록되어 있거나 등록되어 있지 않은 상황을 흉내 낸다. 또한, 대역을 이용하면 외부에 대한 결과를 검증할 수 있다. AutoDebitRegister는 자동이체 정보를 AutoDebitlnfoRepository에 저장하는데 테스트 코드는 메모리를 이용한 대역을 사용해서 저장 결과를 확인하고 있다. 대역 종류 구현에 따라 아래와 같이 대역을 구분할 수 있다. 대역 종류 설명 스텁(Stub) 구현을 단순한 것으로 대체한다. 테스트에 맞게 단순히 원하는 동작을 수행한다. StubCardNumberValidator가 스텁 대역에 해당한다. 가짜(Fake) 제품에는 적합하지 않지만, 실제 동작하는 구현을 제공한다. DB 대신에 메모리를 이용해서 구현한 MemoryAutoDebitInfoRepository가 가짜 대역에 해당한다. 스파이(Spy) 호출된 내역을 기록한다. 기록한 내용은 테스트 결과를 검증할 때 사용한다. 스텁이기도 하다. 모의(Mock) 기대한 대로 상호작용하는지 행위를 검증한다. 기대한 대로 동작하지 않으면 익셉션을 발생할 수 있다. 모의 객체는 스텁이자 스파이도 된다. 회원 가입 기능을 이용해서 대역을 살펴보자. 각 타입은 다음 역할을 수행한다. UserRegister: 회원 가입에 대한 핵심 로직을 수행한다. WeakPasswordChecker: 암호가 약한지 검사한다. UserRepository: 회원 정보를 저장하고 조회하는 기능을 제공한다. EmailNotifier: 이메일 발송 기능을 제공한다 public class UserRegisterTest { private UserRegister userRegister; private StubWeakPasswordChecker stubPasswordChecker = new StubWeakPasswordChecker(); private MemoryUserRepository fakeRepository = new MemoryUserRepository(); private SpyEmailNotifier spyEmailNotifier = new SpyEmailNotifier(); @BeforeEach void setUp() { userRegister = new UserRegister(stubPasswordChecker, fakeRepository, spyEmailNotifier); } @DisplayName("약한 암호면 가입 실패") @Test void weakPassword() { stubPasswordChecker.setWeak(true); assertThrows(WeakPasswordException.class, () -> { userRegister.register("id", "pw", "email"); }); } @DisplayName("이미 같은 ID가 존재하면 가입 실패") @Test void dupIdExists() { // 이미 같은 ID 존재하는 상황 만들기 fakeRepository.save(new User("id", "pw1", "email@email.com")); assertThrows(DupIdException.class, () -> { userRegister.register("id", "pw2", "email"); }); } @DisplayName("같은 ID가 없으면 가입 성공함") @Test void noDupId_RegisterSuccess() { userRegister.register("id", "pw", "email"); User savedUser = fakeRepository.findById("id"); assertEquals("id", savedUser.getId()); assertEquals("email", savedUser.getEmail()); } @DisplayName("가입하면 메일을 전송함") @Test void whenRegisterThenSendMail() { userRegister.register("id", "pw", "email@email.com"); assertTrue(spyEmailNotifier.isCalled()); assertEquals( "email@email.com", spyEmailNotifier.getEmail()); } } public class WeakPasswordException extends RuntimeException { } public interface WeakPasswordChecker { boolean checkPasswordWeak(String pw); } public class StubWeakPasswordChecker implements WeakPasswordChecker { private boolean weak; public void setWeak(boolean weak) { this.weak = weak; } @Override public boolean checkPasswordWeak(String pw) { return weak; } } public class UserRegister { private WeakPasswordChecker passwordChecker; private UserRepository userRepository; private EmailNotifier emailNotifier; public UserRegister(WeakPasswordChecker passwordChecker, UserRepository userRepository, EmailNotifier emailNotifier) { this.passwordChecker = passwordChecker; this.userRepository = userRepository; this.emailNotifier = emailNotifier; } public void register(String id, String pw, String email) { if (passwordChecker.checkPasswordWeak(pw)) { throw new WeakPasswordException(); } User user = userRepository.findById(id); if (user != null) { throw new DupIdException(); } userRepository.save(new User(id, pw, email)); emailNotifier.sendRegisterEmail(email); } } public interface UserRepository { void save(User user); User findById(String id); } public class MemoryUserRepository implements UserRepository { private Map<String, User> users = new HashMap<>(); @Override public void save(User user) { users.put(user.getId(), user); } @Override public User findById(String id) { return users.get(id); } } public class User { private String id; private String password; private String email; public User(String id, String password, String email) { this.id = id; this.password = password; this.email = email; } public String getId() { return id; } public String getEmail() { return email; } } public class DupIdException extends RuntimeException { } 대역과 개발 속도 TDD 과정에서 대역을 사용하지 않고 실제 구현을 사용한다면 다음과 같은 일이 벌어지게 된다. 카드 정보 제공 업체에서 도난 카드번호를 받을 때까지 테스트를 기다린다. 카드 정보 제공 API가 비정상 응답을 주는 상황을 테스트하기 위해 업체의 변경 대응을 기다린다. 회원 가입 테스트를 한 뒤에 편지가 도착할 때까지 메일함을 확인한다. 약한 암호 검사 기능을 개발할 때까지 회원 가입 테스트를 대기한다. 네 경우 모두 대기 시간이 발생한다. 도난 카드에 대한 테스트를 진행하기 위해 업체로부터 도난 카드번호를 받아야 한다. 바로 카드번호를 받을 수 있으면 좋지만 1~2일 이상 소요되는 경우도 있다. 회원 가입할 때 메일이 발송되는지 확인하려면 실제 이메일 주소를 이용해서 테스트를 진행해야 한다. 또한, 메일이 도착할 때까지 메일함을 확인해야 한다. 이메일 특성상 테스트를 실행하고 몇 분 뒤에 메일이 도착하기도 한다. 약한 암호 검사 기능을 다른 개발자가 구현하고 있다면 그 개발자가 구현을 완료할 때까지 약한 암호에 대한 회원 가입 테스트를 진행할 수 없다. 대역을 사용하면 실제 구현이 없어도 다양한 상황에 대해 테스트할 수 있다. 외부의 카드 정보 제공 API와 연동할 수 없는 경우에도 유효한 카드번호나 도난 카드번호에 대한 테스트를 진행할 수 있다. DB가 없어도 동일 ID가 이미 존재하는 상황을 테스트할 수 있다. 또한, 대역을 사용하면 실제 구현이 없어도 실행 결과를 확인할 수 있다. DB가 없어도 회원 데이터가 올바르게 저장되는지 확인할 수 있고 메일 서버가 없어도 이메일 발송 요청을 하는지 확인할 수 있다. 즉, 대역은 의존하는 대상을 구현하지 않아도 테스트 대상을 완성할 수 있게 만들어주며 이는 대기 시간을 줄여주어 개발 속도를 올리는 데 도움이 된다. 모의 객체를 과하게 사용하지 않기 모의 객체는 스텁과 스파이를 지원하므로 대역으로 모의 객체를 많이 사용한다. 하지만 모의 객체를 과하게 사용하면 오히려 테스트 코드가 복잡해지는 경우도 발생한다. 회원 가입 성공 테스트를 모의 객체를 이용해서 작성해보자. public class UserRegisterMockOvercaseTest { private UserRegister userRegister; private WeakPasswordChecker mockPasswordChecker = Mockito.mock(WeakPasswordChecker.class); private UserRepository mockRepository = Mockito.mock(UserRepository.class); private EmailNotifier mockEmailNotifier = Mockito.mock(EmailNotifier.class); @BeforeEach void setUp() { userRegister = new UserRegister(mockPasswordChecker, mockRepository, mockEmailNotifier); } @DisplayName("이미 같은 ID가 존재하면 가입 실패") @Test
velog
Sunwin — cổng game đổi thưởng đẳng cấp hàng đầu châu Á với hơn triệu thành viên hoạt động mỗi ngày. Người chơi được trải nghiệm hệ sinh thái giải trí đa dạng: Tài Xỉu, Bắn Cá, Slot game, Baccarat, nổ hũ jackpot và hàng loạt mini game hấp dẫn. Sunwin nổi bật với công nghệ bảo mật tiên tiến, giao diện hiện đại tối ưu trên mọi thiết bị và tốc độ nạp rút chỉ trong 30 giây. Đăng ký Sunwin ngay hôm nay để nhận bonus chào mừng và tham gia cộng đồng cá cược chuyên nghiệp. Website: https://sunwin20.de/ Phone: 0867 352 194 Email: support@sunwin20.de Address: 215 Nguyễn Văn Linh, Phường Tân Phong, Quận 7, TP. Hồ Chí Minh, Việt Nam Hashtag: #Sunwin #Sunwin20 #GameBaiSunwin #TaiXiuSunwin #GameBaiDoiThuong #NhaCaiUyTin #NhaCaiVietNam #CaCuocTrucTuyen #CasinoOnline #SlotGame #BanCaDoiThuong #GameDoiThuong https://www.twitch.tv/sunwin20de/about https://www.reddit.com/user/sunwin20de/ https://gravatar.com/sunwin20de https://tudomuaban.com/chi-tiet-rao-vat/3042861/sunwin-cong-game-bai-doi-thuong-uy-tin-hang-dau-viet-nam.html https://odesli.co/gtvvjrfx9wvxh https://song.link/gtvvjrfx9wvxh https://circleten.org/a/441239?postTypeId=whatsNew https://artist.link/gtvvjrfx9wvxh https://www.easyhits4u.com/profile.cgi?login=sunwin20de&view_as=1 https://www.tumblr.com/sunwin20de https://stepik.org/users/1406181764/profile?auth=registration https://www.elephantjournal.com/profile/sunwin20de/ https://www.instapaper.com/p/18048861 https://mylink.page/gtvvjrfx9wvxh https://luvly.co/users/sunwin20de https://playlist.link/gtvvjrfx9wvxh https://pods.link/gtvvjrfx9wvxh https://padlet.com/osmanranjonapay8/tipclub-trang-chu-cong-game-tipclub-oan-keo-hup-300-cu-o9xpqnz5o16s38d1/wish/j40PQD6dmqeYWvXB https://album.link/gtvvjrfx9wvxh https://joy.link/sunwin20de1 https://www.jotform.com/262732991329062 https://blog.ulipindia.com/profile/sunwin20de/ https://profu.link/u/sunwin20de https://www.mightycause.com/profile/sunwin20de https://www.gishinkai.com/profile/elinorebisson5dikb60488/profile https://buymusicclub.vercel.app/user/sunwin20de https://www.adsfare.com/sunwin20de https://www.zaiho-med.com/profile/elinorebisson5dikb97700/profile https://bearfauna.com/forums/users/sunwin20de/ https://lessons.drawspace.com/post/1189991/sunwin-c-ng-game-b-i-i-th-ng-uy-t https://www.navacool.com/forum/topic/664937/sunwin20de https://www.templepurohit.com/forums/users/elinorebisson5dikb/ https://www.driedsquidathome.com/forum/topic/245394/sunwin---cổng-game-bài-Đổi-thưởng-uy-tín-hàng-Đầu-việt-nam https://homepage.ninja/sunwin20de https://www.autopro.co.th/forum/topic/56206/sunwin20de https://www.intensedebate.com/people/sunwin20de1 https://maxlearningcenter.com/profile/sunwin20de/ https://amraneacademy.com/profile/elinoreBisson5dikb/ https://www.ati.edu.my/profile/sunwin20de/profile https://jali.me/https-sunwin20.de https://www.arriba420.com/profile/elinorebisson5dikb20482/profile https://www.themirch.com/blog/author/sunwin20de/ https://pumpyoursound.com/u/user/1698000 https://allmy.bio/https-sunwin20.de https://www.buymusic.club/user/sunwin20de https://jobs.host-panel.com/author/sunwin20de/ https://builtbybit.com/members/sunwin20de.945216/#about https://www.seasidestones.com/profile/elinorebisson5dikb45659/profile https://www.africangenesis-101.org/profile/elinorebisson5dikb19185/profile https://www.youyooz.com/profile/sunwin20de/ https://www.nymetropolitanaau.com/profile/elinorebisson5dikb71689/profile https://thanadetsacchua.makewebeasy.co/forum/topic/37987/sunwin https://www.simplexthailand.com/forum/topic/86451/sunwin https://www.rueanmaihom.net/forum/topic/180081/sunwin https://www.dideadesign.com/forum/topic/112460/sunwin https://www.saltlakeladyrebels.com/profile/sunwin20de/profile https://www.akaqa.com/question/q19192746017-Sunwin-cng-game-bi-i-thng-uy-tn-hng-u-vit-nam https://www.happycampersmontessori.com/profile/sunwin20de/profile https://prosinrefgi.wixsite.com/pmbpf/profile/sunwin20de/profile https://www.davidrio.com/profile/sunwin20de/profile https://www.healthleadershipbraintrust.com/profile/sunwin20de/profile https://zipscampus.lk/profile/sunwin20de/ https://www.watershedwellness.net/profile/sunwin20de/profile https://www.bangyaimaterial.com/forum/topic/233430/sunwin20de https://infinitebacklog.net/users/sunwin20de https://quangcaoso.vn/sunwin20de https://www.democracylab.org/user/66110 https://reach.link/sunwin20de https://biolinky.co/sunwin-20-de https://form.jotform.com/262732991329062 https://vote.easypolls.net/6abe345e47011d006229d880 https://openlibrary.org/people/sunwin20de https://www.claimingthecorner.net/profile/sunwin20de/profile https://www.boygeorgefever.com/board/board_topic/9134313/9051878.htm https://institutocrecer.edu.co/profile/sunwin20de/ https://www.abclinuxu.cz/lide/sunwin20de https://www.smartsmiledentalplace.com/forum/topic/44564/sunwin20de https://mwe-kosin.makewebeasy.co/forum/topic/28335/sunwin20de https://www.ontime.co.th/forum/topic/963883/sunwin20de https://www.ptwmonksupply.com/forum/topic/142864/sunwin20de https://www.hyperlabthailand.com/forum/topic/963887/sunwin20de http://www.biblesupport.com/user/911485-sunwin20de/ https://www.fw-follow.com/forum/topic/214046/sunwin---cổng-game-bài-Đổi-thưởng-uy-tín-hàng-Đầu-việt-nam https://vocal.media/authors/sunwin-0e9a8a6b6c https://www.tbworkwood.com/forum/topic/33250/sunwin---cổng-game-bài-Đổi-thưởng-uy-tín-hàng-Đầu-việt-nam https://www.ttlxshipping.com/forum/topic/664890/sunwin---cổng-game-bài-Đổi-thưởng-uy-tín-hàng-Đầu-việt-nam https://www.natthadon-sanengineering.com/forum/topic/192865/sunwin---cổng-game-bài-Đổi-thưởng-uy-tín-hàng-Đầu-việt-nam https://www.bonback.com/forum/topic/664893/sunwin---cổng-game-bài-Đổi-thưởng-uy-tín-hàng-Đầu-việt-nam https://seothongminh.wixsite.com/website/profile/sunwin20de/profile https://forumton.org/members/sunwin20de.46888/#about https://www.lushstories.com/profile/sunwin20de https://sunwin20de.localinfo.jp/posts/59288778 https://www.thitrungruangclinic.com/forum/topic/283328/sunwin---cổng-game-bài-Đổi-thưởng-uy-tín-hàng-Đầu-việt-nam https://sunwin20de.theblog.me/posts/59288779 https://www.euskalmarket.com/author/sunwin20de/ https://www.tarauaca.ac.gov.br/profile/sunwin20de/profile https://www.stephhalllcsw.com/profile/sunwin20de/profile https://www.guidedground.com/profile/sunwin20de/profile https://www.doggies911.com/profile/sunwin20de/profile https://www.rosewood.edu.na/profile/sunwin20de/profile https://www.kwlt.net/profile/sunwin20de/profile https://www.miseducationofmotherhood.com/profile/sunwin20de/profile https://www.housedumonde.com/profile/sunwin20de/profile https://www.mynbest.info/profile/sunwin20de/profile https://apptuts.bio/sunwin20de https://talkmarkets.com/profile/sunwin-261001-100009 https://linkdirectorynet.com/listings13721161/sunwin https://ztndz.com/story30256853/sunwin https://mez.ink/sunwin20de https://its-my.link/@sunwin20de https://biolinku.co/js9rww5 https://joy.bio/sunwin20de https://official.link/sunwin20de https://www.veteranscup.org/profile/sunwin20de/profile https://www.leonidastacticalss.com/profile/sunwin20de/profile https://www.luzsantomauro.com/profile/sunwin20de/profile https://www.dek-o-block.com/profile/sunwin20de/profile https://www.leadworksprojects.com/profile/sunwin20de/profile https://www.eyalsflowers.com/profile/sunwin20de/profile https://languaconnectenglishclass.com/profile/sunwin20de/ https://infusionmedz.com/profile/sunwin20de/ https://www.realityofchoice.com/profile/sunwin20de/profile https://www.khadas.com/profile/sunwin20de/profile https://www.shabeenaam.com/profile/sunwin20de/profile https://www.menomoniechiro.com/profile/sunwin20de/profile https://www.koreaequestrian.com/profile/sunwin20de/profile https://formulamasa.com/elearning/members/sunwin20de/?v=96b62e1dce57 https://www.annuncigratuititalia.it/author/sunwin20de/ https://slides.com/sunwin20de https://lustyweb.live/members/sunwin20de.166713/#about https://medium.com/@elinorebisson5dikb/sunwin-cổng-game-bài-đổi-thưởng-uy-tín-hàng-đầu-việt-nam-7105a651dc8d https://linkmix.co/60292520 https://jaga.link/sunwin20de https://divisionmidway.org/jobs/author/sunwin20de/ https://justpaste.me/CDdB https://qoolink.co/sunwin20de https://m.twitch.tv/sunwin20de/home https://illust.daysneo.com/illustrator/sunwin20de/ https://share.evernote.com/note/a1a6dbe7-da7d-6383-cf95-0b97c1a4ea4b https://letsplayforum.de/user/61778-sunwin20de/ https://www.ted.com/profiles/52243651 https://ru.myanimeshelf.com/shelf/sunwin20de https://conecta.bio/sunwin20de https://linkgenie.net/sunwin20de https://bioqoo.com/sunwin20de
velog
The North America vehicle roadside assistance is evolving through the adoption of telematics, mobile applications, GPS-enabled dispatch, and connected vehicle technologies. These developments are helping providers improve response times and customer experiences. According to The Insight Partners, The vehicle roadside assistance market size is projected to reach US$ 57.42 billion by 2031 from US$ 40.58 billion in 2024. The market is expected to register a CAGR of 5.09% during 2025–2031. Growth Drivers of the Vehicle Roadside Assistance Market Increasing Vehicle Ownership and Road Travel:-The expansion of the global vehicle population is one of the major factors supporting demand for roadside assistance. As more passenger and commercial vehicles operate on roads, the potential number of breakdowns and roadside emergencies also increases. Longer commuting distances, intercity travel, and expanding road infrastructure further contribute to demand for emergency vehicle services. Rising Demand for Towing and Breakdown Services:-Towing remains a critical component of roadside assistance because vehicles involved in serious mechanical failures, collisions, or other incidents may not be repairable at the roadside. Towing services enable disabled vehicles to be transported to repair facilities or other designated locations. Growth of Electric Vehicles:-The increasing adoption of electric vehicles is creating new opportunities for roadside assistance providers. EV owners can require services such as mobile charging, battery-related support, specialized towing, and assistance with charging-related incidents. Get Sample PDF@ https://www.theinsightpartners.com/sample/TIPRE00042074 Key Trends in the Vehicle Roadside Assistance Market Technology is transforming how roadside assistance services are requested, dispatched, and delivered. Mobile applications allow drivers to request assistance, share their location, track technicians, receive estimated arrival times, and communicate with service providers. Telematics and connected-car technologies can further improve the roadside assistance process by transmitting information about vehicle location and potential mechanical problems. This can help providers understand the nature of an incident before a technician reaches the customer. Artificial intelligence is another emerging technology area. AI-powered platforms can support automated issue identification, service dispatch, routing, and customer communication. Industry developments increasingly emphasize digital platforms that improve response times and provide real-time updates to customers. The integration of roadside assistance with connected vehicle systems also creates opportunities for proactive services. Instead of waiting for a driver to manually request help, vehicle data can potentially alert service providers when specific problems occur, allowing assistance workflows to begin more quickly. Market Segmentation The vehicle roadside assistance market can be analyzed based on vehicle type, service type, provider, and geography. By Vehicle Type The vehicle roadside assistance market is generally divided into passenger cars and commercial vehicles. Passenger cars represent a substantial demand base because of the large global installed vehicle population and frequent use for commuting, travel, and personal transportation. Commercial vehicles also generate significant demand because trucks, vans, and other fleet vehicles are closely linked to business operations. Vehicle downtime can affect deliveries, logistics operations, and revenue generation, making rapid roadside assistance particularly important for fleet operators. By Service Type Major services include towing, tire replacement, fuel delivery, battery assistance, lockout or replacement key services, and other emergency support. Towing is one of the most important services because serious breakdowns and accidents frequently require vehicle recovery. Battery assistance, tire services, and fuel delivery address common roadside problems that can often be resolved without transporting the vehicle to a workshop. By Provider Key provider categories include automotive manufacturers, motor insurance companies, independent warranty providers, and automotive clubs. Insurers increasingly bundle roadside assistance into vehicle insurance offerings, while manufacturers may provide assistance as part of warranties, maintenance packages, or connected-car programs. Automotive clubs continue to operate established assistance networks, while digital platforms are creating additional channels for customers to request services. Regional Outlook North America represents an important market for vehicle roadside assistance because of its high vehicle ownership levels, established automotive service infrastructure, and extensive network of roadside service providers. Europe also has a well-established roadside assistance ecosystem supported by automotive clubs, insurance companies, manufacturers, and independent service providers. The region's mature automotive infrastructure creates opportunities for technology-enabled assistance and connected vehicle services. Asia Pacific presents significant opportunities because of increasing vehicle sales and expanding road networks. Countries such as India and China are witnessing increasing demand for automotive services as vehicle ownership expands. In India, for example, the vehicle roadside assistance market is expected to grow strongly through 2033, supported by increasing vehicle usage and demand for emergency services. Key Players in the Vehicle Roadside Assistance Market Major companies and organizations operating in the vehicle roadside assistance market include: AAA - United States Agero Inc. - United States Allianz Partners - Germany RAC Motoring Services - United Kingdom AA plc - United Kingdom Urgent.ly - United States Honk Technologies - United States Good Sam Enterprises - United States Better World Club - United States Roadside Masters - United States Opportunities and Future Trends The future of the vehicle roadside assistance market is increasingly connected to digital mobility and vehicle technology. Mobile applications, telematics, connected vehicles, artificial intelligence, and location-based services can help providers improve service coordination and customer engagement. Partnerships are another important opportunity. Insurance companies, OEMs, automotive technology companies, fleet operators, and roadside service networks can collaborate to provide integrated assistance packages. Such partnerships can expand customer access while allowing providers to utilize existing service networks more efficiently. The expansion of EV infrastructure is also creating opportunities for mobile charging and EV-specific roadside assistance. As the EV population grows, providers may need to expand technician training and specialized equipment to address battery, charging, and transportation requirements. Fleet operators represent another growth opportunity. Commercial fleets depend on vehicle availability and timely recovery, making roadside assistance an important component of fleet management. Digital fleet platforms can integrate assistance requests with vehicle tracking, maintenance management, and dispatch systems. Future Outlook The vehicle roadside assistance market is expanding as global vehicle ownership, road travel, connected mobility, and demand for convenient emergency services increase. The market is projected by The Insight Partners to grow from US$40.58 billion in 2024 to US$57.42 billion by 2031, registering a 5.09% CAGR from 2025 to 2031. Related Report Electric Vehicle Insurance Market Size and Forecast (2021 - 2034) Automated Guided Vehicles (AGV) Software Market Size and Forecasts (2021 - 2034) About The Insight Partners The Insight Partners delivers market intelligence and consulting services to help clients make informed decisions. The firm covers industries such as Aerospace and Defense, Automotive and Transportation, Semiconductor and Electronics, Biotechnology, Healthcare IT, Manufacturing, Medical Devices, Technology, Media, and Chemicals and Materials. Contact Us Email: sales@theinsightpartners.com Website: www.theinsightpartners.com Phone: +1-646-491-9876 Also Available in : Korean German Japanese French Chinese Italian Spanish
velog
기능에서의 상황 기능은 주어진 상황에 따라 다르게 동작한다. 예를 들어 다음 기능을 보자. 파일에서 숫자를 읽어와 숫자의 합을 구한다. 한 줄마다 한 개의 숫자를 포함한다. 이 기능을 MathUtils.sum() 메서드로 구현한다고 가정하자. 다음처럼 sum() 메서드에 파일을 인자로 전달할 것이다. sum() 메서드는 인자로 전달받은 파일에서 한 줄씩 읽어와 숫자로 변환한 뒤에 합한 값을 결과로 제공하면 된다. File datafile = new File("data.txt"); long sum = MathUtils.sum(dataFile); 하지만 이 기능을 구현하려면 고려할 것이 있다. 먼저 파일이 없는 상황을 처리해야 한다. 데이터를 읽을 파일이 없다면 인자가 잘못되었다는 익셉션을 발생하거나 문제 상황을 알려줄 수 있는 값을 리턴해야 한다. 비슷하게 데이터 중에 숫자가 아닌 잘못된 데이터가 존재하는 경우에도 알맞은 결과를 생성해야 한다. 이처럼 주어진 상황에 따라 기능 실행 결과는 달라진다. 이는 테스트 코드 구조에도 영향을 준다. 테스트 코드의 구성 요소: 상황, 실행, 결과 확인 기능은 상황에 따라 결과가 달라진다. 테스트 코드는 기능을 실행하고 그 결과를 확인하므로 상황, 실행, 결과 확인의 세 가지 요소로 테스트를 구성할 수 있다. 어떤 상황이 주어지고, 그 상황에서 기능을 실행하고, 실행한 결과를 확인하는 세 가지가 테스트 코드의 기본 골격을 이루게 된다. 상황, 실행, 결과 확인은 영어 표현 given, when, then에 대응한다. JUnit에서 상황을 설정하는 방법은 테스트할 대상에 따라 달라진다. 각 테스트 메서드마다 객체를 생성해서 상황을 설정하거나 @BeforeEach를 적용한 메서드에서 상황을 설정할 수 있다. 상황이 없는 경우도 존재할 수 있다. 실행 결과를 확인하는 쉬운 방법은 리턴 값을 사용하는 것이지만, 실행 결과가 항상 리턴 값으로 존재하는 것은 아니다. 실행 결과로 익셉션을 발생하는 것이 정상인 경우도 있다. 상황-실행-결과 확인 구조에 너무 집착하지는 말자. 이 구조가 테스트 코드를 작성하는데 도움이 되는 것은 맞지만 꼭 모든 테스트 메서드를 이 구조로 만들어야 하는 것은 아니다. 테스트 코드를 보고 테스트 내용을 이해할 수 있으면 된다. 외부 상황과 외부 결과 상황 설정이 테스트 대상으로 국한된 것은 아니다. 상황에는 외부 요인도 있다. File datafile = new File("data.txt"); long sum = MathUtils.sum(dataFile); MathUtils.sum() 메서드를 테스트하려면 파일이 존재하지 않는 상황에서의 결과도 확인해야 한다. 그렇다면 파일이 존재하지 않는 상황을 어떻게 만들 수 있을까? 가장 쉬운 방법은 존재하지 않는 파일의 경로를 사용하는 것이다. @Test void noDataFile_Then_Exception() { File dataFile = new File("badpath.txt"); assertThrows(IllegalArgumentException.class, () -> MathUtils.sum(dataFile) ); } 이 방법이 쉽긴 하지만 항상 테스트에 성공할 것이라는 보장은 없다. 우연이라도 해당 파일이 존재할 수 있기 때문이다. 테스트는 실행할 때마다 동일한 결과를 보장해야 하는데 우연에 의해 테스트 결과가 달라지면 동일한 결과를 보장할 수 없다. 이는 테스트를 신뢰할 수 없게 만들어 테스트 결과를 무시하게 만드는 요인이 될 수 있다. 더욱 확실한 방법은 명시적으로 파일이 없는 상황을 만드는 것이다. 다음은 명시적으로 파일이 없는 상황을 만드는 예를 보여준다. @Test void noDataFile_Then_Exception() { givenNoFile("badpath.txt"); File dataFile = new File("badpath.txt"); assertThrows(IllegalArgumentException.class, () -> MathUtils.sum(dataFile) ); } private void givenNoFile(String path) { File file = new File(path); if (file.exists()) { boolean deleted = file.delete(); if (!deleted) throw new RuntimeException("fail givenNoFile: " + path); } } 이 테스트에서 givenNoFile() 메서드는 해당 경로에 파일이 존재하는지 검사해서 존재할 경우 해당 파일을 삭제한다. 이렇게 함으로써 테스트가 항상 올바른 상황에서 동작한다는 것을 보장할 수 있다. 다음으로 파일이 존재하는 상황은 어떻게 만들 수 있을까? 쉬운 방법은 상황에 알맞은 파일을 미리 만들어 두는 것이다. 파일을 미리 만들지 않고 테스트 코드에서 상황에 맞는 파일을 생성하는 방법도 있다. 이 방법의 장점은 테스트 코드 안에 필요한 것이 다 있다는 것이다. 테스트 코드에서 상황을 명시적으로 구성하기 때문에 테스트 내용을 이해하기 위해 많은 파일을 볼 필요가 없다. 테스트 대상이 아닌 외부에서 결과를 확인해야 할 때도 있다. 예를 들어 처리 결과를 지정한 경로의 파일에 저장하는 기능을 생각해보자. 이 기능을 실행한 결과를 검증하려면 해당 경로에 파일이 원하는 내용으로 만들어졌는지 확인해야 한다. 외부 상태가 테스트 결과에 영향을 주지 않게 하기 테스트 코드는 한 번만 실행하고 끝나지 않는다. TDD를 진행하는 동안에도 계속 실행하고 개발이 끝난 이후에도 반복적으로 테스트를 실행해서 문제가 없는지 검증한다. 그렇기 때문에 테스트는 언제 실행해도 항상 정상적으로 동작하는 것이 중요하다. 간헐적으로 실패하거나 다른 테스트 다음에 실행해야 성공하면 테스트 결과를 믿을 수 없게 된다. 이렇게 되면 테스트가 실패해도 무감각해지고 더 나아가 테스트를 만들지 않게 된다. 회원 가입 기능을 예로 들어보자. 회원 가입 기능 테스트에는 다음을 포함한다. 중복된 ID가 이미 존재하면 가입 실패 모든 조건을 충족하면 가입 성공 두 테스트를 다음과 같이 작성했다고 가정하자. @Test void dupIdTest() { RegistReq req = new RegistReq("bkchoidup", "최범균중복"); assertThrows(DuplicateIdException.class, () -> registerService.register(req)); } @Test void registerSuccessfully() { RegistReq req = new RegistReq("bkchoi", "최범균"); registerService.register(req); Member mem = memberRepo.findById("bkchoi"); assertEquals("최범균", mem.getName()); } dupIdTest() 테스트를 검증하려면 DB의 회원 테이블에 아이디가 “bkchoidup"인 데이터를 미리 추가해야 한다. 그래야 아이디 중복 여부를 확인하는 dupIdTest()가 올바르게 동작한다. 아이디가 “bkchoi"인 데이터가 없는 상태에서 registerSuccessfully() 테스트를 실행했더니 통과했다고 하자. 이 테스트에 성공하면 DB 회원 테이블에 아이디가 "bkchoi"인 데이터가 생성된다. 이 상태에서 다시 registerSuccessfully() 테스트를 실행하면 이미 "bkchoi"인 아이디가 존재하므로 아이디 중복으로 테스트에 실패한다. 즉, DB 데이터의 상태에 따라 테스트가 성공하기도 하고 실패하기도 하는 것이다. 이렇게 외부 상태에 따라 테스트의 성공 여부가 바뀌지 않으려면 테스트 실행 전에 외부를 원하는 상태로 만들거나 테스트 실행 후에 외부 상태를 원래대로 되돌려 놓아야 한다. 예를 들어 registerSuccessfully() 테스트를 실행할 때 아이디가 "bkchoi”인 회원 데이터를 삭제해서 중복이 발생하지 않도록 만들거나 registerSuccessfully() 메서드 실행 후에 트랜잭션을 롤백하는 방법이 있다. 외부 상태와 테스트 어려움 상황과 결과에 영향을 주는 외부 요인은 파일, DBMS, 외부 서버 등 다양하다. 이들 외부 환경을 테스트에 맞게 구성하는 것이 항상 가능한 것은 아니다. 자동이체 등록 기능을 생각해보자. 이 기능은 입력받은 계좌 번호가 올바른지 확인해야 한다. 이를 위해 금융 회사에서 제공하는 REST API를 사용한다면 자동이체 등록 기능에 대한 테스트는 다음 상황에서의 결과를 확인할 수 있어야 한다. REST API 응답 결과가 유효한 계좌 번호인 상황 REST API 응답 결과가 유효하지 않은 계좌 번호인 상황 REST API 서버에 연결할 수 없는 상황 REST API 서버에서 응답을 5초 이내에 받지 못하는 상황 각 상황을 어떻게 테스트할 수 있을까? 유효한 계좌 번호와 유효하지 않은 계좌 번호는 API 제공 업체에서 정보를 받아 테스트해 볼 수 있다. 그런데 REST API 서버에 연결할 수 없는 상황이나 REST API 서버에서 지정한 시간 안에 응답을 주지 않는 상황은 어떻게 만들어낼 수 있을까? REST API 제공 업체에 잠깐만 서버를 죽여 달라고 할 수 없다. 또는 REST API 제공 업체에 응답을 일부러 7초 뒤에 주도록 수정해 달라고 부탁할 수도 없다. 실행 결과가 외부 시스템에 기록되는 경우도 있다. 필자가 경험한 프로젝트 중에는 외부 택배사에 배송 정보를 전달하기 위해 택배사가 제공한 DB 테이블을 사용한 사례가 있다. 주문이 들어오면 택배사가 제공한 DB 테이블에 필요한 데이터를 추가하는 방식으로 배송 정보를 전달했다. 동일한 테스트를 여러 번 수행할 수 있으려면 택배사가 제공한 DB 테이블에서 데이터를 삭제할 수 있어야 했는데 택배사는 해당 테이블에 대해 INSERT와 SELECT 권한만 주고 DELETE 권한은 주지 않았다. 이처럼 테스트 대상이 아닌 외부 요인은 테스트 코드에서 다루기 힘든 존재이다. 외부 상황은 테스트 코드에서 마음대로 제어할 수 없는 경우가 있다. 또한, 테스트 코드에서 생성한 외부 결과를 마음대로 초기화하기 힘들 때도 있다. 이렇게 테스트 대상의 상황과 결과에 외부 요인이 관여할 경우 대역을 사용하면 테스트 작성이 쉬워진다. 대역은 테스트 대상이 의존하는 대상의 실제 구현을 대신하는 구현인데 이 대역을 통해서 외부 상황이나 결과를 대체할 수 있다.
Score: 54.4Confidence: 49%
Score: 54.4Confidence: 49%
Score: 54.4Confidence: 49%
Score: 54.4Confidence: 49%
Score: 54.4Confidence: 49%
Score: 54.4Confidence: 49%
Score: 54.4Confidence: 49%