묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
response.sendError와 return ModelAndView 관계
sendError(400) 를 호출했기 때문에 WAS에서 다시 오류 페이지( /error )를 내부 요청한다. 라는 의미는 WAS에서 다시 디스패쳐 서블릿을 통해서 해당 에러를 요청하는 컨트롤러까지 다시 호출된다는 의미로 이해가됩니다. 그런데, sendError를 하면서 return ModelAndView를 하게 되면 이 에러는 resolve되어서 WAS에서는 정상적인 response로 처리된다고 이해를 했습니다. ResponseStatusExceptionResolver.applyStatusAndReason 여기를 보면 이렇게 처리되어있습니다. 하지만 위 글의 첫 문장처럼 sendError를 하게되면 WAS에서는 내부적인 처리를 다시한다고 써있습니다 (dispacterType == ERROR) ModelAndView를 반환해도, sendError를 같이 리턴하게 되면 다시 WAS 내부적으로 호출된다고 이해하면 되나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ExceptionHandler 질문!
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 강의에서 다음과 같은 코드를 설명해 주셨습니다. @ResponseStatus(HttpStatus.BAD_REQUEST)@ExceptionHandler(IllegalArgumentException.class)public ErrorResult illegalExHandler(IllegalArgumentException e){ log.error("[exceptionHandler] ex", e); return new ErrorResult("BAD", e.getMessage());} 여기서 IllegalArgumentException 또는 이를 상속한 자식의 예외가 발생했을때, 등록된 @ExceptionHandler를 통해 위의 핸들러로 예외가 처리되고, WAS 에게는 정상 응답후 끝난다고 하셨습니다. 즉, 이전처럼 WAS에서 다시 서블릿으로 예외를 처리할 컨트롤를 호출하지 않는다 하셨습니다. 이는 HandlerExceptionResolver 활용 에서 알려주셨던 내용입니다. 하지만 의문이 있는데, 위 코드에서는 @ResponseStatus가 추가되어 있습니다. @ResponseStatus는 내부적으로 response.sendError(statusCode, resolvedReason); 를 통해 response 내부에 오류가 발생했었음을 상태로 저장하게 됩니다.(이전 강의에서 알려주셨던 내용) 이후 이를 WAS가 인지하게 되어 기본 에러 페이지인 "/error"로 재요청을 보내야 하는것 아닌가요? 스프링 부트는 response.sendError(...) 가 호출되면 모든 오류는 "/error" 를 호출하게 된다. 라고 알려주신게 생각납니다! 이부분이 어떻게 처리되는 것 인가요?? 조금만 더 알려주시면 감사하겠습니다!!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의에서 43초 부분에 @GetMapping관련하여 질문이 있습니다.
제일 처음 hellospring으로 간단히 코드를 만들었을때 @GetMapping("hello")를 하면 localhost:8080/hello를 치면 그 코드가 실행되는 걸로 기억을 하는데그럼 여기서도 혹시@GetMapping("/members/new")이렇게 해도 되고@GetMapping("members/new")이렇게 입력해도 결과값은 같게 나오나요? 그리고 지금 이 강의에서MemberController와 MemberService둘다 스프링빈에 등록되어 있어서 MemberController생성자에 MemberService를 쓸 수 있는것이 맞나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
redirect시 @RequestParam이 동작을 안합니다. ㅠㅠ
강사님 일단 로그인안한 상태에서 /items에 접근하면 -> 이렇게 쿼리파라미터를 들고 login페이지로 새로 보여주는거까지는 잘됩니다. -> 근데 여기서 /items로 redirect해줄려고 @RequestParam어노테이션을 사용해서 쿼리파라미터를 받아오려고 하면 이렇게 뜨거든요. 그래서 제가 컨트롤러 단에서 페이지를 다른 페이지로 돌리고 로그를 찍어보닌까 @RequestParam으로 redirectURL이라는 쿼리파라미터를 못불러 오는것 같습니다. defalutURL을 넣어서 / 로 해주면 계속 /로가고 저걸 안넣어주면 쿼리파라미터를 찾을 수 없다고 에러가납니다. 이런 경우 어떻게 해결해야 할까요? 강의랑 특별히 다르게 한건 없는데;;;
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
timeTraceAop만들고 SpringApplication 실행하는데 걸린 시간이 안나오네요..
결과창이 이렇게 뜨는데 아무리 고쳐봐도 안되네요.. *************************** APPLICATION FAILED TO START *************************** Description: The bean 'timeTraceAop', defined in class path resource [com/example/hellospring/Service/SpringConfig.class], could not be registered. A bean with that name has already been defined in file [C:\Users\zzang\Downloads\java\hello-spring\build\classes\java\main\com\example\hellospring\aop\TimeTraceAop.class] and overriding is disabled. Action: Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
SpringConfig 빈등록 오류
강사님 코드를 따라 치면서 질문 중복이지만 해결이 안되서 질문드립니다. 1. MemberService의 생성자 확인 MemberRepository로 구현 2. MemoryMemberRepository에 Repository인터페이스 구현 위의 둘다 정확하게 한거같은데 뭐가 문제인지 궁급합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
강사님 질문입니다!!!
현재 loginService에서 DB에 있는 값 체크할 때 if(member.getPassword().equals(password)) { return member; } else { return null; } 이런식으로 비밀번호만 체크하잖아요? 근데 아이디가 틀릴 수도 있으니 아이디도 체크해줄려고 if(member.getLoginId().equals(loginId)) 이런식으로 조건을 더 추가를 해주면 비밀번호만 체크하고 아이디가 다를땐 500에러를 내거든요? java.util.NoSuchElementException: No value present 이런 에러인데요,.,. 아이디랑 비밀번호가 모두 일치해야 성공로직을 돌고 아이디가 없으면 아이디가 없다고 비밀번호가 다르면 비밀번호가 다르다고 이렇게 구성하려면 어떻게 해야할까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
thymeleaf 관련 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
forward에 대해서 궁금합니다.
나중에 가면서 이해되겠지 하고 천천히 돌려보고 자료도 보고했는데 forward 가 되기때문에 렌더링이 마쳐진다는 강사님의 말씀이 이해가지않습니다. forward가 redirect와는 달리 바로 쏴주는거같은데, jsp 에 쏴주게 됨으로써 html이 렌더링 된다는 말씀이신가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
접근지정자의 범위가 궁금합니다.
기본적인 접근지정자의 범위개념은 인지하고있습니다. 예를들어 protected는 해당 패키지외에 상속받은 다른 클레스가 범위인데, 현재 13분 50분경 service 가 protected로 되었습니다. 이때 꼭 저걸 써야되나? 싶은 의문이 들더라구요 그래서 실무에서의 각 접근지정자의 대략적인 범위? 예를들어 private라면 대략 생성자같은 클라이언트가 건들면 안되는곳을 지정한다 처럼요. 부탁드립니다.
-
해결됨실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
service와 controller의 역할에 대한 질문이 있습니다.
=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]service와 controller의 역할에 대한 질문이 있습니다. 강의를 듣고 활용해던 도중 의문점이 생겼습니다. 한참 찾아봤는데 아직도 모르겠어서 질문드립니다. 저의 기존 코드에서는 어떤 컨트롤러의 post 요청에서 A,B,C 엔티티가 반드시 순서대로 생성된후 저장되어야 합니다. (참조관계 떄문에 그렇습니다) 기존에 저는 컨트롤러에서 A 엔티티 생성 -> AService.createA() 한 후 B, C도 동일한 과정을 거칩니다. 이러니까 컨트롤러가 서비스의 역할을 해버린다고 생각했습니다. 그래서 컨트롤러는 그냥 dto를 넘겨주고 서비스에서 위의 작업을 하려했습니다. 그랬더니 몇가지 문제가 생겼습니다. 1. service에서 repository만을 사용하면 코드 중복이 심함(create 할때 복잡한 중복검증 로직이 있는대, 그것까지 전부 다시 해야함) 2. service에서 service를 주입받아서 하자니 순환참조, 나말고 코드 이해도 낮은 다른사람이 손대면 실수할 가능성 높음 등등의 문제가 생김 그래서 그냥 원래대로 냅두려니 controller가 너무 크고 service가 하는게 그냥 repository로 요청 보내기인 경우가 대부분임 그래서 질문은 1. 적절한 방법이 뭘까요? 2. 복잡하고 큰 규모의 서버 코드를 보고싶은데 좋은 예시를 어디서 찾을수 있을까요? 3. 제가 해결방법으로 여러 service를 주입받아서 사용만하는 service를 만들어서 컨트롤러에 있던 코드를 거기로 옮겨서 컨트롤러에 비즈니스 로직이 생기는걸 없에고 순환참조, 코드 중복 등을 제거 해봤는데 이게 맞는건가요? 4. MSA와 상관있는 문제일까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
requestURL 문의드립니다.
response.sendRedirect("/login?requestURL=" + requestURI); 이렇게 되어있는데 requestURL 이라는게 정확히 어떤것을 의미하는걸까요? 코딩을 할 때는 login?requestURL로 하면 원하는 페이지로 이동이 안되고 메인으로 이동되고 login?requestURI로 하면 원하는 페이지로 이동이 되네요.. sendRedirect를 할 때 requestURL로 하는것과 requestURI로 하는것에 차이가 있을까요? requestURL은 전체 주소를 가져오는것이고, requestURI는 도메인을 제외한 경로를 가져오는것으로 알고 있는데 갑자기 햇갈리네요.ㅠㅠ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HandlerExceptionResolver modelAndView반환에 따른 정상흐름
안녕하세요 , 영한님! 강의잘듣고있습니다! 다름아니라 HandlerExceptionResolver modelAndView반환에 따른 정상흐름이 헷갈리는 부분이 있어서 질문남깁니다. HandlerExceptionResolver 를 구현하고, response.sendError(상태코드,에러메시지) return new ModelAndView(); 가 반환되면 정상흐름으로 설명주셨는데, 결국에 response,sendError를 사용하면 was에서 sendError 호출 기록을 확인하고, ErrorPage에 등록된 경로로 재요청하는 것이 아닌가요? 이를 정상흐름이라고 하는지 문의드립니다! 로그를 확인해보니 resolver에서 빈 modelAndView를 반환해도 errorPageController 에 재요청이 들어간것으로 보이는데 제가 잘못이해한것일까요 ㅠ 너무헷갈립니다!! 2021-11-18 20:39:48.287 INFO 15896 --- [nio-9090-exec-3] h.e.resolver.MyHandlerExceptionResolver : IllegalArgumentException resolver to 400 2021-11-18 20:39:48.288 INFO 15896 --- [nio-9090-exec-3] hello.exception.ErrorPageController : errorPage 404
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
session을 DB에 저장하지는 않나요??
session을 생성할 때 public void createSession(Object value, HttpServletResponse response){ //세션 id를 생성하고, 값을 세션에 저장 String sessionId = UUID.randomUUID().toString(); sessionStore.put(sessionId, value); //쿠키 생성 Cookie mySessionCookie = new Cookie(SESSION_COOKIE_NAME, sessionId); response.addCookie(mySessionCookie);} 이 소스에서는 sessionStore에 담아놓았는데.. 실제 운영을 할 때도 저렇게 ConcurrentHashMap에만 담아놓고 사용을 하나요?? 아니면 DB에 아이디와 세션값을 따로 저장을 할까요?? 어차피 새션값은 고유값이기는 하지만 일정 시간이 지나면 변경이 되는 값이라 굳이 DB에 테이블을 만들어서 저장을 하지는 않을 것 같은데 실제로 개발을 하고 운영을 할 때도 저렇게 ConcurrentHashMap에만 담아놓고 끝나는지, 아니면 DB까지 저장이 되는지 궁금합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
intellij 실행이 안됩니다.
강의 정말 잘 듣고있습니다. intellij실행에서 막혔습니다. os는 mac이고, 강사님 따라서 intellij를 처음 다운로드해서 사용해봅니다. Error: Could not find or load main class Caused by: java.lang.ClassNotFoundException: 실행하면 이런에러가 발생하는데 이유가 무엇인가요 ? (main class 중에 제 프로젝트 내용이 나오지 않습니다.)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
SSR CSR 의 차이에 대해서 질문이 있습니다.
강의 내용중, SSR은 서버단에서 동적으로 HTML생성해서 타임리프를 통해서 만들어 웹브라우저로 뿌려주고, CSR은 자바스크립트 요청을 하여 서버단에서 관련 데이터들만 뿌려주고 웹 브라우저 자체에서 자바스크립트를 통해 HTML결과를 렌더링 한다고 인지하였습니다. 그런데 13:50정도의 내용에서는 SSR은 정적인 페이지, CSR은 동적인 페이지에서 사용된다고 하셨습니다. (여기서 질문입니다) 1. 제가 인지한 정적페이지는 정말 사용자마다의 정보없이 모든사용자에게 똑같이 내려줄법한 페이지를 의미하고 동적페이지는 사용자마다 정보다 다르기에 DB를 통해 가져와 동적으로 자용자마다 큰틀은 비슷하지만 정보표시 자체가 다르게 되어서 동적페이지라고 인지하였습니다. 맞나요? 2. 저같은 경우 UI를 비쥬얼 스튜디오 코드 같은곳에서 이쁘게 꾸민후 해당 프론트코드 와 인텔리제이에서 만든 백앤드 코드를 합치고싶은데 이럴땐 어떻게 연동을 해주나요? 3. 또한 저는 개인 프로젝트를 할때 리엑트 같은 CSR기술을 사용해보려고 하는데, 이럴땐 리엑트로 HTML렌더링 웹사이트를 만들어준후, 정보를 작업하는 백엔드쪽은 인텔리제이같은 툴을 이용하여 데이터를 만든후 제가 만든 리엑트 웹사이트에 뿌려주게 되는건가요? 방식이 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인라인 사용일 때에 내추럴탬플릿에 대해서 여쭤봅니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] <script th:inline="javascript"> 1번) var username = [[${user.username}]];//자바스크립트 내추럴 템플릿2번) var username2 = /*[[${user.username}]]*/ "test username"; </script> 위 내용에서 내추럴 템플릿을 쓰는 이유가 궁금합니다.1번)처럼 그냥 넣어줘도 userA가 나올텐데, 굳이/* */ 이렇게 사용하고, 뒤에 "test username" 이라는 값을넣어야 하는 이유가 따로 있는지 궁금 합니다.어차피 인라인 자바스크립트이고결과값이 같은 값이 나올텐데..2번처럼 사용하는 때가 따로 있는지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
MVC 패턴의 탄생 배경과 RequestDispatcher 의 관계
이전 강의에서 서블릿과 jsp 각각의 비효율적인 부분 때문에 MVC 패턴이 등장하게 된 것으로 이해를 했습니다. MVC 패턴이 동작하기 위해서는 RequestDispatcher 를 통하여 jsp 부분으로 forwarding 해주는 기능이 필수적으로 필요해 보이는데요. 이 기능이 서블릿의 단점을 보완하기 위해 서블릿 버전이 업데이트 되면서 MVC 를 지원하기 위해 나중에 나온 기능인지, 원래 부터 있었던 기능인데, "고대 개발자"들이 모르고 비효율적으로 쓰고 있었던 건지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
템플릿을 만들 때 태그가 중복되면 어떻게 되나요?
테스트를 해 보니 전체 공통 레이아웃을 만들어서 사용을 할 때 layoutFile.html 파일에서 title, content를 넘기고 받는 페이지에서 <title>, <content> 테그를 사용해서 레이아웃을 페이지별로 랜더링을 하는데.. 만약 받는 파일에서 section 으로 받아서 적용을 시킬 때 받는쪽 html 에서 section이 여러개 있을 경우에는 section을 사용하는 여러 테그영역 모두가 바뀌어 버리는데 여러개의 section을 사용을 할 경우에는 특정 section중 원하는 section을 선택해서 적용을 할 수 있는 방법이 있을까요??? 그리고 사용할 수 있는 테그는 html에 있는 테그들만 사용을 할 수 있나요?? 아니면 <breadcrumb></breadcrumb> 이런식으로 임의로 만들어서 사용을 할 수도 있는건가요?? 만약 임의로 만들어서 사용을 한다면 html표준에 맞지 않는데.. 전체 레이아웃을 유지한 상태에서 군데군데 바꿔야 하는 부분이 여러군데이고, 겹치는 테그들이 있을 경우에는 어떤식으로 사용을 하는것이 가장 좋을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
jar 파일 실행하는게 잘 되지 않습니다..
https://www.inflearn.com/questions/53961 이 글을 보고 git bash를 설치해서 인텔리제이에 적용하여 사용중입니다, 윈도우 환경에 자바 버전은 11입니다. java -jar 명령어를 사용해서 .jar 파일을 실행하는 과정이 잘 되지가 않습니다. 파일 이름이 demo-0.0.1-SNAPSHOT.jar 라서 java -jar demo-0.0.1-SNAPSHOT.jar 라는 명령어를 계속 입력했는데 아무 반응도 일어나지 않습니다. 뭐가 잘못된 걸까요?