책 리뷰] 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식 - 최범균
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 주니어 백엔드 개발자
- 중급 개발자 및 시니어 개발자 (실무 경험 공유 및 전략적 지식 도움)
- 난이도: 중간 (실무 사례 중심, 기초 개념부터 심화 내용까지 포함)
핵심 요약
- 성능 분석의 핵심은
TTFB(Time to First Byte)
및TTLB(Time to Last Byte)
측정, 전체 체인 기준으로 분석해야 함 - DB 성능 최적화를 위해 복합 인덱스, 캐시 전략(로컬/리모트), Full Table Scan 방지가 필수
- 비동기 처리 및 트랜잭션 관리는 동시성 문제 해결을 위한 핵심 기술로,
@Async
어노테이션과Outbox
패턴 활용 권장
섹션별 세부 요약
1. 성능 분석의 기초
- TPS(Transaction Per Second) 기준으로 병목 지점 파악, 모니터링 도구 활용 필수
- 서비스 성능 저하 증상: 응답 시간 10초 이상, 연결 시간 초과, 재시작 후 반복 발생
- 수직 확장은 단기적 해결책, 수평 확장이 지속 가능한 확장 전략
2. DB 성능 최적화
- 커넥션 풀 사용 필수: 최대/최소 커넥션 수, 타임아웃 설정, Django 5.1 예시 참고
- 캐시 전략: 로컬 캐시(빠르지만 스케일링 어려움), 리모트 캐시(redis 등) 활용
- Full Table Scan 방지: 복합 인덱스, 커버링 인덱스 사용, Aggregation 쿼리 사전 집계
3. 외부 API 연동 문제 해결
- 타임아웃 설정 필수: 외부 API 응답 지연으로 인한 커넥션 풀 고갈 방지
- 재시도 전략: 멱등성(idempotent) 보장, 503 응답 처리, 벌크헤드(Bulkhead) 패턴 적용
- 서킷 브레이커(Circuit Breaker): 실패율 기준으로 호출 금지 상태로 전환
4. 비동기 처리 및 동시성 관리
- 동기/비동기 선택: 연동 시차 허용, 재시도 가능, 중복 처리 방지 필요
- Spring Framework의 @Async
사용 시, try-catch
내 에러 전파 불가, 트랜잭션 롤백 처리 주의
- 메시징 시스템: Producer-Consumer 패턴, 중복 처리 방지 위한 고유 식별자 추가
5. 동시성 문제 해결
- 레이스 컨디션 방지: 락(Lock), 세마포어(Semaphore), DB 동시성 처리 전략
- 글로벌 트랜잭션 관리: 2PC(2-Phase Commit) 또는 트랜잭션 아웃박스(Outbox) 활용
결론
- 실무 적용 팁:
- DB 커넥션 풀 설정 시 최대/최소 커넥션 수
와 타임아웃
을 반드시 조정
- 캐시 무효화를 통해 데이터 일관성 유지, 워밍(Warming) 전략으로 트래픽 튀는 경우 대응
- 비동기 처리 시 @Async
어노테이션 사용 시 트랜잭션 롤백 처리와 메모리 사용량 주의
- 메시징 시스템 도입 시 중복 처리 방지 및 이벤트/커맨드 분리를 통해 시스템 안정성 확보