WAS-DB 연동
WAS와 애플리케이션이 JDBC, DataSource, Connection Pool을 통해 DBMS와 연결되는 흐름을 정리한다.
애플리케이션에서 DB로 넘어가는 구간
Client
-> Web Server
-> WAS
-> Application
-> DBMS
연동의 의미
WAS-DB 연동은 애플리케이션이 DBMS에 연결을 만들고, SQL을 실행하고, 결과를 받아 응답을 만드는 과정이다.
왜 별도 계층으로 보는가
사용자는 500 오류만 볼 수 있지만 원인은 DB 연결 실패일 수 있다. WAS는 정상 기동 중이고 Web-WAS 프록시도 정상인데 애플리케이션이 DB에 연결하지 못하면 요청은 실패한다.
따라서 Web-WAS 연동과 WAS-DB 연동은 분리해서 봐야 한다.
기본 구성요소
| 구성요소 | 역할 |
|---|---|
| JDBC Driver | Java 애플리케이션이 DB와 통신하기 위한 드라이버 |
| JDBC URL | DB 주소, 포트, 서비스명/스키마 등 연결 문자열 |
| DB 계정 | 애플리케이션 접속용 계정과 권한 |
| DataSource | DB 연결 정보를 객체로 관리 |
| Connection Pool | DB 연결을 미리 만들어 재사용 |
| Transaction | 여러 SQL 작업의 성공/실패 단위 |
연결 흐름
Application
-> DataSource
-> Connection Pool
-> JDBC Driver
-> DB Listener
-> DBMS
Connection Pool을 쓰면 요청마다 새 연결을 만들지 않고 기존 연결을 재사용한다. 성능에는 좋지만, pool 크기나 timeout 설정이 맞지 않으면 장애 원인이 된다.
자주 보는 설정
| 항목 | 예시 |
|---|---|
| DB host | db.example.internal |
| DB port | MySQL 3306, Oracle listener 1521, MSSQL 1433 |
| JDBC URL | jdbc:mysql://host:3306/dbname |
| 계정 | application 전용 계정 |
| pool size | minimum/maximum pool size |
| timeout | connection timeout, idle timeout, validation timeout |
장애 유형
| 증상 | 가능 원인 |
|---|---|
| connection refused | DB listener down, 포트 불일치, 방화벽 |
| timeout | 네트워크, 방화벽, DB 부하, pool 고갈 |
| access denied | 계정/비밀번호 오류, 권한 부족 |
| too many connections | DB max connection 초과 |
| pool exhausted | 애플리케이션이 connection을 반환하지 않음, pool 크기 부족 |
| slow response | slow query, lock, index 부재, DB 리소스 부족 |
점검 순서
- WAS 서버에서 DB host/port로 네트워크 연결이 되는지 확인한다.
- 애플리케이션 로그에서 JDBC/SQL 예외를 확인한다.
- DB 계정, 비밀번호, 권한, 접속 허용 host를 확인한다.
- Connection Pool 설정과 active/idle connection 수를 확인한다.
- DB 서버의 connection 수, slow query, lock을 확인한다.
점검 명령 예시
nc -vz db.example.internal 3306
telnet db.example.internal 1521
ss -antp | grep 3306
tail -f $CATALINA_BASE/logs/catalina.out
환경에 따라 DB client를 사용할 수 있다.
mysql -h db.example.internal -P 3306 -u appuser -p
sqlplus appuser/password@host:1521/service
운영 관점
DB 연결 정보는 보통 애플리케이션 설정, WAS DataSource, 환경변수, secret 관리 도구 중 하나에 있다. 장애 대응 때는 “설정이 어디에 있는지”를 먼저 알아야 한다.
또한 DB 연결은 보안과 직접 연결된다. 애플리케이션 계정은 필요한 권한만 가져야 하고, 외부에서 DB 포트가 직접 열리지 않도록 제한하는 것이 기본이다.
관련 블로그 기록
- WAS가 죽기 전에 로그 남기기 — WAS 장애를 애플리케이션만이 아니라 JVM과 DB 리소스 관점까지 내려가 확인한 사례
닫기 전 질문
- WAS 서버에서 DB 포트까지 네트워크 연결이 되는가?
- 애플리케이션은 DB 연결을 직접 만드는가, WAS DataSource를 사용하는가?
- 느린 응답은 WAS thread 문제인가, DB query 문제인가?