inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

백엔드 프레임워크 만들기 (개정판)

MVC 아키텍쳐 스타일로 리펙토링 합니다. - MasterController

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

427

dev.taeyeong

작성한 질문수 12

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

답변 1

1

제로

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

 

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

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

코딩 테스트 All-in-One(Java)' 강의 노션 교재 권한문의

0

6

1

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

5

2

중복내용 제보?!

1

11

2

태어난김에 세계일주 시간 초과

0

10

1

커리큘럼 중 정렬 관련 질문

0

12

1

코테 사이트 로그인 불가

0

20

1

여러 파드 환경에서 단일 실행 보장 방식

0

22

2

XAMPP에서 Apache, DB 재기동 시 접속안되는 문제

0

16

1

실습 권한이 없네요··· 이건 ··· 좀··· 401 에러떠요

0

27

3

inheritance startegy 선택시 고려사항

0

18

1

[할인쿠폰] 코테의 바이블[JAVA] 50% 할인 쿠폰 관련

0

22

1

Entity 동등성 비교

0

17

1

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

0

172

1

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

0

201

2

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

0

418

1

m1 맥북 환경 구성 오류

0

642

2

getRequestDispatcher() 질문드립니다.,

0

1599

1

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

0

481

1

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

0

369

1

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

0

2012

1

인텔리제이 컴파일 에러

1

1843

11

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

0

353

4

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

0

380

0

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

0

414

2