강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của devtaeyeong
devtaeyeong

câu hỏi đã được viết

Tạo khung phụ trợ (phiên bản sửa đổi)

Refactoring theo phong cách kiến trúc MVC. - MasterController

MasterController에서 ResourceBundle.getBundle() 질문입니다!

Viết

·

411

·

Đã chỉnh sửa

0

안녕하세요 제로님 강의 잘 듣고 있습니다!

다른 분이 질문 남겨주신 것처럼 저도 세팅 후 하나씩 추가해보고 싶어서 그렇게 진행하고 있습니다.

MasterController에서 ResourceBundle init = ResourceBundle.getBundle("com.code5.fw.init");

부분이 어떻게 동작되는 것인지 이해가 잘 가지 않아 질문드립니다.2023-02-15_01-42-47.png제 폴더 구조는 위 사진과 같고 classpath는 아래와 같이 강의에서 나온 것과 크게 다르지 않습니다.

2023-02-15_01-46-35.png컴파일 했을 때, WEB-INF 하위에 클래스만 생기고 init.properties 파일은 생기지 않는 것 같은데 강의에서 어떻게 톰캣이 com.code5.fw.init을 찾을 수 있는 건가요?

제 로컬 환경에서는 Can't find bundle for base name com.code5.fw.init 이라고 오류가 발생하네요.

WEB-INF 하위에 있는 fw 폴더 하위에 init.properties를 넣어주는 경우에는 잘 동작 했습니다!

oopjavaaop

Câu trả lời 1

1

zero님의 프로필 이미지
zero
Người chia sẻ kiến thức

안녕하세요. 제로입니다.

 

ResourceBundle init = ResourceBundle.getBundle("com.code5.fw.init");

동작 과정을 설명드리겠습니다.

 

우리가 프로그램을 개발할 때 사용하는 통합개발환경(IDE, 인텔리제이, 이클립스)은

많은 기능을 제공하고 있는데 그 중 자주 사용하는 기능은 자원관리와 빌드 그리고 실행 기능 입니다.

 

자원관리는 내가 만든 소스코드를 쉽게 찾고 수정할 수 있게 해주고

빌드는 만들어진 소스코드를 컴파일 하고 실행 가능한 위치에 복사시켜주는 기능입니다.

실행은 빌드된 자원을 기준으로 실행하게 되구요.

 

물어보신 내용을 이해하려면 빌드와 실행을 이해하시면 됩니다.

 

자원관리를 통해 init.properties 는 만들어지고 내용이 수정되고

빌드를 통해 init.properties 자원이 특정 위치로 복사됩니다.

인텔리제이 프로젝트 구성을 보면 빌드패스가 있을텐데

빌드 패스는 [프로젝트루트]/WEB-INF/classes 로 설정이 되어 있고

빌드 대상인 init.properties[프로젝트루트]/WEB-INF/classes/com/init.properties 로 복사된다고 보시면 됩니다.

물론 자원관리 기능이 있는 IDE 에 init.properties 자원이 2개가 있으면 불편하기 때문에

IDE 에선 빌드 디렉토리 [프로젝트루트]/WEB-INF/classes 는 조회되지 않습니다.

 

빌드가 잘 되었으니 아래 코드가 실행을 합니다.

ResourceBundle init = ResourceBundle.getBundle("com.code5.fw.init");

IDE 는 프로젝트 구성에 사용된 CLASSPATH 를 찾고 JVM 에 넘겨줍니다.

그리고 JVM 은 ResourceBundle.getBundle("com.code5.fw.init"); 컴파일된 바이트 코드를 이해하고

/com/code5/fw/init.properties 자원을 찾습니다.

자원을 찾기 위해 CLASSPATH 의 정보를 결합 /com/code5/fw/init.properties 를 찾게 되는데

 

이미지로 캡쳐해 주신 디렉토리 중 첫번째(0) 디렉토리 와 /com/code5/fw/init.properties 를 결합 파일을 찾고 init.properties 를 읽게 되는 겁니다.

 

개발자가 가장 고민하는 것 중 하나는 내가 만든 소스코드를 어떻게 하면 잘 찾게 하는 것에 있는데

ResourceBundle 클래스는 이를 위해 클래스패스를 활용한다고 보시면 됩니다.

 

"Can't find bundle " 오류가 발생하면

제일 먼저 클래스패스를 확인하고 클래스 패스 경로에 해당 properties 자원이 있는지 확인하면 됩니다.

 

질문 감사하구요. 도움이 되었길 바랍니다.

 

* 질문을 잘못 이해 했네요. 빌드는 java 파일일경우 컴파일 후 복사돠고 java 파일이 아닐경우 복사만 되는 과정입니다.

클래스는 복사되는데 프로퍼티파일이 없는 경우라 하면 인텔리제이 빌드 설정에서 복사 예외 자원이 있는지 확인해 보시겠어요.

Hình ảnh hồ sơ của devtaeyeong
devtaeyeong

câu hỏi đã được viết

Đặt câu hỏi