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 DriverJava 애플리케이션이 DB와 통신하기 위한 드라이버
JDBC URLDB 주소, 포트, 서비스명/스키마 등 연결 문자열
DB 계정애플리케이션 접속용 계정과 권한
DataSourceDB 연결 정보를 객체로 관리
Connection PoolDB 연결을 미리 만들어 재사용
Transaction여러 SQL 작업의 성공/실패 단위

연결 흐름

Application
  -> DataSource
  -> Connection Pool
  -> JDBC Driver
  -> DB Listener
  -> DBMS

Connection Pool을 쓰면 요청마다 새 연결을 만들지 않고 기존 연결을 재사용한다. 성능에는 좋지만, pool 크기나 timeout 설정이 맞지 않으면 장애 원인이 된다.

자주 보는 설정

항목예시
DB hostdb.example.internal
DB portMySQL 3306, Oracle listener 1521, MSSQL 1433
JDBC URLjdbc:mysql://host:3306/dbname
계정application 전용 계정
pool sizeminimum/maximum pool size
timeoutconnection timeout, idle timeout, validation timeout

장애 유형

증상가능 원인
connection refusedDB listener down, 포트 불일치, 방화벽
timeout네트워크, 방화벽, DB 부하, pool 고갈
access denied계정/비밀번호 오류, 권한 부족
too many connectionsDB max connection 초과
pool exhausted애플리케이션이 connection을 반환하지 않음, pool 크기 부족
slow responseslow query, lock, index 부재, DB 리소스 부족

점검 순서

  1. WAS 서버에서 DB host/port로 네트워크 연결이 되는지 확인한다.
  2. 애플리케이션 로그에서 JDBC/SQL 예외를 확인한다.
  3. DB 계정, 비밀번호, 권한, 접속 허용 host를 확인한다.
  4. Connection Pool 설정과 active/idle connection 수를 확인한다.
  5. 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 서버에서 DB 포트까지 네트워크 연결이 되는가?
  • 애플리케이션은 DB 연결을 직접 만드는가, WAS DataSource를 사용하는가?
  • 느린 응답은 WAS thread 문제인가, DB query 문제인가?