inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

2024년 1월 기준 p6spy dependency 추가

미해결

실전! 스프링 데이터 JPA

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' 1.9.0으로 바꾸시면 나올겁니다!

  • java
  • spring
  • spring-boot
  • jpa
동형 댓글 3 좋아요 7 조회수 997

th:action 질문 있습니다.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG ) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 코드를 작성하실 때, th:action을 비워두셨습니다. 그리고 그 뒤 설명하실 때, "수정하기를 누르고 소스를 보면 action이 비워져 있는데, 이대로 저장하게 되면 이 경로 그대로 들어가게 됩니다"라고 말씀하셨습니다. 설명하시는 의미는 대강 이해하겠는데 정확히 이해가 잘 안됩니다. 구체적으로 어떤 과정을 거쳐서 강사님이 말씀하신 대로 수행이 되는건가요? 설명 부탁드립니다.

  • spring
  • mvc
blackhole124 댓글 2 좋아요 0 조회수 366

싱글톤 객체 사용 방법이 이해가 안됩니다.

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 위에서 private final ItemRepository itemRepository라고 작성한 부분은 ItemRepository의 객체를 하나만 사용하려는 목적. 즉, 싱글톤 객체를 사용하려는 목적으로 이해를 했습니다. 근데, 위에 코드는 ItemRepository의 참조값을 담을 수 있는 변수를 선언만 하고 실제 객체를 가져오는 부분(ItemRepository 객체)이 없는거 같은데 어떻게 ItemRepository 객체를 BasicItemController 클래스에서 사용할 수 있는건가요? 설명 부탁드립니다.

  • spring
  • mvc
blackhole124 댓글 2 좋아요 0 조회수 374

H2 설치과정 시작 부터 막혀서 몇일째 진도가 막혔습니다....

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 답답합니다.... 원격 지원 이런게 있으면 좋겠습니다.. 일과 다 마치고 강의 시간 쪼개서 겨우 보려는데 올드버전 강의를 계속 판매하고 있지만 그에 비해 좀 영상제작 당시 버전과 많이 다른 부분을 찾아 헤매는 수강생들이 자주 보이고 영상 10분을 보려고 설정 안 되는 걸 찾아 2~3시간 낭비 할 때가 가장 아쉽네요... 다만 강의 내용은 만족스럽습니다. 여전히 해결이 안되고 있어 그냥 의견을 올려봅니다..

  • spring
  • mvc
  • spring-jdbc
모네 댓글 2 좋아요 0 조회수 741

URL요청 마지막에 "/" 을 포함하니 같은 URL로 매핑 안됩니다

미해결

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

안녕하세요! package hello.springmvc.basic.requestmapping; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MappingController { private Logger log = LoggerFactory.getLogger(getClass()); @RequestMapping("/hello-basic") public String helloBasic(){ log.info("helloBasic"); return "ok"; } } 이렇게 /hello-basic 으로 매핑 되어있습니다 /hello-basic URL로 요청하면 잘 되지만 강의 3분대 내용처럼 '/' 를 추가했더니 같은 요청으로 매핑이 안되고 404 오류가 발생합니다

  • spring
  • mvc
노뚜 댓글 1 좋아요 0 조회수 664

ServletInitializer

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 강의와 상관없지만 궁금해서 여쭤봅니다! 이전 기본편과 다르게 프로젝트 생성 후 ServletInitializer class가 별도로 생성된 이유는 무엇인가요?

  • spring
  • mvc
sde101573 댓글 1 좋아요 0 조회수 352

SpingConfig가 궁금합니다!

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. 강의 중 SpingConfig 클래스의 작동방식이 궁금해서 질문 올립니다! @Autowired 아래 생성자에 매개변수에는 bean에 있는 객체이거나 @Service , @Repository 등의 아래의 인스턴스가 들어가는 것 아니었나요? SpringConfig 생성자의 매개변수에 MemberRepository를 구현한 JpaMemberRepository의 인스턴스가 들어가야하는 것으로 알고있습니다. 어떠한 구조로 스프링 컨테이너가 JpaMemberRepository의 인스턴스를 넣어서 호출해주는 것인지 궁금합니다!! +찾아보던 중 스프링 데이터 JPA는 JpaRepository 와 같은 인터페이스를 상속받은 인터페이스를 스캔하여 자동으로 빈으로 등록한다는 사실을 확인하였습니다

  • java
  • spring
  • mvc
  • spring-boot
조성훈 댓글 2 좋아요 0 조회수 531

Cannot resolve symbol 'SpringBootApplication'

해결됨

인터넷에서 찾아본 해결책을 다 시도해 봐도 해결이 안되네요 ㅠㅠ Try it “File ▸ Invalidate Caches/Restart ▸ Invalidate And Restart” 시도해 보아도 안됨. Gradle에서 Reload All Gradle Projects를 해보아도 안됨. File → Project Structure 를 클릭한 후에 " Project Settings " 에 Project SDK 가 제대로 설정되었는지 확인해 봐도 안됨. Settings → "Build, Execution, Deployment" → "Build Tools" → Gradle 에 들어가 버전 확인해 봐도 안됨.

  • java
  • spring
  • springboot
Jay J 댓글 1 좋아요 0 조회수 1818

on 메서드 eventName 문의

미해결

[React 1부] 만들고 비교하며 학습하는 React

on 메서드 호출시 eventName을 "submit" 으로 사용하는 경우와 "@submit" 으로 사용하는 경우가 있는데요, 어떤 차이가 있나요?

  • react
  • mvc
byunghyun.yu 댓글 1 좋아요 1 조회수 278

요청매핑 - api예시

미해결

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

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 강의 4분대에 MappingClassController에서 PathVariable사용 할 때 변수의 이름과 {}안의 이름이 일치하면 @PathVariable(name = "userId") 여기서 (name = "userId") 이 부분을 생락하고 @PathVariable String userId 이렇게 써도 된다고 하셨느데 생략하고 코드를 작성하니 포스트맨으로 요청을 보내면 500에러와 함께 2024-01-10T01:03:31.758+09:00 ERROR 7843 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.] with root cause 이런 로그가 뜹니다. name을 명시해주면 잘 돌아가고요. 이유가 무엇인가요?

  • spring
  • mvc
Spring봄 댓글 1 좋아요 0 조회수 346

index.html 오류 질문

해결됨

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

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? ( 예 /아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/ 아니오 ) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? ( 예 /아니오) [질문 내용] webapp 패키지 생성 후 index.html과 basic.html 생성 후 ' localhost:8080 ' 또는 localhost:8080/index.html ' 으로 화면이 출력되어야 하는데 으로 출력되어서 질문들을 보면서 확인해본 결과 webapp 폴더 내의 index.html이 welcome 페이지로 등록이 되지 않는 것을 확인했습니다. 이 후 다른 질문에 'resource/static' 에 넣어서 확인하면 되지 않냐 라는 해당 질문으로 확인해본 결과 static에서는 정상적으로 welcome 페이지가 등록된 것을 확인했습니다. 질문들을 확인하면서 현재 강의에 등록된 소스 코드의 프로젝트는 자바 11버전이라 현재 제 컴퓨터에서 자바 17로 운영하고 있어서 확인이 조금 껄끄러운 상황이라 17에서는 따로 webapp 폴더로 확인할 수 있는지 궁금해서 질문 올렸습니다.

  • spring
  • mvc
mun9659 댓글 2 좋아요 0 조회수 369

Member 에러

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기에 질문 내용을 남겨주세요. MemeberRepository.java 에서 Member save(Member member); 를 입력하면 Member에 에러가 뜹니다영한님도 강의 중에 에러가 뜨셨는데 빠르게 고치시더라구요뭘 고치셨는지 알려주시면 감사하겠습니다!! import class를 눌러봤는데 import java.lang.reflect.Member;가 위에 입력되면 에러가 해결되긴 하더라구요근데 강의와 코드가 다른데 괜찮나요?

  • java
  • spring
  • mvc
  • spring-boot
asdf20834 댓글 1 좋아요 0 조회수 434

localhost:8080/hello가 whitelabel error가 떠요

해결됨

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

View 환경설정 강의 그대로 폴더를 만들었는데 localhost:8080/hello를 하면 화이트라벨 에러가 나오고, localhost:8080 만 치면 강의에서 /hello 붙인 결과 페이지랑 똑같이 나오는데 어디가 문제인지 모르겠어요.ㅜㅜㅜㅜ

  • java
  • spring
  • mvc
  • spring-boot
adiand 댓글 2 좋아요 0 조회수 916

회원테이블과 권한테이블 간 관계

해결됨

스프링 프레임워크는 내 손에 [스프1탄]

선생님 안녕하세요. 회원테이블과 권한테이블 간 관계 질문드립니다. 회원 1명이 사용자, 매니저, 관리자 중 여러 권한을 가질 수 있으니, 회원테이블과 권한테이블 간 관계는 '1대다'의 관계인가요?

  • jsp
  • spring
  • mvc
  • spring-security
kimks071 댓글 1 좋아요 0 조회수 492

예외처리가 된 건가요? 아님 에러인가요?

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예 [질문 내용] 여기에 질문 내용을 남겨주세요. package hello.hellospring.service; import hello.hellospring.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import java.util.Optional; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.junit.jupiter.api.Assertions.*; class MemberServiceTest { MemberService memberService = new MemberService(); @Test void join() { //given Member member = new Member(); member.setName("hello"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get(); Assertions.assertThat(member.getName()).isEqualTo(findMember.getName()); } @Test public void 중복_회원_예외() { //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when memberService.join(member1); try { memberService.join(member2); fail(); } catch (IllegalAccessError e) { //예외가 터져서 정상적으로 성공한 것 assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } //then } @Test void findMembers() { } @Test void findOne() { } } java.lang.IllegalStateException: 이미 존재하는 회원입니다. at hello.hellospring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:26) at java.base/java.util.Optional.ifPresent(Optional.java:178) at hello.hellospring.service.MemberService.validateDuplicateMember(MemberService.java:25) at hello.hellospring.service.MemberService.join(MemberService.java:18) at hello.hellospring.service.MemberServiceTest.중복_회원_예외(MemberServiceTest.java:45) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) at java.base/java.util.ArrayList.forEach(ArrayList.java:1511) Process finished with exit code -1 이렇게 빨간 느낌표가 뜨면 테스트 자체가 잘못된다는 건가요?

  • java
  • spring
  • mvc
  • spring-boot
kwldusrnclf 댓글 2 좋아요 0 조회수 653

logging.level.hello.itemserivce.repository.mybatis=trace 로깅레벨적용

미해결

스프링 DB 2편 - 데이터 접근 활용 기술

강의 후반에 logging level 을 trace로 하여 확인하는데 무슨 문제인지 확인이 되지 않네요.. debug까지만 먹히고 trace는 먹히지 않습니다.

  • spring
  • mvc
  • jpa
  • querydsl
  • spring-data-mybatis
  • spring-jpa
Jaehak Park 댓글 2 좋아요 0 조회수 441

섹션 8. 배열 - 문제와풀이3

해결됨

김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음

안녕하세요 강사님 productAdminEx 문제에 관련해서 질문이 있습니다. productNames[productCount] = scanner.nextLine(); 이게 원래 배우던 형식으로는 두번째 사진처럼 for문 안에서 productNames[i] = scanner.nextLine(); 이런식이어서 예를들어 i = 0인경우 productNames 배열의 0번째 인덱스에 scanner.nextLine();으로 사용자가 입력한 값이 들어가는건 이해가 가는데 productNames[productCount] = scanner.nextLine(); 면 productNames배열 안에 있는 productCount에 scanner.nextLine();로 사용자가 입력한 값을 넣는건가요..? 그리고 그 사용자가 입력한 값이 들어가있는 productCount를 productNames배열이 위치를 참조하고 있는걸까요?? 이해가 잘 안가서 질문드립니다. (첫번째 사진) (두번째 사진) productNames[productCount] = scanner.nextLine(); 이게 productNames의 배열 자리에 productCount의 값을 넣는다는 의미인가요? 이해가 안갑니다..ㅜ

  • java
  • 객체지향
  • 배열
댓글 1 좋아요 0 조회수 252

트랜잭션 궁금증

미해결

스프링 DB 1편 - 데이터 접근 핵심 원리

@Transactional public void writeDelete(int id) { writeRepository.deleteById(id); } //위에는 서비스 계층입니다 아래는 데이터 접근 계층입니다 public void deleteById(int id) { try { String sql = "delete table member where id=?"; template.update(sql, id); sql="aaaa"; template.update(sql); } catch (DataAccessException e) { throw new RuntimeException(e); } } Q. 이상태에서 실행해봤는데 왜 롤백이 안될까요?? 테스트 코드에서 실행한건 아닙니다.

  • spring
  • mvc
  • spring-jdbc
jung 댓글 1 좋아요 0 조회수 264

포스트매핑은

미해결

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) [질문 내용] 여기서 print가 되는것은 제가 등록버튼을 눌렀을 때 되더라구요 postmapping은 등록하는 경우에 실행되게 해주는 것 맞나요?

  • java
  • spring
  • mvc
  • spring-boot
손민성 댓글 1 좋아요 0 조회수 378

servlet에 대해 제 생각을 한번 정리해봤습니다

미해결

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

강의를 듣고 다른분들도 그렇고 저도 그렇고 이해가 안가는 부분이 있어서 다른분들도 보고 이해할수있도록 최대한 자세하고 쉽게 정리해봤는데 ,맞게 이해했을까요? 주제는 -servlet의 동작원리 -spring container는 어떻게 생성이되었는지 -dispatcherservlet가 singleton으로 관리된다고했는데 그러면 spring container와 어떤연관이있는지 -servlet 동작원리 1.web brower에서 요청을받고 web server에 넘겨준다음 WAS에 web server에 넘겨주어 servlet container에 service()가 요청을 처리하고 was의 web server에서 반환을 해주어 응답을 해준다 -spring container의 생성과정 1.web application을 실행하면 spring boot에서는 web.xml파일을 생성하고 web.xml파일안에 큰 틀에서 보자면 <param>~</param>부분은 root webapplicationcontext로 <servlet>~</servlet>부분은 web applicationcontext로 나뉘게 되는데 그 이유는 2-layered 아키텍쳐로 presentation Layer와 business Layer로 나뉘어서 개발하게 되기때문이다. 2.web.xml파일에 ContextLoderListenr가 applicationcontext.xml 또는 root.xml을 로딩하여 applicationcontext(=spring container)를 만들고 1번에서 언급한 business layer에 필요한 DAO 등 설정을 함으로써 applicationcontext를 생성한다. 여러정보를 찾아볼때 xml으로만 tomcat이 구현될때 servlet context와 application context가 생성이 되는줄알았는데 spring boot 3.0? 이상부터 WebApplicationInitializer 구현 + AnnotationConfigWebApplicationContext 으로 지원한다고 하여 spring container의 생성과정도 맞지만 더 최신버전으로도 설명하겠습니다. public class WebInitializer implements WebApplicationInitializer{ @Override public void onStartup(ServletContext servletContext) throws ServletException { ... AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.setConfigLocation("com.studyspring.basic.config"); ServletRegistration.Dynamic dispatcher = servletContext.addServlet("DispatcherServlet", new DispatcherServlet(context)); dispatcher.setLoadOnStartup(1); dispatcher.addMapping("/"); ... ... } } 1)톰캣을 실행하면 servlet context를 초기화하고 생성해야하는데 tomcat을 실행하면 tomcat이 webapplicationinitializer를 구현한 클래스를 먼저 찾게됩니다. 2)찾고나서 onStartup메소드를 실행하여 Annotationconfigwebapplicationcontext를 통해 applicationcontext를 만들게됩니다. -dispatcherservlet의 생성과정 dispatcherservlet같은경우 servlet context가 생성되는 시점(=생성되는 시점도 lazy loading과 pre loading에 따라 달라집니다)에 만들어집니다. (dispatcherservlet은 궁극적으로 servlet이며, servlet은 동적 웹페이지를 만들때 사용되는 웹 프로그래밍 기술입니다. 이모양은 우리가 spring mvc에서 똑같이 볼수있었고 영한님 강의에서도 servlet로 spring mvc를 구현했었습니다. 하지만 하나하나 구현하기에는 어려움이 많았고 이걸 spring boot에서는 간편하게 지원해주기 때문에 spring은 곧 servlet를 쓰기위한 하나의 servlet로 이해할수있습니다. ) -bean은 도대체 왜 나왔으며 servlet container와 spring container는 다른건데 어떻게 쓰이지? 위에 코드를 보면 Dynamic dispatcher = servletcontext... 이라고 선언된 부분이 있을텐데 dispatcher은 결국 servlet이고 servlet container에서 관리하는 객체입니다. 저문장의 뜻은 dispatcher을 context(=servlet container)에서 사용하기위해 등록한다는 의미이며 servlet container에서 dispathcerservlet를 spring container에게 보내주어 spring container에서 spring boot가 편리하게제공해주는 기능을 바탕으로 rendering을 한후 다시 return을 해서 dispathcerservlet는 servlet container에 속해있으므로 servlet container가 client에게 view를 보여줍니다. 결국, dispathcerservlet이 spring container에게 보내주어 bean으로 등록되어 spring container가 관리하는 객체가 되고, 결국 싱글톤으로 관리가되며 servlet이 올때마다 같은 인스턴스를 가지고있는 객체로 인식되어 재사용이 가능한 상태로 남게됩니다. 최종적으로 지금까지한 설명을 그림에 빗대어서 마무리하겠습니다. 처음에 설명했던 servlet webapplicationcontext와 root webapplicationcontext는 2-layer 아키텍처로 구현된 모습이며 철저히 구현과 역할이 나누어져있습니다. dispatchersevlet은 spring container가 생성이되고 servlet container에서 사용할수있게 만들어졌고 그로인해 접근이 가능하다. 한객체의 레퍼런스를 두개의 컨테이너에서 들고있어도 문제가 없다는것을 알게되었습니다. 정리후 저의 개인적인 질문입니다! spring container에서 생성이되고 servelt container에서 사용이 됩니다. 하지만 dispatcher servlet은 궁극적으로 servlet이고 관리가 되는 컨테이너는 servlet container라고 생각이되었습니다. 하지만 dispatcher servlet은 싱글톤으로 관리가 되고 인스턴스를 공유할수있다는점에서 spring container와 연관이 있지않나라는 생각도 들었습니다. destory()라는 메소드를 가지고있고 외부에서도 소멸될수있어서 dispatcher servlet이 어떤 container에서 관리가 되는지 궁금합니다

  • spring
  • mvc
박민성 댓글 1 좋아요 1 조회수 593

인기 태그

인프런 TOP Writers

주간 인기글