들어가며 – “에러를 이해하면 실무가 쉬워진다”
개발 초반에는 에러가 나면 당황하고, 어디서부터 손대야 할지 모르는 경우가 많습니다. 하지만 예외 처리(Exceptions)와 트러블슈팅(Troubleshooting) 흐름을 이해하면, 버그를 빠르게 해결하고, 안정적인 시스템을 만들 수 있습니다.
이번 편에서는 실무에서 자주 마주치는 예외 및 오류를 기준으로, 비전공자도 바로 적용 가능한 25가지 핵심 패턴을 정리했습니다. 제가 실제로 많이 겪고 느낀 부분을 중점적으로 정리하였으니 처음 입문하시거나 초급 개발자로 계시는 분들은 참고하시면 더욱 좋습니다.

예외(Exception)란?
- 코드 실행 중 발생하는 예상치 못한 상황
- Java에서는
try-catch, Python에서는try-except로 처리
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("0으로 나눌 수 없습니다!");
}
➡️ 포인트: 사용자에게 친절한 메시지를 보여주고, 서버 다운을 방지합니다.(웹개발에서는 JSP에서 alert 과 cmdMessage를 활용하기도 합니다.)
➡️ 참고 : Java Exception Tutorial
Checked vs Unchecked Exception
- Checked: 반드시 처리해야 하는 예외 (e.g., IOException)
- Unchecked: 선택적으로 처리 (e.g., NullPointerException)
NullPointerException
- 객체가 null인데 접근 시 발생
- 예시 : DB 조회 결과가 없을 때
User user = null;
System.out.println(user.getName()); // NPE 발생
ArrayIndexOutOfBoundsException
- 배열 범위를 벗어난 접근 시 발생
int[] arr = {1,2,3};
System.out.println(arr[3]); // Index 3 없음
➡️ 포인트: 반복문 범위 체크 필수
Tip) 정보처리기사 실기에서 예외 구문이 등장한 적이 있습니다. 꼭 알아두시길 바랍니다.
ClassCastException
- 잘못된 형 변환 시 발생
Object obj = "제로";
Integer num = (Integer)obj; // ClassCastException
SQL Exception
- DB 쿼리 실행 오류
Statement stmt = conn.createStatement();
stmt.executeQuery("SELECT * FROM unknown_table"); // SQLException
HTTP 404 에러
- 요청한 URL이 없을 때 발생
- 예시: API URL 오타, 프론트에서 잘못된 링크
Tip) 404 에러를 방지하기 위해 리디렉트(리다이렉트)로 정상URL을 자동 호출하도록 하면 404페이지가 뜨지 않고 정상페이지로 넘어갑니다.
HTTP 500 에러
- 서버 내부 오류
➡️ 포인트: 서버 로그 확인 → 원인 분석
Tip) 서버 내부의 오류가 자동으로 로그로 남게 되고 이 로그를 분석해서 원인을 찾습니다. 매우 중요합니다.
Timeout Exception
- 요청 시간이 초과될 때 발생
- DB, API, 외부 서비스 호출 시 자주 발생
Stack Overflow
- 재귀 호출이 끝없이 반복될 때 발생
void recurse() { recurse(); }
recurse();
재귀호출 : 함수가 자기 자신을 다시 호출하는 것
Tip) 정보처리기사 필기에서 단골 출제, 실기에서는 개념을 알아야 문제풀이가 가능하기에 꼭 외우셔야 합니다
Memory Leak
- 사용 후 메모리를 해제하지 않아 점점 메모리가 부족해지는 현상
➡️ 포인트: 자바는 GC가 있지만, 객체 참조 관리 필수
Deadlock
- 다중 스레드가 서로 자원 점유하며 대기
➡️ 포인트: synchronized, Lock 사용 시 주의
Infinite Loop
- 종료 조건 없는 반복문
- CPU 점유율 급상승, 서버 다운 가능
Tip) 코드로 예시를 들면 while 문에서 break; 를 쓰지 않아 무한 루프에 걸리는 현상
Syntax Error
- 문법 오류
➡️ 포인트: IDE에서 실시간 표시 → 초보자 필수 확인
Logical Error
- 문법은 맞지만, 의도와 다르게 동작
- 예시: if 조건 반대로 작성
if(score > 100) {
System.out.println("Pass");
} // 오류
Null Check
- NPE 방지 필수
if(user != null) {
System.out.println(user.getName());
}
NPE 란? : NullPointerException의 줄임말, 객체가 null인 상태에서 그 객체의 메서드나 필드에 접근할 때 발생하는 오류
Logging
- 에러 위치, 내용 기록
- SLF4J, Log4j 등 활용
Debugging
- IDE 디버거 사용
- 브레이크포인트 → 변수 확인 → 문제 해결
Tip) 디버깅은 필수!
Exception Propagation
- 예외를 상위 메소드로 전달
throws키워드 활용
public class ExceptionPropagationExample {
// 예외가 발생할 수 있는 메서드
static void readFile() throws IOException {
// 파일이 없으면 IOException 발생
throw new IOException("파일을 찾을 수 없습니다.");
}
// readFile()을 호출하지만 예외를 처리하지 않음 → 상위로 전파됨
static void processFile() throws IOException {
readFile(); // 예외가 여기서 발생하지만 처리하지 않음
}
// main()에서 최종적으로 예외를 처리
public static void main(String[] args) {
try {
processFile();
} catch (IOException e) {
System.out.println("⚠ 예외 처리 완료: " + e.getMessage());
}
}
}
Try-with-Resources
- 자원 자동 해제
try(FileReader fr = new FileReader("data.txt")) {
// 작업
} catch(IOException e) {
e.printStackTrace();
}
API Error Handling
- 외부 API 호출 시 상태 코드 확인
- 실패 시 재시도 로직, fallback 구현
Unit Test
- JUnit, PyTest 등으로 코드 검증
- 예외 발생 케이스 포함 테스트 필수
Error Notification
- Sentry, Slack, Email 연동 → 실시간 알림
➡️ 포인트: 장애 대응 속도 향상
Monitoring
- 서버 상태, CPU, 메모리, DB 연결 등 관찰
- Grafana, Prometheus 활용
Troubleshooting Flow
- 1️⃣ 에러 재현
- 2️⃣ 로그 확인
- 3️⃣ 코드 흐름 파악
- 4️⃣ 원인 수정
- 5️⃣ 테스트 및 배포
➡️ 포인트: 체계적 흐름이 문제 해결 시간 단축
마무리
예외 처리와 트러블슈팅은
- 에러를 두려워하지 않고
- 원인을 빠르게 분석하고
- 안정적인 서비스를 만드는 개발자의 필수 역량입니다.
다음 편 예고
“실무에서 바로 쓰는 JSP&MVC 패턴 실무 흐름 완전정복 25선” 으로 이어집니다. 화면과 사용자의 경험까지 고려한 실무 개발 팁을 다룰 예정입니다. 많은 기대 부탁드립니다!
실무를 앞두고 두려우시다면? [필수용어 실무 1편] 비전공자가 실무에서 바로 활용 가능한 데이터 연동 & 서버 흐름 25선