๑ `⌃´ ๑
전체 글 · 우리 블로그 정상 영업합니다 62
🎸
[WIL] 모호한 요구사항을 구현 가능한 설계로 바꾸기
2026.09.11
🎸
[WIL] 모호한 요구사항을 구현 가능한 설계로 바꾸기
2026.09.11
이번 주에는 쿠폰과 주문 도메인을 예제로, 모호하게 주어진 요구사항을 구현이 가능한 수준까지 구체화하는 과정을 설계 문서를 직접 작성하는 방법을 통해 학습했다.이번 주에 가장 어려웠던 부분은 코드 자체보다는 과제가 무엇을 고민하도록 만들어진 것인지 파악하는 것이었다.평소 실무에서는 이미 정리된 요구사항을 전달받고(UI/UX 설계서를 통해서든, 현업의 직접적인 요청을 통해서든) 이를 바로 코드로 구현하는 경우가 많았기 때문에, 구현 이전 단계에서 요구사항을 직접 해석하고 규칙을 구체화하며 다듬는 작업 자체가 낯설고 어려웠다.처음에는 익숙하지 않은 용어나 개념들이 한꺼번에 등장해서 각각을 작성하는 것에 집중했는데, 내용을 하나씩 풀어서 공부하면서 결국 이 과제의 핵심은 "코드를 작성하기 전에 요구사항의 모호..
[WIL] 모호한 요구사항을 구현 가능한 설계로 바꾸기
2026.09.11
이번 주에는 쿠폰과 주문 도메인을 예제로, 모호하게 주어진 요구사항을 구현이 가능한 수준까지 구체화하는 과정을 설계 문서를 직접 작성하는 방법을 통해 학습했다.이번 주에 가장 어려웠던 부분은 코드 자체보다는 과제가 무엇을 고민하도록 만들어진 것인지 파악하는 것이었다.평소 실무에서는 이미 정리된 요구사항을 전달받고(UI/UX 설계서를 통해서든, 현업의 직접적인 요청을 통해서든) 이를 바로 코드로 구현하는 경우가 많았기 때문에, 구현 이전 단계에서 요구사항을 직접 해석하고 규칙을 구체화하며 다듬는 작업 자체가 낯설고 어려웠다.처음에는 익숙하지 않은 용어나 개념들이 한꺼번에 등장해서 각각을 작성하는 것에 집중했는데, 내용을 하나씩 풀어서 공부하면서 결국 이 과제의 핵심은 "코드를 작성하기 전에 요구사항의 모호..
💙
[WIL] 모호한 요구사항을 구현 가능한 설계로 바꾸기
2026.09.11
2026.09.11
이번 주에는 쿠폰과 주문 도메인을 예제로, 모호하게 주어진 요구사항을 구현이 가능한 수준까지 구체화하는 과정을 설계 문서를 직접 작성하는 방법을 통해 학습했다.이번 주에 가장 어려웠던 부분은 코드 자체보다는 과제가 무엇을 고민하도록 만들어진 것인지 파악하는 것이었다.평소 실무에서는 이미 정리된 요구사항을 전달받고(UI/UX 설계서를 통해서든, 현업의 직접적인 요청을 통해서든) 이를 바로 코드로 구현하는 경우가 많았기 때문에, 구현 이전 단계에서 요구사항을 직접 해석하고 규칙을 구체화하며 다듬는 작업 자체가 낯설고 어려웠다.처음에는 익숙하지 않은 용어나 개념들이 한꺼번에 등장해서 각각을 작성하는 것에 집중했는데, 내용을 하나씩 풀어서 공부하면서 결국 이 과제의 핵심은 "코드를 작성하기 전에 요구사항의 모호..
[WIL] 모호한 요구사항을 구현 가능한 설계로 바꾸기
2026.09.11
이번 주에는 쿠폰과 주문 도메인을 예제로, 모호하게 주어진 요구사항을 구현이 가능한 수준까지 구체화하는 과정을 설계 문서를 직접 작성하는 방법을 통해 학습했다.이번 주에 가장 어려웠던 부분은 코드 자체보다는 과제가 무엇을 고민하도록 만들어진 것인지 파악하는 것이었다.평소 실무에서는 이미 정리된 요구사항을 전달받고(UI/UX 설계서를 통해서든, 현업의 직접적인 요청을 통해서든) 이를 바로 코드로 구현하는 경우가 많았기 때문에, 구현 이전 단계에서 요구사항을 직접 해석하고 규칙을 구체화하며 다듬는 작업 자체가 낯설고 어려웠다.처음에는 익숙하지 않은 용어나 개념들이 한꺼번에 등장해서 각각을 작성하는 것에 집중했는데, 내용을 하나씩 풀어서 공부하면서 결국 이 과제의 핵심은 "코드를 작성하기 전에 요구사항의 모호..
[WIL] 모호한 요구사항을 구현 가능한 설계로 바꾸기
2026.09.11
이번 주에는 쿠폰과 주문 도메인을 예제로, 모호하게 주어진 요구사항을 구현이 가능한 수준까지 구체화하는 과정을 설계 문서를 직접 작성하는 방법을 통해 학습했다.이번 주에 가장 어려웠던 부분은 코드 자체보다는 과제가 무엇을 고민하도록 만들어진 것인지 파악하는 것이었다.평소 실무에서는 이미 정리된 요구사항을 전달받고(UI/UX 설계서를 통해서든, 현업의 직접적인 요청을 통해서든) 이를 바로 코드로 구현하는 경우가 많았기 때문에, 구현 이전 단계에서 요구사항을 직접 해석하고 규칙을 구체화하며 다듬는 작업 자체가 낯설고 어려웠다.처음에는 익숙하지 않은 용어나 개념들이 한꺼번에 등장해서 각각을 작성하는 것에 집중했는데, 내용을 하나씩 풀어서 공부하면서 결국 이 과제의 핵심은 "코드를 작성하기 전에 요구사항의 모호..
[WIL] 모호한 요구사항을 구현 가능한 설계로 바꾸기
2026.09.11
이번 주에는 쿠폰과 주문 도메인을 예제로, 모호하게 주어진 요구사항을 구현이 가능한 수준까지 구체화하는 과정을 설계 문서를 직접 작성하는 방법을 통해 학습했다.이번 주에 가장 어려웠던 부분은 코드 자체보다는 과제가 무엇을 고민하도록 만들어진 것인지 파악하는 것이었다.평소 실무에서는 이미 정리된 요구사항을 전달받고(UI/UX 설계서를 통해서든, 현업의 직접적인 요청을 통해서든) 이를 바로 코드로 구현하는 경우가 많았기 때문에, 구현 이전 단계에서 요구사항을 직접 해석하고 규칙을 구체화하며 다듬는 작업 자체가 낯설고 어려웠다.처음에는 익숙하지 않은 용어나 개념들이 한꺼번에 등장해서 각각을 작성하는 것에 집중했는데, 내용을 하나씩 풀어서 공부하면서 결국 이 과제의 핵심은 "코드를 작성하기 전에 요구사항의 모호..
[WIL] 모호한 요구사항을 구현 가능한 설계로 바꾸기
2026.09.11
이번 주에는 쿠폰과 주문 도메인을 예제로, 모호하게 주어진 요구사항을 구현이 가능한 수준까지 구체화하는 과정을 설계 문서를 직접 작성하는 방법을 통해 학습했다.이번 주에 가장 어려웠던 부분은 코드 자체보다는 과제가 무엇을 고민하도록 만들어진 것인지 파악하는 것이었다.평소 실무에서는 이미 정리된 요구사항을 전달받고(UI/UX 설계서를 통해서든, 현업의 직접적인 요청을 통해서든) 이를 바로 코드로 구현하는 경우가 많았기 때문에, 구현 이전 단계에서 요구사항을 직접 해석하고 규칙을 구체화하며 다듬는 작업 자체가 낯설고 어려웠다.처음에는 익숙하지 않은 용어나 개념들이 한꺼번에 등장해서 각각을 작성하는 것에 집중했는데, 내용을 하나씩 풀어서 공부하면서 결국 이 과제의 핵심은 "코드를 작성하기 전에 요구사항의 모호..
🎸
반례를 생각하니 규칙이 더 명확해졌다
2026.09.11
🎸
반례를 생각하니 규칙이 더 명확해졌다
2026.09.11
내가 작년까지 참여해왔던 프로젝트들은, 설계 문서를 꼼꼼히 읽거나 요구사항에 대해 면밀히 파악하며 개발을 진행할 수 있었던 프로젝트가 아니었다.기간은 촉박하지, 결과물은 빨리 내야 하지...솔직히 개발자가 독단적으로 판단해서 바로 개발했던 일도 부지기수였다.지금에야 돌이켜보면, 집 짓는 공사를 하는 데 뼈대를 대충 세우고 공사를 한 것이나 다름 없었다.그래서 얼마 전 부트캠프를 시작하고 첫 번째 과제로 설계 문서 작성을 받았을 때, 몹시 막막했다.이제껏 개발이나 구현은 해오긴 했는데, 설계는 어떻게 해야 할지 한 번도 제대로 생각해 본 적이 없었다. 1. 어떤 상황이었나내가 만들어야 하는 설계 문서는 이커머스 쿠폰 할인 시스템에 대한 설계 문서였다.기준 문장을 바탕으로 규칙을 정하고 외부 계약과 내부 경..
반례를 생각하니 규칙이 더 명확해졌다
2026.09.11
내가 작년까지 참여해왔던 프로젝트들은, 설계 문서를 꼼꼼히 읽거나 요구사항에 대해 면밀히 파악하며 개발을 진행할 수 있었던 프로젝트가 아니었다.기간은 촉박하지, 결과물은 빨리 내야 하지...솔직히 개발자가 독단적으로 판단해서 바로 개발했던 일도 부지기수였다.지금에야 돌이켜보면, 집 짓는 공사를 하는 데 뼈대를 대충 세우고 공사를 한 것이나 다름 없었다.그래서 얼마 전 부트캠프를 시작하고 첫 번째 과제로 설계 문서 작성을 받았을 때, 몹시 막막했다.이제껏 개발이나 구현은 해오긴 했는데, 설계는 어떻게 해야 할지 한 번도 제대로 생각해 본 적이 없었다. 1. 어떤 상황이었나내가 만들어야 하는 설계 문서는 이커머스 쿠폰 할인 시스템에 대한 설계 문서였다.기준 문장을 바탕으로 규칙을 정하고 외부 계약과 내부 경..
💙
반례를 생각하니 규칙이 더 명확해졌다
2026.09.11
2026.09.11
내가 작년까지 참여해왔던 프로젝트들은, 설계 문서를 꼼꼼히 읽거나 요구사항에 대해 면밀히 파악하며 개발을 진행할 수 있었던 프로젝트가 아니었다.기간은 촉박하지, 결과물은 빨리 내야 하지...솔직히 개발자가 독단적으로 판단해서 바로 개발했던 일도 부지기수였다.지금에야 돌이켜보면, 집 짓는 공사를 하는 데 뼈대를 대충 세우고 공사를 한 것이나 다름 없었다.그래서 얼마 전 부트캠프를 시작하고 첫 번째 과제로 설계 문서 작성을 받았을 때, 몹시 막막했다.이제껏 개발이나 구현은 해오긴 했는데, 설계는 어떻게 해야 할지 한 번도 제대로 생각해 본 적이 없었다. 1. 어떤 상황이었나내가 만들어야 하는 설계 문서는 이커머스 쿠폰 할인 시스템에 대한 설계 문서였다.기준 문장을 바탕으로 규칙을 정하고 외부 계약과 내부 경..
반례를 생각하니 규칙이 더 명확해졌다
2026.09.11
내가 작년까지 참여해왔던 프로젝트들은, 설계 문서를 꼼꼼히 읽거나 요구사항에 대해 면밀히 파악하며 개발을 진행할 수 있었던 프로젝트가 아니었다.기간은 촉박하지, 결과물은 빨리 내야 하지...솔직히 개발자가 독단적으로 판단해서 바로 개발했던 일도 부지기수였다.지금에야 돌이켜보면, 집 짓는 공사를 하는 데 뼈대를 대충 세우고 공사를 한 것이나 다름 없었다.그래서 얼마 전 부트캠프를 시작하고 첫 번째 과제로 설계 문서 작성을 받았을 때, 몹시 막막했다.이제껏 개발이나 구현은 해오긴 했는데, 설계는 어떻게 해야 할지 한 번도 제대로 생각해 본 적이 없었다. 1. 어떤 상황이었나내가 만들어야 하는 설계 문서는 이커머스 쿠폰 할인 시스템에 대한 설계 문서였다.기준 문장을 바탕으로 규칙을 정하고 외부 계약과 내부 경..
반례를 생각하니 규칙이 더 명확해졌다
2026.09.11
내가 작년까지 참여해왔던 프로젝트들은, 설계 문서를 꼼꼼히 읽거나 요구사항에 대해 면밀히 파악하며 개발을 진행할 수 있었던 프로젝트가 아니었다.기간은 촉박하지, 결과물은 빨리 내야 하지...솔직히 개발자가 독단적으로 판단해서 바로 개발했던 일도 부지기수였다.지금에야 돌이켜보면, 집 짓는 공사를 하는 데 뼈대를 대충 세우고 공사를 한 것이나 다름 없었다.그래서 얼마 전 부트캠프를 시작하고 첫 번째 과제로 설계 문서 작성을 받았을 때, 몹시 막막했다.이제껏 개발이나 구현은 해오긴 했는데, 설계는 어떻게 해야 할지 한 번도 제대로 생각해 본 적이 없었다. 1. 어떤 상황이었나내가 만들어야 하는 설계 문서는 이커머스 쿠폰 할인 시스템에 대한 설계 문서였다.기준 문장을 바탕으로 규칙을 정하고 외부 계약과 내부 경..
반례를 생각하니 규칙이 더 명확해졌다
2026.09.11
내가 작년까지 참여해왔던 프로젝트들은, 설계 문서를 꼼꼼히 읽거나 요구사항에 대해 면밀히 파악하며 개발을 진행할 수 있었던 프로젝트가 아니었다.기간은 촉박하지, 결과물은 빨리 내야 하지...솔직히 개발자가 독단적으로 판단해서 바로 개발했던 일도 부지기수였다.지금에야 돌이켜보면, 집 짓는 공사를 하는 데 뼈대를 대충 세우고 공사를 한 것이나 다름 없었다.그래서 얼마 전 부트캠프를 시작하고 첫 번째 과제로 설계 문서 작성을 받았을 때, 몹시 막막했다.이제껏 개발이나 구현은 해오긴 했는데, 설계는 어떻게 해야 할지 한 번도 제대로 생각해 본 적이 없었다. 1. 어떤 상황이었나내가 만들어야 하는 설계 문서는 이커머스 쿠폰 할인 시스템에 대한 설계 문서였다.기준 문장을 바탕으로 규칙을 정하고 외부 계약과 내부 경..
반례를 생각하니 규칙이 더 명확해졌다
2026.09.11
내가 작년까지 참여해왔던 프로젝트들은, 설계 문서를 꼼꼼히 읽거나 요구사항에 대해 면밀히 파악하며 개발을 진행할 수 있었던 프로젝트가 아니었다.기간은 촉박하지, 결과물은 빨리 내야 하지...솔직히 개발자가 독단적으로 판단해서 바로 개발했던 일도 부지기수였다.지금에야 돌이켜보면, 집 짓는 공사를 하는 데 뼈대를 대충 세우고 공사를 한 것이나 다름 없었다.그래서 얼마 전 부트캠프를 시작하고 첫 번째 과제로 설계 문서 작성을 받았을 때, 몹시 막막했다.이제껏 개발이나 구현은 해오긴 했는데, 설계는 어떻게 해야 할지 한 번도 제대로 생각해 본 적이 없었다. 1. 어떤 상황이었나내가 만들어야 하는 설계 문서는 이커머스 쿠폰 할인 시스템에 대한 설계 문서였다.기준 문장을 바탕으로 규칙을 정하고 외부 계약과 내부 경..
Spring
비관적 락 / SELECT ... FOR UPDATE / PESSIMISTIC_WRITE
2026.08.31
Spring
비관적 락 / SELECT ... FOR UPDATE / PESSIMISTIC_WRITE
2026.08.31
비관적 락은 “이 데이터는 충돌할 가능성이 높다”고 보고, 한 트랜잭션이 수정하려는 데이터를 잡고 있는 동안 다른 트랜잭션이 기다리게 만드는 방식Transaction ASELECT ... FOR UPDATE→ Product 행 Lock 획득Transaction B같은 Product 조회 시도→ 기다림A재고 차감COMMIT→ Lock 해제B이제 조회→ A가 반영한 최신 재고 확인→ 차감 1. 왜 이름이 "비관적" 락일까?처음부터 "여러 사용자가 같은 데이터를 동시에 수정하면 충돌할 가능성이 높다"고 생각하기 때문.그래서 충돌이 실제로 일어난 뒤 처리하는 것이 아니라, "아예 먼저 잠가놓고 다른 트랜잭션이 기다리게 하자"는 접근 2. 문제 상황DB stock = 100Transaction ASELECT ..
비관적 락 / SELECT ... FOR UPDATE / PESSIMISTIC_WRITE
2026.08.31
비관적 락은 “이 데이터는 충돌할 가능성이 높다”고 보고, 한 트랜잭션이 수정하려는 데이터를 잡고 있는 동안 다른 트랜잭션이 기다리게 만드는 방식Transaction ASELECT ... FOR UPDATE→ Product 행 Lock 획득Transaction B같은 Product 조회 시도→ 기다림A재고 차감COMMIT→ Lock 해제B이제 조회→ A가 반영한 최신 재고 확인→ 차감 1. 왜 이름이 "비관적" 락일까?처음부터 "여러 사용자가 같은 데이터를 동시에 수정하면 충돌할 가능성이 높다"고 생각하기 때문.그래서 충돌이 실제로 일어난 뒤 처리하는 것이 아니라, "아예 먼저 잠가놓고 다른 트랜잭션이 기다리게 하자"는 접근 2. 문제 상황DB stock = 100Transaction ASELECT ..
💙
비관적 락 / SELECT ... FOR UPDATE / PESSIMISTIC_WRITE
2026.08.31
2026.08.31
비관적 락은 “이 데이터는 충돌할 가능성이 높다”고 보고, 한 트랜잭션이 수정하려는 데이터를 잡고 있는 동안 다른 트랜잭션이 기다리게 만드는 방식Transaction ASELECT ... FOR UPDATE→ Product 행 Lock 획득Transaction B같은 Product 조회 시도→ 기다림A재고 차감COMMIT→ Lock 해제B이제 조회→ A가 반영한 최신 재고 확인→ 차감 1. 왜 이름이 "비관적" 락일까?처음부터 "여러 사용자가 같은 데이터를 동시에 수정하면 충돌할 가능성이 높다"고 생각하기 때문.그래서 충돌이 실제로 일어난 뒤 처리하는 것이 아니라, "아예 먼저 잠가놓고 다른 트랜잭션이 기다리게 하자"는 접근 2. 문제 상황DB stock = 100Transaction ASELECT ..
비관적 락 / SELECT ... FOR UPDATE / PESSIMISTIC_WRITE
2026.08.31
비관적 락은 “이 데이터는 충돌할 가능성이 높다”고 보고, 한 트랜잭션이 수정하려는 데이터를 잡고 있는 동안 다른 트랜잭션이 기다리게 만드는 방식Transaction ASELECT ... FOR UPDATE→ Product 행 Lock 획득Transaction B같은 Product 조회 시도→ 기다림A재고 차감COMMIT→ Lock 해제B이제 조회→ A가 반영한 최신 재고 확인→ 차감 1. 왜 이름이 "비관적" 락일까?처음부터 "여러 사용자가 같은 데이터를 동시에 수정하면 충돌할 가능성이 높다"고 생각하기 때문.그래서 충돌이 실제로 일어난 뒤 처리하는 것이 아니라, "아예 먼저 잠가놓고 다른 트랜잭션이 기다리게 하자"는 접근 2. 문제 상황DB stock = 100Transaction ASELECT ..
비관적 락 / SELECT ... FOR UPDATE / PESSIMISTIC_WRITE
2026.08.31
비관적 락은 “이 데이터는 충돌할 가능성이 높다”고 보고, 한 트랜잭션이 수정하려는 데이터를 잡고 있는 동안 다른 트랜잭션이 기다리게 만드는 방식Transaction ASELECT ... FOR UPDATE→ Product 행 Lock 획득Transaction B같은 Product 조회 시도→ 기다림A재고 차감COMMIT→ Lock 해제B이제 조회→ A가 반영한 최신 재고 확인→ 차감 1. 왜 이름이 "비관적" 락일까?처음부터 "여러 사용자가 같은 데이터를 동시에 수정하면 충돌할 가능성이 높다"고 생각하기 때문.그래서 충돌이 실제로 일어난 뒤 처리하는 것이 아니라, "아예 먼저 잠가놓고 다른 트랜잭션이 기다리게 하자"는 접근 2. 문제 상황DB stock = 100Transaction ASELECT ..
비관적 락 / SELECT ... FOR UPDATE / PESSIMISTIC_WRITE
2026.08.31
비관적 락은 “이 데이터는 충돌할 가능성이 높다”고 보고, 한 트랜잭션이 수정하려는 데이터를 잡고 있는 동안 다른 트랜잭션이 기다리게 만드는 방식Transaction ASELECT ... FOR UPDATE→ Product 행 Lock 획득Transaction B같은 Product 조회 시도→ 기다림A재고 차감COMMIT→ Lock 해제B이제 조회→ A가 반영한 최신 재고 확인→ 차감 1. 왜 이름이 "비관적" 락일까?처음부터 "여러 사용자가 같은 데이터를 동시에 수정하면 충돌할 가능성이 높다"고 생각하기 때문.그래서 충돌이 실제로 일어난 뒤 처리하는 것이 아니라, "아예 먼저 잠가놓고 다른 트랜잭션이 기다리게 하자"는 접근 2. 문제 상황DB stock = 100Transaction ASELECT ..
비관적 락 / SELECT ... FOR UPDATE / PESSIMISTIC_WRITE
2026.08.31
비관적 락은 “이 데이터는 충돌할 가능성이 높다”고 보고, 한 트랜잭션이 수정하려는 데이터를 잡고 있는 동안 다른 트랜잭션이 기다리게 만드는 방식Transaction ASELECT ... FOR UPDATE→ Product 행 Lock 획득Transaction B같은 Product 조회 시도→ 기다림A재고 차감COMMIT→ Lock 해제B이제 조회→ A가 반영한 최신 재고 확인→ 차감 1. 왜 이름이 "비관적" 락일까?처음부터 "여러 사용자가 같은 데이터를 동시에 수정하면 충돌할 가능성이 높다"고 생각하기 때문.그래서 충돌이 실제로 일어난 뒤 처리하는 것이 아니라, "아예 먼저 잠가놓고 다른 트랜잭션이 기다리게 하자"는 접근 2. 문제 상황DB stock = 100Transaction ASELECT ..
Spring
ExecutorService / CountDownLatch / 동시성 테스트
2026.08.29
Spring
ExecutorService / CountDownLatch / 동시성 테스트
2026.08.29
목표초기 재고를 100이라 한다. `stock = 100`100번 차감하면 정상적인 결과는 `100 - 100 = 0`이다.그런데 여러 스레드가 동시에 `stockService.decrease(productId);`를 호출하게 한 뒤 최종 재고를 확인한다.기대값 = 0실제값 = ?예: 73 81 64 ... 일반 테스트로는 순차 실행되기 때문에 동시성 문제를 재현하기 어렵다.Thread A ──────────┐Thread B ──────────┤Thread C ──────────┤ 동시에 같은 재고 접근Thread D ──────────┤... │Thread N ──────────┘위와 같은 상황을 만들어야하기 때문에, `ExecutorService`, `Cou..
ExecutorService / CountDownLatch / 동시성 테스트
2026.08.29
목표초기 재고를 100이라 한다. `stock = 100`100번 차감하면 정상적인 결과는 `100 - 100 = 0`이다.그런데 여러 스레드가 동시에 `stockService.decrease(productId);`를 호출하게 한 뒤 최종 재고를 확인한다.기대값 = 0실제값 = ?예: 73 81 64 ... 일반 테스트로는 순차 실행되기 때문에 동시성 문제를 재현하기 어렵다.Thread A ──────────┐Thread B ──────────┤Thread C ──────────┤ 동시에 같은 재고 접근Thread D ──────────┤... │Thread N ──────────┘위와 같은 상황을 만들어야하기 때문에, `ExecutorService`, `Cou..
💙
ExecutorService / CountDownLatch / 동시성 테스트
2026.08.29
2026.08.29
목표초기 재고를 100이라 한다. `stock = 100`100번 차감하면 정상적인 결과는 `100 - 100 = 0`이다.그런데 여러 스레드가 동시에 `stockService.decrease(productId);`를 호출하게 한 뒤 최종 재고를 확인한다.기대값 = 0실제값 = ?예: 73 81 64 ... 일반 테스트로는 순차 실행되기 때문에 동시성 문제를 재현하기 어렵다.Thread A ──────────┐Thread B ──────────┤Thread C ──────────┤ 동시에 같은 재고 접근Thread D ──────────┤... │Thread N ──────────┘위와 같은 상황을 만들어야하기 때문에, `ExecutorService`, `Cou..
ExecutorService / CountDownLatch / 동시성 테스트
2026.08.29
목표초기 재고를 100이라 한다. `stock = 100`100번 차감하면 정상적인 결과는 `100 - 100 = 0`이다.그런데 여러 스레드가 동시에 `stockService.decrease(productId);`를 호출하게 한 뒤 최종 재고를 확인한다.기대값 = 0실제값 = ?예: 73 81 64 ... 일반 테스트로는 순차 실행되기 때문에 동시성 문제를 재현하기 어렵다.Thread A ──────────┐Thread B ──────────┤Thread C ──────────┤ 동시에 같은 재고 접근Thread D ──────────┤... │Thread N ──────────┘위와 같은 상황을 만들어야하기 때문에, `ExecutorService`, `Cou..
ExecutorService / CountDownLatch / 동시성 테스트
2026.08.29
목표초기 재고를 100이라 한다. `stock = 100`100번 차감하면 정상적인 결과는 `100 - 100 = 0`이다.그런데 여러 스레드가 동시에 `stockService.decrease(productId);`를 호출하게 한 뒤 최종 재고를 확인한다.기대값 = 0실제값 = ?예: 73 81 64 ... 일반 테스트로는 순차 실행되기 때문에 동시성 문제를 재현하기 어렵다.Thread A ──────────┐Thread B ──────────┤Thread C ──────────┤ 동시에 같은 재고 접근Thread D ──────────┤... │Thread N ──────────┘위와 같은 상황을 만들어야하기 때문에, `ExecutorService`, `Cou..
ExecutorService / CountDownLatch / 동시성 테스트
2026.08.29
목표초기 재고를 100이라 한다. `stock = 100`100번 차감하면 정상적인 결과는 `100 - 100 = 0`이다.그런데 여러 스레드가 동시에 `stockService.decrease(productId);`를 호출하게 한 뒤 최종 재고를 확인한다.기대값 = 0실제값 = ?예: 73 81 64 ... 일반 테스트로는 순차 실행되기 때문에 동시성 문제를 재현하기 어렵다.Thread A ──────────┐Thread B ──────────┤Thread C ──────────┤ 동시에 같은 재고 접근Thread D ──────────┤... │Thread N ──────────┘위와 같은 상황을 만들어야하기 때문에, `ExecutorService`, `Cou..
ExecutorService / CountDownLatch / 동시성 테스트
2026.08.29
목표초기 재고를 100이라 한다. `stock = 100`100번 차감하면 정상적인 결과는 `100 - 100 = 0`이다.그런데 여러 스레드가 동시에 `stockService.decrease(productId);`를 호출하게 한 뒤 최종 재고를 확인한다.기대값 = 0실제값 = ?예: 73 81 64 ... 일반 테스트로는 순차 실행되기 때문에 동시성 문제를 재현하기 어렵다.Thread A ──────────┐Thread B ──────────┤Thread C ──────────┤ 동시에 같은 재고 접근Thread D ──────────┤... │Thread N ──────────┘위와 같은 상황을 만들어야하기 때문에, `ExecutorService`, `Cou..
Spring
동시성 / Race Condition / Lost Update
2026.08.27
Spring
동시성 / Race Condition / Lost Update
2026.08.27
1. 동시성(Concurrency)여러 작업이 같은 시간대에 겹쳐서 진행되는 상황 예를 들어 쇼핑몰에 재고가 1개 남았는데, 사용자 A의 구매 요청과 사용자 B의 구매 요청이 거의 동시에 들어오는 경우이다.서버에서는 각 요청을 서로 다른 스레드가 처리할 수 있다.요청 A → Thread A 요청 B → Thread B두 스레드가 동시에 같은 상품의 재고를 읽고 수정하게 될 수 있다. 2. 공유 데이터동시성 문제가 생기려면 중요한 조건이 있다.여러 실행 흐름이 같은 데이터를 공유한다. // Productstock = 10Thread A, B 둘 다 같은 상품을 본다.즉 두 요청이 서로 완전히 독립적인 데이터만 다룬다면, 이런 충돌이 일어나지 않을 수 있다.문제는 `여러 요청 → 같은 상품 → 같은 st..
동시성 / Race Condition / Lost Update
2026.08.27
1. 동시성(Concurrency)여러 작업이 같은 시간대에 겹쳐서 진행되는 상황 예를 들어 쇼핑몰에 재고가 1개 남았는데, 사용자 A의 구매 요청과 사용자 B의 구매 요청이 거의 동시에 들어오는 경우이다.서버에서는 각 요청을 서로 다른 스레드가 처리할 수 있다.요청 A → Thread A 요청 B → Thread B두 스레드가 동시에 같은 상품의 재고를 읽고 수정하게 될 수 있다. 2. 공유 데이터동시성 문제가 생기려면 중요한 조건이 있다.여러 실행 흐름이 같은 데이터를 공유한다. // Productstock = 10Thread A, B 둘 다 같은 상품을 본다.즉 두 요청이 서로 완전히 독립적인 데이터만 다룬다면, 이런 충돌이 일어나지 않을 수 있다.문제는 `여러 요청 → 같은 상품 → 같은 st..
💙
동시성 / Race Condition / Lost Update
2026.08.27
2026.08.27
1. 동시성(Concurrency)여러 작업이 같은 시간대에 겹쳐서 진행되는 상황 예를 들어 쇼핑몰에 재고가 1개 남았는데, 사용자 A의 구매 요청과 사용자 B의 구매 요청이 거의 동시에 들어오는 경우이다.서버에서는 각 요청을 서로 다른 스레드가 처리할 수 있다.요청 A → Thread A 요청 B → Thread B두 스레드가 동시에 같은 상품의 재고를 읽고 수정하게 될 수 있다. 2. 공유 데이터동시성 문제가 생기려면 중요한 조건이 있다.여러 실행 흐름이 같은 데이터를 공유한다. // Productstock = 10Thread A, B 둘 다 같은 상품을 본다.즉 두 요청이 서로 완전히 독립적인 데이터만 다룬다면, 이런 충돌이 일어나지 않을 수 있다.문제는 `여러 요청 → 같은 상품 → 같은 st..
동시성 / Race Condition / Lost Update
2026.08.27
1. 동시성(Concurrency)여러 작업이 같은 시간대에 겹쳐서 진행되는 상황 예를 들어 쇼핑몰에 재고가 1개 남았는데, 사용자 A의 구매 요청과 사용자 B의 구매 요청이 거의 동시에 들어오는 경우이다.서버에서는 각 요청을 서로 다른 스레드가 처리할 수 있다.요청 A → Thread A 요청 B → Thread B두 스레드가 동시에 같은 상품의 재고를 읽고 수정하게 될 수 있다. 2. 공유 데이터동시성 문제가 생기려면 중요한 조건이 있다.여러 실행 흐름이 같은 데이터를 공유한다. // Productstock = 10Thread A, B 둘 다 같은 상품을 본다.즉 두 요청이 서로 완전히 독립적인 데이터만 다룬다면, 이런 충돌이 일어나지 않을 수 있다.문제는 `여러 요청 → 같은 상품 → 같은 st..
동시성 / Race Condition / Lost Update
2026.08.27
1. 동시성(Concurrency)여러 작업이 같은 시간대에 겹쳐서 진행되는 상황 예를 들어 쇼핑몰에 재고가 1개 남았는데, 사용자 A의 구매 요청과 사용자 B의 구매 요청이 거의 동시에 들어오는 경우이다.서버에서는 각 요청을 서로 다른 스레드가 처리할 수 있다.요청 A → Thread A 요청 B → Thread B두 스레드가 동시에 같은 상품의 재고를 읽고 수정하게 될 수 있다. 2. 공유 데이터동시성 문제가 생기려면 중요한 조건이 있다.여러 실행 흐름이 같은 데이터를 공유한다. // Productstock = 10Thread A, B 둘 다 같은 상품을 본다.즉 두 요청이 서로 완전히 독립적인 데이터만 다룬다면, 이런 충돌이 일어나지 않을 수 있다.문제는 `여러 요청 → 같은 상품 → 같은 st..
동시성 / Race Condition / Lost Update
2026.08.27
1. 동시성(Concurrency)여러 작업이 같은 시간대에 겹쳐서 진행되는 상황 예를 들어 쇼핑몰에 재고가 1개 남았는데, 사용자 A의 구매 요청과 사용자 B의 구매 요청이 거의 동시에 들어오는 경우이다.서버에서는 각 요청을 서로 다른 스레드가 처리할 수 있다.요청 A → Thread A 요청 B → Thread B두 스레드가 동시에 같은 상품의 재고를 읽고 수정하게 될 수 있다. 2. 공유 데이터동시성 문제가 생기려면 중요한 조건이 있다.여러 실행 흐름이 같은 데이터를 공유한다. // Productstock = 10Thread A, B 둘 다 같은 상품을 본다.즉 두 요청이 서로 완전히 독립적인 데이터만 다룬다면, 이런 충돌이 일어나지 않을 수 있다.문제는 `여러 요청 → 같은 상품 → 같은 st..
동시성 / Race Condition / Lost Update
2026.08.27
1. 동시성(Concurrency)여러 작업이 같은 시간대에 겹쳐서 진행되는 상황 예를 들어 쇼핑몰에 재고가 1개 남았는데, 사용자 A의 구매 요청과 사용자 B의 구매 요청이 거의 동시에 들어오는 경우이다.서버에서는 각 요청을 서로 다른 스레드가 처리할 수 있다.요청 A → Thread A 요청 B → Thread B두 스레드가 동시에 같은 상품의 재고를 읽고 수정하게 될 수 있다. 2. 공유 데이터동시성 문제가 생기려면 중요한 조건이 있다.여러 실행 흐름이 같은 데이터를 공유한다. // Productstock = 10Thread A, B 둘 다 같은 상품을 본다.즉 두 요청이 서로 완전히 독립적인 데이터만 다룬다면, 이런 충돌이 일어나지 않을 수 있다.문제는 `여러 요청 → 같은 상품 → 같은 st..
CS
FTP와 SFTP
2026.08.27
CS
FTP와 SFTP
2026.08.27
둘 다 네트워크를 통해 파일을 주고받는 기술이지만, FTP와 SFTP는 같은 프로토콜이 아니다.FTP- File Transfer Protocol- 파일 전송을 위한 전통적인 프로토콜SFTP- SSH File Transfer Protocol- SSH를 기반으로 안전하게 파일을 전송하는 프로토콜특히 보안이 중요한 서버나 기관 간 파일 연계에서는 일반 FTP보다 SFTP를 사용하는 경우가 많다.1. FTP란?FTP는 File Transfer Protocol의 약자.네트워크에 연결된 컴퓨터 사이에서 파일을 전송하기 위한 프로토콜 예를 들어 내 PC에 있는 파일을 서버로 올린다고 생각해보자.내 PC │ │ report.csv 업로드 ▼FTP Server │ └─ /upload/report.csv반대로 서버에 있는..
FTP와 SFTP
2026.08.27
둘 다 네트워크를 통해 파일을 주고받는 기술이지만, FTP와 SFTP는 같은 프로토콜이 아니다.FTP- File Transfer Protocol- 파일 전송을 위한 전통적인 프로토콜SFTP- SSH File Transfer Protocol- SSH를 기반으로 안전하게 파일을 전송하는 프로토콜특히 보안이 중요한 서버나 기관 간 파일 연계에서는 일반 FTP보다 SFTP를 사용하는 경우가 많다.1. FTP란?FTP는 File Transfer Protocol의 약자.네트워크에 연결된 컴퓨터 사이에서 파일을 전송하기 위한 프로토콜 예를 들어 내 PC에 있는 파일을 서버로 올린다고 생각해보자.내 PC │ │ report.csv 업로드 ▼FTP Server │ └─ /upload/report.csv반대로 서버에 있는..
💙
FTP와 SFTP
2026.08.27
2026.08.27
둘 다 네트워크를 통해 파일을 주고받는 기술이지만, FTP와 SFTP는 같은 프로토콜이 아니다.FTP- File Transfer Protocol- 파일 전송을 위한 전통적인 프로토콜SFTP- SSH File Transfer Protocol- SSH를 기반으로 안전하게 파일을 전송하는 프로토콜특히 보안이 중요한 서버나 기관 간 파일 연계에서는 일반 FTP보다 SFTP를 사용하는 경우가 많다.1. FTP란?FTP는 File Transfer Protocol의 약자.네트워크에 연결된 컴퓨터 사이에서 파일을 전송하기 위한 프로토콜 예를 들어 내 PC에 있는 파일을 서버로 올린다고 생각해보자.내 PC │ │ report.csv 업로드 ▼FTP Server │ └─ /upload/report.csv반대로 서버에 있는..
FTP와 SFTP
2026.08.27
둘 다 네트워크를 통해 파일을 주고받는 기술이지만, FTP와 SFTP는 같은 프로토콜이 아니다.FTP- File Transfer Protocol- 파일 전송을 위한 전통적인 프로토콜SFTP- SSH File Transfer Protocol- SSH를 기반으로 안전하게 파일을 전송하는 프로토콜특히 보안이 중요한 서버나 기관 간 파일 연계에서는 일반 FTP보다 SFTP를 사용하는 경우가 많다.1. FTP란?FTP는 File Transfer Protocol의 약자.네트워크에 연결된 컴퓨터 사이에서 파일을 전송하기 위한 프로토콜 예를 들어 내 PC에 있는 파일을 서버로 올린다고 생각해보자.내 PC │ │ report.csv 업로드 ▼FTP Server │ └─ /upload/report.csv반대로 서버에 있는..
FTP와 SFTP
2026.08.27
둘 다 네트워크를 통해 파일을 주고받는 기술이지만, FTP와 SFTP는 같은 프로토콜이 아니다.FTP- File Transfer Protocol- 파일 전송을 위한 전통적인 프로토콜SFTP- SSH File Transfer Protocol- SSH를 기반으로 안전하게 파일을 전송하는 프로토콜특히 보안이 중요한 서버나 기관 간 파일 연계에서는 일반 FTP보다 SFTP를 사용하는 경우가 많다.1. FTP란?FTP는 File Transfer Protocol의 약자.네트워크에 연결된 컴퓨터 사이에서 파일을 전송하기 위한 프로토콜 예를 들어 내 PC에 있는 파일을 서버로 올린다고 생각해보자.내 PC │ │ report.csv 업로드 ▼FTP Server │ └─ /upload/report.csv반대로 서버에 있는..
FTP와 SFTP
2026.08.27
둘 다 네트워크를 통해 파일을 주고받는 기술이지만, FTP와 SFTP는 같은 프로토콜이 아니다.FTP- File Transfer Protocol- 파일 전송을 위한 전통적인 프로토콜SFTP- SSH File Transfer Protocol- SSH를 기반으로 안전하게 파일을 전송하는 프로토콜특히 보안이 중요한 서버나 기관 간 파일 연계에서는 일반 FTP보다 SFTP를 사용하는 경우가 많다.1. FTP란?FTP는 File Transfer Protocol의 약자.네트워크에 연결된 컴퓨터 사이에서 파일을 전송하기 위한 프로토콜 예를 들어 내 PC에 있는 파일을 서버로 올린다고 생각해보자.내 PC │ │ report.csv 업로드 ▼FTP Server │ └─ /upload/report.csv반대로 서버에 있는..
FTP와 SFTP
2026.08.27
둘 다 네트워크를 통해 파일을 주고받는 기술이지만, FTP와 SFTP는 같은 프로토콜이 아니다.FTP- File Transfer Protocol- 파일 전송을 위한 전통적인 프로토콜SFTP- SSH File Transfer Protocol- SSH를 기반으로 안전하게 파일을 전송하는 프로토콜특히 보안이 중요한 서버나 기관 간 파일 연계에서는 일반 FTP보다 SFTP를 사용하는 경우가 많다.1. FTP란?FTP는 File Transfer Protocol의 약자.네트워크에 연결된 컴퓨터 사이에서 파일을 전송하기 위한 프로토콜 예를 들어 내 PC에 있는 파일을 서버로 올린다고 생각해보자.내 PC │ │ report.csv 업로드 ▼FTP Server │ └─ /upload/report.csv반대로 서버에 있는..
Spring
JPA 영속성 컨텍스트 / Dirty Checking / Flush
2026.08.26
Spring
JPA 영속성 컨텍스트 / Dirty Checking / Flush
2026.08.26
@Transactional 시작 ↓ Entity 조회 ↓ Entity가 영속 상태가 됨 ↓ Entity의 값 변경 ↓ JPA가 변경을 감지 ↓ flush ↓ UPDATE SQL 실행 ↓ commit 1. JPA에서 `findById()`를 하면 무슨 일이 일어날까?평소에는 보통 이렇게 생각한다.Product product = productRepository.findById(productId).orElseThrow();단순하게 보면 `DB에서 Product를 가져온다`고 생각할 수 있다.그런데 JPA에서는 한 가지 일이 더 있다.조회한 `Product` 객체를 영속성 컨텍스트가 관리하기 시작할 수 있다.Database │ │ SELECT ▼Pro..
JPA 영속성 컨텍스트 / Dirty Checking / Flush
2026.08.26
@Transactional 시작 ↓ Entity 조회 ↓ Entity가 영속 상태가 됨 ↓ Entity의 값 변경 ↓ JPA가 변경을 감지 ↓ flush ↓ UPDATE SQL 실행 ↓ commit 1. JPA에서 `findById()`를 하면 무슨 일이 일어날까?평소에는 보통 이렇게 생각한다.Product product = productRepository.findById(productId).orElseThrow();단순하게 보면 `DB에서 Product를 가져온다`고 생각할 수 있다.그런데 JPA에서는 한 가지 일이 더 있다.조회한 `Product` 객체를 영속성 컨텍스트가 관리하기 시작할 수 있다.Database │ │ SELECT ▼Pro..
💙
JPA 영속성 컨텍스트 / Dirty Checking / Flush
2026.08.26
2026.08.26
@Transactional 시작 ↓ Entity 조회 ↓ Entity가 영속 상태가 됨 ↓ Entity의 값 변경 ↓ JPA가 변경을 감지 ↓ flush ↓ UPDATE SQL 실행 ↓ commit 1. JPA에서 `findById()`를 하면 무슨 일이 일어날까?평소에는 보통 이렇게 생각한다.Product product = productRepository.findById(productId).orElseThrow();단순하게 보면 `DB에서 Product를 가져온다`고 생각할 수 있다.그런데 JPA에서는 한 가지 일이 더 있다.조회한 `Product` 객체를 영속성 컨텍스트가 관리하기 시작할 수 있다.Database │ │ SELECT ▼Pro..
JPA 영속성 컨텍스트 / Dirty Checking / Flush
2026.08.26
@Transactional 시작 ↓ Entity 조회 ↓ Entity가 영속 상태가 됨 ↓ Entity의 값 변경 ↓ JPA가 변경을 감지 ↓ flush ↓ UPDATE SQL 실행 ↓ commit 1. JPA에서 `findById()`를 하면 무슨 일이 일어날까?평소에는 보통 이렇게 생각한다.Product product = productRepository.findById(productId).orElseThrow();단순하게 보면 `DB에서 Product를 가져온다`고 생각할 수 있다.그런데 JPA에서는 한 가지 일이 더 있다.조회한 `Product` 객체를 영속성 컨텍스트가 관리하기 시작할 수 있다.Database │ │ SELECT ▼Pro..
JPA 영속성 컨텍스트 / Dirty Checking / Flush
2026.08.26
@Transactional 시작 ↓ Entity 조회 ↓ Entity가 영속 상태가 됨 ↓ Entity의 값 변경 ↓ JPA가 변경을 감지 ↓ flush ↓ UPDATE SQL 실행 ↓ commit 1. JPA에서 `findById()`를 하면 무슨 일이 일어날까?평소에는 보통 이렇게 생각한다.Product product = productRepository.findById(productId).orElseThrow();단순하게 보면 `DB에서 Product를 가져온다`고 생각할 수 있다.그런데 JPA에서는 한 가지 일이 더 있다.조회한 `Product` 객체를 영속성 컨텍스트가 관리하기 시작할 수 있다.Database │ │ SELECT ▼Pro..
JPA 영속성 컨텍스트 / Dirty Checking / Flush
2026.08.26
@Transactional 시작 ↓ Entity 조회 ↓ Entity가 영속 상태가 됨 ↓ Entity의 값 변경 ↓ JPA가 변경을 감지 ↓ flush ↓ UPDATE SQL 실행 ↓ commit 1. JPA에서 `findById()`를 하면 무슨 일이 일어날까?평소에는 보통 이렇게 생각한다.Product product = productRepository.findById(productId).orElseThrow();단순하게 보면 `DB에서 Product를 가져온다`고 생각할 수 있다.그런데 JPA에서는 한 가지 일이 더 있다.조회한 `Product` 객체를 영속성 컨텍스트가 관리하기 시작할 수 있다.Database │ │ SELECT ▼Pro..
JPA 영속성 컨텍스트 / Dirty Checking / Flush
2026.08.26
@Transactional 시작 ↓ Entity 조회 ↓ Entity가 영속 상태가 됨 ↓ Entity의 값 변경 ↓ JPA가 변경을 감지 ↓ flush ↓ UPDATE SQL 실행 ↓ commit 1. JPA에서 `findById()`를 하면 무슨 일이 일어날까?평소에는 보통 이렇게 생각한다.Product product = productRepository.findById(productId).orElseThrow();단순하게 보면 `DB에서 Product를 가져온다`고 생각할 수 있다.그런데 JPA에서는 한 가지 일이 더 있다.조회한 `Product` 객체를 영속성 컨텍스트가 관리하기 시작할 수 있다.Database │ │ SELECT ▼Pro..
CS
블로킹과 논블로킹
2026.08.25
CS
블로킹과 논블로킹
2026.08.25
백엔드 개발을 하다 보면 "이 API는 논블로킹이에요", "동기 방식으로 처리했어요" 같은 말을 자주 듣게 된다. 그런데 막상 블로킹/논블로킹과 동기/비동기의 차이를 명확히 설명하려면 헷갈리는 부분이 있다. 이 글에서는 두 개념을 구분되는 기준점부터 정리하고자 한다. 핵심은 "누구 기준으로 보느냐"블로킹/논블로킹과 동기/비동기는 서로 다른 질문에 대한 답이다.블로킹 / 논블로킹: 함수를 호출했을 때, 제어권이 바로 돌아오는가?동기 / 비동기: 작업이 끝났을 때, 결과를 누가 처리하는가?이 둘은 독립적인 축이라서, 이론상 4가지 조합이 모두 가능하다. 블로킹 vs 논블로킹블로킹(Blocking)함수를 호출한 쪽(caller)이 그 함수가 끝날 때까지 제어권을 넘겨주고 기다리는 방식.// 블로킹 예시Str..
블로킹과 논블로킹
2026.08.25
백엔드 개발을 하다 보면 "이 API는 논블로킹이에요", "동기 방식으로 처리했어요" 같은 말을 자주 듣게 된다. 그런데 막상 블로킹/논블로킹과 동기/비동기의 차이를 명확히 설명하려면 헷갈리는 부분이 있다. 이 글에서는 두 개념을 구분되는 기준점부터 정리하고자 한다. 핵심은 "누구 기준으로 보느냐"블로킹/논블로킹과 동기/비동기는 서로 다른 질문에 대한 답이다.블로킹 / 논블로킹: 함수를 호출했을 때, 제어권이 바로 돌아오는가?동기 / 비동기: 작업이 끝났을 때, 결과를 누가 처리하는가?이 둘은 독립적인 축이라서, 이론상 4가지 조합이 모두 가능하다. 블로킹 vs 논블로킹블로킹(Blocking)함수를 호출한 쪽(caller)이 그 함수가 끝날 때까지 제어권을 넘겨주고 기다리는 방식.// 블로킹 예시Str..
💙
블로킹과 논블로킹
2026.08.25
2026.08.25
백엔드 개발을 하다 보면 "이 API는 논블로킹이에요", "동기 방식으로 처리했어요" 같은 말을 자주 듣게 된다. 그런데 막상 블로킹/논블로킹과 동기/비동기의 차이를 명확히 설명하려면 헷갈리는 부분이 있다. 이 글에서는 두 개념을 구분되는 기준점부터 정리하고자 한다. 핵심은 "누구 기준으로 보느냐"블로킹/논블로킹과 동기/비동기는 서로 다른 질문에 대한 답이다.블로킹 / 논블로킹: 함수를 호출했을 때, 제어권이 바로 돌아오는가?동기 / 비동기: 작업이 끝났을 때, 결과를 누가 처리하는가?이 둘은 독립적인 축이라서, 이론상 4가지 조합이 모두 가능하다. 블로킹 vs 논블로킹블로킹(Blocking)함수를 호출한 쪽(caller)이 그 함수가 끝날 때까지 제어권을 넘겨주고 기다리는 방식.// 블로킹 예시Str..
블로킹과 논블로킹
2026.08.25
백엔드 개발을 하다 보면 "이 API는 논블로킹이에요", "동기 방식으로 처리했어요" 같은 말을 자주 듣게 된다. 그런데 막상 블로킹/논블로킹과 동기/비동기의 차이를 명확히 설명하려면 헷갈리는 부분이 있다. 이 글에서는 두 개념을 구분되는 기준점부터 정리하고자 한다. 핵심은 "누구 기준으로 보느냐"블로킹/논블로킹과 동기/비동기는 서로 다른 질문에 대한 답이다.블로킹 / 논블로킹: 함수를 호출했을 때, 제어권이 바로 돌아오는가?동기 / 비동기: 작업이 끝났을 때, 결과를 누가 처리하는가?이 둘은 독립적인 축이라서, 이론상 4가지 조합이 모두 가능하다. 블로킹 vs 논블로킹블로킹(Blocking)함수를 호출한 쪽(caller)이 그 함수가 끝날 때까지 제어권을 넘겨주고 기다리는 방식.// 블로킹 예시Str..
블로킹과 논블로킹
2026.08.25
백엔드 개발을 하다 보면 "이 API는 논블로킹이에요", "동기 방식으로 처리했어요" 같은 말을 자주 듣게 된다. 그런데 막상 블로킹/논블로킹과 동기/비동기의 차이를 명확히 설명하려면 헷갈리는 부분이 있다. 이 글에서는 두 개념을 구분되는 기준점부터 정리하고자 한다. 핵심은 "누구 기준으로 보느냐"블로킹/논블로킹과 동기/비동기는 서로 다른 질문에 대한 답이다.블로킹 / 논블로킹: 함수를 호출했을 때, 제어권이 바로 돌아오는가?동기 / 비동기: 작업이 끝났을 때, 결과를 누가 처리하는가?이 둘은 독립적인 축이라서, 이론상 4가지 조합이 모두 가능하다. 블로킹 vs 논블로킹블로킹(Blocking)함수를 호출한 쪽(caller)이 그 함수가 끝날 때까지 제어권을 넘겨주고 기다리는 방식.// 블로킹 예시Str..
블로킹과 논블로킹
2026.08.25
백엔드 개발을 하다 보면 "이 API는 논블로킹이에요", "동기 방식으로 처리했어요" 같은 말을 자주 듣게 된다. 그런데 막상 블로킹/논블로킹과 동기/비동기의 차이를 명확히 설명하려면 헷갈리는 부분이 있다. 이 글에서는 두 개념을 구분되는 기준점부터 정리하고자 한다. 핵심은 "누구 기준으로 보느냐"블로킹/논블로킹과 동기/비동기는 서로 다른 질문에 대한 답이다.블로킹 / 논블로킹: 함수를 호출했을 때, 제어권이 바로 돌아오는가?동기 / 비동기: 작업이 끝났을 때, 결과를 누가 처리하는가?이 둘은 독립적인 축이라서, 이론상 4가지 조합이 모두 가능하다. 블로킹 vs 논블로킹블로킹(Blocking)함수를 호출한 쪽(caller)이 그 함수가 끝날 때까지 제어권을 넘겨주고 기다리는 방식.// 블로킹 예시Str..
블로킹과 논블로킹
2026.08.25
백엔드 개발을 하다 보면 "이 API는 논블로킹이에요", "동기 방식으로 처리했어요" 같은 말을 자주 듣게 된다. 그런데 막상 블로킹/논블로킹과 동기/비동기의 차이를 명확히 설명하려면 헷갈리는 부분이 있다. 이 글에서는 두 개념을 구분되는 기준점부터 정리하고자 한다. 핵심은 "누구 기준으로 보느냐"블로킹/논블로킹과 동기/비동기는 서로 다른 질문에 대한 답이다.블로킹 / 논블로킹: 함수를 호출했을 때, 제어권이 바로 돌아오는가?동기 / 비동기: 작업이 끝났을 때, 결과를 누가 처리하는가?이 둘은 독립적인 축이라서, 이론상 4가지 조합이 모두 가능하다. 블로킹 vs 논블로킹블로킹(Blocking)함수를 호출한 쪽(caller)이 그 함수가 끝날 때까지 제어권을 넘겨주고 기다리는 방식.// 블로킹 예시Str..
Spring
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
Spring
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
💙
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
트랜잭션 / ACID / Commit / Rollback / @Transactional
2026.08.25
여러 DB 작업이 하나의 업무를 구성한다면, 일부만 성공한 상태가 남지 않도록 하나의 트랜잭션으로 묶을 수 있다. 1. 트랜잭션이란?하나의 논리적인 작업 단위 계좌 이체를 생각해보자.A가 B에게 10,000원을 보낸다. DB에서는 실제로 두 작업일 수 있다.A 계좌 100,000 → 90,000 B 계좌 50,000 → 60,000 그런데 첫 번째 작업만 성공하고 두 번째 작업이 실패하면, A는 잔고가 10,000원 감소하고 B는 그대로가 된다.돈이 사라진 것이다. 그래서 이 두 작업을 `A 잔액 차감 + B 잔액 증가` 하나의 업무로 본다.결과도 둘 중 하나여야 한다. (둘 다 성공 or 둘 다 실패) 2. 주문도 마찬가지쿠폰 사용 → 재고 차감 → 포인트 차감 → 주문 저장각각은 다른 DB 변경일 ..
🎵 Playlist
loading...
00:00 / 00:00