묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
컨트롤러에 @PostMapping 없어도 되나요?
createMemberForm.html내의<form action="/members/new" method="post">를 보면 post메소드로 호출하고 있는데,MemberController.java에는@GetMapping("/members/new")만 있네요.@PostMapping("/members/new")이 맞지 않나요?회원가입 클릭하니 주소표시줄에 http://localhost:8080/members/new라고는 뜨는데, 500에러가 납니다
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
validation(toMember)의 위치
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요, 강의 수강 중 질문이 생겨 여쭤봅니다. MemberServiceV1에서 memberRespository.update(fromId, fromMember.getMoney() - money); validation(toMember); memberRespository.update(toId, toMember.getMoney() + money); 해당 코드가 있습니다. 트랜잭션을 사용하지 않아서 테스트 코드에서 예외가 발생하며 memberA는 8000원, memberEx는 10000원이 된다고 말씀하셨는데, 근본적인 원인은 validation(toMember); 의 위치 문제가 아닐까 생각이 드네요 ..! validation(toMember); memberRespository.update(fromId, fromMember.getMoney() - money); memberRespository.update(toId, toMember.getMoney() + money); 이렇게 순서를 바꾸면 검증을 먼저 수행하고 이체를 하니 테스트 코드에서 둘 다 1만원으로 변동이 되지 않던데, 단순히 트랜잭션 이해를 위한 설명으로 생각하면 될지 싶어 여쭤봅니다 !
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
인코딩 문제
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예안녕하세요, 강의 수강 중 문제가 생겨 여쭤봅니다. validation/v2부터 따라하며 공부 중 갑자기 인코딩 처리가 안되고 깨지는 문제가 발생했습니다. 이것 저것 찾아도 해결되지 않아서 질문드리게 되었는데 혹시 어떤 것이 문제가 될 지 여쭤봐도 될까요 ? addForm, editForm, item, items.html에는 아래 사진처럼 utf-8로 설정해두었습니다. preference의 file Encodings에서도 utf-8을 설정해주었습니다. 서버를 띄우고 캐시 메모리를 비워봐도 여전히 같은 문제가 발생하던데 혹시 짚어볼 만한 원인이 더 있을까요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
libs에 폴더에 war 밖에 없습니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]-a---- 2025-06-22 오후 4:15 22515429 hello-spring-0.0.1-SNAPSHOT.war gradlew 실행하고 폴더를 이동했더니 war 파일 밖에 없습니다. jar 파일이 없는거면 처음부터 잘못된건가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
db연결은 되는데 웹 페이지에서 회원 정보 데이터가 반영이 안됩니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]db는 연결이 되어있다고 하는데 막상 db콘솔에서 insert한 데이터가 웹 페이지 회원 목록 조회에서는 안뜹니다. 막상 회원가입을 하면 목록에 뜨는 상황입니다.그리고 db를 끊어도 웹 페이지에서 회원 가입과 회원 목록 조회는 됩니다.그리고 db를 연결한 상태에서 웹 페이지에서 회원가입을 하면 db에는 넘어온 정보가 없습니다
-
미해결ASP.NET Core MVC +ASP.NET Core +REST API +.NET 8.0
Console.WriteLine
백엔드에서 Console.WriteLine 찍은건 어디서 볼 수 있나요 ?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
강의내의 인텔리제이 기능
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]다름이 아니라 3:38쯤에 옆에 아이콘을 누르면 약간 확장이 되는 기능이 제 인텔리제이에서는 보이지가 않아서요. 어떻게 설정을 하는걸까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
폼에서 에러 출력 로직? 질문 드립니다.
<form action="item.html" th:action th:object="${item}" method="post"> ... <div> <label for="price" th:text="#{label.item.price}">가격</label> <input type="text" id="price" th:field="*{price}" th:errorclass="field-error" class="form-control" placeholder="가격을 입력하세요"> <div class="field-error" th:errors="*{price}"> 가격 오류 </div> </div> ... </form>타입정보가 맞지 않는 경우 뷰에서 에러 출력 로직이 어떻게 되는지 궁금합니다.사진에서처럼 가격 정보에 qqq를 입력했고 가격 입력 폼 아래 에러 정보가 출력되었습니다.두가지 에러가 나타나는데요 한가지는 스프링이 직접 검증 오류에 추가한 경우의 오류와 저희가 직접 만든 오류입니다.여기서 html 코드를 살펴보았는데요.저는 두가지 오류가 생성되었기때문에 <div>도 두가지가 생성 되었을거라 생각했으나 페이지의 html 코드에서 <div>태그가 각각 생성되지 않고 하나의 <div>태그에 줄바꿈 태그인 <br>로 오류가 구분되었다는 점과 th:each 같은 것이 사용되지 않았다는 점에서 궁금한점이 생기는데요 어떻게 한가지 태그 안에서 두가지 오류를 출력 할 수 있나요?th:errors 에 뭔가가 있을 것 같긴한데요. 어떻게 되는건가요?현재 두가지 오류 객체가 생성되는데 이것이 리스트 같은곳에 담겨서 이 리스트 자체가 erros에 내부(?)에서 반복을 실행한다거나 그런게 있을까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
갑자기 실행이 되질 않습니다..
FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':hello.itemservice.ItemServiceApplication.main()'. > Process 'command 'C:\Users\.jdks\corretto-17.0.14\bin\java.exe'' finished with non-zero exit value 1위와 같은 에러가 뜹니다.어제까지 잘 하다가 오늘 갑자기 되질 않네요.사실 섹션 6까지 다 듣고 다음 섹션인 로그인 처리로 넘어가서 프로젝트 생성하는데 이상하게 계속 안돼서 어제 한것을 실행해보는데 이것마저 안되네요..뭔가 연관이 있는건지... 왜이런건가요?해결완료했습니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Appearance 에서 번외로 알려주신 설정 적용하면 작동 안합니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.기본 설정인 Gradle로 할때는 문제없는데, 번외로 알려주신 설정인 인텔리제이로 돌리게 되면 스프링부트가 작동하지 않습니다. 해결 방법이 있나요?
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
순수 jdbc, jdbc 템플릿 ,통합 테스트할때 결과 주소값 질문
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요.복습 할겸, 새로운 헬로우 스프링을 만들어서 다시 영상을 보면서 치고 있었습니다.그리고 나서 테스트 케이스 만드는 부분이 잇었는데, 여기에서 저는 그냥 하는 김에 전부다 테스트 케이스를 만들자! 라는 생각이 들어서 만들었습니다.그리고 나서 통합 테스트 영상까지 따라 치고 나서,(메모리 테스트 케이스를 복사 붙여 놓기를 한다음 @SpringBootTest @Transactional @Autowired는 추가 햇음) 테스트 케이스를 실행햇는데테스트 케이스에서 노랑색 에러 메시지가 뜹니다. 이렇게요. 그래서. 전에 만든 helloSpring어떤가 시범을 해봤는데(코드를 똑같이 완전히 복사 붙여 놓기 하고 코드에 문제 없는지 확인.)잘 되더 라고요.근데. 빈 을 안 건드린게 생각나서 jpa템플릿에서 jdbc로 바꾸니 똑같이 오류나는 것을 확인할 수 있었습니다.(전에는 getId로 비교해서 테스트 케이스를 통과한 것 같습니다.)(jpa 메모리 에서 통합 테스트 한것) 여기서 궁금증이왜 jdbc에서는 객체의 주소값 이 다른지 알고싶습니다.테스트에서는 뭐 알수가 없더라고요.답변 부탁 드립니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
ControllerAdvice와 Controller 이후 계층에서 발생하는 예외들
ControllerA - ServiceA - RepositoryA위의 계층끼리 서로 연관되어있고 ControllerAdvice의 대상은 글로벌 컨트롤러이고 모든 예외를 @ExceptionHandler로 잡아놓았을 때,Q1. ServiceA나 RepositoryA에서 사용자예외 또는 자바,스프링이 제공하는 예외가 발생했을 때 따로 try-catch 같은 방법으로 예외를 처리하지 않으면 ControllerAdvice가 처리해주나요?Q2. 만약 처리해준다고 하면, 컨트롤러의 핸들러까지 예외가 역으로 전달되는 순간에 ControllerAdvice가 처리해주는 방식인가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
프로젝트 빌드 에러
이번 강의 시작하면서 message-start 폴더를 message 로 변경(받은 소스 파일 모음집에는 message 폴더가 있어 다른 폴더로 이동후 변경하였습니다) 변경 후 빌드 open project로 했는데처음에스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 | 학습 페이지이분과 비슷한 에러가나서 gradle.properties 를distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip로 변경했습니다. 이것은 현재 spring.stat.io에서 프로젝트 생성시 생기는 버전을 그대로 들고온것입니다.그리고 싱크 후 다시 빌드하니 아래와 같은 에러가 뜹니다,.여기서는 지금 어떻게 해야할지 모르겠습니다.이전 프로젝트도 그렇고 이번 프로젝트도 그렇고.. 에러가 나는 분들은 많은 것같은데 다른 경우와 달리 pdf 파일에도 안내가 없어서 강의 진행에 좀 답답하네요. 이전 프로젝트처럼 다른 분께서 알려주신대로 start.spring.io 에서 message 라는 이름의 프로젝트를 생성후 강의에 올라온 main과 resource 폴더를 복사 붙여놓기해야하나요?
-
해결됨스프링 DB 2편 - 데이터 접근 활용 기술
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
@SpringBootTest class MemberServiceTest { @Autoworied lateinit var memberService: MembersService @Test fun get() { memberService.get(1L) } }@Service class MemberService( private val txManager: PlatformTransactionManager, ) { @Transactional(readOnly = true) fun get(id: Long) { val tx = txManager.getTransaction(DefaultTransactionAttribute()) println("isCurrentTransactionReadOnly()=${TransactionSynchronizationManager.isCurrentTransactionReadOnly()}") println("isActualTransactionActive()=${TransactionSynchronizationManager.isActualTransactionActive()}") println("isNewTransaction()=${tx.isNewTransaction()}") // get } } 제가 기대한건isNewTransaction = true인데요 -> 가장 처음 호출된 @Transactional이 있는 service 메서드이기 때문에 그런데테스트 코드로 실행해도 그렇고, API로 get 메서드가 호출되도록 해봐도 그렇고모두 isNewTransaction = false 로 나옵니다. 내부 트랜잭션이 아니라 외부 트랜잭션이라고 생각했는데 왜 false일까요.... 09:54:40.059 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Creating new transaction with name [com.application.service.member.MemberService.get]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly 09:54:40.062 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Opened new EntityManager [SessionImpl(16208286<open>)] for JPA transaction 09:54:40.075 [Test worker] DEBUG o.h.e.t.i.TransactionImpl - On TransactionImpl creation, JpaCompliance#isJpaTransactionComplianceEnabled == false 09:54:40.075 [Test worker] DEBUG o.h.e.t.i.TransactionImpl - begin 09:54:40.081 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Exposing JPA transaction as JDBC [org.springframework.orm.jpa.member.HibernateJpaDialect$HibernateConnectionHandle@486e4af6] 09:54:40.083 [Test worker] TRACE o.s.t.i.TransactionInterceptor - Getting transaction for [com.application.service.member.MemberService.get] 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Found thread-bound EntityManager [SessionImpl(16208286<open>)] for JPA transaction 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Participating in existing transaction TransactionSynchronizationManager.isCurrentTransactionReadOnly()=true TransactionSynchronizationManager.isActualTransactionActive()=true outer.isNewTransaction()=falseCreating new transaction with name이 나오는데 09:54:40.084 [Test worker] DEBUG o.s.o.j.JpaTransactionManager - Participating in existing transaction 이 로그도 나옵니다,,
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ModelAttribute와 model.addAttribute() 이름 차이.
강의 9분 20초 경부터 설명하는 pdf 내용모델에 데이터를 담을 때는 이름이 필요하다. 이름은 @ModelAttribute에 지정한 name(value) 속성을 사용한다. 만약 다음과 같이 @ModelAttribute의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다.@ModelAttribute("hello") Item item -> 이름을 'hello'로 지정model.addAttribute("hello", item); -> 모델에 'heelo' 이름으로 저장 이 설명에 대해서 궁금한 점이있는데요. 만약 다음과 같이 @ModelAttribute의 이름을 다르게 지정하면 다른 이름으로 모델에 포함된다. 이 부분이 이해가 잘 가지 않습니다. 위 두 코드 모두 모델의 키(이름?)이 결국 'hello'로 사용되고 뷰에서 또한 hello로 데이터를 꺼낼 수 있는 것 아닌가요? 그런데다음과 같이 @ModelAttribute 이름을 다르게 지정 이라는 부분 때문에 헷갈립니다.. 어느 부분이 다른건지 모르겠고 제가 어느 것을 놓치고 있는지 잘못이해하고있는지 잘모르겠습니다. 둘다 hello로 모델에 저장되는 것은 매한가지같은데 어느 부분이 차이점이라는 것인가요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
gradlew 빌드 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.계속 "내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다." 라고 뜹니다.
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
중복회원예외()에서 오류 발생
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]중복 회원 예외()에서 오류가 자꾸 발생합니다. @Test public void 중복_회원_예외() throws Exception { //Given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //When memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2)); //Then assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다."); } }Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appendedjava.lang.IllegalStateException: 이미 존재하는 회원입니다. at hello.hello_spring.service.MemberService.lambda$validateDuplicateMember$0(MemberService.java:39) at java.base/java.util.Optional.ifPresent(Optional.java:178) at hello.hello_spring.service.MemberService.validateDuplicateMember(MemberService.java:38) at hello.hello_spring.service.MemberService.join(MemberService.java:31) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:359) at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:196) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:380) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:728) at hello.hello_spring.service.MemberService$$SpringCGLIB$$0.join(<generated>) at hello.hello_spring.service.MemberServiceIntegrationTest.중복_회원_예외(MemberServiceIntegrationTest.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)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
서블릿 생성과 등록 차이
이번 강의에서 @ServletComponentScan 에 대한 설명을 들으면서 궁금한 점이 생겼는데요, 서블릿 생성과 등록 차이에 대한 질문좀 드리겠습니다.ServletApplication이 실행되고 @ServletComponentScan 이 붙어있으면 현재 내 패키지를 포함해서 하위 패키지를 뒤져서 서블릿을 모두 찾아 자동으로 서블릿을 등록해준다고 하셨습니다.아마 서블릿 컨테이너에 등록하는 것이겠지요? (틀렸다면 말씀해주세요)그런데 여기서 이 등록이라는 것이 서블릿 객체로 생성해서 등록하는 것인지 아니면 객체가 아닌 단순히 스프링 빈처럼 빈이름이라던가 해당 서블릿을 타입이라던가 그런것을 식별 정보만을 사용해서 등록한다는 것인지 궁금합니다. 왜 이 부분을 질문 드리냐면 이전 강의에서 서블릿 컨테이너의 역할중에 서블릿 객체를 생성하는 역할이 있다고 강의 하셨는데요. 서블릿이 자동 등록될 때 만약에 객체를 생성해서 객체가 등록된다면 @ServletComponentScan 은 단순히 스캔 및 서블릿으로 등록 판별만하고 서블릿 객체를 생성하는건 서블릿 컨테이너의 역할이 될 것 같은데 만약에 객체를 생성해서 등록하는게 아닌 스프링 빈처럼 @ServletComponentScan 이 이름, 타입같은 정보로만 등록하는 것이라면서블릿 컨테이너의 서블릿 객체 생성 역할은 언제 일어나고 언제 사용되는건지 잘 모르겠습니다.@WebServlet에서 알맞은 url 매핑 요청이 들어왔을 때 그제서야 서블릿 컨테이너에 있는 정보를 바탕으로 서블릿 객체를 생성하고 request와 response를 받는 식인가요? 결국 제가 궁금한건 @ServletComponentScan 에서 말하는 자동 등록이 스프링 컨테이너가 하는 객체 생성까지 포함인지, 아니면 별도의 정보로 등록하고 컨테이너가 하는 객체 생성도 별개의 것인지 궁금합니다. 감사합니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
핸들러 매핑, 어댑터 제대로 이해했나요??
이전에 저희가 구현했을때는 Map에서 그냥 url일치하는 것을 가져오다보니 이해가 쉬웠는데 핸들러 매핑이라는 개념으로 바뀌다 보니 꽤나 헷갈리는 부분이 있어서 질문드립니다. 핸들러 매핑과 어댑터 제가 제대로 이해하고 있는게 맞는지 꼭 확인좀 해주시면 감사하겠습니다.추측이 좀 있습니다...먼저 컨트롤러를 찾기 전에 어떤 핸들러 매핑 사용해야하는지 찾고 그 다음 이 핸들러 매핑을 사용해서 알맞은 컨트롤러를 찾는게 맞는다.이번 강의에선 먼저 우선순위가 높은 RequestMappingHandlerMapping이 @RequestMapping이 있는지 확인한다. 없으므로 다음 우선순위로 넘어간다. BeanNameUrlHandlerMapping이 컨트롤러들을 확인해서 일치하는 스프링 빈 이름이 있는지 찾는다. 일치하는 스프링 빈이 있으므로 핸들러로 꺼낸다. 꺼낸 핸들러를 처리하기 위한 어댑터를 찾는다. 앞서 직접 구현한 V5에서 처럼 어댑터를 하나씩 꺼내어 adapter.supports()하여 알맞은 어댑터 인지 찾는다.RequestMappingHandlerAdapter 와 HttpRequestHandlerAdapter 는 아니므로 넘어가고 SimpleControllerHandlerAdapter이 처리 가능한 어댑터로 반환된다.여기까지입니다. 제가 특히나 궁금한 것은 핸들러 매핑입니다. 제가 적은 핸들러 매핑 방식은 핸들러 매핑이 먼저 우선순위대로 하나씩 선택되고 선택된 핸들러 매핑이 다시 컨트롤러들을 검사해서 알맞은 컨트롤러를 찾는 식으로 적어놨는데요.즉, 먼저 RequestMappingHandlerMapping 이 선택되고 @ReqiestMapping인 컨트롤러가 있는지 찾고 없으면 다음 BeanNameUrlHandlerMapping 이 선택되고 매핑 방식인 빈 이름으로 컨트롤러들을 검사해 있으면 반환.어댑터는 위에 적은 그대로입니다.이런 식으로 이해했는데 제대로 이해했을까요? 혹 틀린부분이나 잘못 이해하고 있다면 꼭 지적해주시면 감사하겠습니다. 감사합니다...!!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
스프링 수동 빈 등록에서 인코딩 관련 질문입니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]안녕하세요. 강의에서 MessageSource 인터페이스의 구현체인 ResourceBundleMessageSource를 스프링 빈으로 등록해서 사용한다라고 하셨는데,구현체의 setDefaultEncoding()메서드를UTF-8로 강제 할 수 있는지 궁금합니다. 찾아본 내용 중에 ResourceBundleMessageSource 클래스의 setDefaultEncoding 메서드는 적용되지 않는다는 내용을 보고 질문드립니다!