핵심 인사이트 (3줄 요약)
- 본질: 클라이언트-서버 DBMS 아키텍처는 DB 엔진을 서버에 중앙 집중화하고, 클라이언트는 SQL 요청만 전송하는 구조다. 파일 공유 방식(모든 클라이언트가 DB 파일 직접 접근)의 동시성·보안·무결성 문제를 해결했다.
- 가치: 2-Tier(클라이언트-DB 서버), 3-Tier(클라이언트-앱서버-DB 서버), N-Tier(마이크로서비스) 구조로 발전하며 확장성과 보안성이 높아졌다. 3-Tier는 현대 웹 애플리케이션의 표준 구조다.
- 판단 포인트: 데이터베이스 연결(Connection)은 비용이 크다. 커넥션 풀(Connection Pool)은 미리 N개 연결을 생성해두고 재사용하여 연결 생성 오버헤드를 제거한다. 적절한 풀 크기가 성능의 핵심이다.
Ⅰ. 개요 및 필요성
아키텍처 발전:
1-Tier (파일 공유):
[앱+DB+데이터 모두 한 기계]
→ 다중 사용자 불가
2-Tier (C/S):
[클라이언트 앱] ──SQL──> [DB 서버]
→ 클라이언트가 두꺼움 (Fat Client)
3-Tier:
[브라우저/앱] ──HTTP──> [앱 서버] ──SQL──> [DB 서버]
→ 표준 웹 아키텍처
N-Tier (MSA):
[클라이언트] → [API 게이트웨이] → [서비스A,B,C] → [DB A,B,C]
→ 서비스별 독립 DB
- 📢 섹션 요약 비유: 아키텍처 발전은 음식점 서비스 방식이다. 혼자 밥 해먹기(1-Tier), 식당 가서 주문(2-Tier), 배달앱으로 주문(3-Tier), 여러 배달 서비스 연동(MSA) 순으로 복잡성과 확장성이 증가한다.
Ⅱ. 아키텍처 및 핵심 원리
커넥션 풀 작동 원리
커넥션 풀 없이:
요청마다 새 연결 생성 (100ms+) → 응답 지연
커넥션 풀 사용:
시작 시 10개 연결 미리 생성 (DB 서버와 TCP 유지)
요청: 풀에서 유휴 연결 즉시 획득 (1ms 미만)
완료: 연결 반납 (close 아닌 반환)
주요 파라미터:
initialSize: 최초 연결 수 (5)
minIdle: 최소 유휴 연결 (5)
maxActive: 최대 연결 수 (20)
maxWait: 연결 대기 최대 시간 (3000ms)
validationQuery: 연결 유효성 확인 쿼리
DB 미들웨어 계층
| 계층 | 역할 |
| JDBC/ODBC | 표준 DB 접근 API |
| ORM | 객체-관계 매핑 (Hibernate, JPA) |
| 커넥션 풀 | 연결 재사용 (HikariCP, DBCP) |
| 프록시 | 연결 분산·캐싱 (ProxySQL, PgBouncer) |
| 서비스 메시 | MSA DB 연결 관리 |
- 📢 섹션 요약 비유: 커넥션 풀은 택시 대기소다. 항상 10대의 택시(DB 연결)가 대기하고 있어서 손님(요청)이 오면 즉시 배차(연결 제공)한다. 매번 새 택시를 불러오는 것(새 연결 생성)보다 훨씬 빠르다.
Ⅲ. 비교 및 연결
| 비교 | 2-Tier | 3-Tier | MSA |
| 클라이언트 | Fat Client | Thin Client | API Client |
| 확장성 | 낮음 | 중간 | 높음 |
| 보안 | DB 직접 노출 | 앱 서버 방어 | API 게이트웨이 |
| DB 수 | 1개 공유 | 1~2개 공유 | 서비스별 독립 |
- 📢 섹션 요약 비유: 2/3/MSA 계층은 회사 조직 구조다. 모두가 직접 사장에게 보고(2-Tier), 팀장을 통해 보고(3-Tier), 각 팀이 독립적으로 운영(MSA)으로 확장성이 달라진다.
Ⅳ. 실무 적용 및 기술사 판단
HikariCP 최적 설정 (Spring Boot)
spring:
datasource:
hikari:
pool-name: HikariPool-1
maximum-pool-size: 10 # CPU 코어 수 × 2~3
minimum-idle: 5
connection-timeout: 3000 # 3초
idle-timeout: 600000 # 10분 유휴 후 제거
max-lifetime: 1800000 # 30분 후 연결 교체
validation-timeout: 5000
connection-test-query: "SELECT 1"
읽기-쓰기 분리 아키텍처
쓰기 연결 풀 → Primary DB (쓰기 전용)
읽기 연결 풀 → Replica DB×N (읽기 분산)
장점:
- 읽기 쿼리 부하 분산
- Primary DB 쓰기 성능 보호
- 읽기 쿼리 다중 복제본 병렬 처리
- 📢 섹션 요약 비유: 읽기-쓰기 분리는 복사 센터 운영이다. 원본 작성(Primary/쓰기)과 복사 출력(Replica/읽기)을 분리하여, 복사 수요가 많아도 원본 작업에 방해가 없다.
Ⅴ. 기대효과 및 결론
| 기대효과 | 내용 |
| 성능 | 커넥션 풀로 연결 오버헤드 제거 |
| 확장성 | 3-Tier/MSA로 수평 확장 용이 |
| 보안 | DB 서버를 클라이언트로부터 격리 |
서버리스·엣지 컴퓨팅 환경에서 DB 커넥션 풀이 새로운 도전을 받고 있다. Lambda 함수가 수천 개 동시 실행 시 커넥션 폭발(Connection Storm)이 발생하며, AWS RDS Proxy·PlanetScale serverless driver 같은 서버리스 전용 DB 프록시가 해결책으로 등장했다.
- 📢 섹션 요약 비유: 서버리스 DB 프록시는 대형 행사 주차 관리다. 수천 명 동시 방문(Lambda 함수)에 주차 공간(DB 연결)이 부족하면 대기 줄이 생긴다. DB 프록시(주차 대행)가 연결을 중간에서 효율적으로 관리한다.
📌 관련 개념 맵
| 개념 | 연결 포인트 |
| 커넥션 풀 | DB 연결 재사용 성능 최적화 |
| HikariCP | Spring Boot 표준 커넥션 풀 |
| 읽기-쓰기 분리 | Primary/Replica 부하 분산 |
| RDS Proxy | 서버리스 환경 DB 연결 관리 |
| ORM | 객체-DB 매핑 추상화 계층 |
📈 관련 키워드 및 발전 흐름도
[파일 공유 DB — 1-Tier, 동시성 문제]
│
▼
[2-Tier C/S — DB 서버 중앙화, Fat Client]
│
▼
[3-Tier — 앱 서버 추가, 커넥션 풀, 표준 웹 구조]
│
▼
[MSA — 서비스별 독립 DB, API 게이트웨이]
│
▼
[서버리스 DB 프록시 — Lambda 커넥션 폭발 해결]
👶 어린이를 위한 3줄 비유 설명
- 클라이언트-서버 DB는 식당 주문 시스템이에요 — 손님(클라이언트)이 주문하면 주방(DB 서버)에서 처리해요!
- 커넥션 풀은 택시 대기소예요 — 미리 연결을 만들어둬서 요청이 오면 즉시 서비스해요!
- 현대 앱은 3-Tier로 브라우저→앱서버→DB 서버 구조로 동작해요!