월 16,940원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
실무에서 타임리프에 관해서
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]백엔드 개발자가 타임리프를 공부하는 이유가 혼자서 뭘 만들어볼때 빠르게 웹페이지를 확인해보면서 개발하려고 하는 거고 실무에서는 보통 프론트엔트쪽에서 react같은걸로 서비스를 만드는거 맞아요? 백엔드개발자와 프론트엔드개발자의 역할에 대해 약간 헷갈려서 여쭤봅니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MyHandlerExceptionResolver 등록 관련 질문
MyHandlerExceptionResolver 클레스를 등록하기 위해서 WebConfig 클래스에서 해당 메서드를 오버라이딩 해주었는데 그냥 MyHandlerExceptionResolver 에 @Component 애노테이션을 사용해서 스프링 빈으로 등록 시켜줘면 안되는건가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 업로드 강의 수강 도중 오류가 발생합니다.
안녕하세요 파일 업로드 강의 중 '서블릿과 파일 업로드1'강의 첫번째 실행에서 파일 제출을 하면 Error parsing HTTP request header 오류가 뜹니다. 제가 뭔가 놓친 부분이 있는걸까요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Notification 패턴과 BindingResult 유사점
안녕하세요. BindingResult에 관해서 질문드리려고 합니다.<실전 자바 소프트웨어 개발> 라울-게이브리얼 우르마, 리처드 워버턴 책을 보던 중에 Notification 패턴이란 걸 알게 되었습니다. 이게 마틴 파울러가 정립한 개념이라고 하는데 BindingResult가 동작하는 방식과 똑같더라고요. 혹시 BindingResult가 Notification 패턴을 적용한 사례인가요?제가 제 블로그에 이러한 가정에서 글을 썼는데요. 질문 답변에 따라 글을 지울지 말지 정해야 합니다. 헤헤https://griotold.tistory.com/3
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpSession 질문
[질문 내용]로그인 성공 시 HttpSession Session = request.getSession()를 호출해서 신규 세션을 생성하고 JsessionID로 사용자를 식별하는것으로이해했습니다. 여기서 궁금한것이 1. 세션 데이터는 공유 데이터로 서버 메모리 어딘가에 저장이 돼서 request.getSession() 으로 접근하는건가요? (a라는 사용자가 로그인컨트롤러를 호출하고 다른 컨트롤러에서 request.getsession을 하면 로그인 컨트롤러에서 반환하는 httpsession객체와 다른 컨틀롤러에서 반환하는 httpsession객체가 같은 것인지 다른것인지에 관한 메커니즘이 궁금합니다)1번이 아니라면 컨트롤러에 접근할 때 session 객체가 계속 생성되는데 이걸 어떻게 저장하고 클라이언트를 구분하는지 메커니즘이 궁금합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
게시물의 신고 횟수를 추가한다면 post일까요 put일까요
게시물의 신고 횟수가 10이 되면 자동으로 삭제하는 로직을 만들고 싶은데요. 신고 사유와 확인 버튼을 누르면 게시물의 신고 횟수가 +1이 되는 로직입니다. 한 번 신고한 유저는 다시 신고를 할 수 없구요 이럴땐 postmapping 인가요 putmapping 인가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Mapping 할 URL을 만들 때 질문입니다.
예를 들어 게시글에 관련된 CRUD를 만들 때/board/{식별키}이런 식으로 만들고 method로 구분 하고 있는데요.이 게시글 식별키는 PK기 때문에 외부로 노출하고 싶지 않은데 따로 방법이 있을까요?겉으로 보기에는 /board 의 URL 이지만 내부적으로 이 게시글들을 구분하는 방법이 있을까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MVC2 완강 후, JPA강의 듣기 전에 간단한 프로젝트를 해볼까합니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]아직 실력이 부족해서 대단한 웹사이트를 만들어보려는건 아니지만,, 복습겸 JPA 강의를 듣기 전에 MVC1,2편에서 배웠던 기술들을 바탕으로 블로그같은 웹사이트를 한 번 혼자 개발 해보려고합니다. 저에겐 첫 프로젝트이기도 하고, 혼자 진행하려고 하다보니 사실 정말 막막한데요..ㅠㅠ 특히 아직 1회독이라 그런지 영한 강사님이 설명해주셨던 기능들이 기억이 안날 때도 있고 응용이 쉽지 않은 것 같습니다.첫 프로젝트는 최대한 배웠던 코드들과 수업 자료를 참고하고 읽어보면서 완성하는데에 의미를 두어야하는걸까요?아니면 오래 걸리더라도 수업 자료 참고하지 않고 혼자 개발하는데에 의미를 두어야하는걸까요?수업 자료를 참고하고, 기억 안나는 기능들을 한 번 더 정리하면서 프로젝트를 만들어야겠다고 생각했었는데, 생각해보니 저만 이렇게 기억을 못하고 응용을 못하고있는거 아닌가 싶고, 이미 그 전에 작성했던 코드를 아무리 바꿔서 작성한다고 해도 참고하여 코드를 작성하면 실력이 늘어날까? 그냥 보고치는게 되지않을까 싶어서요..ㅠㅠ 보고치는게 실력이 늘지도 잘 모르겠어서,, 그러면 프로젝트가 아닌 한 번 더 강의를 보고 2회독을 하는게 맞는건지..ㅠㅠ 어느 방향으로 가야할 지 모르겠습니다. 조언 부탁드립니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
오류 html 페이지 응답 시 상태 코드 지정하는 방법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]개발자는 오류 html 페이지 응답으로 예외를 처리할 때 /error/4xx.html , /error/500.html 와 같은 경로에 html 페이지를 생성하기만 하면 된다고 이해하였습니다. 그러면 예외가 발생했을 경우 오류 html 페이지 응답으로 예외를 처리하고자 할 때, 발생된 예외에 대한 상태 코드를 지정해줘야 지정된 위치로 올바른 상태 코드에 대한 오류 페이지가 출력되므로, 상태 코드를 지정하는 방법은 HandlerExceptionResolver을 구현하여 오버라이딩 한 resolveException() 내부에 response.sendError()로 상태 코드를 지정하고 빈 ModelAndView 객체를 리턴하는 게 최선일까요?? 아니면 다른 상태 코드 지정 방법이 또 있을까요?? 물론 @ExceptionHandler을 통하여 @ResponseStatus로 상태 코드를 지정해서 구현할 수도 있을 것 같긴 하지만 선생님께서 @ExceptionHandler는 API 예외 처리일 때 쓰는 것이 좋다고 하셔서 질문드립니다 !
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
GetMapping에대해서 질문
엄청 기본적인건데...이전 강의노트를 찾아봐도 내용 정리가 안되서 질문합니다.@Controller @RequestMapping("/basic") public class BasicController { @GetMapping("text-basic") public String textBasic(Model model) { model.addAttribute("data", "Hello Spring!"); return "basic/text-basic"; } @GetMapping("text-unescaped") public String textUnescape(Model model) { model.addAttribute("data", "Hello <b>Spring!</b>"); return "basic/text-unescaped"; } }여기서 RequestMapping 이 basic 폴더를 매핑해주는거고GetMapping 은 /basic/ 에 있는 파일?과 매핑해주는게 맞나요?? 추가적으로 return 하는게 view 인걸로 아는데 model 값을 추가해서 전달해주기 위해 view 를 리턴하는게 맞는지 질문드립니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
template에 파일을 추가하는 이유
index.html 은 static 경로에 두고, 그외에 추가하는 파일은 template 경로에 두는데 무슨 차이가 있는지 알고 싶습니다. 왜 template 경로에 두어야 또 파일을 읽어가는 것인지 궁금해서 질문 드립니다. 매우 기초적인 거같은데 까먹어서 질문드려요...
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 타임아웃 관련 질문드립니다
안녕하세요 세션 타임아웃 설정 파트를 공부하다 궁금한 점이 생겨 질문드립니다.강의에서는 HTTP는 비연결성이어서 서버 입장에서는 사용자가 웹 브라우저를 종료한 것인지 알기 어려움으로 세션 종료시점을 정해줘야 한다고 이해했는데요그런데 일반적으로 네이버 같은 특정 사이트에 로그인하고 브라우저를 껐다 바로 켜면 로그아웃이 되어있는데 이런 경우엔 어떤 매커니즘으로 세션 데이터가 삭제되는지 궁금해 질문드립니다
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터셉터의 afterCompletion에서는 예외를 처리해주진 못하나요?
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]afterCompletion 구현 코드 결과 화면사진과 같이 afterCompletion()에서 예외 처리 부분에 response.sendError(200)을 해도 예외가 500으로 나가는 걸 확인할 수 있었습니다.@ControllerAdvice 어노테이션을 지정한 클래스 및 제가 구현한 ExceptionResolver들은 전부 주석처리 하여서 HandlerExceptionResolver 단계에서 예외 처리 실패했으니 500 Internal Error이 나가는 것은 맞지만,최종적인 단계에서 필터링 해주는 인터셉터인 afterCompletion()에서 sendError()을 지정하면 WAS는 지정된 상태 코드의 예외 처리를 해줘야하지 않나요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
file.dir에 계속 null값이 들어옵니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]사진이 저장되지않아 확인해보니 fileDir에 계속 null값이 들어와 fullPath가 제대로 생성되지 않아서 라는 걸 알게 되었습니다. 오타를 찾다가 보이지않아서 영한 강사님 파일을 그대로 복사 붙여넣기 했는데도 계속 null값이 들어옵니다 ㅠㅠ 왜이럴까요? fileDir에 경로를 바로 집어넣으면 파일이 잘 저장됩니다.구글 드라이브 링크 댓글에 달아놓겠습니다 ㅠㅅㅠ
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
영한님께서 버전을 올려가며 가르쳐주시는데
그 버전들을 모두 꿰뚫고 있어야 할까요, 이런 과정이 있었다 정도로만 알고있으면 될까요? 어느정도의 학습이 필요할지 궁금합니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
강의 자료 코드 질문
11:45초에 나오는 코드인데요.이 html 코드랑 강의 자료 코드랑 다른 것 같아 질문드립니다. 강의자료에는 다음과 같네요.<div class="col"> <form th:action="@{/logout}" method="post"> <button class="w-100 btn btn-dark btn-lg" type="submit"> 로그아웃 </button> </form> </div>
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@ExceptionHandler JSON 반환
왜 저는 Json으로 code와 message가 뜨지않고 그대로 상태코드도 400으로 나올까요?ㅠㅠlog도 찍히지않습니다,, 어느부분에서 오류가 난건지 모르겠습니다ㅠㅠ 공통으로 (Exception e)로 처리해준 예외를 추가하니, bad와 user-er 모두 공통으로 처리한 Ex로 JSON이 반환됩니다 ㅠㅠ
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
예외 테스트 시 Postman 테스트와 웹 브라우저 테스트의 차이점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1.웹 브라우저 테스트 2.Postman 테스트@ExceptionHandler 강의 내용을 전부 따라하였습니다위와 같이 웹 브라우저와 Postman 둘 다 요청을 Accept: text/html로 보냈는데 왜 웹 브라우저는 @ExceptionHandler이 반영돼서 API JSON 스타일로 오류 메시지가 보여지는 반면 Postman은 ExceptionResolver을 찾지 못하고 결국 오류가 WAS까지 넘어가 500 INTERNAL ERROR을 발생시키는 것을 확인할 수 있었습니다. [핵심 질문]HTTP 요청 메시지의 Accept: application/json일 경우만 @ExceptionHandler로 지정된 메서드가 API 응답을 정상적으로 처리할 수 있는 것 아닌가요? 왜 웹 브라우저에서는 Accept: text/html인데도 정상 API 응답이 나가고 Postman에서만 Accept:text/html인 경우가 인식 못하고 500 서버 에러가 나는지 궁금합니다 !
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션이 삭제되는 시점
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요! 강의 잘 보고 있습니다. 세션이 삭제되는 시점에 대해서 의문점이 생겨서 질문드립니다.영한님께서 HTTP는 비연결성이기 때문에 서버에서 세션데이터를 언제 삭제해야하는지 모른다고 하셨습니다. 사용자의 마지막 요청을 기준으로 30분 이후에 세션이 삭제된다고 했을 때 서버는 30분이 지났는지 어떻게 아는건가요? 제가 생각했을 때는 서버에서 자체적으로 계속 30분이 지났는지 확인을 하거나 사용자 요청이 들어올 때 먼저 30분이 지났는지 확인하고 세션을 삭제해줄 수 있을 것 같습니다.스프링에서는 어떤 방법으로 확인하는지 궁금합니다!
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
해당 로그인 체크 로직에서 에러가 발생하지 않으려면
/** * @return null 로그인 실패 */ public Member login(String loginId, String password) { Optional<Member> byLoginId = memberRepository.findByLoginId(loginId); Member member = byLoginId.get(); if (member.getPassword().equals(password)) { return member; } else { return null; } // return memberRepository.findByLoginId(loginId) // .filter(m -> m.getPassword().equals(password)) // .orElse(null); } 복사하실 수 있게 코드 원본과 사진 첨부드립니다.밑에 주석처리한 부분이 이제 강의에서 stream으로 간소화한 로직인데요.stream을 사용하지 않은 로직으로 로그인에 실패했을 때, NoSuchElementException 에러가 발생하는 것을 확인했습니다.아마 optional 객체에 get() 메서드를 찍을 때, 발생하는 것 같습니다. 여기서 질문이 있습니다. stream의 filter를 이용하면, 왜 에러가 발생하지 않는 것인지 궁금합니다. stream을 통해 코드를 간소화시켰지만 두 코드의 동작 원리는 같다고 생각합니다. 단지 stream만 썼다고 위 코드는 에러가 발생하고, 아래 코드는 에러가 발생하지 않는 것이 이해가 잘 안되는 것 같습니다. (stream에 대한 이해가 부족한 탓일까요)만약 stream 처리를 하지 않은 로직을 사용한다고 했을 때, NoSuchElementException 에러가 발생되지 않게 하려면 어떻게 로직을 재구성 해야할까요? stream 사용 x