Skip to content

Commit 0f3b6c7

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 64651bd + 1179b84 commit 0f3b6c7

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

_posts/book/Clean Code/2025-10-24-13. 동시성.md renamed to _posts/book/Clean Code/2026-01-22-13. 동시성.md

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
2-
title: "[Book - Clean Code] 13. 동시성 (작성중)"
3-
date: 2025-10-24 18:00:00 +0900
2+
title: "[Book - Clean Code] 13. 동시성"
3+
date: 2026-01-22 18:00:00 +0900
44
categories: [Book - Clean Code]
55
tags: [book, clean code]
66
---
@@ -124,3 +124,31 @@ SRP는 주어진 메서드/클래스/컴포넌트를 변경할 이유가 하나
124124
* '서버에서 잠금' 방식과 유사하지만 원래 서버는 변경하지 않는다.
125125

126126
## 동기화하는 부분을 작게 만들어라
127+
Java에서 synchronized 키워드를 사용하면 Lock을 설정한다.
128+
같은 락으로 감싼 모든 코드 영역은 한 번에 한 스레드만 실행이 가능하다.
129+
130+
Lock은 스레드를 지연시키고 부하를 가중시킨다.
131+
132+
반면, 임계영역은 반드시 보호해야 한다.
133+
따라서 코드를 짤 때는 임계영역 수를 최대한 줄여야 한다.
134+
135+
필요 이상으로 임계영역 크기를 키우면 스레드 간에 경쟁이 늘어나고 프로그램 성능이 떨어진다.
136+
137+
**권장사항**: 동기화하는 부분을 최대한 작게 만들어라.
138+
139+
## 올바른 종료 코드는 구현하기 어렵다
140+
**권장사항**: 종료 코드를 개발 초기부터 고민하고 동작하게 초기부터 구현하라.
141+
142+
## 스레드 코드 테스트하기
143+
코드가 올바르다고 증명하기는 현식적으로 불가능하고, 테스트가 정확성을 보장하지는 않는다.
144+
그럼에도 충분한 테스트는 위헙을 낮춘다.
145+
146+
**권장사항**: 문제를 노출하는 테스트 케이스를 작성하고, 프로그램 설정과 시스템 설장과 부하를 바꿔가며 자주 돌려라. (**멱등성**을 보장하자.)
147+
148+
## 결론
149+
SRP를 준수하자.
150+
POJO를 사용해 스레드를 아는 코드와 스레드를 모르는 코드를 분리한다.
151+
스레드 코드를 테스트할 때는 전적으로 스레드만 테스트한다.
152+
즉, 스레드 코드는 **최대한 집약되고 작아야 한다.**
153+
154+
공유자원을 제대로 이해하기 위해 공유하는 객체 수와 범위를 최대한 줄이자.

0 commit comments

Comments
 (0)