item과 itemForm 분리 이유는 아래 링크를 통해 이해하였습니다. https://www.inflearn.com/questions/246930 수업 시간에 이미지 수정에 대해서는 다루지 않았지만 혼자 해보고 싶어서 하는중입니다. [이해하고 있는 플로우] 1. itemForm에 담겨있던 이미지를 통으로 저장하지 않고 item에 이름만 저장한다. 2. item 상세페이지로 리다이렉션을 한다. 3. item 상세페이지에서는 itemId를 사용하여 저장되어 있는 item을 model에 담아 넘겨주고 화면을 구성한다. [질문] 이미지를 수정하려면 UploadFile이 아닌 MultipartFile이 필요하다고 생각합니다. 이미지를 수정할 때는 보통 MultipartFile을 따로 저장하는 작업을 추가하는지 궁금합니다.
<div th :replace =" /fragments/header.html :: fragment-header " ></div> 이렇게 헤더, nav, 사이드바를 대체하고 있는데요 도메인/edit 에서는 잘 적용되던 html,css 들이 도메인/edit/1 등등 이렇게 구체적으로 들어가면 100% 똑같은 뷰를 반환해도 절대 적용이 안됩니다.. 5시간째 이유를 못찾고 있습니다 @GetMapping ( "/project/edit/1" ) public String Edit1 (Model model){ //1번 return "editProject" ; } @GetMapping ( "/edit" ) public String Edit2 (Model model){ //2번 return "editProject" ; } 1번과 2번의 뷰가 각각 1. 2. 이렇게 나타납니다. 똑같은 뷰를 써도 저렇게 나오는 이유가 무엇인가요? Edit1(), Edit2()는 필수부분만 캡처한겁니다 똑같은 뷰를 반환하는데도 url에 따라 css가 다르게 적용 되는 이유가 무엇일까요?? 혼자서해보려했는데 너무 안되서 질문드립니다. --헤더 내부-- <link rel ="stylesheet" href ="bootstrap/css/bootstrap.min.css" > http://localhost:8080 / project/edit/ bootstrap/css/bootstrap.min.css 잘못된 css 경로 -< 이렇게 가네요 http://localhost:8080/bootstrap/css/bootstrap.min.css 가야하는 css 경로 빨간색 경로가 안붙게 하려면 어떻게 하나요?
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 영한님 안녕하세요. 먼저 항상 이렇게 훌륭한 강의 만들어주셔서 정말 감사드립니다. 강의 중에 BindingResult 인터페이스의 구현체로 BeanPropertyBindingResult 클래스가 들어온다고 말씀해주셨는데, BindingResult 인터페이스의 구현체 종류가 많이 있는 상태에서 어떤 구현체가 들어올지 어떻게 알 수 있는지 궁금합니다. + 여러개의 구현체를 사용해야하는 상황을 위해서 많은 클래스들을 전부 미리 빈으로 등록을 하는 것인지, 아니면 default 구현체를 autoconfiguration으로 설정해두고, 필요에 따라 bean을 추가적으로 (condition..?) 생성해내는지도 궁금합니다 + spring.factories 파일을 따라가서 springboot가 지원해주는 autoconfiguration을 따라가면서 bean으로 등록하는 위치를 찾아보는 게 맞는 방법인가요? (타고타고 가다보니 너무 파일이 방대해져서 아직 찾지못했습니다 ㅠㅠ)
웹페이지 만들기 부분을 수강하면서 상품 도메인 개발(Item - 상품객체) 부분에서 도메인이라는것이 다른 개념들과 헷갈립니다 도메인, 파라미터, DTO 이 3가지 개념이 지금 혼동되는데 설명해주실수 있을까요? 도메인을 파라미터 아니면 dto와 같은 개념으로 봐도 될까요?
안녕하세요. 서블릿의 개념과 역할을 대체로 이해하였으나 기본적인 동작 원리에 대해 궁금점이 생겨 질문 남깁니다. 아래와 같은 흐름으로 이해하였는데, 제가 이해한 흐름이 정확한 것인지 궁금합니다. 1. @webServlet 어노테이션으로 서블릿을 등록해주면, @ServletComponentScan으로 서블릿이 서블릿 컨테이너에 자동 등록 된다. (싱글톤으로 서블릿 객체를 생성하고 관리한다.) 2. HTTP 요청이 들어오면, urlpatterns과 매칭되는 서블릿 객체를 찾아 호출한다. 3. 호출된 서블릿 객체는 request 객체를 개발자가 사용하기 쉽게 변환하고(여기서 또 어떤 메서드가 실행되고) 4. service() 메서드를 호출한다. 여기에 원하는 request, response 값을 조작할 수 있다.
언젠가부터 대부분 기업들이 리액트, 뷰 같은 프론트엔드 프레임워크를 이용하면서 백엔드는 대부분 rest api 기반의 json을 던져주는 코드를 주로 만드는걸로 알고있는데요! 현재 강의에서 보여주는 템플릿 엔진을 이용한 타임리프 같은 서버사이드에서 html을 처리하는 것들을 아직도 많이 사용하는지 궁금합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 스프링 부트가 ErrorPage를 자동으로 등록해 놓는데, 이때 어떤 예외가 발생하던 기본적으로 /error 라는 경로로 내부호출 되도록 ErrorPage를 등록해 놓는다고 설명해주셨습니다. 그러면 예외 종류 관계없이 예외가 발생하면 내부적으로 /error라는 경로로 재요청 되는데, 그 요청을 BasicErrorController가 받아서, 발생한 예외의 상태코드에 따라서 예외 화면을 보여주는게 맞는지 궁금합니다.
안녕하세요 /converter/edit 에서 제출 버튼을 클릭해서 @PostMapping("/converter/edit") public String converterEdit(@ModelAttribute Form form, Model model) { IpPort ipPort = form.getIpPort(); model.addAttribute("ipPort", ipPort); return "converter-view"; } 위 부분이 실행되기 전에 첫줄(IpPort ipPort = form.getIpPort();)에 break 걸고보면 SpringToIpPortConverter : convert source = 127.0.0.1:8080 위 로그가 연속으로 2개 찍힙니다. 하나는 "127.0.0.1:8080" 의 값이 ModelAttribute에 의해 Form 클래스의 IpPort로 컨버전 되어서 찍혔다고 보면 나머지 하나는 왜 찍혔는지 이해가 안 갑니다. 강의 12:38 에도 보면 같은 로그가 마지막에 2개 찍혀 있네요
안녕하세요 강의를 듣다 ServletRequest에 대해 궁금한 점이 생겨 질문드립니다! ServletRequest, ServletRequest를 보니 인터페이스 였습니다. 그 후 HttpServletRequest도 보니 ServletRequest를 상속받고 있지만 이 또한 interface 였습니다. 혹시 구현은 어디서 하길래 인터페이스로 선언이 되어 있는 것인가요??
안녕하세요. 항상 좋은 강의 감사드립니다. 다름아니라 국제화에 대해서 궁금한게 있는데, 제가 m1 맥북에어를 사용중이고 시스템 언어를 영어로 사용중입니다. 그런 상태에서 messages.properties에는 한글로, messages_en.properties로는 영어로 설정되어있습니다. 크롬에서는 언어 순위를 한글로 두었습니다. 이런 상태지만, 애플리케이션 실행하여 확인하면 계속해서 messages_en 파일을 갖고오는 거 같습니다. 아래 테스트 코드에서도 Locale이 한국임에도 에러가 발생합니다..! @Test void defaultKR () { assertThat ( ms . getMessage ( "hello" , null , Locale . KOREA)) . isEqualTo ( " 안녕 " ) ; assertThat ( ms . getMessage ( "hello" , null , Locale . KOREA)) . isEqualTo ( " 안녕 " ) ; } Expecting: <"hello"> to be equal to: <"안녕"> but was not. Expected :"안녕" Actual :"hello" 이상하여 한 번 맥북의 시스템 언어를 한글로 바꾸었을때는 한글로 잘 출력은 되었다만, 다시 영어로 바꾸면 크롬의 언어 우선순위와 상관없이 영어가 출력됩니다 ㅠㅠ (개발자 도구에서 accept language가 ko가 1순위인것도 확인했습니다.) 물론 위에서 했던 것처럼 맥북의 시스템 언어를 한글로 바꿔도 되겠지만, 영어인 상태에서도 한글이 정상 출력됨을 보고 싶어서 자문을 구하고 싶습니다. 감사합니다!
안녕하세요 강의 잘 듣고 있습니다. 실무에서는 ModelAttribute와 RequestBody어떤 객체를 주로 사용하나요? 제 생각은 RequestBody를 사용하면 요청을 조작해서 보내는 것을 차단하기에 더 좋을 것 같아서 RequestBody를 사용할 것 같은데 맞나요? 아니면 requestParam과 Body를 한꺼번에 처리할 수 있는 ModelAttribute를 더 자주 사용할까요? 더 부가적인 이유가 있다면 알고싶습니다! 감사합니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예) [질문 내용] 처음으로 mac 환경에서 프로젝트를 열려고 하는데 이 오류 때문에 진행을 못하고 있네요.. 프로젝트 파일을 다시 삭제하고 열어봐도 pc를 재부팅하고 다시 시작해도 똑같은 오류가 계속 발생합니다. 구글링에 검색해봐도 마땅한 해결방안이 나오지 않아 답답하네요ㅜㅜ 프로젝트 구성도 이상합니다.. 파일을 열때마다 "._java"와 같은 텍스트 파일이 생겨요
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 네 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 네 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 마지막 부분 10:45 시간에 질문 있습니다. qqqq를 넘기면 컨트롤러에서 타입에러로 자동으로 필드에러를 만들텐데요~ 이후에 어쩔수없이 item.getPrice() 가 null 이니깐 2번째 if 문안에서 addError 메서드로 저희가 선언한 필드에러를 추가하는 것 까지는 이해했습니다. 근데 저희가 선언한 필드에러는 bindingFailure 는 false로, 타입에러?(바인딩실패)는 아니다라고 지정했기 때문에 qqqq와 같은 문자를 넘기면 해당 필드에러는 무시될거라고 생각했습니다 그런데 저희가 추가한 필드에러의 디폴트 메세지가 출력되네요 "가격은 1,000~1,000,000 까지 허용합니다" (bindingFailure가 false이고, 발생한 에러는 타입에러라서 메시지가 표시 안될줄 알았습니다) 그냥 bindingFailure 에 상관없이 필드에러가 추가되었다면 타임리프가 다 처리해버리는 것 인가요 ?
안녕하세요 AOP 중 궁금한점이 생겨 질문드립니다! [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 질문을 쭉 봤는데 해당 내용이 없었습니다. 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 네 [질문 내용] 이부분에서 찍어보면 다음과 같이 EnhancedBySpring~ 이부분이 스프링이 AOP 를 처리하기 위해 프록시로 복제된 객체로, AOP를 사용하게되면 사용된다는 내용으로 이해했습니다. 강의 자료에 보면, 다음과 같은 내용이 있는데, AOP와 관련된 코드들 (예제에서는 시간을 측정하는 코드, 시간측정하는 클래스를 주입하는 코드)을 제거 한 후에도 MemberController 에서 Service 클래스를 sout 으로 찍어볼 경우, 똑같이 EnhancedBySpring~ 하는 객체가 찍혀 나옵니다. 이 부분이 위에 AOP 적용 전 그림 에서 진짜 객체들만 사용한다는 위 그림과 과 맞지 않는데, 그렇다면 Spring 에서는 AOP 관련된 코드가 없어도 자동적으로 AOP를 위해 프록시 객체를 사용하도록 강제(?) 처리 되는건지 궁금합니다.
webapp 폴더 추가 후 index.html 을 생성 후 서버를 기동시키고 접속하였을 때 Whitelabel Error Page 가 발생 할 경우 입니다. Intellij 에서 빈 모듈( spring-mvc ) 생성 후 빈 모듈 안에서 새로운 모듈( servlet )을 생성하였을 경우 index.html 에 접속이 되지 않는 것 같습니다. 실행 후 Tomcat 의 로그에서도 WelcomePage 관련 로그가 출력되지 않았으며 http://localhost:8080 과 http:localhost:8080/index.html 에 접속할 수 없었습니다. 이후 프로젝트를 종료하고 빈 모듈( spring-mvc )이 아닌 빈 모듈 안에서 생성한 새로운 모듈( servlet )의 build.gradle 을 통해 프로젝트를 새로 연 후 서버를 기동하면 WelcomePage 관련 로그가 출력 되며 http://localhost:8080 에 문제없이 index.html 에 접속할 수 있었습니다. 원인은 아직 잘 모르겠지만 멀티 모듈 또는 빈 모듈에서 새로운 모듈을 생성한 경우 Intellij 에서 webapp 을 찾지 못하는것 같습니다.
안녕하세요, 수강 중에 궁금한 점이 있어 질문드립니다. :) 스프링 부트 프로젝트를 ./gradlew build 명령어로 빌드를 하고 나면, hello-plain.jar와 hello.jar의 두 개의 jar 파일이 생성됩니다. 구글링을 해 본 결과, 스프링 부트에서 빌드하면 Plain Archive도 함께 만들어지며 이를 방지하고 싶으면 build.gradle에 별도의 설정을 하면 되는 것, 그리고 Plain Archive가 무엇인지도 알게 되었습니다. 그런데 Plain Archive는 어디에 쓰려고 만들어진 건지, 목적이 무엇인지를 모르겠습니다. 의존성이 포함되지 않은 파일이 왜 필요한 건가요?