월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Item 클래스에서 사용되는 멤버변수에 대해서 질문이 있습니다.
멤버변수를 생성할 때, 기본 타입이 아닌 래퍼 클래스로 사용하는 이유가 있을까요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
jsessionid가 url에 있을때 404에러
세션을 지우고,로그인을 하면 세션이 만들어져야하는데 세션은 만들어졌는데 url에 jsessionid가 들어가면 404 에러가 나오네요이유가 멀까요 해결하신분 없나요세션을 안 지우고하면 에러는 안뜹니다 ps. 코드 문제일수도 있다 생각되어 ,강의자료에 있는 애초에 완성되있는 완성본 코드로 실험한 결과도 역시나 결과는 같았습니다. 실제로 쓸때는 session.tracking-modes를 넣을꺼라 문제는 없겠지만 정책이 바뀐건지 강의랑다르게 404에러가 나와서 답답하네요,,참고로 제 부트 버전은 3.1.5 입니다
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이스케이프 예시를 조금 변형하다 이해가 안 가는 부분이 있어 질문드립니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.제가 이해하기로는 모델에 담긴 "Hello <b>Spring</b>"이라는 문자열을 꺼내서 ${data} 대신에 들어간다고 생각했습니다.그래서 html 코드에서 ${data}를 지우고 이 자리에 "Hello <b>Spring</b>"를 바로 넣어봤는데 오류가 납니다.두 경우에는 어떤 차이가 있는 건가요? 왜 오류가 나는지 알 수 있을까요
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
패키지명이 다 나오는 이유
패키지명이 임포트가 안되고 위에처럼 되는데 이유가 뭔가요??
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이런 경우엔 어떤 예외와 응답 코드가 적절할까요?
친구랑 커뮤니티 계정을 같이 쓴다고 가정할 때,각자의 pc로 웹 브라우저에서 로그인하여 서로 세션이 있는 상태에서제가 게시글을 작성하고 있는데 다른 친구가 회원 탈퇴를 합니다(db에서 회원 데이터 삭제됨).글을 마저 작성하고 글쓰기를 누르면, 세션이 유지 중이므로 로그인 체크 인터셉터도 통과하고 해당 세션에는 회원 데이터가 있습니다(세션은 레디스에 저장되어 있음). 게시글 엔티티를 db에 저장하기 위해 필요한 회원 데이터를 db에서 조회했지만 회원이 없습니다.포털 사이트 한군데에서 크롬이랑 엣지로 시험해봤는데 한곳에서 회원 탈퇴 성공한 뒤다른 곳에서 비밀번호 변경을 시도하면 "비밀번호 변경에 실패했습니다. 잠시 후 다시 시도해주세요"라고 400 응답코드를 반환했고,회원 탈퇴를 시도하면 500 응답과 함께 "회원 탈퇴에 실패했습니다. 잠시 후 다시 시도해주세요."라고 나옵니다. 기사에 댓글을 달아봤는데 댓글은 달렸고, 로그인 재시도는 실패했습니다.이런 경우 어떤 예외를 발생시켜야 하나요? 스프링 추상화 예외 EmptyResultDataAccessException를 발생시키고 session.invalidate(); 처리하는 것은 어떤가요?
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
경로설정
1.서버를 실행하니 url이 http://localhost:8080/templates/basic/text-basic 여기로 매핑되어있는데 강사님 화면은 http://localhost:8080/basic/text-basic으로 되어있는데 뭐가 문제인가요?모든 url에서 템플릿을 빼니까 화면이 출력되긴합니다코드도 다 똑같이 따라했는데 뭐가 문제인가요..?import lombok.Data; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @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 textUnescaped(Model model) { model.addAttribute("data", "Hello Spring!"); return "basic/text-unescaped"; } @GetMapping("/variable") public String variable(Model model) { User userA = new User("userA", 10); User userB = new User("userB", 20); List<User> list = new ArrayList<>(); list.add(userA); list.add(userB); Map<String, User> map = new HashMap<>(); map.put("userA", userA); map.put("userB", userB); model.addAttribute("user", userA); model.addAttribute("users", list); model.addAttribute("userMap", map); return "basic/variable"; } @Data static class User{ private String username; private int age; public User(String username, int age) { this.username = username; this.age = age; } } }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
@InitBinder의 검증기 생성에 대해서
안녕하세요 해당 컨트롤러 안에 init()메서드가 있는경우 애노테이션Validated가 있는 메서드가 호출되는 경우만 init()가 호출 되는 건가요? 또 init가 호출될 떄마다 검증기도 새로 생성된다고 했는데 검증기도 객체인데 그 객체를 호출마다 새로 생성하고 리퀘스트 스코프 끝나면 검증기 객체가 자동 삭제되고 다른 호출일 때 또 새로운 검증기 객체가 생성되는 인식이 맞을까요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
model 및 BindingResult을 사용할 때
model이랑 BindingReulst로 오류처리 하는 부분을 뷰로 넘겨주는 로직에 관해서 질문입니다. 지금은 타임리프를 사용해서 model 등을 값을 받아서 화면에 출력하는데 사용을 하지만 나중에 프론트 프레임워크를 사용하는 경우 해당 검증 방법을 그대로 쓸 수 있나요?? 보통 json형태로 값을 보내주는 걸로 알고 있는데 그 경우 검증 로직은 프론트 단에서 하게 되는지 궁금합니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
질문말고 요청입니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]수업이 주로 타임리프로 진행이되어 백엔드단에서 model이나 modelattribute를 많이사용하시는데요! 요새는 주로 템플릿엔진대신 spa를 많이사용하는걸고알고있습니다 혹시 강의에 중간중간 그럴경우에 어떤파라미터를 써야하는지 아니면 다른 방법을얗야하는지 혹은 별도 섹션 강의로 만들어주시면 좋은것 같습니다!
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이렇게 쓰면 안되나요??
@Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private FilterRegistrationBean<LogFilter> filterFilterRegistrationBean; @Bean public FilterRegistrationBean addFilter() { // FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>(); filterFilterRegistrationBean.setFilter(new LogFilter()); filterFilterRegistrationBean.addUrlPatterns("/*"); filterFilterRegistrationBean.setOrder(1); return filterFilterRegistrationBean; } }
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
메시지 파일 관리를 백엔드에서 하나요?
[질문 내용]메시지를 관리하는 거를 백엔드 단에서 파일 하나 만들어서 관리하는 거 같은데 이걸 백엔드랑 프론트로 나눠서 개발을 하는 경우에도 메시지 관리를 백엔드단에서 하게 되나요? 뭔가 프론트에서 할 거 같아서 질문드립니다.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Errors 관련 타입캐스팅에 관해 질문드립니다
@Override public void validate(Object target, Errors errors) { Item item = (Item) target; // 검증 로직 ValidationUtils.rejectIfEmptyOrWhitespace(errors, "itemName", "required"); // 간단한 공백이나 값이 안들어왔을때 if (item.getPrice() == null || item.getPrice() < 1000 || item.getPrice() > 1000000) { errors.rejectValue("price", "range", new Object[]{1000,1000000},null); } if (item.getQuantity() == null || item.getQuantity() >= 9999) { errors.rejectValue("quantity", "max", new Object[]{9999},null); } // 특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { errors.reject("totalPriceMin", new Object[]{10000,resultPrice}, null); } } } }강의에서는 errors를 사용하였는데이 부분을 아래와 같이 BindingResult로 타입캐스팅 후 사용하여도 되는걸까요?target의 경우에는 타입캐스팅을 해주었는데 errors도 같은 맥락으로 가능한가 싶어 질문드립니다. 반대로 target을 그대로 가져와 사용하여도 문제 없을까요? @Override public void validate(Object target, Errors errors) { Item item = (Item) target; BindingResult bindingResult = (BindingResult) errors;
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
form프로젝트 import에러 해결했어요! 도움되시라고 작성해보았습니다~
안녕하세요.오늘 수업자료 다운로드 후 form-start파일을 form으로 프로젝트명 변경 하고 에러나는 부분때문에 2시간을 막연하게 보내고 구글링 + 인프런에 있는 수강자분들의 질문과 공식서포터즈 님들의 해결방법 작성해놓은것들 그대로 셋팅해봐도 안되었던 문제를 해결했어요.해결방법 공유를 위해 작성했습니다! (질문아니예요ㅠ)저는 설정하면서 총 3개의 문제를 겪음 ㅠ제가 겪고 해결한 부분이 도움될 분들이 계실거라 생각하고 몇자 적어봅니다. (사실 좀 길어요ㅠ 그래도 제가 버린시간을 다른분들께선 알차게 쓰시길 바라는 마음으로 작성중) [진행 및 문제를 확인]프로젝트를 import 한후 build.gradle 파일을 열어서 gradle 7버전 이상, java는 17로 사용하는 것으로 설정완료.이후 윈도우에서 인텔리제이를 사용하고 있어서 setting 접속한 후 해당설정 화면에서 gradle버전을 PC에 7.4버전이 설치되어 있는 경로로 설정, 그리고 자바도 17버전으로 설정을 해줍니다. refrash하는데 에러...저는 gardle 7.4-all버전을 사용하려고 설정을 모두 gradle설정하는부분은 7.4버전대로 설정했는데 뜬금없이 console에 나타난 에러메세지는 gradle을 gradle-6.8.2-bin.zip 로 설정되어있어서 안된다고 나오더라구요.에러메세지 : Unsupported Java.Your build is currently configured to use Java 17.0.4 and Gradle 6.8.2. [원인]분명히 setting > gradle 메뉴에가서 gradle을 7버전 사용한다고 설정했는데...뭐가 문제지? 싶어서 구글링해도 뭐해도 다 해봤던 설정만 나와서 답답하더라구요.그래서 그냥 우선 gradle관련 설정파일을 하나하나 확인해봐야겠다는 마음으로 gradle설정파일을 확인하는데 그중 gardle-wrapper.properties 파일에 문제가 있음을 확인사실 설정관련 정보는 저도 잘 몰라요.. 그런데 확실하게 알수 있었던건 distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip이 부분으로 인해 프로젝트가 gradle을 다른버전을 사용하도록 설정되어 있는걸 알게됨. [문제1 해결방법]1. form > gradle > wrapper > gradle-wrapper.properties 파일을 클릭해서 오픈2. distributionUrl에 있는 설정정보를 gradle을 7버전 이상으로 설정값을 변경그런데 저는 다른정보도 변경해줘야 할것 같아서 이전에 타임리프 프로젝트에서 설정되어있는 gradle-wrapper.properties 파일의 정보를 그대로 복붙했어요.(저는 여기서 gradle-8.5-bin.zip으로 설정되어있어서 그냥 그거 설정함)distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists 3. gradle refresh [문제2 또 에러 (자바9버전 이상에서 제공되지 않는 어노테이션 문제)그런데 refresh 한 후 여기까지 하고 또 에러가 납니다.프로젝트에 자바9버전이상에서 그냥 사용할 수 없는 어노테이션이 있나봐요. 영한님이 이전 servlet강의에서 말씀해주셨던 자바8인가? 9이상부터 제공되지 않는 어노테이션들이 자바 17버전에서 제공되지 않는 문제..사용하도록 설정해야되니까 관련 코드를 찾아서 dependencies에 추가해주는걸로 해결했어요.에러메세지 : path~~~~\dev\05_스프링mvc2-백엔드웹개발활용기술\form\src\main\java\hello\itemservice\TestDataInit.java:8: error: package javax.annotation does not existimport javax.annotation.PostConstruct;^ [문제2 해결방법]1.build.gradle 파일열기2. dependencies에 아래의 코드 추가implementation group: 'javax.annotation', name: 'javax.annotation-api', version: '1.3.2'3. gradle refresh [문제3 또 에러]문제1, 문제2 까지 겪고 해결방법대로 설정완료 후 잘되나 싶더만 아래의 에러메세지가 나타납니다.프로젝트가 빌드될때 java11이 사용되도록 설정이 되어있어서 발생된것 같아 17로 변경해줍니다.에러메세지 : * What went wrong: Execution failed for task ':ItemServiceApplication.main()'.> Process 'command 'C:\Program Files\Java\jdk-11.0.17\bin\java.exe'' finished with non-zero exit value 1 [문제3 해결방법]1. 우측상단 select Run/debug configuration 박스클릭2. Edit Configurations 클릭3. Run/Debug Configurations 설정 창에서 java version 7로 변경 이후 프로젝트가 잘 구동되어 강의 듣을수 있게 되었습니다 ㅋㅋㅋ 으..말주변 없어서 이거 작성하느냐고 1시간 걸림 ㅠㅠ 설명이랑 같이 작성하느냐고 두서없을수 있으나..한가지라도 도움되시길 바라면서 마침! ps. 프로젝트의 설정파일 정보가 변경되었으면 좋겠습니다!프로젝트를 다운받고 안되는 부분이 초보입장에선 동공에 지진이... 좋은강의 늘 감사합니다:)
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 예외처리-필터 강의 질문
안녕하세요 localhost:8080/error-ex 호출로 임의로 RuntimeException 발생 시 에러 처리 로그 관련해서 질문 남깁니다.https://ballistic-uncle-12b.notion.site/eb9d5a1ee6e74d6db70c0658241aa8b1?pvs=4java.lang.RuntimeException: 예외발생 !!! ~~ 로그가 두 번 남겨져서 Exception이 2번 발생하는 지 확인하려고, Exception 발생이 두 번 남겨지는 지 확인하기 위해 “Error occurs” 는 로그 메시지를 추가했으나 위 로그 내용과 같이 Exception은 한 번만 던져졌습니다.흐름 상 최초 요청 시 /error-ex 를 통해 was -> 필터 -> 서블릿 -> 컨트롤러/error-ex: (예외발생)* was** <- 필터 <- 서블릿 <- 컨트롤러해당 Exception에 매핑된 요청 url 탐색(/error-page/500)탐색된 url(/error-page/500)로 다시 요청 was -> 필터 -> 서블릿 -> 컨트롤러/error-page/500 was <- 필터 <- 서블릿 <- 컨트롤러위 요청 흐름 상이나 개인적으로 추가한 “Error occurs” 로그에서도 확인한 것처럼 Exception은 * 시점에 1회 발생합니다.시점에서, java RuntimeException이라 java main thread의 최상단 함수(main)에서 해당 Exception에 대한 로그가 찍힌 것으로 생각되는데, RuntimeException에 관한 로그는 왜 2번 적히는지 궁금합니다.아울러 main 함수가 ** 시점에 존재하는 게 맞는지도 추가로 궁금하여서 질문 남깁니다.감사합니다.
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
이미지 서버에 질문하나 드려도 될까요
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]제가 지금 토이프로젝트로 게시판을 만드려고 하는데,div 태그에 contenteditable 속성을 넣어서 수정 가능하게 만들고,이미지 붙여넣기 하면 img 붙여넣기 되면서 바이너리? base64~~ 하면서 img 태그의 src로 붙는데,다른 게시판 웹사이트 보니까, okky나 tistory같은.붙여넣기 하면 바로 서버에 저장이 되는 모양이더라구요.그러니까, 붙여넣기 하면 https://자기사이트/경로/파일이름 이런식으로 되는 것 같아요.아마 프론트엔드 쪽에서 붙여넣기 하면 저 바이너리 파일 서버로 보내서 그 이미지 서버에서 임의의 이름 붙이고 그 주소 자체를 넘겨줘서 프론트엔드쪽에서 응답받으면 그걸 src로 쓰는 것 같은데, 제가 궁금한게, 그래서 붙여넣기 꾹 눌러서 연속으로 해봤거든요? 근데 모두 다른 이름으로 src에 부여되었어요. 그리고, 게시판 취소를 눌러도 그 url 복사했다가 들어가봐도 계속 들어가져요.근데 이러면 낭비가 될 수 있지 않나요? 만약 게시판 취소해버리면 그냥 서버에 이미지만 저장되고 그거와 링크된 게시물은 없게되잖아요.
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
수업자료에 수정이 필요한 부분이 보여서 의견 드립니다.
프로젝트 생성시 Project Metadata 에 Java11로 설정하라고 작성되어 있는데요. Project MetadataGroup: helloArtifact: thymeleaf-basicName: thymeleaf-basicPackage name: hello.thymeleafPackaging: JarJava: 11 <<<<<<<<<<<<<이부분 현재 스프링부트 3버전대에서 17사용하라고 다른부분에는 작성되어 있는데 해당 부분에는 수정이 안되어있어서 수정이 필요할것 같아 의견드립니다 🙂 자칫하다 프로젝트 다시받아서 해야할 수 있어 번거로움이 있을 것 같아서요!좋은강의에 늘 감사드립니다 영한님
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:field가 커맨드 객체가 없는경우
폼 안에서는 th:object로 꺼내오고 th:field="*{}"이런식으로 사용하는데 만약 폼이 아닌 그냥 쓸때는 어떻게 사용해야하나요
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ExceptionResolver 적용 우선순위 (스프링 내부 + 사용자 커스텀 구현체)
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]강의를 통해 스프링 부트가 기본으로 제공하는 ExceptionResolver 는 ExceptionHandlerExceptionResolver, ResponseStatusExceptionResolver, DefaultHandlerExceptionResolver 가 있는 것을 배웠는데요,그러면 수업 내용중 WebConfig 를 통해 등록한 아래 resolver 들까지 포함하면, 우선순위 높은 순으로 나열할 때 아래 순서가 되는 게 맞나요?1) ExceptionHandlerExceptionResolver2) ResponseStatusExceptionResolver3) DefaultHandlerExceptionResolver4) MyHandlerExceptionResolver5) UserHandlerExceptionResolver@Override public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> resolvers) { resolvers.add(new MyHandlerExceptionResolver()); resolvers.add(new UserHandlerExceptionResolver()); }
- 해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
afterCompletion에 대해
afterCompletion 메서드는 View가 렌더링되고 난 후에 실행되는 메서드라고 설명해주셨고, Controller에서 예외가 발생하면 afterCompletion 메서드의 예외 파라미터로 전달 된다고 하셨습니다.1. 그렇다면 Controller가 View가 아닌 JSON 등의 모델 데이터를 반환할 때는 afterCompletion 메서드가 실행 되지도 않고 Interceptor가 예외 정보도 전달 받을 수 없는건가요? 만약 맞다면, Controller에서 예외 처리 하는 것이 맞을까요? Controller에서 예외 처리해야하는 것과 afterCompletion에서 예외 처리해야하는 것의 차이는 뭔가요?
- 미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
코드를 그대로 따라했는데도 로그가 찍히지 않습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]여기에 질문 내용을 남겨주세요.서블릿 필터 - 요청로그 강의 듣고 있는데요.LogFilter.java와 WebConfig.java 를 강의내용과 똑같이 따라쳤는데도 로그가 나오지 않습니다...혹시나 놓친부분이 있나 싶어 pdf의 코드를 복사 붙여넣기 해봐도 똑같네요ㅠㅠ이전까지는 log.info가 잘 출력됐는데 왜이러는지 모르겠습니다... 도움 부탁드려요