inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

상품 A의 한글 출력에 대한 질문입니다!

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

logging.level.org.apache.coyote.http11=debug 로 했을시 request HTML 출력시 한글이 깨지는데 Log.info("request={}", request.getParameter("itemName")); 하면 '상품A '한글이 출력되는 이유가 무엇인가요?

  • MVC
  • spring
컴퓨터공부하자 댓글 2 좋아요 1 조회수 775

페이징 시도 시 Out of Memory의 원인

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

안녕하세요, 김영한 강사님. 페치 조인 시 페이징을 시도하면 메모리에서 프로세싱이 이루어지기 때문에 Out of Memory가 일어날 수 있다고 말씀주셨는데요. 이 이유가 정렬 시 추가적인 메모리 공간을 사용하기 때문인가요? 대량의 데이터를 페이징 없이 쿼리하면 메모리를 거치지 않고 결과값을 내려주나요? 페이징 없이 쿼리를 하더라도 메모리를 통한다면 수 많은 데이터를 쿼리하더라도 Out of Memory가 일어날수 있는게 아닌가 싶어서요. 혹시 제가 디비 쿼리 원리를 잘못 이해하고 있는걸까요. 감사합니다.

  • spring-boot
  • java
  • spring
  • JPA
이남규 댓글 1 좋아요 1 조회수 513

Bean 등록시 EntityManager 오류 질문드립니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요. 핵심원리를 듣고 이번 강의를 들으면서 배운 것을 적용하려고 시도해보았습니다. Service interface와 Repository interface를 생성하여, componentscan을 사용하여 빈을 등록하려고 했습니다. 기존 service와 repository를 Impl로 바꾸어 @Component 어노테이션을 붙여 의존관계를 자동 주입하려고 했습니다. ``` @Component @Transactional public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository ; @Autowired public MemberServiceImpl (MemberRepository memberRepository) { this . memberRepository = memberRepository ; } ``` @Component public class MemoryMemberMemberRepository implements MemberRepository { @PersistenceContext private final EntityManager em ; @Autowired public MemoryMemberMemberRepository (EntityManager em) { this . em = em ; }@Configuration @ComponentScan ( excludeFilters = @ComponentScan.Filter (classes= Configuration . class ) ) public class AppConfig { } @Test public void 회원가입 () throws Exception{ //given AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig. class ) ; 해당 코드를 테스트를 시도하였지만 No qualifying bean of type 'javax.persistence.EntityManager' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} 이라는 오류가 발생하였습니다. 개념이 많이 부족하여 질문을 제대로 했는지도 정확하지않고, 해당 오류가 왜 나는지 잘 모르겠습니다 ㅠㅠ

  • entitymanager
  • bean
  • java
  • 웹앱
  • spring
  • JPA
  • spring-boot
댓글 5 좋아요 0 조회수 6327

안녕하세요 선생님 강의내용대로 WAR로 패키지 만들고, webapp을 만들어도 index.html과 basic.html의 화면이 뜨지 않네요..

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

일단 확실히 WAR로 만들었고, 혹시나 2.5.x버전으로 올라가서 그랬을까 싶어서 2.4.8 버전으로 만들었고, index.html을 resources - static에 넣었을때는 index.html, basic.html이 잘 매핑이 됩니다만,, webapp을 만들고 하위에 넣엇을땐 매핑이 되질 않네요.. 현재 제 파일 상황이구요, proviededRundtime로 주석처리하고 해봤구요 이건 이렇습니다만,, 두가지로 해봤을때도 같습니다.. .

  • MVC
  • spring
foobar 댓글 9 좋아요 0 조회수 1164

회원서비스 테스트 트랜잭션과 entitymanager

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

강의를 듣고 질문들을 보면서 저나름 정리한 내용인데 확실히 맞는지가 궁금합니다. ! 1. Test에서 데이터변경이 일어나기에 @Transactional 에너테이션으로 트랜잭션시작을 지정한 상황에서 MemberService의 join메서드가 실행되면 join메서드도 @Transactional 에너테이션이 있어도, 동일한 트랜잭션으로 인식한다. (트랜잭션 내부의 트랜잭션이여도 동일한 트랜잭션) 2. 그렇다면 MemberServiceTest 트랜잭션과 MemberService의 트랜잭션이 동일한 트랜잭션이기에 스프링은 동일한 EntitiyManager를 제공하므로, 동일한 영속성 컨텍스트에 접근하기때문에, 엔티티 동일성을 보장한다. (요부분은 궁금한 내용입니다!) 3. spring boot를이용하면 @PersistenceContext로 EntitiyManagerFactory로부터 EntitiyManager를 받아오는것을 지원하는데, spring data jpa를 이용하면 스프링 컨테이너에서 스프링 빈 DI하는것과 같이 생성자주입(여타 다른 주입도 상관없음,, 필드주입,, setter주입)을 통해서 EntitiyManager를 받아올수있다고 하셨는데, 그럼 EntitiyManager가 스프링빈과같이 스프링 컨테이너에 존재한다는 의미인가요??? 항상 잘듣고있습니다. 읽어주셔서 감사합니다.

  • jpa
  • java
  • JPA
  • spring
  • 웹앱
  • spring-boot
염재선 댓글 2 좋아요 2 조회수 327

@RequestMapping("${...${...}}")이게 어떻게 동작하나요?

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

@RequestMapping(" ${server.error.path:${error.path:/error}} ") pulbic class BasicErrorController extends AbstractErrorController 이렇게 코드상에 탬플릿에서 사용하는 ${...} EL표기법이 사용되었는데요. 저는 저 문법이 html 파일에서 사용하는 건줄 알았거든요. 그래서 코드상에 있으니까 이게 제가 아는 그 EL 표기법인건지, 결국 어떻게 동작하는 건지 잘 모르겠습니다. 갓영한님께서 아무 설정 하지 않으면 /error가 기본으로 동작합니다, 라고 하셨는데 그게 어떻게 이루어지는 건가요?

  • spring
  • MVC
컴퓨터공부하자 댓글 1 좋아요 4 조회수 522

getReference의 id값 조회시

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

저랑 비슷한 고민을 하시는분의 질문들을 봤는데 "내부적으로 값을 가지고 있기에 쿼리가 안나간다" 라는 답변을글 보았습니다 ! 1.여기서 내부적이라는게 그냥 순수 자바객체를 뜻 하시는걸까 요?(영속 컨텍스트는 clear로 깨끗해졌지만 자바 객체는 아직 남아있으니) 2. name값도 내부적으로 남아있다고 생각이 드는데 제가 좀 놓친부분이 있을까요?? ㅠㅠ 3. 이미 em.getReference에 파라미터로 id값을 넣었기 때문에 이미 알고있다고 jpa가 인식해서 쿼리를 안내보내는건가요 ??

  • JPA
  • java
원석나 댓글 1 좋아요 0 조회수 212

`익명 사용자` 개념에 대한 질문

해결됨

스프링 시큐리티

`익명 사용자` 라는 것이 그냥 보기에는 접속이 가능한 것처럼 보였지만, 강의와 여러 QnA 를 다시 보다알게된 결론으로 정리를 해보았습니다. Spring Security 에서의 `익명사용자` 개념 정리 인증이 되기 전이나, 이후 의 사용자 모두 유효한 인증토큰을 갖고있지 못하면 `익명 사용자`이다 `익명 사용자`는 로그인이 가능한 경로를 통해 인증허가를 을 받게 될 경우, 일반 사용자로 등극하여, 로그인 접속 및 향후 접속유지가 가능하게된다. 인증을 받지 못한 사용자는 `익명 사용자`로 분류되어, `익명 사용자` 인증 토큰이(인증 객체) 익명 사용자 관리 명목으로 생성되지만, 로그인과 관련된 접근 권한은 없다(세션 생성이 되지않음) -> `redirect /login page` `익명 사용자` 전용으로 발급된 인증토큰을 통해, 향후 `익명 사용자` 접근 여부를 관리 할 수 있다 틀린 부분이 있다면 조언을 구합니다. 감사합니다.

  • java
  • spring-boot
  • Spring Security
Truestar 댓글 1 좋아요 7 조회수 534

복잡하고 join이 많은 쿼리에 대해 질문이 있습니다.

미해결

자바 ORM 표준 JPA 프로그래밍 - 기본편

안녕하세요 영한님 강의도 듣고, 책도 잘읽고 있습니다. 요즘엔 책을 주로 읽고 있네요 ㅎㅎ 다름이 아니라 제가 질문이 있습니다. 제가 jpa를 사용하는 개인 프로젝트를 진행중이고, 영한님 책을 보면서 많은 도움을 받고있습니다. 그런데 책에는 주로 join이 많아야 한번정도 있는 예제들이 많은데, 제가 사용하는 쿼리는 join을 4번씩이나 하고, 그렇게 해서 나온 결과 행들중 랜덤으로 하나의 row를 추출해야하는 형태라 order by random() limit 1 이런식의 조건을 주려했습니다. 다소 조인이 많이들어간 쿼리인데 spring data jpa 의 @query를 사용하려다보니 쿼리가 너무 길어서 뭔가 하드코딩하는 느낌도 들고, @query에서는 rand를 지원하지 않더군요... 이런경우에는 주로 querydsl을 사용하나요? 다른 질문을 보니 creteria 는 사용하지 않는게 좋다는 의견이있으셔서 질문드립니다. 아니면 단순히 jparepository를 구현한 repository 인터페이스를 이용해서도 해결이 가능할까요?ㅠㅠ

  • JPA
  • java
댓글 1 좋아요 0 조회수 427

Service와 Entity 비즈니스 로직에 관해

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요. DDD Start라는 책을 함께 읽으며 영한님의 강좌를 다시 한번 보고 있습니다. 그러던 도중 과연 어디까지 비즈니스 로직으로 보아야할까에 대한 의문점이 생겼습니다. 책에서는 도메인(엔티티) 쪽에 비즈니스 로직을 두고 서비스 레이어는 각 도메인의 함수를 호출하는 형태로 구현하여 서비스를 최대한 얇게 만들어야한다고 하더라구요. 그런데 이번 강의 2분 49초쯤을 보면 중복 회원을 검증하는 코드가 서비스 레이어에 위치해있습니다. 회원가입이라는 기능에서 중복 회원 검증이라는 규칙은 서비스에 있어 핵심 비즈니스 로직이라고 생각하는데요. 이 부분을 엔티티쪽에 두어 검증하지않고 서비스 레이어에 두셔서 혼란이 오더라구요. 질문을 요약하자면, 1. 중복 회원 검증 코드는 비즈니스 로직이라고 봐야할까요? 2. 맞다면 비즈니스 로직은 엔티티에 들어가야 하지 않나요? 3. 요구사항에는 중복 검증뿐만 아니라 수많은 검증 로직들이 존재할텐데, 이를 서비스에 작성해야할지 엔티티에 작성해야할지 어떠한 기준으로 판단해야할까요? 4. 도메인(엔티티)에서는 레포지토리를 호출하면 안된다고 알고 있습니다. 현업에서는 이를 명확하게 지키면서 코드를 작성하나요? 5. 만약 4번이 맞다면, 중복 회원 검증의 경우 실제 데이터베이스에 조회하는 쿼리를 날려야합니다. 이렇게 데이터베이스에 접근해야하는 로직의 경우 엔티티에 작성하면 안되는걸까요? (모든 질문은 DDD를 기반으로 질문드립니다!) 많은 예제들을 살펴보아도 서비스레이어에 작성할지 엔티티쪽에 작성할지 기준을 잡기가 정말 힘드네요.. 이 부분에 대해서 영한님의 의견을 듣고 싶습니다. 감사합니다 :)

  • spring
  • 웹앱
  • java
  • spring-boot
  • JPA
pwn2own 댓글 2 좋아요 12 조회수 3142

강사님 현재 등록하는 부분에서 오류가 나는데 이유를 모르겠습니다.

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

화면에서 아이템을 등록하려고 합니다. 배송방식을 추가하고나서부터 상품 등록 버튼을 누르는 순간400에러가 떨어지는데요ㅠㅠ 20분을 헤멧는데도 이유를 알 수 없어서 질문드립니다. [컨트롤러] [DeliveryCode] [addForm.html] 오류 메시지를 간략하게 적어보면 아래와 같습니다. 2021-07-07 15:10:15.833 WARN 20644 --- [nio-8080-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'item' on field 'deliveryCode': rejected value [FAST]; codes [typeMismatch.item.deliveryCode,typeMismatch.deliveryCode,typeMismatch.hello.itemservice.domain.item.DeliveryCode,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [item.deliveryCode,deliveryCode]; arguments []; default message [deliveryCode]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'hello.itemservice.domain.item.DeliveryCode' for property 'deliveryCode'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'hello.itemservice.domain.item.DeliveryCode' for property 'deliveryCode': no matching editors or conversion strategy found]]

  • MVC
  • spring
김은재 댓글 2 좋아요 0 조회수 1450

th:object, @ModelAttribute 관련 질문

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

안녕하세요, 강의를 수강하던 중 궁금한 점이 생겨, 궁금증을 해소하기 위해 혼자 테스트를 해봤습니다. 테스트를 통해 혼자 결론을 내렸는데.... 제가 제대로 이해한게 맞는지 궁금해서 질문 올립니다! [상황] @GetMapping ( "/add" ) public String addForm (Model model) { model.addAttribute( "item" , new Item()) ; return "validation/v3/addForm" ; } //@PostMapping("/add") //public String addItem(@ModelAttribute Item item) @PostMapping("/add") public Strign addItem(@ModelAttribute("item") ItemSaveForm formm) Item 객체가 아닌 ItemSaveForm 객체로 입력된 값을 바인딩 시키는 상황에서 Model에 'Item' 객체를 추가해서 'addForm.html' 로 넘겨주는데 View의 Form 에서 넘어온 값을 Item 객체가 아닌 ItemSaveForm 객체에서도 잘 받을 수 있는 상황에 궁금증이 생겼습니다. [결론] 1) Model에 'Item' 객체를 추가해서 'addForm.html' 로 넘어갈 때의 'Item' 객체를 추가하는 이유는 th:object, th:field를 이용해서 html 코드를 깔끔하게 사용하기 위한 용도다. 2) 그렇기 때문에 @ModelAttribute 는 View에서 넘어온 값 중 이름이 일치하는 값들을 ItemSaveForm 의 setter를 이용해서 주입해준다. 따라서, ItemSaveForm 과 Item 객체의 필드명이 같으므로 변경을 해도 문제가 발생하지 않는 것이다. 위의 2개 결론이 제가 테스트를 통해 내린 결론입니다...!

  • spring
  • MVC
이현석 댓글 1 좋아요 3 조회수 360

윈도우에서 gradle로 빌드하시려는 분께 공유드립니다.

미해결

스프링과 JPA 기반 웹 애플리케이션 개발

윈도우 환경에서 gradle로 빌드 하시려는 분들을 위해 공유 드립니다. 1. build.gradle dependencies { ... classpath "com.github.node-gradle:gradle-node-plugin:3.1.0" } classpath에 node-gradle 을 추가해 주시고 def preinstalledNodeDistributionDirectory = file("${projectDir}/src/main/resources/static/node") 이거 하나 선언해 주시고 apply plugin: "com.github.node-gradle.node" 위 플러그인 적용해주시면 node { version = '11.15.0' // 제가 사용중인 노드 버전을 적었습니다. download = true nodeModulesDir = file("${projectDir}/src/main/resources/static") } task copyFrontLib(type: Copy) { from "${projectDir}/src/main/resources/static" into "${projectDir}/build/resources/main/static/." } copyFrontLib.dependsOn npmInstall compileJava.dependsOn copyFrontLib 해당 코드를 추가하여 사용하시면 build시에 프런트 라이브러리들을 빌드에 추가하실 수 있습니다. 2. css 깨짐 현상 본 강의와 같이 부트스트랩을 사용하셔서 동일한 css를 적용시키려면 그냥 install bootstrap으로는 안되는것같습니다. 버전이 달라서 css 속성명이 달라졌나봐요... 그래서 만약에 build에 정상적으로 라이브러리 추가 되시는데 뷰가 어디가 좀 깨져서 나오시거나 css가 적용이 잘 안되시면 "dependencies": { "bootstrap": "^4.4.1", "jquery": "^3.4.1" } 선생님이 강의에서 사용하신 버전으로 명시적으로 바꾸어주셔야 합니다. 저렇게 적용하면 정상적으로 뷰가 나와요... 많이 해맸네요ㅜㅜ

  • java
  • thymeleaf
  • JPA
  • spring
  • spring-boot
chanho0912 댓글 2 좋아요 6 조회수 1312

httpResponse.senRedirect에 대해서 질문드립니다!

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

httpResponse.sendRedirect("/login?redirectURL="+requestURI); 이 함수가 setAttribute처럼 httpResponse 객체의 어떤 필드를 "/login?redirectURL="+requestURI 이 값으로 세팅하는 거라고 생각하면 되나요? 함수 이름이 send라서 바로 보내버리는 것처럼 보여서 많이 헷갈리네요. 이 함수 다음에 return이 되면 함수가 종료되고, 스프링이 response를 뒤져보고 저 필드에 경로가 들어있으면 거기로 보내는 방식인가요? 그리고 콘솔 로그에서 미인증 사용자 요청 로직에 들어간 다음에 finally 로직이 왜 호출되는 건가요? return 되면 함수에서 빠져나오고 인증 체크 필터 종료 가 콘솔에 안 나와야 되는거 아닌가요?

  • MVC
  • spring
컴퓨터공부하자 댓글 1 좋아요 1 조회수 371

인터페이스 사용법 접근방식에 대한 의문점입니다!

해결됨

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

초심자가 느끼기에는 인터페이스는 사용 설명서 같은 거라서 활용할 때 마음대로 바꾸면 안돼고, 지침대로 사용해야 하는 것, 이라고 받아들여지거든요. 그래서 Filter를 구현하실 때 @Override 함수가 3개 만들어지는데 init함수에는 Filter.super.init(filterConfig); 가 들어있고 destroy 함수에는 Filter.super.destroy();가 들어있잖아요? 영상에서는 표현하지 않으셨지만 필요없다고 여기셨는지 삭제하시고 Log.info 문을 넣으셨습니다. Filter 인터페이스가 HTTP 요청만 받을 수 있도록 만들어진게 아니시라며(HttpServletRequest)로 다운케스팅 하시기도 하고요. 만약 이 영상을 보지 않았다면 저는 Filter 인터페이스를 보고서 Filter.super.init() Filter.super.destroy() 이것들은 뭐지? 뭔가 지우면 큰일날 것 같으니까 가만 놔둬야되는 것 아닐까. 그래 다 프로그래머님들이 뜻이 있어서 놔둬셨을거야. 하면서 가만히 놔뒀을 것이고 HttpServletRequest 이것으로도 다운 케스팅 하지 않고 request에 .점을 딱 찍어보고 어? 아니 내가 원하는 사용법으로 사용할 수 없잖아. 어떻게 하지? 하고 몇시간을 헤맸을 것 같은데... 결론적으로 인터페이스 형태만으로는 내가 인터페이스를 제대로 사용하고 있는지 알 수 없다, 라는 것이고 인터페이스를 사용할 때마다 혹시 다른 인터페이스가 있는게 아닐까 의심하게 될지도 모를거 같습니다. 그래서 이런 인터페이스 형태에서 얻을 수 있는 정보를 넘어서 더 많은 모종의 정보들을 파악해야 비로서 인터페이스를 사용할 수 있는 부조리함?을 어떻게 극복하시는 건지 궁금합니다.

  • spring
  • MVC
컴퓨터공부하자 댓글 2 좋아요 7 조회수 424

cancelOrder에서 order.cancel에 의해 발생할 수 있는 IllegalStateException에 대한 처리는 필요없나요??

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

이미 상품이 발송되었을 때 IllegalStateException이 발생하게 되어있는데, 이에 대한 처리는 없는 것 같아서 질문드립니다. 그리고 만약에 이것에 대해 처리해주는게 맞다면 처리는 어떻게 해야할까요??

  • spring
  • spring-boot
  • JPA
  • 웹앱
  • java
ᄌᄋᄀ 댓글 2 좋아요 1 조회수 203

Delivery에 있는 Address 관련하여 질문드립니다.

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

안녕하세요 선생님 강의 잘 듣고 있습니다. Delivery에 Address가 있는데 이 값은 Delivery에 있는 Order를 참조하고 그 안에 있는 Member를 참조하면 가져올 수 있지 않나요 ? 참조가 너무 많이 일어나기 때문에 Address를 Delivery에 선언하는건가요 ??

  • spring-boot
  • spring
  • 웹앱
  • JPA
  • java
이재윤 댓글 1 좋아요 0 조회수 195

dto 변환 로직의 위치

미해결

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

requestDto 나 responseDto 를 변환하는 로직은 어디에 위치하는게 좋을까요? 애플리케이션이 복잡해지면 저런 변환 로직들이 컨트롤러에 있게 되면 컨트롤러가 너무 복잡해 질거 같은데 어디에 있는게 좋을까요? 그리고 dto 변환을 서비스 계층해도 해되 되는것인지도 궁금합니다. 서비스 계층에서는 dto 에서 엔티티로 변환된 객체만 받아야 하는 것인지 그럼 서비스 계층에서는 리턴 타입을 dto 로 해야 하는지 아니면 엔티티를 그대로 리턴해주고 컨트롤러에서 변환을 해야하는지... 엔티티와 dto 를 나눠야 하는 이유와 필요성에는 공감을 하지만 그 변환 로직의 위치는 어디로 해야 할지 기준이 잘 서지 않는것 같습니다.

  • spring
  • MVC
opensesame 댓글 1 좋아요 1 조회수 3154

질문드립니다

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

학습중 강의 설정대로 war, java11, 디펜던시 웹, 롬북 설정후 따라하는데 "C:\Program Files\Java\jdk-11.0.10_windows-x64_bin\jdk-11.0.10\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.3.1\lib\idea_rt.jar=52700:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath C:\servlet_re\servlet_re\out\production\classes;C:\servlet_re\servlet_re\out\production\resources;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\2.5.2\9d68318f6607728e253030aa145e529bae9b0883\spring-boot-starter-web-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\2.5.2\6af2e2d4fcf02fcda700dbbcd4643e78d31bcc8c\spring-boot-starter-json-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\2.5.2\5aa5345f60cd3fbca331c05015e0700553448d66\spring-boot-starter-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\5.3.8\2cfa5e12bf103e2c82db78ce198e455dab456465\spring-webmvc-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\5.3.8\daa288e67b0f2e09a033500d5ce8406677c5045c\spring-web-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.12.3\f69c636438dcf19c49960c1fe8901320ab85f989\jackson-datatype-jsr310-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.12.3\592a882beaf1bd57b8fe960b937a2706b090b4d7\jackson-module-parameter-names-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.12.3\77424ea087313312e308dae5ff8445608aabb5e1\jackson-datatype-jdk8-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.12.3\d6153f8fc60c479ab0f9efb35c034526436a4953\jackson-databind-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\2.5.2\aa924c5d0d375f4b2b66f211704c24d40a7e647b\spring-boot-autoconfigure-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\2.5.2\bd6dc87b5ad870dbf635d0c7d9a3006666c9e797\spring-boot-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\2.5.2\8b94a1e350f68f8c3a7de6460e5691a84c8c157d\spring-boot-starter-logging-2.5.2.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\5.3.8\da9b87dacaa5bbf80fad0f7b483988372a00a152\spring-core-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\1.28\7cae037c3014350c923776548e71c9feb7a69259\snakeyaml-1.28.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\5.3.8\c367a05423e963c222e38a6a88b97d44de3880ca\spring-context-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\5.3.8\1377f80f938b1fc7eabe9e6c4f6895e77e3bec40\spring-aop-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\5.3.8\3d66fed1eebfcd119efcabc6218c813700a21ed\spring-beans-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\5.3.8\8a14547b76cbae3aeb02739e5b38e71835a6bbd8\spring-expression-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.12.3\7275513412694a1aafd08c0287f48469fa0e6e17\jackson-annotations-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.12.3\deb23fe2a7f2b773e18ced2b50d4acc1df8fa366\jackson-core-2.12.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.2.3\7c4f3c474fb2c041d8028740440937705ebb473a\logback-classic-1.2.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.14.1\ce8a86a3f50a4304749828ce68e7478cafbc8039\log4j-to-slf4j-2.14.1.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\1.7.31\f9ff62d83a25a94c1619de06d4015e2797bc849c\jul-to-slf4j-1.7.31.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\5.3.8\a143c8618eb2be8674c3cf132d9a5c953bb5488\spring-jcl-5.3.8.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.2.3\864344400c3d4d92dfeb0a305dc87d953677c03c\logback-core-1.2.3.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\1.7.31\9545c9cb71de4c18d97a91e32ef0be6f3f6661b7\slf4j-api-1.7.31.jar;C:\Users\kcj30\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.14.1\cd8858fbbde69f46bce8db1152c18a43328aae78\log4j-api-2.14.1.jar hello.servlet_re.ServletReApplication . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.5.2) 2021-07-05 18:59:15.929 INFO 9308 --- [ main] hello.servlet_re.ServletReApplication : Starting ServletReApplication using Java 11.0.10 on DESKTOP-S0IEC1P with PID 9308 (C:\servlet_re\servlet_re\out\production\classes started by kcj30 in C:\servlet_re\servlet_re) 2021-07-05 18:59:15.934 INFO 9308 --- [ main] hello.servlet_re.ServletReApplication : No active profile set, falling back to default profiles: default 2021-07-05 18:59:16.510 WARN 9308 --- [ 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/WebServlet 2021-07-05 18:59:16.516 INFO 9308 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2021-07-05 18:59:16.539 ERROR 9308 --- [ 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/WebServlet at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:537) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:213) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:196) ~[spring-context-5.3.8.jar:5.3.8] at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:746) ~[spring-context-5.3.8.jar:5.3.8] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:564) ~[spring-context-5.3.8.jar:5.3.8] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.2.jar:2.5.2] at hello.servlet_re.ServletReApplication.main(ServletReApplication.java:14) ~[classes/:na] Caused by: java.lang.NoClassDefFoundError: javax/servlet/annotation/WebServlet at org.springframework.boot.web.servlet.WebServletHandler.<init>(WebServletHandler.java:39) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.web.servlet.ServletComponentRegisteringPostProcessor.<clinit>(ServletComponentRegisteringPostProcessor.java:49) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.boot.web.servlet.ServletComponentScanRegistrar$ServletComponentRegisteringPostProcessorBeanDefinition.lambda$getInstanceSupplier$0(ServletComponentScanRegistrar.java:94) ~[spring-boot-2.5.2.jar:2.5.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1231) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.8.jar:5.3.8] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.8.jar:5.3.8] ... 13 common frames omitted Caused by: java.lang.ClassNotFoundException: javax.servlet.annotation.WebServlet at 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 이런 오류가 발생했습니다 왜 이런거죠??

  • spring#servlet
  • spring
  • MVC
댓글 1 좋아요 0 조회수 209

서블릿에 대해서 질문있습니다!

미해결

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

서블릿이 싱글톤으로 하나만 생성된다는 것은 알겠는데 만약 url로 /hello, /spring 이렇게 다르게 요청이 올 경우는 싱글톤 서블릿 2개 가 생성된다고 보면 되나요?

  • spring
  • MVC
전한울 댓글 1 좋아요 0 조회수 282

인기 태그

인프런 TOP Writers

주간 인기글