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
'BackEnd' 카테고리의 다른 글
| [JAVA] Broken pipe 에러란 ? 언제 발생하는가? (6) | 2025.06.01 |
|---|---|
| [Docker] 여러 PC에서 동일한 이미지로 컨테이너 실행하는 팁 (0) | 2025.05.11 |
| Docker에서 MySQL 컨테이너가 계속 죽을 때 확인할 것들 (0) | 2025.04.13 |
| SQL 쿼리 튜닝 방법 (0) | 2025.03.30 |
| crontab 기본 형식 (1) | 2025.03.23 |