묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
layoutMain.html, Deprecated 이슈, 워닝 해결 공유
WARN 2620 --- [nio-8080-exec-2] actStandardFragmentInsertionTagProcessor : [THYMELEAF][http-nio-8080-exec-2][template/layout/layoutMain] Deprecated unwrapped fragment expression "template/layout/base :: common_header(~{::title},~{::link})" found in template template/layout/layoutMain, line 3, col 7. Please use the complete syntax of fragment expressions instead ("~{template/layout/base :: common_header(~{::title},~{::link})}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.워닝 해결.오래된 구문:template/layout/base :: common_header(~{::title},~{::link})새 구문:~{template/layout/base :: common_header(~{::title},~{::link})}
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
게시글 포스트 기능 구현에 대한 질문
안녕하세요 수강 중에 질문이 생겼습니다. 현재게시글 포스트 기능을 구현하고 있습니다를멤버, 게시글, 댓글 이렇게 DB를 구성하고 각각 엔티티를 만들어서 구현하고 있습니다. 세션에 멤버 엔티티 자체를 저장해서 가져오는 것이 맞는 건지 궁금합니다. 혹은 멤버 엔티티의 pk만 저장하고 select를 날리는 게 맞는 건가요?댓글을 등록하려면 게시글이 실제 db에 있는지 없는지 조회해야 할 것 같은데, 이러한 게시글 존재 조회 repository로직을 컨트롤러에 놓는게 맞는지 or 서비스(read 트랜잭션이 걸린)에 놓는 것이 맞는지도 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
4분 26초의 th:onclick에서 타임리프 문법에 궁금한 것이 있습니다.
강사님께서 강의에서 타임리프에 | | 이 표시를 넣으면 리터럴이 된다고 하셨는데 그러면 4분 26초에서 강사님에 넣으신th:onclick="|location.href='@{/basic/items/{itemId}(itemId=${item.id})}'|"이 코드 부분을th:onclick="|location.href='@{/basic/items/${item.id}}'|"이런 식으로 바꿔써도 상관이 없을 것이라고 생각했는데 왜 오류가 나는지 궁금합니다!!!
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
hello.html thymeleaf 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.위와 같은 오류메시지가 뜨고 localhost:8080/hello 에서 오류페이지만 뜹니다.+ localhost:8080 은 오류페이지가 뜨고 localhost:8080/index.html은 원하는 결과페이지가 뜨는 이유는 뭔가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
12:20에서
Test할때 Service인데 왜 MemberRepository로 형변환 안 하고 바로 MemoryMemberRepository로 참조변수 타입을 지정하셨는지 궁금합니다!일회용 Test라서 그런 건가요??
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
어떨때는 validation을 쓰고, 어떨때는 @exceptionHandler을 써야하나요?
둘 다 원하지 않는 상황이 발생했을 때, 처리할 수 있는 방식인 거 같은데요.제 생각엔 validation(@NotNull 같은...)으로 처리하는 많은 일을 @exceptionHandler을 통해서도 가능하다고 생각하는데요. 그래서 굳이 validation이 필요한 지, 언제 무엇을 사용해야 할지 헷갈려요 예를 들어 웹페이지에서 첨부파일을 받을 때 MultipartFile에서 받을 크기를 넘어서게 되면 SizeLimitExccededException이 발생하잖아요. 여기서 처리 방식이 dto에서 validation을 설정해 주고, bindingResult로 처리해 주는 것과, @exceptionHandler 통해서도 처리를 해줄 수 있다고 보는데요. 주로 어느 상황에는 ~을 쓰고, 어떤 상황에는 ~을 쓰는 게 존재하나요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Spring MVC 강의를 다 들으면 API 방식의 개발도 쉬워지나요?
안녕하세요, 선생님의 로드맵 두 개를 전부 결제해서 현재 스프링 입문 - 스프링 원리 기본편까지 마친 취준생입니다.다름이 아니라, 제가 졸업을 위해 캡스톤 웹 개발 프로젝트를 프론트엔드 개발자와 협업해서 백엔드 스프링으로 개발하려는데,이를 MVC 방식이 아니라 API 방식으로 개발하는 것이라면 선생님의 Spring MVC 강의가 아니라 API 개발에 특화된 모듈인 Spring Web이나 Webflux를 먼저 공부하고 MVC는 나중에 듣는게 맞나요?아니면 선생님의 MVC 강의에서 API 방식의 개발도 가르치시나요?어떤 순서로 공부를 해야 빠른 시일 내(한 달 정도 남았습니다.)에 API 방식의 백엔드 개발에 익숙해질지 여쭙고 싶습니다.감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
반환되는 세션안에는 어떤게 있나요?
<질문>이미 있는 test로 로그인한다고 가정해보겠습니다그러면 loginMember의 로그를 찍으면 아래와 같이 되고,loginMember= Member(id=1, loginId=test, name=테스터, password=test!)request.getSession()을 하면HttpSession session = request.getSession();request의 쿠키정보에서 얻어온 JSESSIONID값으로 Session들을 모아둔 Session저장소에서 동일한 sessionId(=JSESSIONID) 값이 있는지 찾습니다.그다음 동일한 sessionId가 있으므로 해당 Session을 반환하는 데 이때 이 세션안에는 어떤게 있는 건가요??제가 생각한건 두개입니다.1. JSESSIONID와 Value가 session에 들어있는경우(session={"JSESSIONID": Value})그러면session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);위 코드에서 초기화를 해주고,세션 파일은 해시(hash)값으로 생성하니까session={"JSESSIONID": Value, "SessionConst.LOGIN_MEMBER": loginMember}이런식으로 HttpSession안에 공존해서 있는 경우그래서 클라이언트에게 응답할 때 이 세션안에 있는 JSESSIONID를 쿠키에 직접 넣어준다2. session 안에 아무것도 없는 경우이 세션은 사용자 test를 구분하기 위한 객체일뿐 session_test(test에 대한 세션)에 아무값이 없다(그냥 빈 객체)그래서 아래코드를 하게되면session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);session={"SessionConst.LOGIN_MEMBER": loginMember} 이 된다.그래서 클라이언트에게 응답할 때 세션저장소에서 이 세션의 JSESSIONID를 찾아서 쿠키에 넣어준다제가 생각한 것 중에 답이 있는 지 궁금합니다.답변주시면 정말 감사하겠습니다.아래글을 참고 했습니다.https://www.inflearn.com/questions/520956/%EC%BB%A4%EB%AE%A4%EB%8B%88%ED%8B%B0-%EB%8B%B5%EB%B3%80-%EA%B8%80-%EB%B3%B4%EB%A9%B4%EC%84%9C-httpsession-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC-%EC%A0%95%EB%A6%AC%ED%96%88%EB%8A%94%EB%8D%B0-%EB%A7%9E%EB%8A%94%EC%A7%80-%ED%99%95%EC%9D%B8%ED%95%B4%EC%A3%BC%EC%84%B8%EC%9A%94
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Test코드 작성할 때 findById는 안해도 되나요?
'회원 리포지토리 테스트 케이스 작성' 강의에서 나오는 코드에 대한 질문입니다.MemoryMemberRepositoryTest 파일에서 유일하게 MemoryMemberRepository의 findById() 메서드만 테스트코드를 작성하지 않았는데 따로 이유가 있는 것인가요?해당 메서드는 테스트를 해볼 필요가 없어서 작성을 의도적으로 안하신건지아니면 강의 상 생략하신 건지 궁금합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
bindingResult 질문 있습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]1:50쯤에 bindingResult설명하실 때 addItem의 매개변수로 bindingResult가 있으면 에러가 나도 컨트롤러가 호출되고, bindingResult가 없으면 컨트롤러 호출 없이 바로 에러페이지로 넘어간다고 하셨는데,이전에 만든 ValidationItemControllerV1에서는 bindingResult가 없는데도 addItem()컨트롤러가 호출된 것이 아닌가여? 그러니까 에러처리도 되고, 타임리프를 통해서 유저에게 어떤 에러가 났는지 알려줄 수 있게 된것이 아닌가 하고 헷갈리네용
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
회원 리포지토리 테스트 케이스 작성 강의 관련 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]afterEach() 함수를 적어두지 않으면 멤버가 중첩되어 에러가 발생한다고 강의 내에서 말씀하셨는데, 해당 함수를 적기 전에도 에러가 발생하지 않았기 때문에 질문드립니다. 코드 내용은 강의 내에서 작성하신 코드와 같은데, 어째서일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
강사님 설정 관련 질문입니다.
수업에 관련된 것은 아니고 강사님 강의들을 들을 때마다 강사님께서 괄호를 클릭하실때 노란색?으로 괄호들이 굵게 강조되는 표시가 뜨는 기능이 정말 편해보였는데 아무리 찾아봐도 나오지 않아서 혹시 어떤 설정이나 플러그인인지 알 수 있을까요...?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
logger는 언제 사용하나요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]logger는 정보를 남길 떄 사용한다면 어느 정보를 남겨야 하는지 어떻게 파악이 가능한가요 좀 더 구체적으로 설명 가능한가요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
해당 강의 점프하고 스프링 핵심원리 - 기본편 으로 가도 되나요?
현재 무료강의스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술위 강의는 3월쯤 약 70%? 정도 수강했습니다. 그 후에 스프링부트 + JPA + Thymeleaf를 사용한 프로젝트를 하느라 강의를 더 못 들었는데요아직 스프링에 대해 두루뭉실하게 알고 있는 것 같기도 하고, 강의를 통해서 좀 기반을 다잡고 싶어서 무조건 강사님 강의를 들으려고 합니다.그런데 다만 제 기억으로는 무료강의 파트가 약간 "맛보기" 형식으로 쑥쑥 훑어 넘어가는 강의였던 것 같아요.(그래서 개인적으로 재미도 그닥 없었던....ㅠㅠ 생소한 거 투성이었다 해야하나..) 현재 제 수준이 어느정도인지 모르겠지만바로 유료 강의인 스프링 핵심원리 - 기본편 으로 수강을 진행해도 될까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
모르겠어여
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]타임리프의 단점이 딱히 없다고 느꼈습니다만 금융권에서는 JSP 를 주로 사용한다고 하는데 그 이유가 혹시 무엇일까요? 안정성 문제일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
안녕하세요
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요 강의 중 몇가지 질문이 생겨 질문드립니다. 감사합니다!1. 현재 대부분의 실무에서는 JSP 가 아닌 타임리프를 이용한다고 생각해도 되나요? 2.Request 를 보낼 때 본인의 ip 주소를 변경해서 보낼 수 있도 있나요? 이게 VPN 방식인가요? 3.@RequestParam 어노테이션이 있으면 url 뒤에 query 문이 자동으로 생성이 되는 건가요? @ResponseBody 를 실무에서 사용할 일이 예시가 어떤게 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인터셉터 질문입니다.
인터셉터를 듣던중 궁금증이 생겨 질문남깁니다.인터셉터를 사용해서 사용자의 로그인 인증이 가능했습니다.만약, 특정 API를 로그인, 비로그인 사용자가 모두 접속이 가능하고, 로그인 사용자일 시 추가 작업이 발생하는 경우에 인터셉터를 사용하여 해결합니까? 다른 방법이 있다면 어떤 것이 있나요? 예를 들어 특정 숙소의 신청 상태의 관해서, 비 로그인 시 추가 작업 없음, 로그인 사용자 시 사용자 신청 상태를 판별하는 추가 작업 필요.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션을 사용할 수 있다면, URL를 설계할때, /member/{id} 와 같이 PathVariable를 가져갈 필요가 있을까요?
'모든개발자를 위한 HTTP웹 기본지식' 에서 배운 바로는 URL를 설계할때, 회원조회를 위한 url 이라 치면, "/member/{id}" 같이 PathVariable인 회원id 값을 url에 명시해 두었습니다.그런데 이번에 쿠키와 세션을 학습하면서 느낀건데, 애초에 그냥 "/member" 로만 해도, 로그인한 세션값으로 회원 정보를 가져와 해당 회원에 맞는 화면을 응답해도 되지 않을까요?비슷한 또 다른 예시인데,userA가 자신이 주문한 item들을 전체 조회하고자 할때 요청할 url를"/orders/{memberId}" 로 하여 memberId를 통해 회원객체를 조회하고, 조회한 객체의 주문목록을 화면으로 뿌려주는것보다는,"/orders" 로만 url을 잡고 세션값을 통해 현재 요청을 날린 회원 객체를 받아 주문목록을 화면에 뿌려주는것이 조금 더 url을 간결하게 만들 수 있지 않을까.. 라는 생각이 들었습니다. 결론:url을 "/member/{id}" 으로 잡았던 이유가 아직 세션을 학습하기 이전이라 그런것인가요, 아니면 다른 이점이 있기 때문일까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
SSR환경에서 Service Layer의 Exception을 View(Thymeleaf)로 처리하는 방법
안녕하세요 영한님영한님의 새로운 도전 응원 드린다는 말씀 먼저 드립니다. 😄 질문이 있습니다. Service Layer에서 발생한 Exception을 @ControllerAdvice를 통해 예외처리하는 방법 말고바로 예외가 발생한 페이지 View(Thymeleaf)로 예외처리에 대한 결과를 전달할 수 있는 방법이 있을까요? 예를 들어 회원 탈퇴 Service에서 Exception이 발생하면 그 결과를 회원 탈퇴 View에 예외를 전달하는 것 입니다. 제가 고민해본 결과 2가지 방법이 있는것 같습니다.Service Layer에서 발생한 예외를 커스텀하게 처리하여 BindingResult를 통해서 원하는 View로 전달@ControllerAdvice에서 @ExceptionHandler(Exception.class)설정하여 각 페이지에 대하여 ModelAndView를 이용하여 전달 아래는 Service Layer에서 예외처리를 하는 예시코드 입니다. MemberController@Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; // 회원 탈퇴 @PostMapping("/withdrawal") public String withdrawal(@ModelAttribute("form") WithdrawalForm form) { // 회원 탈퇴 로직 memberService.withdrawalMember(form.getUserId()); return "redirect:/user/login"; } } MemberServiceImpl@Service @Transactional @RequiredArgsConstructor public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; // 회원 탈퇴 @Override public void withdrawalMember(String userId) { // 회원 조회 Optional<Member> optionalMember = memberRepository.findByUserId(userId); Member findMember = optionalMember.orElseThrow(() -> new IllegalArgumentException("존재하는 회원이 없습니다.")); // 회원 삭제 memberRepository.delete(findMember); } } 감사합니다.