게시글
질문&답변
2024.11.07
이제 막 자바 문법 배웠는데, 이 강의를 수강해도 괜찮을까요?
안녕하세요. 제로입니다.서버개발을 이야기 하셨는데 입력과 처리 그리고 출력이 있는 프로그램을 의미하시는거죠? 스프링은 공통기능이 잘 만들어져 있고 그 공통기능을 활용해 프로그램을 쉽게 만들 수 있는 프레임워크 입니다. 따라서 스프링의 개념, 스프링을 활용한 쉬운 프로그램 정도를 이해하면 되고응용하고 디버그 하면서 프로그램을 만드시는 걸 추천합니다. 객체지향은 내가 만든 소스코드를 다른사람이 쉽게 사용할 수 있게 해주는 개념입니다.상속, 다형성, 캡슐화, 정보은닉 그리고 이런 기법을 활용해 재사용이 쉬운 코드를 만들게 되는거죠. 하지만 입력과 처리 출력을 가진 프로그램이 반드시 객체지향적일 필요는 없습니다.쉽고 직관적인 절차지향적인 코드로 기능을 빠르게 구현 한 뒤재사용이 필요할때 객체지향적인 코드로 리펙토링 하는걸 추천합니다. 따라서 질문하신 분의 답변을 정리하면스프링은 개념정도만 알아두고스프링 환경에서 디버그가 가능한 샘플 프로그램을 확보 한 뒤 이를 응용해 절차지향적으로 프로그램을 만들어 보세요.그리고 필요할 때 객체지향적으로 리펙토링 하는 과정을 경험하시길 바랍니다. 그 다음 제 강의를 통해 낮은 결합도 높은 응집도를 가진 재사용이 쉬운 코드를 만드는 법을 배우시는걸 추천합니다.
- 0
- 1
- 20
질문&답변
2024.09.29
섹션 2 의 심화 파트에 대한 (파일올리기) 질문이에요
안녕하세요. 제로입니다.심화과정의 코드는 8주차 소스코드를 기준으로 설명합니다.https://github.com/zeroshift01/code5/tree/master/inflearn08 심화 과정은7주차 까지 기본 과정 학습 후필요한 것 만 선택 수깅할 수 있도록 구성했습니다. 감사합니다.
- 0
- 2
- 34
질문&답변
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
- 315
질문&답변
2023.02.12
m1 맥북 환경 구성 오류
혹시 사용 가능한 관계형 dbms 있으신가요?sqlite 특성때문에 M1 환경애서 제약이 있어사용가능한 RDBMS 가 있다면 그것에 맞게 환경 구성해 드리겠습니다.특정 was, 특정 dbms 에 의존적인(그 기능을 사용해야만) 프레임웍은 가치가 없는데해당부분에 대해 확장성을 보여 드리는 것도도움이 될 것 같습니다.
- 0
- 2
- 454
질문&답변
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.4K
질문&답변
2022.05.22
혹시 강의 관련된 내용을 블로그에 정리해서 올려도 되나요?
안녕하세요. 제로입니다. CODE5 프레임워크의 소스코드는 MIT 라이센스를 따릅니다.따라서 출처만 적어주시면 소스코드를 그대로 사용해도 무방합니다.단 강의 컨텐츠의 저작권은 인프런에 있기 때문에캡쳐 등 내용을 그대로 올리시면 안되지만이해한 내용을 정리하는 2차 가공 컨텐츠는 괜찮습니다.머리속에 이해하는 지식 보다꺼내 남에게 설명하는 지식이 좀 더 가치가 있다고 믿기에만드는 블로그 응원하겠습니다.감사합니다.
- 0
- 1
- 350
질문&답변
2022.05.16
인텔리제이 디버그 모드에서는 어떻게 쓰레드를 볼 수 있나요?
안녕하세요. 제로입니다.인텔리제이 특성인지는 모르겠지만디버그 모드에서 브레이크 포인트를 잡아야지 쓰레드 항목이 보입니다. 아래처럼MasterController.java 클래스의 service 메소드에 디버를 설정 한 뒤RunCode5 를 디버그 모드로 실행합니다. (사진) 이후 브라우저를 열어 서비스를 접속 하면 디버그 포인트가 잡히는데http://localhost:18080/waf/callList?findStr=abcd (사진) Debugger 아래 Frames 를 클릭하면 쓰레드 항목을 볼 수 있습니다. (사진)
- 0
- 1
- 1.6K
질문&답변
2022.05.16
inflearn01에서 [APP_ROOT]는 어떻게 처리해야 하나요?
안녕하세요. 제로입니다. InitYaml.java 클래스에서 초기 경로를 가져오는 로직에 문제가 있었습니다. 관련 코드는 수정해 커밋하였고 자원을 pull 한 뒤 다시 실행해주시면 됩니다.추가로 이야기 드리면 init.yaml 파일을 찾고 그 파일의 절대경로를 기준으로 APP_ROOT 위치를 알아 난뒤[APP_ROOT] 문자열 을 교체하는데 java 코드가 잘못되어 [WEB_APP_ROOT] 치환되지 못해 생긴 문제입니다. 주말 소중한 시간 사용 강의를 들으셨을텐데 불편을 드려 죄송합니다.
- 0
- 1
- 251
질문&답변
2022.02.02
인텔리제이 컴파일 에러
해결되었다니 다행입니다. 저도 이클립스만 쓰다가 강의를 위해 처음 인텔리제이를 사용했었는데 익숙하지 않아 생긴 막막함이 있더라구요. 질문하신 분이 어떤 기분인지 이해가 됩니다. ^^ 학습중 문제가 있거나 궁금한게 있으면 올려주세요. 도움이 되어 드리겠습니다.
- 1
- 11
- 1.5K
질문&답변
2022.02.02
인텔리제이 컴파일 에러
해결되었다니 다행이네요. 추가로 이야기 드리면 각 모듈(이클립스일 경우 프로젝트)에서 사용하는 라이브러리는 각 디렉토리에 복사되어 있습니다. 이렇게 한 이유는 inflearn01 부터 08 까지 독립적으로 실행한다는 뜻이었구요. 문제 해결의 내용을 추측해 보면 제가 의도한 대로 모듈에서 사용하는 외부기능(jar)을 잘 지정하신 것 같습미다. ^^
- 1
- 11
- 1.5K