묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestParam Map<String, Object> paramMap
안녕하세요, 14:43초 쯤 @RequestParam Map<String, Object> paramMap에서 String 대신 Object를 사용한 이유가 있을까요?? 감사합니다!
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
패키지 구조 설계
패키지 구조 설계를 강의로 다루는 부분이 있을까요? 아직 제대로된 프로젝을 만든적이 없어서 패키지 구조 설계를 어떻게 해야할지 잘 모르는 상태입니다. 뭔가 알듯하면서도 잘 모르는게 개념이 확실히 안잡혀서 그런것같은데 혹시 패키지 구조 설계를 다루는 강의가 있을까요? 현재는 Spirng 로드맵대로 강의 보고있는중인데 jpa 강의쪽에서 패키지 구조 설계를 다루는지 궁금합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
logout에 대해서
강의에서 보면 @PostMapping("/logout")public String logout(HttpServletResponse response) { expireCookie(response, "memberId"); return "redirect:/";} private void expireCookie(HttpServletResponse response, String cookieName) { Cookie cookie = new Cookie(cookieName, null); cookie.setMaxAge(0); response.addCookie(cookie);} 강의 코드가 위와 같은데요. 궁금한게 왜 굳이 POST 메서드로 컨트롤러 매핑을 했는지 궁금합니다 세션 쿠키는 어차피 요청시 값이 전달이 되어 GET으로 매핑해도 될것같은데 POST로 매핑한 이유가 궁금합니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
4섹션 5번째 영상에서 @BeforEach로 감싸주는 이유가 궁금합니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용] 이렇게 작성해도 테스트 정상적으로 실행되는데 어떤 이유가 있어서 BeforeEach에서 매번 new로 객체를 만들어주신건지 궁금합니다!
-
해결됨[React 1부] 만들고 비교하며 학습하는 React
강의 설명란 오타 수정
git checkout -f ready/tab-view-2 가 아니라 git checkout -f ready/tab-2로 변경되어야 할 거 같습니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
리다이렉트 대신에 th:onclick 사용
@PostMapping("/add")public String addItemV3(Item item){ //자동적용 itemRepository.save(item); return "basic/item";} 리다이렉트를 꼭 서야하나 싶어, 주석부분처럼 th이용해 주소를 이동하면 편할거같아 시도했습니다. 상품등록 클릭 시, org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "item.id" (template: "basic/addForm" - line 38, col 17) 오류가 떴습니다. @Modelattribute에의해서 item.id 사용할 수 있을거라 생각했는데 오류원인을 모르겠습니다 ㅜㅜ
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
국제화 테스트 과정에서 글자깨짐
-
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
내부 클래스에 대해서 질문있습니다
안녕하세요 강의듣다가 궁금한 점이 생겼습니다 @Component("helloBean") static class HelloBean { .... } 이 부분인데요 BasicController는 스프링이 자동으로 컴포넌트 스캔을 해주면서 빈등록이 되는데 컨트롤러가 빈등록이 되면서 @Component 애노테이션을 써준 내부 클래스도 자동으로 빈등록이 되지않나요? 그러면 당연히 타임리프에서 사용할 수 있는데 왜 강의에서 static 키워드를 넣어준건지 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러 정보 채우는 방식?
안녕하세요, 이전에 V3, V4 등에서 핸들러 정보를 Map에 직접 저장했었습니다. 그러면 스프링 MVC 구조에서 핸들러 정보가 어떻게 채워지게 되나요?? 감사합니다. --- 질문이 애매한 것 같아서 추가합니다. ( ~ 4:49) /springmvc/v1/members/new-form HTTP 요청을 받은 후 어떻게 SpringMemberFormControllerV1 핸들러(컨트롤러)를 찾아올 수 있는지 정확하게 모르겠습니다. 그냥 클래스 레벨에 @Controller가 붙어있는 모든 클래스를 찾아서 그 안에 @RequestMapping으로 요청 받은 url과 동일한게 있다면 그 때 SpringMemberFormControllerV1 컨트롤러를 getHandelr()에서 반환하는 것인가요? 갑자기 애노테이션 기반 컨트롤러를 사용해서 이전 내용과 이어지질 않는 기분입니다.ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
mvc관련 질문입니다
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)예 [질문 내용] 다음과 같이 안되네요 ㅜㅜ 도와주세요 여기에 질문 내용을 남겨주세요.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 업로드와 관련되어 궁금한 부분이 있습니다 .
안녕하세요 영한님! 항상 강의를 열심히 시청하고 있는 취준생입니다! 상품 테이블이 있고 상품 이미지(상품이미지 파일의 경로) 테이블이 존재할 때 상품 수정 시 파일을 어떻게 수정하도록 작성해야 하는지 궁금한 점이 생겼습니다. 기존에 1 2 3 4 라는 파일의 이름으로 이미지가 저장되어 있고 수정 시 3 4 5 6 의 파일이 새로 요청될 때 3 4 번을 제외하고 1,2는 삭제 / 5 6 은 새로 갱신해주는 로직을 작성하는게 맞는 방법일지, 1 2 3 4를 한번에 다 삭제 후 새롭게 3 4 5 6 파일을 업로드 해주는게 깔끔한 방법일지 궁금증이 생겼습니다. 어떤게 더 좋은 방법일까요? 혹시 둘다 잘못된 방법이라면 어떻게 처리하는게 좋은 방법일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@PathVariable 사용 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/)[질문 내용]안녕하세요! PathVariable을 사용하다 궁금한 점이 생겨 질문 남깁니다. 변수명과 원하는 name 설정이 같으면 생략할 수 있다고 하셨는데 이를 테스트 코드로 작성 시 오류가 발생합니다. (포스트맨으로 실행 시 성공..) Controller @ResponseBody @GetMapping("/test/{id}") public void test(@PathVariable Long id) { ... } Test Code @Test public void 테스트_코드() throws Exception { Long id = 1L; mvc.perform(get("/test/" + id)) .andExpect(status().isOk()); } Error org.springframework.web.util.NestedServletException: Request processing failed; java.lang.IllegalArgumentException: Name for argument type [java.lang.Long] not available, and parameter name information not found in class file either. 제가 조사한 바로는 아래와 같은데 (Spring 공식 문서 일부) The matching of method parameter names to URI Template variable names can only be done if your code is compiled with debugging enabled. If you do have not debugging enabled, you must specify the name of the URI Template variable name to bind to in the @PathVariable annotation. debugging enabled한 compile이라는걸 이해할 수 없어 질문 납겨봅니다ㅠ.ㅠ 답변 남겨주시면 감사합니다.
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ResponseBody인 경우의 실행흐름이 궁금합니다.
안녕하세요. 항상 좋은 강의 감사합니다. 다름이 아니라 제가 정확히 이해가 안 가는 부분이 있어서 질문드립니다. @responseBody 애노테이션이 붙은 컨트롤러의 메서드는 다음과 같이 실행된다고 이해했습니다. Controller가 Http 메시지 바디에 쓸 내용 return -> ReturnValueHandler 의 구현체 중 RequestResponseBodyMethodProcessor 호출되어 HttpMessageConverter을 이용함. 위 과정과 관련해 강사님께서 @ResponseBody와 같이 view rendering이 필요 없는 작업들은 view가 생성되는 뒷 단의 작업들은(ViewResolver 와 View) 이루어지지 않는다고 설명해 주셨습니다. 그런데 여기서 의문점이 스프링 mvc의 DispatcherServlet 코드를 보면 mv = ha.handler(processedRequest, response, mappedHandler.getHandler()); 부분이 있습니다. 즉 어댑터를 통해 핸들러를 호출하면 항상 반환값으로 ModelAndView를 받습니다. 그럼 여기서 제가 궁금한 점이 생겼습니다. 클라이언트의 요청이 컨트롤러에서 @ResponseBody가 적힌 메서드가 호출되는 요청이라면 HttpMessageConverter에서 메시지 변환 과정을 진행 한 후 실제 Http 응답 메시지가 만들어서 클라이언트한테 전송되는 건가요?(이 경우는 실행흐름이 DispatcherServlet으로 가지 않고 종료) 아니면 HttpMessageConverter가 response 객체에 해당 값을 넣어두고, 흐름이 다시 DispatcherServlet으로 가서(그럼 여거서 mv는 null이 들어가나요?) 내부 로직에 의해 view를 만드는 과정이 생략되고 http 응답 메시지가 만들어지는 건가요?
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
스프링 MVC에서 핸들러 매핑
[질문 내용]안녕하세요 스프링mvc 학습 중 궁금한 점이 생겨 질문 올립니다. 스프링 mvc에서 디스패처 서블릿이 핸들러 매핑할때 @Controller @RequestMapping 이 붙어있는 "클래스"를 찾아서 핸들러로 매핑 한다고 이해 했습니다. 그렇다면 어댑터는 해당 핸들러의 @RequestMapping("[url경로]") 애노테이션이 붙어있는 "메소드"를 실행 시켜주는것인가요?? @RequestMapping 애노테이션이 붙어있는 "메소드"를 컨트롤러라고 부르는건가요..? 만약 클래스 레벨에 @RequestMapping("[url경로]")가 있고 해당 클래스의 메서드가(애노테이션이 붙지않은 순수 자바 메서드) 단 하나뿐이라면 요청이 왔을때에 클래스의 메서드가 실행 되는것일까요??
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
V2 HandlerAdapter 적용하기
안녕하세요. 수업을 듣다가 V2 또한 Adapter 로 만들어 보려고 하였습니다. 김영한님이 V2 를 적용하려면 아마 FrontController 도 건드려야 할 거라고 하셨는데, ControllerV2HandlerAdapter도 MyHandlerAdapter 인터페이스를 구현하니 어떻게든 ModelView 를 리턴하게 만들 수밖에 없더라고요. (잠깐 디폴트 메소드 써볼까 했는데…어차피 추상메소드는 구현해야하니까 그것도 안되더라고요 ㅜㅜ) 그래서 차라리 ControllerV2HandlerAdapter로 ModelView 를 구현하게 만들었는데, public class ControllerV2HandlerAdapter implements MyHandlerAdapter { @Override public boolean supports(Object handler) { return (handler instanceof ControllerV2); } @Override public ModelView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException { ControllerV2 controller = (ControllerV2) handler; MyView view = controller.process(request, response); String viewPath = view.getViewPath(); // 모델뷰 만들기 String viewName = parsingViewName(viewPath); ModelView mv = new ModelView(viewName); // 모델뷰에 모델 넣기 Map<String, Object> model = new HashMap<>(); request.getAttributeNames().asIterator() .forEachRemaining(attributeName -> model.put(attributeName, request.getAttribute(attributeName))); mv.setModel(model); return mv; } private String parsingViewName(String viewPath) { String[] splitList = viewPath.split("/"); int lastIndex = splitList.length - 1; String viewNameWithJSP = splitList[lastIndex]; String[] splitJSP = viewNameWithJSP.split("[.]"); String viewName = splitJSP[0]; return viewName;} 작동은 잘 되는데, 저 parsingViewName 메소드로 너무 억지로 ModelView로 반환하려는 느낌이 들어서… 조금 아쉽습니다. FrontController 에서 쉽게 바꿀 수 있는 아이디어가 있을까요? 아직 저는 구현 Adapter들이 MyHandlerAdapter 를 구현하는 것 때문에 FrontController 에서는 어떻게 바꿔야할지 모르겠습니다. 또 한편으로 Adapter의 역할이 말 그대로 110V 이나 50V 뭐든 220V 으로 맞춰주는 거라고 생각한다면, ControllerV2HandlerAdapter 에서 억지로라도 ModelView 로 반환해주는 것이 맞는 것 같다는 생각도 듭니다. 그래서, 만약 FrontController 와 구현 Adapter 중 하나를 수정해야한다면 무엇을 수정하는 것이 더 효율적인가요?(유지보수면에서요!)
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
세션 관련 질문이 있습니다.
기존에 직접 sessionManager를 만들어서 세션을 관리하는 것에 있어서는 sessionStore라는 맵에 key값으로 sessionId와 value값으로는 loginMember를 넣어서 사용을 하고 sessionId를 가지고 사용자를 식별하여 사용한 것으로 이해했습니다. 맞나요? 그런데 session.setAttribute함수를 찾아보니 attributes라는 map에 key값으로 상수값을 value값으로 loginMember를 넣는 거 같은데 (attributes.put(name, value)이렇게 있더라고요) 그럼 map에 키값이 동일하게 지정을 해주면 다른 사용자에 대해서는 어떻게 식별을 하나요? 관리자모드로 보면 sessionId가 생기긴 하는데 이건 spring에서 생성을 해주는 것이 아닌가요? 제가 못찾은 것인지 어느 코드가 id를 생성하는지를 모르겠어어요... 아 그리고 logout에서는 v2를 보면 expire를 통해서 해당 id값에 대한 member를 지우도록 했는데 session을 사용하면서 invalidate함수를 통해 session을 지우면 session전체가 다 지워지는 건가요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
사소한 오타를 발견하여 말씀드립니다!
강의 대시보드의 강의자료는 버전 수정이력이 v2021-12-01로 되어있지만 PDF파일 다운받을 시 v 2022-12-01로 오타가 있습니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
프로젝트 생성 후 build.gradle Open as Project 시 에러
환경 OS : Mac M1 Pro macOS Monterey Version 12.1 Intellij : Intellij IDEA 2021.3.1(Ultimate Edition) Build #IU-213.6461.79, built on December 29, 2021 Java Version : openjdk version "11.0.11" 2021-04-20 오류 메시지 Could not load wrapper properties from '{프로젝트 경로}/{프로젝트 명}/gradle/wrapper/gradle-wrapper.properties'. 현상 start.spring.io에서 [프로젝트 환경설정] - [프로젝트 생성] 후 Intellij에서 Open을 통해 프로젝트의 build.gradle Open - 오픈 -> 오픈시 Open as Project를 클릭 Window 10에서는 별다른 설정 없이 Gradle에서 라이브러리를 정상적으로 다운 하였으나, Mac에서는 Build 에러 발생(오류 메시지 참조) 해결을 위한 진행 사항 1. 'Could not load wrapper properties from Intellij' 키워드로 검색결과 gradle 버전 문제로 확인되었으나, 해당 프로젝트로 Window 10환경에서 정상적으로 gradle Build되어 해당 케이스 제외 2. Intellij에서 제공하는 New Project를 사용하여 Gradle 프로젝트 Build가 성공 ※ 정상적으로 build를 성공 하였으나, 원인 확인을 위한 분석 진행 분석 사항 1. start.spring.io에서 생성한 프로젝트(이하 spring)와 Intellij에서 생성한 프로젝트(이하 Intellij)의 gradle-wrapper.properties 비교 spring의 distributionUrl : https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip Intellij의 distributionUrl : https\://services.gradle.org/distributions/gradle-7.1-bin.zip 두 설정의 gradle 버전은 각 7.3.3-bin.zip과 7.1-bin.zip으로 버전차이가 있음 Case 1. Intellij 프로젝트의 설정파일을 spring 프로젝트의 설정파일로 덮어씌웠으나 동일한 에러 발생 Case 2. spring 프로젝트의 설정파일을 Intellij 프로젝트의 설정파일로 덮어씌웠으나 정상 결과 : 설정파일 또는 버전의 문제가 아님. 2. 구글링 중 Intellij와 Gradle sync에러 관련 글 확인결과 블로거가 Intellij의 log를 확인 한것을 따라 Intellij의 로그 체크결과 권한 관련 사항이 문제 에러로그 : java.nio.file.FileSystemException: '{프로젝트 경로}/{프로젝트 명}/gradle/wrapper: Operation not permitted' [결론 및 해결 방안] 권한의 문제로 시스템 환경설정 - 보안 및 개인 정보 보호 - 전체 디스크 접근 권한 - Intellij IDEA.app 권한 부여 [질문사항] 1. 권한 허용을 하지 않아도 Intellij에서 생성된 프로젝트는 Build성공한 이유가 궁금합니다. 2. 추가로 Mac에서는 '전체 디스크 접근 권한'을 허용하고 진행하는 것인지, 혹시 환경의 문제가 있는건지 궁금합니다. 긴 질문사항 읽어주셔서 감사합니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
만들지 않은 url로 접근 할 떄 처리는 어떻게 하나요 ??
만약에 /itemsed 라는 만들지도 않은 url로 접근할 경우는 어떻게 처리를 하나요 ?? 1) 로그인을 한 경우 잘못된 경로 인입 -> 에러창이 뜸 (아마도 다음 예외처리에서 해결??) 2) 로그인을 하지 않은 경우 잘못된 경로 인입 -> 로그인체크 인터셉터에서 로그인창으로 리다이렉트 -> 이 경로도 1)과 마찬가지고 에러페이지로 예외처리 하려면 addPaterns 에 /** 가 아니라 더 세밀하게 조정을 해야할까요? 아니면 다른 방법이 있을까요 ?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실행을 두번 연달아서 했더니 NoClassDefFoundError가 떴습니다.
강의내용 6:00까지 진행중이였는데 제가 실수로 Run을 두번 해버렸습니다. 그림에 빨간동그라미 표시한대로 처음은 Run탭에 초록색 화살표를 눌렀다가 두번째로 Run을 진행했더니 NoClassDefFoundError 에러가 떴습니다. 런했을 때 나오는 콘솔내용들입니다. 2022-01-22 10:52:31.818 INFO 12244 --- [ main] hello.servlet.ServletApplication : No active profile set, falling back to default profiles: default2022-01-22 10:52:32.817 WARN 12244 --- [ main] s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet2022-01-22 10:52:32.834 INFO 12244 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.2022-01-22 10:52:32.878 ERROR 12244 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'servletComponentRegisteringPostProcessor': Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServletat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:196) ~[spring-context-5.3.15.jar:5.3.15]at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.15.jar:5.3.15]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.15.jar:5.3.15]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:414) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.6.3.jar:2.6.3]at hello.servlet.ServletApplication.main(ServletApplication.java:12) ~[classes/:na]Caused by: java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServletat org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:49) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-2.6.3.jar:2.6.3]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.15.jar:5.3.15]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.15.jar:5.3.15]... 13 common frames omittedCaused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServletat java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na]at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na]at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na]... 20 common frames omitted Process finished with exit code 1 이러고 localhost로 들어가도 들어가지지 않는 상태입니다.. 제가 인텔리제이가 처음이여서 많이 어버버하네요 ㅜㅜ 어떻게 하면 될까요?