주니어 백엔드 개발자가 반드시 알아야 할 실무 지식
- 독서 기간 (2025.06.25 ~ ) / 스터디를 통해 진행
- 목 적 : JS 기반으로 알고리즘 공부와 더불어 코딩 테스트 준비
목차 요약
-
1장 들어가며
-
2장 느려진 서비스, 어디부터 봐야 할까
-
3장 성능을 좌우하는 DB 설계와 쿼리
-
4장 외부 연동이 문제일 때 살펴봐야 할 것들
-
5장 비동기 연동, 언제 어떻게 써야 할까
-
6장 동시성, 데이터가 꼬이기 전에 잡아야 한다
-
7장 IO 병목, 어떻게 해결하지
-
8장 실무에서 꼭 필요한 보안 지식
-
9장 최소한 알고 있어야 할 서버 지식
-
10장 모르면 답답해지는 네트워크 기초
-
11장 자주 쓰는 서버 구조와 설계 패턴
-
부록 A: 처음 해보는 성능 테스트를 위한 기본 정리
-
부록 B: NoSQL 이해하기
-
부록 C: DB로 분산 잠금 구현하기
-
총 356 Page
스터디 진행
- 기간 : 6월 25일 부터 진행 ~ 약 2달 예상
- 날짜 : 매주 수요일, 10시부터 진행할 예정
- 한번 스터디때마다 2명이 발표를 하고, 간단한 퀴즈까지 내주시면 감사합니다. (퀴즈는 필수 아님) 발표시간은 30분 이내로 하는 것이 적당할 듯 하고, 디스코드에서 진행합니다.
- 발표자 이외의 분들도 책을 읽어오면 좋을 것 같아요 (권장)
- 발표자 2명은 제가 랜덤 순서를 정하겠습니다.
- 요약 : 매주 하루, 2명 발표, 둘이 각각 1장(챕터) 발표
- 특이사항 : 짧은 챕터는 한명이 2장을 발표하겠습니다.
1장 & 2장
1장 들어가며
DB 커넥션을 닫아주지 않아서 문제가 생겼던 적, 커넥션 연결 시간 설정을 제대로 해주지 않아서 문제가 생겼던 적을 예시로 들면서 책이 시작합니다. 모두가 할 수 있는 실수들 이제는 안해도될 실수를 안하기 위해 이 책을 읽게 됐습니다.
2장 느려진 서비스, 어디부터 봐야 할까
서비스가 느려졌을 때 어디부터 점검해야 하는지를 실무 관점에서 풀어낸 챕터. 다양한 성능 정검 포인트를 미리 알아두면 실무에서도 도움이 될 것 입니다.
처리량(Throughput)과 응답 시간(Response Time)
- 처리량: 단위 시간 내에 처리 가능한 요청 수
- 응답 시간: 클라이언트 요청 → 응답 완료까지 걸린 시간
응답 시간
TTFB(Time to First Byte)
클라이언트가 요청을 보낸 후, 서버로부터 첫 번째 바이트를 수신할 때까지 걸린 시간
[클라이언트 요청] → [서버 수신] → [서버 처리 시작] → [첫 바이트 전송] ← 이 시점까지의 시간
- 포함되는 시간
- 네트워크 왕복 시간(RTT)
- 서버의 요청 처리 시작 시간
- 응답 헤더 및 첫 데이터 생성 시간
📦 TTLB(Time to Last Byte)
클라이언트가 요청을 보낸 후, 서버 응답의 마지막 바이트까지 모두 수신한 시간
[요청 시작] → ... → [첫 바이트 수신] → ... → [마지막 바이트 수신] ← 전체 응답 시간
-
포함되는 시간
- TTFB 전체
- 전체 응답 본문 전송 시간 (payload의 크기, 전송 속도 영향 받음)
-
Bad TTFB 높음: 백엔드에서 API 요청 처리에 2초가 걸림 → 첫 바이트가 2초 뒤에 도착
-
Bad TTLB 높음: 서버 응답으로 30MB 이미지 데이터를 전송 중 → 마지막 바이트가 도착하는 데 5초
처리량
RPS (Requests Per Second)
1초당 서버가 처리한 HTTP 요청(Request)의 수
예시 상황
- 프론트엔드가 /api/users 요청을 1초에 100번 보내면 → RPS = 100
- 사용자가 웹페이지 접속 시 HTML, CSS, JS 등 여러 개 요청이 발생 → 요청 수가 많아짐
TPS (Transactions Per Second)
1초당 처리된 트랜잭션(Transaction)의 수
트랜잭션이란?
- 원자적으로 수행되는 연산 단위. 성공하거나, 전부 실패해야 함 (ACID 원칙) 보통 DB나 금융 시스템에서 많이 쓰임
예시 상황
- 은행 시스템에서 계좌 이체 100건 처리 → TPS = 100
- 게시판에서 게시물 작성, 수정, 삭제 같은 DB 트랜잭션 수행
서버 성능 개선 기초
초기에는 성능 개선할게 없지만, 트래픽이 늘고 데이터가 많이질수록 개선해야할 사항들이 보입니다. 이떄 어디를 봐야할까요
병목 지점(Bottleneck) 파악
병목의 위치는 어떤 종류가 있을까?
- 애플리케이션 로직
- 데이터베이스
- 외부 API
- 네트워크
- 디스크 I/O
🔍 병목 위치에 따라 접근 방식이 달라진다.
수직 확장과 수평 확장
| 구분 | 설명 | 예시 |
|---|---|---|
| 수직 확장 | 서버 스펙을 올림 | CPU, RAM 업그레이 드 |
| 수평 확장 | 서버 인스턴스 수를 늘림 | 서버를 여러 대 두고 부하 분산 |
수직 확장
특징
- 기존 인프라 구조를 크게 바꾸지 않아도 됨
- 구현이 단순하고 빠름
- 단일 서버 성능을 극대화하는 접근
사용 시점
- 서버 한 대에서 처리하는 로직이 복잡할 때
- DB, 캐시 등 상태 기반 서비스에 적합 (데이터 공유 이슈 있음)
- 시스템이 단순하고 트래픽이 일정 수준 이하일 때
단점
- 확장 한계가 있음 (물리적 한계)
- 비용 대비 효율이 떨어질 수 있음
- 장애 시 리스크가 큼 (SPOF: 단일 장애점)
수평확장
특징
- 고가용성, 탄력성 확보에 유리
- 트래픽 증가에 더 유연하게 대응 가능
- 무중단 배포, Blue-Green, Canary 등과도 잘 어울림
사용 시점
- 사용자 수 급증, 트래픽이 많아진 상황
- 웹 서버, API 서버처럼 무상태(Stateless) 서비스
- 클라우드 환경에서 자동 확장을 적용하고 싶을 때
단점
- 아키텍처 복잡도 증가 (로드밸런서, 세션 공유 등 필요)
- 초기 구축 비용과 관리 부담이 있음
커넥션을 관리해보자
- DB와의 연결은 비용이 큼 → 매번 연결/해제 X
- 미리 만들어둔 연결을 재사용
- 커넥션 풀이 없으면? → Too many connections, Connection timeout
커넥션 풀 튜닝 포인트