게시글
질문&답변
2023.02.15
MasterController에서 ResourceBundle.getBundle() 질문입니다!
안녕하세요. 제로입니다. 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 파일이 아닐경우 복사만 되는 과정입니다. 클래스는 복사되는데 프로퍼티파일이 없는 경우라 하면 인텔리제이 빌드 설정에서 복사 예외 자원이 있는지 확인해 보시겠어요.
- 0
- 1
- 218
질문&답변
2023.02.12
m1 맥북 환경 구성 오류
혹시 사용 가능한 관계형 dbms 있으신가요? sqlite 특성때문에 M1 환경애서 제약이 있어 사용가능한 RDBMS 가 있다면 그것에 맞게 환경 구성해 드리겠습니다. 특정 was, 특정 dbms 에 의존적인(그 기능을 사용해야만) 프레임웍은 가치가 없는데 해당부분에 대해 확장성을 보여 드리는 것도 도움이 될 것 같습니다.
- 0
- 2
- 349
질문&답변
2022.09.15
getRequestDispatcher() 질문드립니다.,
안녕하세요. 제로입니다. 챕텨 1 MasterController.java 를 보면 아래 코드가 있습니다. 그걸 기준으로 설명드릴께요. RequestDispatcher dispatcher = request.getRequestDispatcher(jspUrl); dispatcher.forward(request, response); - getRequestDispatcher() 가 포워딩 역할인지? 코드를 그대로 읽어보면 request 객체에 있는 getRequestDispatcher() 기능을 통해 dispatcher 객체를 가져온 뒤 dispatcher 객체에 있는 forward() 기능을 사용함을 알 수 있습니다. 그렇기 때문에 getRequestDispatcher() 는 포워딩을 하는게 아닌 RequestDispatcher 클래스로 포장된(형태가 정해진) dispatcher 객체를 얻을 수 있는 기능입니다. 실제 포워딩은 dispatcher 객체에 있는 forward() 기능을 통해 합니다. - 다른 서블릿에 넘기는지 dispatcher.forward(request, response); 기능은 출력을 다른 서블릿으로 넘기는게 아닙니다. request, response 객체를 같은걸 쓰기 때문입니다. - 객체바인딩이라고 봐도 되는지 이후 강의때 IOC 와 DI 를 설명할텐데 거기에는 동적으로 클래스를 로드 하고 객체를 생성하기 위한 생성자(초기값)을 개발자의 코드가 아닌 데이터로 실행하는 걸 볼 수 있습니다. 좀 어렵게 이야기 했는데 객체바인딩은 개발자의 코드가 아닌 데이터로 객체를 만들어내는 과정이라 볼 수 있고 그렇게 보면 RequestDispatcher dispatcher = request.getRequestDispatcher(jspUrl) 코드를 통해 만들어진 dispatcher 객체는 객체바인딩을 통해 만들어 졌다고 볼 수 있습니다. jspUrl 이 데이터 역할을 합니다. 질문 주셔서 감사합니다.
- 0
- 1
- 1.1K
질문&답변
2022.05.22
혹시 강의 관련된 내용을 블로그에 정리해서 올려도 되나요?
안녕하세요. 제로입니다. CODE5 프레임워크의 소스코드는 MIT 라이센스를 따릅니다. 따라서 출처만 적어주시면 소스코드를 그대로 사용해도 무방합니다. 단 강의 컨텐츠의 저작권은 인프런에 있기 때문에 캡쳐 등 내용을 그대로 올리시면 안되지만 이해한 내용을 정리하는 2차 가공 컨텐츠는 괜찮습니다. 머리속에 이해하는 지식 보다 꺼내 남에게 설명하는 지식이 좀 더 가치가 있다고 믿기에 만드는 블로그 응원하겠습니다. 감사합니다.
- 0
- 1
- 273
질문&답변
2022.05.16
인텔리제이 디버그 모드에서는 어떻게 쓰레드를 볼 수 있나요?
안녕하세요. 제로입니다. 인텔리제이 특성인지는 모르겠지만 디버그 모드에서 브레이크 포인트를 잡아야지 쓰레드 항목이 보입니다. 아래처럼 MasterController.java 클래스의 service 메소드에 디버를 설정 한 뒤 RunCode5 를 디버그 모드로 실행합니다. (사진) 이후 브라우저를 열어 서비스를 접속 하면 디버그 포인트가 잡히는데 http://localhost:18080/waf/callList?findStr=abcd (사진) Debugger 아래 Frames 를 클릭하면 쓰레드 항목을 볼 수 있습니다. (사진)
- 0
- 1
- 1.1K
질문&답변
2022.05.16
inflearn01에서 [APP_ROOT]는 어떻게 처리해야 하나요?
안녕하세요. 제로입니다. InitYaml.java 클래스에서 초기 경로를 가져오는 로직에 문제가 있었습니다. 관련 코드는 수정해 커밋하였고 자원을 pull 한 뒤 다시 실행해주시면 됩니다. 추가로 이야기 드리면 init.yaml 파일을 찾고 그 파일의 절대경로를 기준으로 APP_ROOT 위치를 알아 난뒤 [APP_ROOT] 문자열 을 교체하는데 java 코드가 잘못되어 [WEB_APP_ROOT] 치환되지 못해 생긴 문제입니다. 주말 소중한 시간 사용 강의를 들으셨을텐데 불편을 드려 죄송합니다.
- 0
- 1
- 167
질문&답변
2022.02.02
인텔리제이 컴파일 에러
해결되었다니 다행입니다. 저도 이클립스만 쓰다가 강의를 위해 처음 인텔리제이를 사용했었는데 익숙하지 않아 생긴 막막함이 있더라구요. 질문하신 분이 어떤 기분인지 이해가 됩니다. ^^ 학습중 문제가 있거나 궁금한게 있으면 올려주세요. 도움이 되어 드리겠습니다.
- 1
- 11
- 1.2K
질문&답변
2022.02.02
인텔리제이 컴파일 에러
해결되었다니 다행이네요. 추가로 이야기 드리면 각 모듈(이클립스일 경우 프로젝트)에서 사용하는 라이브러리는 각 디렉토리에 복사되어 있습니다. 이렇게 한 이유는 inflearn01 부터 08 까지 독립적으로 실행한다는 뜻이었구요. 문제 해결의 내용을 추측해 보면 제가 의도한 대로 모듈에서 사용하는 외부기능(jar)을 잘 지정하신 것 같습미다. ^^
- 1
- 11
- 1.2K
질문&답변
2022.02.02
인텔리제이 컴파일 에러
디렉토리에 한글이 포함되어 있나요?
- 1
- 11
- 1.2K
질문&답변
2022.02.02
인텔리제이 컴파일 에러
안녕하세요. 제로입니다. 올려주신 내용을 보니 기존 junit 라이브러리와 충돌이 생긴 문제 같구요. 인텔리제이 같은 경우 라이브러리 경로 오류일때 전체 빌드가 안되는 문제가 있어 해결해야 합니다. 일단 초반 강의는 junit 을 사용하지 않기 때문에 빌드가 된다면 강의를 시작하시겠어요. 해당 문제는 제가 세부적으로 확인 후 해결방법을 올리겠습미다.
- 1
- 11
- 1.2K