본문 바로가기
2024 웹

class loader 장단점

by concho 2024. 4. 10.

클래스 로더를 이용한 경로 얻기

장점:

  • 플랫폼 독립적: 클래스 로더를 사용하면 운영 체제나 파일 시스템에 구애받지 않고 리소스를 참조할 수 있습니다. 이는 애플리케이션이 다양한 환경에서 실행될 때 특히 유용합니다.
  • 애플리케이션 패키지 내부 참조: 리소스가 애플리케이션의 클래스패스 내에 위치할 경우, 클래스 로더를 사용하여 쉽게 참조할 수 있습니다. 이는 JAR 파일 내부의 리소스를 참조할 때 매우 편리합니다.
  • 보안: 클래스 로더를 사용하면 파일 시스템의 절대 경로를 직접 다루지 않아도 되므로, 보안상의 위험을 줄일 수 있습니다.

단점:

  • 유연성 부족: 클래스 로더를 사용할 때는 리소스가 클래스패스에 있어야 하므로, 외부 디렉토리나 네트워크 상의 리소스를 직접 참조하는 것이 더 어려울 수 있습니다.
  • 경로 문제: 때때로 클래스 로더를 사용하여 리소스를 찾을 때 경로가 올바르지 않으면 리소스를 찾지 못하는 문제가 발생할 수 있습니다. 이는 특히 복잡한 프로젝트 구조에서 문제가 될 수 있습니다.

절대 경로로 지정하기

장점:

  • 유연성: 절대 경로를 사용하면 시스템의 어느 위치에 있는 파일이든지 직접 참조할 수 있습니다. 이는 외부 리소스나 사용자가 지정한 파일을 다룰 때 유용합니다.
  • 간단함: 특정 상황에서는 절대 경로를 사용하는 것이 더 직관적이고 간단할 수 있습니다. 개발자는 파일이 정확히 어디에 있는지 명확하게 알 수 있습니다.

단점:

  • 플랫폼 의존성: 절대 경로는 운영 체제의 파일 시스템 구조에 의존하기 때문에, 코드를 다른 플랫폼으로 이식할 때 문제가 될 수 있습니다.
  • 보안 위험: 사용자의 시스템에 있는 파일을 직접 참조할 때는 보안상의 위험이 있을 수 있습니다. 악의적인 사용자가 중요한 시스템 파일에 접근할 수 있는 경로를 제공할 수 있기 때문입니다.
  • 유지 관리: 애플리케이션이나 리소스의 위치가 변경될 경우, 절대 경로를 사용하는 모든 코드를 찾아서 업데이트해야 합니다. 이는 유지 관리를 더 어렵게 만들 수 있습니다.

ex) 

// 클래스 로더를 사용하여 InputStream 얻기
        InputStream is = S3DAO.class.getResourceAsStream("이름.properties");
        try {
            if (is == null) {
                throw new FileNotFoundException("awsRds.properties file not found");
            }
            properties.load(is);

            String value1 = properties.getProperty("key");
            String value2 = properties.getProperty("key");
            String value3 = properties.getProperty("key");
        } catch (Exception e) {
            e.printStackTrace();
        }

댓글