inflearn logo
강의

Course

Instructor

Building a Backend Framework (Revised Edition)

Refactoring to MVC architecture style. - MasterController

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

429

devtaeyeong

12 asked

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를 넣어주는 경우에는 잘 동작 했습니다!

oop java aop

Answer 1

1

zero

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

 

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 파일이 아닐경우 복사만 되는 과정입니다.

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

강사님.. 하단 URL에 있었던 코드들 다운 받거나 공유 부탁 드립니다..

0

15

2

노션 접근권

0

22

1

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

19

1

형 이번에 낸 책이랑 강의 내용에 차이가 있어?

1

38

1

형 나 몰래 책내면 모를 줄 알고?

1

32

1

OrderServiceTest 상문주문 테스트 시 update 쿼리 문의

0

23

1

멀티스레드

1

22

2

N+1 관련해서 질문있습니다.

0

39

3

성능 오버헤드

1

29

2

다음 강의는 언제 올려주시는지요?

0

37

2

하단 파일이 열리지 않습니다

0

35

1

ssh-keygen -t rsa -P "" 등 ssh 암호화? 는 하둡에서 필수인가요?

0

28

2

이제 막 자바 문법 배웠는데, 이 강의를 수강해도 괜찮을까요?

0

173

1

섹션 2 의 심화 파트에 대한 (파일올리기) 질문이에요

0

202

2

inflearn08 프로젝트에서 FW_VIEW 테이블이 KEY라는 칼럼이 없다고 해요.

0

418

1

m1 맥북 환경 구성 오류

0

645

2

getRequestDispatcher() 질문드립니다.,

0

1600

1

혹시 강의 관련된 내용을 블로그에 정리해서 올려도 되나요?

0

483

1

inflearn01에서 [APP_ROOT]는 어떻게 처리해야 하나요?

0

372

1

인텔리제이 디버그 모드에서는 어떻게 쓰레드를 볼 수 있나요?

0

2014

1

인텔리제이 컴파일 에러

1

1851

11

프로젝트 생성에 대한 설명을 받을 수 있을까요?

0

353

4

개정판 이전 강의에 있던 질문과 답입니다.

0

381

0

개정 이전 버전 질문도 여기에 올려도 되는지 궁금합니다.

0

415

2