본문 바로가기
BackEnd

[JAVA]Backend, 안정적인 서비스 운영을 위한 EXCEPTION

by Dddu 2025. 5. 4.
SMALL

Java 백엔드 개발 시 꼼꼼히 챙기지 않으면 큰 장애로 이어질 수 있는 예외들을 확인하고 대비!


1. OutOfMemoryError (OOM)

JVM이 메모리를 더 이상 할당받지 못할 때 발생하는 예외로, 서버 성능에 치명적인 영향을 준다.

주요 원인

  • 메모리 누수
  • 잘못된 컬렉션 사용
  • 지나치게 큰 데이터를 메모리에 로딩

예시

java.lang.OutOfMemoryError: Java heap space
 

대응 방법

  • JVM 프로파일링(JVisualVM 등)을 통한 메모리 사용량 점검
  • 메모리 누수 및 미사용 객체를 정기적으로 제거
  • JVM 설정 튜닝 및 적절한 GC(Garbage Collection) 전략 수립

2. SocketTimeoutException

외부 API 호출 등에서 설정된 시간 내 응답이 오지 않으면 발생한다.

주요 원인

  • 외부 시스템 지연
  • 타임아웃 설정 누락 또는 부적절한 설정

예시

java.net.SocketTimeoutException: Read timed out
 

대응 방법

  • 반드시 명확한 타임아웃 설정(connectTimeout, readTimeout) 적용
  • 예외 발생 시 재시도(Retry) 로직 적용
  • 타임아웃 발생 상황을 명확히 로깅하여 모니터링 및 후속 대응 가능하도록 관리

3. ConnectionPoolTimeoutException (DB 커넥션 풀 고갈)

DB 커넥션 풀이 모두 사용되어 추가적인 커넥션 할당이 불가능할 때 발생한다.

주요 원인

  • DB 연결 반환(close) 미실행
  • 쿼리 성능 저하로 인한 커넥션 점유 시간 증가

예시

java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available
 

대응 방법

  • 반드시 DB 커넥션 close 여부를 명확히 체크
  • DB 커넥션 풀 설정 및 사이즈를 적정하게 관리
  • 커넥션 풀 상태를 주기적으로 모니터링하여 문제 사전 예방

4. TransactionSystemException (트랜잭션 예외)

DB 트랜잭션이 정상적으로 종료되지 못했을 때 나타난다.

주요 원인

  • 트랜잭션 경계 설정 오류
  • 트랜잭션 롤백 미처리 또는 롤백 설정 누락

예시

org.springframework.transaction.TransactionSystemException: Could not commit transaction
 

대응 방법

  • 트랜잭션 경계(@Transactional) 설정 명확화
  • 트랜잭션 실패 시 명확한 롤백 처리 로직 구성
  • 발생한 예외 상황을 상세히 로깅하여 빠른 장애 추적 가능하도록 관리
LIST