개발/Trouble Shooting

데이터 통신의 첫 번째 관문: IOException 완벽 이해하기

ophelisis 2025. 12. 29. 10:11
반응형

1. ❓ IOException이란 무엇인가요?

IOException은 Input/Output Exception의 약자로, 말 그대로 데이터를 입력받거나 출력하는 과정에서 발생하는 예외를 의미합니다.

자바의 예외 계층 구조에서 Exception을 직접 상속받는 체크드 예외이기 때문에, 반드시 try-catch로 처리하거나 throws로 외부로 던져야 컴파일이 가능합니다. 이는 시스템 외부 자원(파일, 소켓 등)과의 연결은 언제든 실패할 가능성이 있다는 것을 컴파일러가 미리 경고해 주는 것입니다.


2. 🔍 주요 발생 원인과 자식들

IOException은 범위가 매우 넓어서 상황에 따라 더 구체적인 자식 예외들이 발생하곤 합니다.

예외 종류 발생 상황
FileNotFoundException 지정한 경로에 파일이 존재하지 않을 때
EOFException 파일이나 스트림의 끝에 예상보다 빨리 도달했을 때
SocketException 네트워크 연결이 끊기거나 소켓 통신 오류가 날 때
UnknownHostException IP 주소를 알 수 없는 잘못된 호스트 이름을 사용했을 때

3. 🛠️ 실전! IOException 처리하는 법

❌ 나쁜 예시: 단순 무시

Java
 
try {
    FileReader fr = new FileReader("config.txt");
} catch (IOException e) {
    // 아무것도 안 하거나 단순히 printStackTrace만 찍고 끝내기
}

✅ 좋은 예시: Try-with-resources 활용

자바 7부터 도입된 이 방식은 자원 반납(close())을 자동으로 보장하여 IOException 발생 시 자원이 누수되는 것을 막아줍니다.

Java
 
public void readFile(String path) {
    try (BufferedReader br = new BufferedReader(new FileReader(path))) {
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    } catch (IOException e) {
        System.err.println("파일을 읽는 중 오류 발생: " + e.getMessage());
        // 예외 복구 로직이나 커스텀 예외 전환 수행
    }
}

💡 시니어의 조언: '신뢰할 수 없는 환경'에 대비하세요

내 컴퓨터에서는 잘 돌아가던 코드가 서버에 올리면 IOException을 뱉는 경우가 많습니다. 권한 부족, 네트워크 순단, 디스크 용량 부족 등 변수는 무수히 많죠.

중급 개발자라면 단순히 에러를 잡는 데서 그치지 말고, **'재시도 로직(Retry)'**을 넣거나, 사용자에게 **'잠시 후 다시 시도해 주세요'**와 같은 친절한 메시지를 전달하는 등의 예외 복구 시나리오를 설계해야 합니다.

반응형