묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Thymeleaf가 정확히 언제 쓰이는건가요?
타임리프가 server-side 라는건 알겠는데 정확히 언제쓰이는지 구글링해도 정확하게 모르겠어요. ViewResolver가 Thymeleaf를 이용해서 넣을 데이터 다 템플릿에 넣고 완전 더 이상 건들게 없는 view를 DispatcherServlet한테 넘기는건가요?아니면 ViewResolver한테 view template을 받고 DispatcherServlet이 Thymeleaf를 이용해서 데이터를 넣어서 완벽한 view만들고 client한테 전송하는건가요? Server 쪽에서 정확하게 어디서 쓰이는지 궁금하네여
-
미해결스프링 핵심 원리 - 기본편
DI 궁금증
@Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } 강의를 여러번봤는데 궁금증이 하나생겼습니다. @Bean으로 설정해주면 스프링컨테이너에서 라이프사이클을 관리해준다고 알고있습니다. 근데 결국은 new MemberServiceImpl에 memberRepository()가 들어간다는게 new MemberServiceImpl(new MemoryMemberRepository)랑 똑같은건데 직접주입하는거와 spring에서 관리하는거의 개념에만 차이가 있고 코드는 방금윗줄에서 설명한거랑 똑같은건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
frontControllerServletV5 클래스의 service 함수 호출 횟수와 시점, handler 가 null인 문제
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.안녕하세요! 항상 양질의 강의를 위해 힘써주셔서 감사드립니다! 유연한 컨트롤러 v5를 공부하던 중 궁금한 점이 생겨서 질문 올렸습니다. 아래 제 코드에서는 현제 viewResolver 함수에서 경로가 "/WEB-INF/...." 가 아닌 "WEB-INF/..." 으로 되어 있어서 해당 코드를 수정하지 않으면 404 에러가 발생하는 상황입니다. 처음에는 어느 곳이 틀렸는지 찾을 수가 없어서 틀린 곳을 찾기 위해 디버깅 하던 중, handler가 null인지 검사하는 부분에서 handler가 null인 것을 확인했습니다. 저는 viewResolver가 호출 되기 이전에는 정상적으로 handler를 찾는 작업이 수행되어 handler가 null일 수가 없다고 생각했는데 실제로 확인해보니 제 예상과 달라 잘 이해가 되지 않았습니다. 또한, mapping된 url을 한번만 요청했는데도 service 함수 내의 첫번째 줄에서 println 함수를 호출했을 때 해당 문장이 2번 출력되는 것을 확인했는데 왜 이런 결과가 나왔는지도 궁금합니다.package hello.servlet.web.frontcontroller.v5;import hello.servlet.web.frontcontroller.ModelView;import hello.servlet.web.frontcontroller.MyView;import hello.servlet.web.frontcontroller.v3.controller.MemberFormControllerV3;import hello.servlet.web.frontcontroller.v3.controller.MemberListControllerV3;import hello.servlet.web.frontcontroller.v3.controller.MemberSaveControllerV3;import hello.servlet.web.frontcontroller.v4.controller.MemberFormControllerV4;import hello.servlet.web.frontcontroller.v4.controller.MemberListControllerV4;import hello.servlet.web.frontcontroller.v4.controller.MemberSaveControllerV4;import hello.servlet.web.frontcontroller.v5.adapter.ControllerV3HandlerAdapter;import hello.servlet.web.frontcontroller.v5.adapter.ControllerV4HandlerAdapter;import jakarta.servlet.ServletException;import jakarta.servlet.annotation.WebServlet;import jakarta.servlet.http.HttpServlet;import jakarta.servlet.http.HttpServletRequest;import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;@WebServlet(name = "frontControllerServletV5", urlPatterns = "/front-controller/v5/*")public class FrontControllerServletV5 extends HttpServlet {// private Map<String, ControllerV4> controllerV4Map = new HashMap<>();private final Map<String, Object> handlerMappingMap = new HashMap<>();private final List<MyHandlerAdapter> handlerAdapter = new ArrayList<>();public FrontControllerServletV5() {initHandlerMappingMap();initHandlerAdapters();}private void initHandlerMappingMap() {handlerMappingMap.put("/front-controller/v5/v3/members/new-form", new MemberFormControllerV3());handlerMappingMap.put("/front-controller/v5/v3/members/save", new MemberSaveControllerV3());handlerMappingMap.put("/front-controller/v5/v3/members", new MemberListControllerV3());//v4 추가handlerMappingMap.put("/front-controller/v5/v4/members/new-form", new MemberFormControllerV4());handlerMappingMap.put("/front-controller/v5/v4/members/save", new MemberSaveControllerV4());handlerMappingMap.put("/front-controller/v5/v4/members", new MemberListControllerV4());}private void initHandlerAdapters() {handlerAdapter.add(new ControllerV3HandlerAdapter());handlerAdapter.add(new ControllerV4HandlerAdapter());}@Overrideprotected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("here");Object handler = getHandler(request);if (handler == null) {System.out.println("is null");response.setStatus(HttpServletResponse.SC_NOT_FOUND);return;}MyHandlerAdapter adapter = getHandlerAdapter(handler);ModelView mv = adapter.handle(request, response, handler);String viewName = mv.getViewName(); //논리이름 new-formMyView view = viewResolver(viewName);view.render(mv.getModel(), request, response);}private Object getHandler(HttpServletRequest request) {String requestURI = request.getRequestURI();return handlerMappingMap.get(requestURI);}private MyHandlerAdapter getHandlerAdapter(Object handler) {//handlerAdapter.iter -> for문 생성for (MyHandlerAdapter adapter : handlerAdapter) {if (adapter.supports(handler)) {return adapter;}}throw new IllegalArgumentException("handler adapter를 찾을 수 없습니다. handler=" + handler);}private static MyView viewResolver(String viewName) {MyView view = new MyView("WEB-INF/views/" + viewName + ".jsp");return view;}}
-
해결됨스프링 핵심 원리 - 기본편
섹션5 싱글톤 컨테이너 인스턴스가 다릅니다.
강의내용과 똑같이따라했는데 서로다른 인스턴스가 나옵니다... 분명코드가 똑같은지 3번이나 비교했는데 다른거같아서 올려봅니다.
-
미해결스프링 핵심 원리 - 기본편
궁금한점이 있어 질문드립니다.
다름아니라 섹션 9를 공부하던중 Provider를 사용하던 프록시 객체를 사용하던 지연로딩이 제일 핵심이라고 하셨는데 그렇다면 해당 예제와같이 웹스코프말고 싱글턴의 스코프를 가진 객체를 지연로딩 생성후 의존성 주입을 해주는경우가 실무에서 사용하는경우가 있나요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
default_batch_fetch_size 설정 질문입니다.
지금 서비스엔티티에서 작업자와 상품이 2개 전부 1:N 상태입니다@Query("select s from Services s join fetch s.workers w " + "join fetch s.serviceTime st " + "where s.id = :id") Services findByIdWithWorkers(@Param("id") Long id);OneToMany인 경우 2개가 동시에 fetch join이 안되는걸 알고 application.yml에jpa: hibernate: ddl-auto: update properties: hibernate: default_batch_fetch_size: 100 format_sql: true show-sql: true위에 spring: 있습니다 이렇게 default_batch_fetch_sizes을 추가했는데 sql에Hibernate: select rg1_0.service_id, rg1_0.id, rg1_0.base_category, rg1_0.created_at, rg1_0.price, rg1_0.service_item_name, rg1_0.service_time, rg1_0.sub_category, rg1_0.super_category, rg1_0.updated_at from reservation_goods rg1_0 where rg1_0.service_id=?in이 나오지 않는데 데이터가 지금 10개 정도 있는데 데이터 작아서 in절이 나오지 않는걸까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
import javax.persistence.Entity; 가 안되서 import jakarta.persistence.Entity;로 하고 있는데요.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 강의를 듣다가 아래가 동작하지 않아서import javax.persistence.Entity;아래 줄로 일단 넘어갔는데요import jakarta.persistence.Entity; 스프링부트가 이제는 JDK-17로 어쩔수 없이 환경설정을 해야해서 17로 했느데요 모든 강의가 중 이렇게 조금씩 동작을 안하는 수정된 부분을 영상으로 업로드할 계획이 있으신가요?아니면 누군가 미리 듣고서 한번 당해보고 그분이 또는 본인이 질문하고 질문의 답변을 알아서 찾아서 적용해서 들어야할까요?ㅠ
-
해결됨Practical Testing: 실용적인 테스트 가이드
테스트 환경 통합을 위해 커스텀 어노테이션 도입에 관하여
안녕하세요. 테스트 환경 통합 강의를 보다가 궁금한 점이 생겨서 질문하게 되었습니다!강사님께서는 테스트 환경 통합을 위하여 테스트 클래스에서 테스트 환경 추상 클래스(IntegrationTestSupport, ControllerTestSupport)를 상속하는 방식을 사용하셨습니다.ControllerTest에서는 MockMvc, ObjectMapper, @MockBean 처리할 Service들을 protected 필드로 넘겨줄 필요가 있어서 추상 클래스를 사용하는 방식에 대해 되게 좋다고 생각했는데요!Service와 Repository 테스트의 경우에는 그런 공통된 필드들이 필요하지 않기 때문에 추상 클래스가 아닌 커스텀 어노테이션을 생성하여 구성하여도 되지 않을까? 싶어서 질문드리게 되었습니다! @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @ActiveProfiles("test") @SpringBootTest public @interface IntegrationServiceTest { } @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @ActiveProfiles("test") @Transactional @SpringBootTest public @interface RepositoryTest { } 제가 생각한 코드는 위와 같습니다!제가 생각했을 때의 어노테이션으로 테스트 환경을 관리하였을 때의 장점은 자바에서는 다중 상속이 안되기 때문에 조금 더 유연하다고 생각했습니다!강사님께서는 커스텀 어노테이션을 사용하여서 테스트 환경을 통합하는 방식에 대하여 어떻게 생각하시는지 궁금합니다!(강의 너무 유익하게 잘 듣고 있습니다! 새해 복 많이 받으시구 내년에도 화이팅입니다ㅎㅎ)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ArgumentResolver에 대해서 질문있습니다.
HandlerMethodArgumentResolver에서 supportsParameter에 지원하는것이 기본 스프링이 지원하는 Parameter말고도 ex)이런식으로 적으면 supportsParameter부분에 Member에 대한 객체가 등록이 된다는 말씀이신가요?그리고 해당 부분을 지원하면 resolveArgument를 통해서 객체를 생성한다라고 이해하면될까요? @GetMapping("/members") public String answer(Member meber){ return "hello"; }
-
해결됨스프링 핵심 원리 - 기본편
섹션3 자동완성질문입니다
public class BeanDefinitionTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); void springContainer() { // AppConfig appConfig = new AppConfig(); ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);강의중에 class레벨에서 자동완성으로 코드작성할때는 변수 삽입 리팩토링은 현재 콘텍스트에서 지원하시 않습니다라고 나와있는데메소드안에서 선언될때는 바로 되더라구요 차이가 뭔지 알수있을까요?
-
미해결실전! 스프링 데이터 JPA
왜 오류가 나는지 모르겠습니다.
org.h2.jdbc.JdbcSQLNonTransientConnectionException: 라는 오류가 발생합니다..
-
미해결스프링 핵심 원리 - 기본편
혹시 강의 내용 개인 노션에 올려도되나요?
개인 노션에 공부한 내용을 작성하고 있는데 강의한 내용의 그림이나 글을 작성해도 되나요? 전부 복사 붙여넣기가 아닌 요약등으로 올리고있습니다
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Component로 핸들러 매핑에 핸들을 등록하는 과정에 대한 궁금점.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]안녕하세요 학습을 하다가 조금 궁금한 점이 생겨서 질문드립니다. 제가 궁금한 점은 이전에 MVC를 사용하지 않은 방식에서는 직접 Map으로 핸들러 이름과 핸들을 핸들러 맵에 등록했는데 MVC를 사용하는 방식에서는 @Component("/springmvc/request-handler")가 어노테이션 안에 있는 문자열이 key가 되고 핸들 객체가 value로 핸들 맵에 등록되는 것인가요? 답변 주시면 감사하겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
form Import
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]java.lang.IllegalArgumentException: Name for argument of type [long] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.이렇게 오류 떠서@GetMapping("/{itemId}/edit") public String editForm(@PathVariable Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "form/editForm"; }위 부분을@GetMapping("/{itemId}/edit") public String editForm(@PathVariable(name="itemId") Long itemId, Model model) { Item item = itemRepository.findById(itemId); model.addAttribute("item", item); return "form/editForm"; }이렇게 @PathVariable(name="itemId") 속성을 모든 메소드에 적용 했더니 정상 동작합니다.다만 어떤 설정을 해야 기존 코드 기대로 동작하는지 정말 궁금하네요 기존처럼 네임속성 안주고 하려면 따로 설정해야하는게 어떤걸까요?
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
로그인 처리하기 - 세션 동작 방식 파트 질문입니다.
중요한 정보는 모두 서버에 저장해야 한다고 써있는데, 만약 서버가 공격받게 된다면 이 정보가 모두 노출될텐데, 서버가 공격받는 것은 어떻게 예방할 수 있나요? 예시 몇 가지만 들어주시면 감사하겠습니다.
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
localhost에서 화면이 깨집니다.
수업을 듣고 혼자서 만들어 보는 중입니다 ㅠㅠ https://drive.google.com/file/d/1xmnERIQk89uE6iP8skTuS2jElKDXfPqp/view?usp=sharing드라이브에 올린 제 파일입니다. save.html 파일이 절대경로로 브라우저에서 열면 문제 없이 열리는데 localhost:8080/member/save 로열면 화면이 깨집니다. css 경로도 정확한 거 같은데 왜 이러는걸까요 ㅠㅠ<link href="css/styles.css" rel="stylesheet" /><link href="../templates/css/styles.css" rel="stylesheet" /><link href="./css/styles.css" rel="stylesheet" />다 해봤습니다!! index.html을 제대로 잘 열립니다!! (index파일의 css를 복사해서 약간 수정 후 이름만 다르게 저장한게 save.css입니다)
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
[MemberRepositoryTest에서 Transaction 없이 실행하면, Error가 발생하지 않습니다.]
[질문 내용]영상 12:45 내용입니다. 제목 그대로 MemeberRepositoryTest를 실행하는 과정에서 Transaction없이 실행하면 Error가 발생해야 하는데, 발생하지 않습니다. 왜 그런지 궁금합니다. 질문을 수정하겠습니다. 실행결과를 다시 살펴보니 Error가 발생하지 않는 것이 아니라 Test가 실행되지 않고 있었네요ㅜ TDD 자체가 실행되지 않았습니다.@Transactional을 설정하고 다시 실행하였더니, test file 자체가 생성되지 않았고, fail인지 아닌지도 확인할 수 없었습니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
git 주소
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 강의관련 소스받을 수 있는 git 주소가 있을까요?? 감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
실행
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]여기에 질문 내용을 남겨주세요. 프로젝트 버전 17, gradle 버전도 17로 동일하게 맞췄는데 실행이 되지 않아요 ㅠㅠ 뭐가 문제인거죠? ㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
오류 문제...
그 전까지는 잘 되었는데 강의 교재에 있는 메뉴얼대로 dependencies를 수정했더니 자꾸 이런 에러가 납니다....계속 해결 방법을 찾고 있는데 잘 모르겠습니다... 도와주세요