inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

세션 관련 질문 있습니다!

미해결

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

1. 앞 강의에서 세션 관련해서는 서버에서 세션 저장할때 랜덤 값과 맴버 객체만 있으면 될 거 같은데 굳이 SessionConst.LO GIN_MEMBER값은 왜 쓰이고 어디에 쓰는지 모르겠습니다. 2. 그냥 session.setAttribute하면 addCookie 할 필요없이 알아서 클라이언트한테 세션 값이 가는 건가요??

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

간단한 로그인 api 적용

미해결

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

안녕하세요 좋은 강의 만들어주셔서 감사합니다 django 강의를 마친 후 이를 바탕으로 로그인, 회원가입, 프로필 확인, 삭제 정도 가능한 프로젝트를 새로 만들었습니다. 이를 바탕으로 강의의 profile 모델을 기반으로 한 간단한 api를 만들었고 지금 목적은 이 api를 기준으로 새로만든 django 프로젝트의 MODEL부분을 모두 api에서 관리하도록 적용하고싶은 학생입니다. 제가 만든 api의 명세서 입니다. https://documenter.getpostman.com/view/15940594/Tzm6kvP2 #accountapp/create.html {% extends 'base.html' %} {% load bootstrap4 %} {% block content %} <div style =" text-align : center ; max-width : 500 px ; margin : 4 rem auto ; " > <div class ="mb-4" > <h4> Signup </h4> </div> <form action ="{% url 'accountapp:create' %}" method ="post" > {% csrf_token %} {% bootstrap_form form %} <input type ="submit" class = "btn btn-dark rounded-pill col-6 mt-3" > </form> </div> {% endblock %} 에서 <form action ="{% url 'accountapp:create' %}" method ="post" > 이 부분의 url을 바꾸면서 class AccountCreateView(CreateView): model = User form_class = UserCreationForm success_url = reverse_lazy( 'profileapp:create' ) # reverse_lazy 는 클래스형 뷰에서 reverse 는 함수형 뷰에서 template_name = 'accountapp/create.html' 이 부분을 함수형 뷰로 바꿔서 진행하려는데 위에 만든 api의 json 형식을 어떤식으로 읽고 쓰게 할 수 있는지에 대한 방법론이 궁금합니다... 참고로 rest api 서버의 스토리지는 mariadb이고 추후에는 현 django 프로젝트의 모델을 전부 삭제하고 api로만 진행할 생각입니다. 소셜 로그인과 비슷한 형태로 진행하려고 했는데 참 힘들더라구요.. 공부가 부족한 것 같습니다 ------------------------------------------ 현재 방법을 찾던 중 https://www.daleseo.com/python-json/ 위 포스트를 보고 파이썬 내장 모듈인 json 모듈을 통해 입력받는 것을 공부중에 있습니다 혹시 다른 방법이 있는지 이 방법을 사용할 경우 문제점이 무엇인지 알려주시면 감사하겠습니다 ---------------------------------------------------------------------------- #accountapp/views.py import json , requests # Create your views here. def web_request (method_name , url , dict_data , is_urlencoded= True ): """Web GET or POST request 를 호출 후 그 결과를 dict 형으로 반환 """ method_name = method_name.upper() # 메소드이름을 대문자로 바꾼다 if method_name not in ( 'GET' , 'POST' ): raise Exception ( 'method_name is GET or POST plz...' ) if method_name == 'GET' : # GET 방식인 경우 response = requests.get( url =url , params =dict_data) elif method_name == 'POST' : # POST 방식인 경우 if is_urlencoded is True : response = requests.post( url =url , data =dict_data , headers ={ 'Content-Type' : 'application/x-www-form-urlencoded' }) else : response = requests.post( url =url , data =json.dumps(dict_data) , headers ={ 'Content-Type' : 'application/json' }) dict_meta = { 'status_code' : response.status_code , 'ok' : response.ok , 'encoding' : response.encoding , 'Content-Type' : response.headers[ 'Content-Type' ]} if 'json' in str (response.headers[ 'Content-Type' ]): # JSON 형태인 경우 return {**dict_meta , **response.json()} else : # 문자열 형태인 경우 return {**dict_meta , **{ 'text' : response.text}} python에서 http메소드의 post와 get을 사용할 수 있는 함수를 views.py 에 추가해주고 def signup (request): if request.method == 'POST' : print ( ' 리퀘스트 로그 ' + str (request.body)) username = request.POST.get( 'userid' , '' ) password = request.POST.get( 'userpw' , '' ) pw2 = request.POST.get( 'userpw2' , '' ) print (username , password , pw2) if password == pw2: json_signup = {} json_signup[ "username" ] = username json_signup[ "password" ] = password url = 'http://APIhost:port/register/' # 접속할 사이트주소 또는 IP 주소를 입력한다 data = json_signup # 요청할 데이터 # (example) data = {"username":"test123","password":"testword123"} print (data) response = web_request( method_name = 'POST' , url =url , dict_data =data) return HttpResponse( 'success' ) return render(request , "accounts/signup.html" ) 탬플릿의 http에서 따온 변수 userid, userpw를 따와서 파이썬 내장 모듈인 json을 통해서 json파일을 만들고 data 변수에 입력하고 위에서 만든 함수를 통해 api에 json 으로 POST 요청을 보내는 함수를 디자인하여 해결했습니다. 위 처럼 json을 통해 로그인과 패스워드를 api 서버와 주고받는다면 보안적으로 이슈가 될 만한 사항이 있을까요? -----------------------------------

  • django
  • python
  • django
  • http
  • docker
  • api
JunR 댓글 1 좋아요 0 조회수 332

스프링부트 내장 WAS 성능이

미해결

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

안녕하세요~! 저는 스프링부트는 현재 안써봤고 이번강의 통해서 접하고있습니다. 스프링부트 내장 WAS를 사용 시에 커버할 수 있는 리소스가 있을거라 생각이드는데 스프링부트내장 WAS사용시에는 확장을 어떻게 하시나요? 근무하시는 회사의 규모면 엄청큰 대규모라고 생각이드는데 어떻게 처리하시는지 궁금합니다. 스프링부트를 실행시켜 놓은 서버를 여러 개 두고 네트워트상에서 로드밸런싱하시는지 그런게 궁금하네요 아니면 내장 WAS한개로도 웬만한 서비스는 다수용이 가능한건지 궁금하네요 좋은강의 감사합니다.

  • spring
  • MVC
리액트공부해보자 댓글 1 좋아요 6 조회수 598

안녕하세요. 타임리프 관련해서 질문이 있습니다.

미해결

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

가령 JSP에서 <h1>${date} 테스트</h1> 이런식으로 처리하는데 타임리프에서는 타임리프 객체 + 텍스트 나타낼때 어떤식으로 해야될지 감지 안와서 질문드립니다! 감사합니다. ㅜ

  • spring
  • MVC
조재연 댓글 1 좋아요 1 조회수 193

Resource 인터페이스에 대한 질문입니다!

해결됨

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

컨트롤러에 맵핑된 링크를 타고 들어오면 반환된 값을 text 페이지로 전송하거나 템플릿을 렌더링한 html이 전송되는게 일반적인 웹 프로그램 동작방식이잖아요? img 테그 같은 경우 contentDisposition 같은 규약을 사용한 것도 아니고 컨트롤러는 Response라는 인터페이스 타입의 객체를 반환했을 뿐이니 jason 형태로 Response 객체가 웹페이지에 보이는게 정상 아닌가요? 어떻게 페이지 이동없이 <img> 테그 위치에 이미지를 보여줄 수 있는 것인가요?

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

html { font-size: 62.5% } 에 관한 질문

해결됨

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

// 맨 아래에 한 줄 요약 질문 있습니다...! 1rem이 16px 단위인 것이 불편하여, 어떻게 하면 직관적으로 px 단위와 1:1 매칭을 할 수 있을까 알아보던 도중, 아래와 같은 방법을 발견했습니다. html { font-size: 62.5%; /* 100% = 16px | 62.5% = 10px */ } body { font-size: 1.6rem; } 이렇게 하면 1rem이 10px을 의미하게 되어, 보다 직관적인 사이즈 조절이 가능하더라구요. 그런데, 위의 CSS 코드를 적용한 뒤, 강의 내용에 나온 rem의 수치들에 전부 1.6을 곱하여 재적용했음에도 불구하고, 사이즈가 뭔가 이상하게 엄청 작게 나오더군요... 알아보니 header들 (h1~h6)마다 font-size를 다시 재정의 내려야 하는 상황이 펼쳐지고... h1~h6 전부 공식 사이즈에 맞춰 rem값을 지정해봐도 강의에서 제공하는 결과물과 전혀 일치하지 않고... 너무 힘들어서 결국 전부 다 git reset --hard 하고 강의 내용대로 따라하고 있습니다. ============= 질문: 1rem을 10px로 만드는 위와 같은 (유명한) 트릭을 사용하는 방법은, 웬만하면 지양하는 게 나을까요?

  • django
  • docker
  • python
H M (JUD210) 댓글 2 좋아요 0 조회수 1188

톰켓이 클라이언트로부터 받은 HTTP를 디코딩하는 방식은 어떻게 되나요?

해결됨

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

톰켓이 HTTP를 디코딩하는 방식을 아래와 같이 생각하고 있습니다. 제가 제대로 이해한 걸까요? HTTP 헤더는 ISO 8859-1로 디코딩합니다. HTTP 바디는 헤더에서 선언한 디코딩 방식으로 디코딩 하거나 HTTP form 데이터 방식 입력스트림 같은 경우는 UTF-8 디코딩 방식을 사용합니다. 예로 들면 POST/save HTTP/1.1 Host: localhost:8080 Content-Type: multipart/form-data; boundary=------XXX <- ISO 8859-1 디코딩 ------XXX Content-Disposition: form-data; name="username" <- UTF-8 디코딩 kim <- UTF-8 디코딩 ------XXX Content-Dispositon: form-data; name="age" <- UTF-8 디코딩 20 <- UTF-8 디코딩 ------XXX Content-Disposition:form-data; name="file1"; filename="intro.png" Content-Type: image/png <- UTF-8 디코딩 109328a9.... <-PNG압축 바이너리 형태 그대로

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

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

미해결

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

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

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

시간측정 질문입니다!

미해결

타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍

안녕하세요. 마지막 시간 측정 부분에서 질문이 있습니다! use slot이 0.16이고 no slot이 0.13인데 여기서 어떻게 use slot이 메모리 효율이 좋다는 결론이 도출되는 건가요?

  • oop
  • python
Coffee_Cat 댓글 1 좋아요 2 조회수 246

안녕하세요 선생님 강의내용대로 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

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

해결됨

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

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

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

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

미해결

스프링 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

pyautogui 관련 질의입니다. 도와주세요 ㅠㅠ

미해결

python / pyautogui / pillow 모두 최신 버젼으로 되어 있습니다. vscode 상에서 b = pyautogui . locateCenterOnScreen ( ' five.png ' , confidence = 0.7 ) print ( b ) 다음처럼 five.png 이미지 파일 가운데 좌표를 출력하고 싶은데 런하면 터미널에 다음과 같은 에러가 뜹니다 ㅠㅠ PyScreezeException('The Pillow package is required to use this function.') 이미 pillow 라이브러리가 설치가 되어 있음에도 이런 에러가 왜 발생할까요? 이걸 해결하기 위해서 1) pillow > pyautogui 순으로 재설치 2) cmd 관리자 실행으로 해서 강제 재설치 3) 과거 PIL 라이브러리 있으면 삭제 모두 해보았지만 그대로 에러가 뜨는 상황입니다. python이 3.9.6 버젼인데 호환이 안 맞는게 문제인걸까요? 도와주세요 ㅠㅠ

  • python
  • pyautogui
  • pillow
tkdalsfe2 댓글 1 좋아요 0 조회수 3827

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

dto 변환 로직의 위치

미해결

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

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

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

아톰 에러창 뜨는데 왜그런가요ㅠ

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

아래 사진과 같은 팝업창이 우측에 하나 작성시마다 뜹니다 ㅠㅠ

  • python
댓글 1 좋아요 0 조회수 216

질문드립니다

미해결

스프링 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

주간 인기글