묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ArgumentResolver 와 MsgConverter
안녕하세요. 명확히 이해가 안되서 질문올립니다. 1. ArgumentResolver는 Controller에 선언된 Parameter를 생성하는 역할, MsgConverter는 HTTP 메세지를 ArgumentResolver가 생성한 객체에 넣어주는 역할이라고 생각하면 될까요? 2. ResquestBody, ResponseBody가 아닌, ModelAttribute도 이와 같이 작동하는 게 맞을까요?? 3. Spring code를 보니 ReqParam관련 Resolver는 class이름이 Resolver로 끝나는데, ModelAttribute만 Proccessor로 끝나더라고요. ModelAttribute만 Proccessor인 특별한 이유가 있을까요? 4. ArgumentResolver(or ReturnValueHandler)가 HTTP메세지 컨버터가 필요없는 경우는 무엇인가용? 궁금합니당!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
getter and setter
안녕하세요 alt + insert 후 getter 검색하면 getter and setter 이 나오지 않습니다,,,
-
미해결스프링 핵심 원리 - 기본편
안녕하세요 여쭤볼게있어 질문드려요
안녕하세요 Jpa부터 시작해서 강의 잘보고있습니당! 좋은 강의 항상 감사드려요! 다름이아니라 우리나라 si기업에서는 대부분 spring 부트를 사용하지 않고 spring legacy 프로젝트로 일을 한다고 하더라고요... 저는 spring boot 가 너무 좋고 spring 의 다양한 기능들을 사용하기 위해서는 spring boot 가 최적이란 것또한 이해 하였는데 왜 우리나라 많은 si 에서는 왜 서버띄우기도 느린 외장 톰캣을 쓰며, 복잡한 xml 설정들을 다 잡아줘야하는 spring legacy를 사용하는지 이해가 안되더라고요.. 혹시 spring boot 가 spring legacy 에 비해 단점이 존재할까요? 예를 들면 혹시 성능상 어떤것이 안돌아간다던가... 큰 규모의 프로젝트에서는 한계가 있다거나...혹시 spring boot 의 단점이 있나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
category table
category 에서 child를 만들고 parent를 만드는 이유를 알 수 있을까요?? 그리고 child랑 parent의 의미를 정확히 알고 싶습니다... 간단한 예시를 들어 설명해 주실수 있으실까요?
-
미해결스프링 기반 REST API 개발
추후 어떤 강좌를 봐야할지 추천좀 부탁드립니다.
현재 제가 본 강의는 아래와 같습니다. -스프링 기반 REST API 개발 -스프링 부트 개념과 활용 -더 자바 Java8 -더 자바, 코드를 조작하는 다양한 방법 -스프링 웹 MVC (절반정도..) 물론 모든 내용을 이해했다고 하긴 어렵고 코드를 따라가고 이해하려고 노력은 했습니다.... 제가 추후 프로젝트에서 Springboot, JPA, Web, RestAPI, Embbed Tomcat, TDD, Test코드(mvn test 구현) 이렇게 구성한 backend를 추진하고 싶습니다. JPA가 부족해서 강의를 따라가며 학습해야 할거 같은데, 지금 시점에 어떤 강의를 보는게 좋을까요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
h2 database 설정에서 질문드립니다
h2 database를 앞선 강의에서 test.mv.db를 만들어서 오류가 발생하는거 같은데 jpashop이 안만들어집니다.. database를 종료하고 다시하면 된다는데 database종료는 어떻게 할수 있을까요? 윈도우 사용중입니다.. 브라우저를 껐다켜도 안되는거 같아ㅛ ㅠㅠ
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
궁금한게 있습니다
강의해서 1:N 은 페이징처리를 하려고하면 인메모리로 다 올려버린다고 이해하였습니다. 하지만 약간 이해가 안된다고 해야될까요? 결론적으로 정확하게 메커니즘을 제가 이해를 못하는거 같습니다. 강의를 3~4번 다시 보구 있습니다만 몇가지 질문드립니다. 1. jpql에서 1:N으로 fetch join을 하여 뻥튀기? 데이터가 되어 distinct로 해결하였습니다. 여기서 추가로 페이징을 넣으면 인메모리로 바꿘다고하셨는데, 정확하게 jpa에서 예를 들면 select distinct o from order o join fetch o,orderItems oi 이렇게 하구 페이징처리를 하면 인메모리로 된다고하셨는데 distinct를 하기전에 jpql이 1:N인걸 인지하고 인메모리로 일다누올린다는건지 궁금합니다 2. 위에 내용과 동일하게 단순히 1:N 어노테이션만 보구 컬렉션 연관관계가 되는기준으로 페이징을 처리하면 워닝 에러가 나는지 궁금합니다
-
해결됨스프링 핵심 원리 - 기본편
컨테이너를 통한 싱글톤에 대한 의문
아랫분들도 비슷한 질문을 해주셨는데, 그에 대한 답변이 제대로 이해가 안가서 다시한번 질문드립니다. ==============>질문을 드리는 과정에서 제가 이해한 내용이 있는데 이해한 내용이 맞는지 확인부탁드립니다! 제가 지금까지 수강들은 내용을 적자면 @Configuration 을 통해 컨테이너에 저장되면 같은 클래스에 대해 싱글톤이 유지 된다고 이해하였습니다. 그런데 제가 예제를 다시 돌아보면서 의문이 생겨 질문 기존 AppConfig에서 @Configuration을 주석을 하였습니다. //@Configurationpublic class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { System.out.println("call AppConfig.orderService"); return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { System.out.println("call AppConfig.memberRepository"); return new MemoryMemberRepository(); } @Bean public DiscountPolicy discountPolicy() { return new RateDiscountPolicy(); }} 이후 테스트 코드에서 두개의 객체를 생성해 값을 확인해보았습니다. #1번테스트 @Test void springContainer(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); //1. 조회 : 호출할 때 마다 객체 생성 MemberServiceImpl memberService1 = ac.getBean("memberService", MemberServiceImpl.class); //2. 조회 : 호출할 때 마다 객체 생성 MemberServiceImpl memberService2 = ac.getBean("memberService",MemberServiceImpl.class); //참조값이 같은 것 확인 System.out.println("memberService1 = " + memberService1); System.out.println("memberService2 = " + memberService2);// assertThat(memberService1).isSameAs(memberService2); } 테스트 결과 두 개의 객체 memberService1과 memberService2의 참조값이 같다는걸 확인했습니다. 저는 이 결과를 보고 @Configuration이 없이 싱글톤이 유지되어 의문이 생겼습니다. @Configuration을 여전히 주석한 상태로 다른 테스트인 #2번테스트 @Test void configurationTest(){ ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class); OrderServiceImpl orderService = ac.getBean("orderService", OrderServiceImpl.class); MemberRepository memberRepository = ac.getBean("memberRepository", MemberRepository.class); MemberRepository memberRepository1 = memberService.getMemberRepository(); MemberRepository memberRepository2 = orderService.getMemberRepository(); System.out.println("memberService -> memberRepository1 = " + memberRepository1); System.out.println("orderService -> memberRepository2 = " + memberRepository2); System.out.println("memberRepository = " + memberRepository);// assertThat(memberService.getMemberRepository()).isSameAs(memberRepository);// assertThat(orderService.getMemberRepository()).isSameAs(memberRepository); } 이 코드의 결과를 확인해보니 세개의 객체 memberRepository가 모두 다른 참조값을 가지고 있음을 확인했습니다. 그리고 다시 AppConfig.class에 @Configuration의 주석을 해제 후 같은 참조값을 가진것을 확인했습니다. 질문을 드리면서 제가 깨달은 내용은 #1번테스트와 #2번테스트 의 차이는 1번 테스트는 스프링컨테이너에 MemberService가 하나만 등록되었기 때문에 여러개를 생성해서 같은 참조값을 가지게 된거고 2번 테스트는 스프링컨테이너에 MemberRepository가 3가지의 객체로 저장되었기 때문에 3가지의 객체 모두 다른 참조값을 가지게 된거다. 따라서 @Configuration을 통해 스프링컨테이너에 MemberRepository를 싱글톤형태로 하나만 남게 된 것. 제가 이해한 내용이 맞나요? 제가 이해한 내용이 맞다면 제가 지금껏 잘못 생각한 내용은 @Configuration 이 없이 스프링컨테이너에 등록하게 되면 싱글톤 유지를 하지 못하는것은 맞는데 싱글톤의 범위(?)를 제가 잘못 이해하고 있었던 것 같습니다. 그냥 혼자 이해하고 말까라고 생각했다가 확인을 받고, 저랑 비슷하게 이해하셨던 분들이 있으신거 같아서 글 올립니다! 감사합니다!
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
인텔리제이 오류,,,
안녕하세요 제가 다른 강의 때문에 자바 1.8버전을 사용하고 있고 인텔리제이도 잘 알지도 못해서 아무거나 깔다가 인텔리제이 에듀를 깔아서 사용하고 있었슴미다 cmd에서 오류가 생기는 것 같아 인텔리제이 에듀를 삭제하고 커뮤니티를 다시 깔아서 처음부터 하려고 하였는데 "Error running 'All in hello-spring': No junit.jar" 라는 메시지와 함께 실행이 되지 않습니다ㅜㅜ 왜 이러는 것일까요 자바 1.8이나 자바 11버전을 용도에 따라 골라 사용하거나 그럴 수는 없는건가요? ---------------------------------------------------------------------------------------------------------------- https://stackoverflow.com/questions/4757800/configuring-intellij-idea-for-unit-testing-with-junit 페이지를 참고하여 junit을 수동으로 추가한거같은데 "Tests were not found in module 'hello-spring.main'. Use module hello-spring.test instead" 라는 메시지가 뜹니다
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
http://localhost:8080/hello 오류
http://localhost:8080/hello 이 부분 다른 분들도 오류 나는 것 같은데 답변들 다 확인해보아도 답을 못 찾겠습니다 콘솔에는 에러 메세지도 없고 패키지 위치는 선생님과 똑같은거 같은데 해결을 할 수가 없습니다ㅜ 자바 버전이나 인텔리제이 에듀인게 오류 원인일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
prg 패턴에 관해서 질문 드립니다.
[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용] post mapping에서 prg패턴이 필요하다는 사실을 강의를 통해 알게 되었습니다. 1.api 통신을 한다면 유저가 새로고침을 할 수 있는 모든 post 에 관해서 prg 패턴을 적용시키는 것이 일반적인가요? 2. api 통신에서 post를 할때 front에 id를 return해주어야 한다고 할 때, prg 패턴을 적용시키는 것이 힘들 것 같은데, 이 같은 상황에서는 일반적으로 어떻게 해결하는지 궁금합니다. 3. delete할 때도 유저가 새로고침을 통해 id와 함께 여러번 접근할 수 있을 것같은데, deletemapping 또한 redirect, get 패턴을 적용시켜야 하나요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
서비스 계층 설계에 대해 질문이 있습니다
안녕하세요 강의를 잘 듣고 현재 프로젝트를 진행하고있는 학생입니다. 프로젝트를 시작하고 설계를 하는 과정중에서 계층을 설계하는 단계에서 어려움을 느껴 이렇게 질문을 남기게 되었습니다. 저희가 서비스 계층을 설계하려 하는데 사용자의 행위(저장, 검색, 수정)에 따라 다른 클래스로 구분을 해야하는지, 단순히 프로그램에서 구현되는 페이지별로 클래스를 구분을 하는것이 좋은지, 혹은 다른 설계 방법이 있는지에 대하여 알려주시면 감사하겠습니다.
-
해결됨스프링 핵심 원리 - 기본편
BeanB.class 는 애초에 스캔 안되는거 아닌가요?
안녕하세요. 질문드립니다. 강의를 내용의 예제를 확인해보면 @Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface MyExcludeCompnent {} 형태로 어노테이션 MyExcludeComponent를 생성하고 @MyExcludeComponentpublic class BeanB {} class BeanB가 어노테이션을 받았는데 @ComponentScan( includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class), excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)) MyExcludeComponent 를 exclude하고 ComponentScan을 하였는데 애초에 ComponentScan 대상에 @MyExcludeComponent 는 없지 않나요? 단순히 사용방법을 위해서 저렇게 진행하신건지 궁금합니다!
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
한가지 상품이 아닌 여러가지 상품 주문 시
안녕하세요 강사님 강의를 듣다가 여러가지 상품을 주문할 수 있게 구현해보고 싶은데 thymeleaf에서 여러 상품을 선택 했을 시 선택 데이터들을 리스트형태로 만들어서 postMapping에 보내야하는건가요...?그렇다면 thymeleaf문법은 어떻게 들어가야하는지 궁금합니다... (추가적으로 상품을 고르게되면 고른 리스트가 보이면서 더 상품을 추가하거나 삭제하게 할려면 자바스크립트로 설정해두는건가요?!)
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@ModelAttribute가 있을 때, Model 객체 생성
안녕하세요. 강의 잘보고 있습니다. (질문을 많이 하는 거 같아서 좀 죄송스럽지만..) 영한님이 @ModelAttrubute가 파라미터에 있으면 파라미터에 Model 객체가 있지 않아도 자동으로 Model 객체가 생성되고 Model.addAttribute 까지 해준다고 하셨는데요.(파라미터에 @ModelAttribute가 선언돼 있으면 Model은 선언되지 않아도 무조건 생성된다고 생각해도 될까요?) 그럼 이 역할을 해주는 게 ArgumentResolver일까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
ReturnValueHandler의 반환
안녕하세요. 강의를 보다 궁금한 점이 생겨 질문 드립니다. ReturnValueHandler가 여러가지 controller들의 반환값을 처리해서 핸들러 어댑터로 값을 준다고 하셨는데, 이때 @ResponseBody나 HttpEntity를 반환하는 controller는 ReturnValueHandler에서 어떤 타입으로 반환되나요? 그리고 강의 앞부분에서 핸들러 어댑터는 ModelAndView를 dispathcerServlet에 반환해서 viewResolver를 실행시키는 것으로 배웠는데, @ResponseBody, HttpEntity 일때는 핸들러 어댑터가 무슨 타입을 반환하고, dispatcherSerlvet에서 어떻게 처리되는지도 궁금합니다. 좋은 강의 항상 잘 듣고 있습니다. 감사합니다.
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
totalPrice
안녕하세요 15:48 보시면 totalPrice 값이 나오는데 이 메소드는 언제 호출이 된건가요? 따로 호출해 준적이없는거 같습니다 ========== @GetMapping("/api/v1/simple-orders")public List<Order> ordersV1(){ List<Order> all = orderRepository.findAllByString(new OrderSearch()); return all;} =========== public int getTotalPrice(){ int totalPrice = 0 ; for(OrderItem orderItem : orderItems){ totalPrice+=orderItem.getTotalPrice(); } return totalPrice;}
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
일대다 페치조인 메모리상에서 페이징
안녕하세요 영한님 강의 잘 듣고 있습니다!! 일대다 페치조인에서 페이징을 하게되면, 메모리 상에서 페이징을 한다고 이해했습니다. 만약 페치조인 쿼리가 DB로 가면, 뻥튀기된 로우들이 메모리에 올라오게 되고 distinct를 JPA가 하게됩니다. 이 상황에서 만약 페이징이 이루어진다면 뻥튀기된 로우에서 offset만큼 결과를 리턴하게 되다고 이해했습니다. 결론적으로 생각하면 뻥튀기된 로우를 페이징하기 위한 쿼리와 전체를 가져오는 쿼리가 같은 상황에서, 왜 메모리상에서 페이징하는 것이 위험한가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
Test class 위치
안녕하세요. 강의 너무 잘 듣고 있습니다. 상세히 설명해주셔서 감사합니다. 한 가지만 여쭤보겠습니다. 테스트 클래스를 test 디렉토리에 만들 때, 만드시 원래 소스코드와 패키지 이름과 위계 등을 맞춰서 대응되게 만들어줘야 하는 건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@Controller와 @RestController 동시 사용
안녕하세요! 강의 잘 듣고 있습니다! 질문1) 영한님께서 @Controller가 붙은 클래스의 메서드에서 return 하는 String 값은 논리적인 view를 찾아서 반환한다고 하셨던 걸로 기억합니다. 제가 시험삼아 @Controller와 @RestController를 동시에 붙이고 테스트해보니(templates에 ok.html을 따로 만들었습니다) ok.html이 아닌 ok라는 body 메시지가 리턴되었는데 우선순위가 있나요? @Controller와 @RestController 위치를 변경해도 마찬가지였습니다. 질문2) 질문이 좀 이상할 수도 있는데 @Controller와 @RestController를 동시에 붙여도 상관없나요? 서로 충돌나는 게 없을까요? 질문3) @Controller를 사용했을 때 반환할 뷰 파일의 위치는 무조건 resources/templates 에 두어야 하나요? 테스트 해보니 resources/static에 넣으니 불러오지를 못해서용