묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
파일 업로드 강의 수강 도중 오류가 발생합니다.
안녕하세요 파일 업로드 강의 중 '서블릿과 파일 업로드1'강의 첫번째 실행에서 파일 제출을 하면 Error parsing HTTP request header 오류가 뜹니다. 제가 뭔가 놓친 부분이 있는걸까요?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
6강. assertThat import 문제
태현님 안녕하세요.assertThat이 정상적으로 import가 되질 않아 문의 드립니다. 태현님 6강 강의도중 보면 org.assertj.core.api를 import하는걸로 보이는데요. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' implementation 'org.junit.jupiter:junit-jupiter:5.8.1' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' }혹시 import에 문제가 있나 싶어https://mvnrepository.com/artifact/org.assertj/assertj-core/3.6.1이걸 참고해 dependencies를 추가했는데도 안되더라고요;; 일단 스크린샷도 첨부하긴 했습니다..제가 뭘 잘못한 걸까요..
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
Notification 패턴과 BindingResult 유사점
안녕하세요. BindingResult에 관해서 질문드리려고 합니다.<실전 자바 소프트웨어 개발> 라울-게이브리얼 우르마, 리처드 워버턴 책을 보던 중에 Notification 패턴이란 걸 알게 되었습니다. 이게 마틴 파울러가 정립한 개념이라고 하는데 BindingResult가 동작하는 방식과 똑같더라고요. 혹시 BindingResult가 Notification 패턴을 적용한 사례인가요?제가 제 블로그에 이러한 가정에서 글을 썼는데요. 질문 답변에 따라 글을 지울지 말지 정해야 합니다. 헤헤https://griotold.tistory.com/3
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
실행 순서가 헷갈려서 질문드립니다.
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]@Controllerpublic class SpringMemberFormControllerV1 {@RequestMapping("/springmvc/v1/members/new-form")public ModelAndView process() {return new ModelAndView("new-form");}} 이 예제에서1./springmvc/v1/members/new-form 요청이 들어오면 RequestMappingHandlerMapping이 @RequestMapping("/springmvc/v1/members/new-form")이 붙은 메서드를 가진 @Controller 클래스를 찾아서 DispatcherServlet한테 반환해주고(여기서는 SpringMemberFormControllerV1 클래스가 반환) DsipatcherServlet에서 RequestMappingHandlerAdapter가 SpringMemberFormControllerV1 클래스의 process() 메서드를 실행하는 순서가 맞을까요? RequestMappingHandlerMapping은 @RequestMapping 애노테이션으로 요청 url에 맞는 핸들러를 찾는데 @RequestMapping이 메서드에 붙어 있으니까, 메서드를 실행시키려면 메서드를 가진 클래스가 필요해서 @Controller 클래스를 반환해주고 RequestMappingHandlerAdapter는 반환받은 클래스의 객체를 통해 요청 url에 맞는 @RequestMapping 메서드를 실행시킨다고 이해하면 될까요?
-
미해결[NarP Series] MVC 프레임워크는 내 손에 [나프2탄]
7강 mybatis 에러 질문 드립니다
the word 'num' is not correctly spelled 이런 에러 메세지가 뜨는데 왜 그런건가요?
-
미해결Practical Testing: 실용적인 테스트 가이드
Order에서 orderProducts 테스트하는 방법이 궁금합니다.
package sample.cafekiosk.domain.order; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; import org.springframework.test.context.ActiveProfiles; import sample.cafekiosk.domain.product.Product; import sample.cafekiosk.domain.product.ProductRepository; import sample.cafekiosk.domain.product.ProductSellingStatus; import sample.cafekiosk.domain.product.ProductType; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import static org.assertj.core.groups.Tuple.tuple; import static sample.cafekiosk.domain.product.ProductSellingStatus.*; import static sample.cafekiosk.domain.product.ProductType.HANDMADE; @ActiveProfiles("test") @DataJpaTest class OrderRepositoryTest { @Autowired private OrderRepository orderRepository; @Autowired private ProductRepository productRepository; @DisplayName("원하는 날짜와 주문 상태로 주문들을 가져온다.") @Test void findOrdersBy() { //given LocalDateTime registeredDateTime1 = LocalDateTime.of(2024, 3, 2, 12, 0); LocalDateTime registeredDateTime2 = LocalDateTime.of(2024, 3, 9, 12, 0); Product product1 = createProduct(SELLING, HANDMADE, "아메리카노", 4000, "001"); Product product2 = createProduct(HOLD, HANDMADE, "카페라떼", 4500, "002"); Product product3 = createProduct(STOP_SELLING, HANDMADE, "팥빙수", 7000, "003"); List<Product> products = List.of(product1, product2, product3); productRepository.saveAll(products); Order order1 = createOrder(registeredDateTime1, products); Order order2 = createOrder(registeredDateTime2, products); List<Order> orders = List.of(order1, order2); orderRepository.saveAll(orders); //when LocalDate findDate = LocalDate.of(2024, 3, 2); List<Order> findOrders = orderRepository.findOrdersBy(findDate.atStartOfDay(), findDate.atStartOfDay().plusDays(1), OrderStatus.PAYMENT_COMPLETED); //then Assertions.assertThat(findOrders).hasSize(1) .extracting("registeredDateTime", "orderProducts", "orderStatus") .containsExactlyInAnyOrder( tuple(registeredDateTime1, products, OrderStatus.PAYMENT_COMPLETED) ); } private Order createOrder(LocalDateTime registeredDateTime1, List<Product> products) { return Order.builder() .orderStatus(OrderStatus.PAYMENT_COMPLETED) .registeredDateTime(registeredDateTime1) .products(products) .build(); } private Product createProduct(ProductSellingStatus sellingStatus, ProductType type, String name, int price, String productNumber) { return Product.builder() .productNumber(productNumber) .type(type) .sellingStatus(sellingStatus) .name(name) .price(price) .build(); } }안녕하세요. 우빈님OrderRepository의 findOrdersBy() 테스트는 직접 작성하라고 하셔서 테스트를 작성하다가 궁금한 점이 생겨 질문 남깁니다. 첫 번째는 Order의 orderProducts를 테스트할 때, products가 프록시 객체로 넘어와서 테스트하지 못하는 거 같습니다.현재 코드는 테스트가 실패하는 코드고, extracting에서 "orderProducts"를 제외하면 성공하는 테스트가 됩니다.이럴 때는 어떻게 해결해야 할지 궁금합니다. 두 번째 질문은 제가 작성한 테스트 코드 구조에서 개선할 사항이 있는지 궁금합니다. 강의 잘 보고 있습니다.감사합니다.
-
해결됨스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
JPA 강의 듣는 중에 알수 없는 오류가 발생합니다..ㅠㅠ
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]============================CONDITIONS EVALUATION REPORT============================Positive matches:----------------- NoneNegative matches:----------------- NoneExclusions:----------- NoneUnconditional classes:---------------------- NoneIllegalStateException error가 발생합니다.https://drive.google.com/file/d/1Qk1diQlnWXRZlcdPBcbrTs_1Zctp2BdA/view?usp=sharing
-
해결됨스프링 DB 1편 - 데이터 접근 핵심 원리
javax.transaction.Transactional 질문
안녕하세요.javax.transaction.Transactional annotation에 대해 추가 질문드립니다. @Transactional annotation은 총 2가지가 있습니다.Spring에서 제공: org.springframework.transaction.annotation.TransactionalJava에서 제공: javax.transaction.Transactional 강의에서는 spring에서 제공하는 annotation을 사용으로 추천해주셨고, 대부분 org.springframework.transaction.annotation.Transactional으로 사용을 하더라구요. 직접 찾아본 바로는 두가지 모두 트랙잭션 자체에 대한 동작은 동일하지만, spring에서 제공하는 Transactional이 더 많은 부가 기능을 가지고 있어 사용을 권장한다고 하네요. 이렇게 이해하고 넘어가면 될까요?!의견이 궁금해서 질문드립니다.
-
미해결스프링 핵심 원리 - 고급편
콜백 패턴 반환 타입 T가 두번 쓰이는 이유
public class TraceTemplate { private final LogTrace trace; public TraceTemplate(LogTrace trace) { this.trace = trace; } public <T> T excute(String message, TraceCallBack<T> callback){ TraceStatus status = null; try { status = trace.begin(message); //로직 호출 T result = callback.call(); trace.end(status); return result; } catch (Exception e) { trace.exception(status, e); throw e; } } } 위 콜백 템플릿 에서 메서드 반환이 T 제네릭인건 이해가 되는데왜 반환이 T가 2번 쓰이는걸까요?
-
미해결스프링 핵심 원리 - 기본편
lombok 사용 시 [옵션 처리]와 [@Autowired 필드 명, @Qualifier, @Primary]는 어떻게 해야하나요?
[질문 내용]생성자를 딱 1개 두고, @Autowired를 생략하고 Lombok 라이브러리의 @RequiredArgsConstructor 함께 사용하면 final 필드를 매개변수로 가진 생성자를 만들어준다는 것까지는 어느 정도 이해 했습니다!1. 여기서 생성자가 1개이기 때문에 @RequiredArgsConstructor 애노테이션을 제외하면 코드에서 생성자에 관한 부분을 찾을 수 없는데 이전 강의[섹션 7: 옵션 처리]에서 학습한@Autowired(requited=false)@NullableOptional<>를 사용하고 싶다면 어떻게 사용해야하는 것인지 의문이 들어 질문드립니다!2.[@Autowired 필드 명, @Qualifier, @Primary] 강의에서의 @Autowired 필드 명 방법과 @Qualifier 방법(+ 애노테이션으로 만들어 사용하는 방법)도 lombok 라이브러리의 @RequiredArgsConstructor 사용시 어떻게 사용해야하는지도 궁금합니다.두 질문의 경우에는 lombok을 사용하지 않고 직접 생성자 주입 코드를 만들어야 할까요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
크롬 개발자 모드에서 Query String Parameters 어떻게 보나요?
수업중에 보면.. Query String Parameters를 확인 할 수 있게 되어 있습니다.그런데 저의 크롬에서는 저 란이 아무리 찾아봐도 없네요.request headers는 확인 가능하나...Query String Parameters 는 확인 인 불가합니다.도와주세요
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
request, response 생성 위치
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]이전 웹 서버, 웹 애플리케이션 서버 강의에서클라이언트 -> Web Server -> WAS -> DB이런 식으로 웹 시스템을 구성한다고 하셨는데 HttpServletRequest와 HttpServletResponse는 WAS 내의 WebServer에서 생성되는게 아니라 클라이언트의 http 요청을 가장 처음 받는 Web Server에서 생성해서 WAS의 WebServer로 넘겨주는건가요?
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
JAVA 에서 외부 API 를 처리하는 방식에 대해서
안녕하세요 강의 잘 듣고 있습니다. Javascript 에서는 외부 API 를 호출한 뒤, 그 결과를 기다리지 않고 다른 작업을 먼저 시작하거나 (비동기적으로), await 를 이용해서, (동기적으로 작동하기 위해) 작업이 끝날 때까지 기다리도록 설정을 합니다. 이런 비슷한 상황을 JAVA 는 어떻게 해결하는 지 궁금합니다.WebClient, CompletableFuture 를 이용해서 해결하는 게 맞는지. 더 나은 방식은 없는지. 나아가 이런 부분을 처리하는 방법에 대한 내용을 다룬 영한님의 강의가 있는지. 있다면 어느 부분에 있는지 여쭤보고 싶습니다... 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
쓰레드 활용 예시를 다룬 강의가 있나요?
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 싱글톤 예시를 설명해주시면서, 쓰레드를 사용할 때 위험성에 대해서 말씀해주신 것을 봤습니다. 혹시 이런 문제점을 다룬 강의가 없나요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
HttpSession 질문
[질문 내용]로그인 성공 시 HttpSession Session = request.getSession()를 호출해서 신규 세션을 생성하고 JsessionID로 사용자를 식별하는것으로이해했습니다. 여기서 궁금한것이 1. 세션 데이터는 공유 데이터로 서버 메모리 어딘가에 저장이 돼서 request.getSession() 으로 접근하는건가요? (a라는 사용자가 로그인컨트롤러를 호출하고 다른 컨트롤러에서 request.getsession을 하면 로그인 컨트롤러에서 반환하는 httpsession객체와 다른 컨틀롤러에서 반환하는 httpsession객체가 같은 것인지 다른것인지에 관한 메커니즘이 궁금합니다)1번이 아니라면 컨트롤러에 접근할 때 session 객체가 계속 생성되는데 이걸 어떻게 저장하고 클라이언트를 구분하는지 메커니즘이 궁금합니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
@RequestParam, @ModelAttribute, @RequsetBody 질문
3개의 방식 모두 프론트단(html)에서 값을 넘겨준다고 가정했을때 그때마다 어떤 어노테이션을 써야하는지 개념이 부족한거 같습니다. 예를 들어 프론트단에서 username, price의 값을 userA, 10000이라고 전달했을때로 가정한다면3개 모두 요청값을 받아 받은 데이터로 객체를 생성하고 set해주는 느낌인거같아서 헷갈립니다ㅠㅠ
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
Cannot resolve method "addAttribute"
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.
-
해결됨스프링 핵심 원리 - 기본편
AppConfig 빈 객체
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]스프링 컨테이너는 {빈 이름 : 빈 객체} 와 같이 저장된다고 배웠습니다.new AnnotationConfigApplicationContext(AppConfig.class);이때 AppConfig.class도 빈으로 등록된다고 하셨는데, 메소드 이름이 빈 이름, 그 메소드의 반환 객체가 빈 객체가 된다면, AppConfig는 클래스이고 반환객체도 없는데빈 이름과 빈 객체가 무엇으로 저장되는 것인가요?
-
미해결스프링 핵심 원리 - 기본편
@Configuration을 통한 @Bean 등록 질문
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요.@Configuration을 통해 빈을 수동등록할 때 강의 예제에서는 AppConfig 클래스를 사용하였는데요AppConfig1, AppConfig2, AppConfig3이라는 클래스에 각각 @Configuration을 붙이고 AppConfig1에서는@Bean public MemberService memberService()를AppConfig2에서는 @Bean public OrderService orderService()를 등록하고 ApplicationContext ac1 = new AnnotationConfigApplicationContext(AppConfig1.class);ApplicationContext ac2 = new AnnotationConfigApplicationContext(AppConfig2.class);이렇게 해서 스프링 컨테이너를 두 개 만들 수 있을거 같습니다이렇게 했을때 단점과 장점이 있는지? 실제로 이렇게 컨테이너를 분할하는 경우가 있는지? 궁금합니다 추가적으로 각 AppConfig1, AppConfig2에서 동일한 객체를 스프링 빈으로 등록한다면 이때도 여전히 싱글톤인지 궁금합니다
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
mvc강의 듣고 프로젝트 진행중 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]mvc 강의를 다 듣고 프로젝트를 진행중인데 계속 오류가 떠서 혹시 한번만 봐주실수있나요 ? ㅠㅠhttps://drive.google.com/drive/folders/15tIzYE6utLhSHtXVeYGPBUeqcMUFxKJc?hl=ko http://localhost:8080/velog/signUp 스프링을 실행시키고 위의 url로 이동한 뒤, 값을 모두 입력하고 Sign Up 버튼을 누르면 처음 기본 화면인 http://localhost:8080/velog/login 으로 가야하는데 이동을 안하고 계속 에러가 뜨는 상황입니다 ㅠㅠ.. 혼자 해결해보려고 했는데 하루종일 잡고있어도 에러가 안풀리네요... 도와주시면 감사하겠습니다어느부분에서 오류가 난걸까요 ?ㅠㅠㅠ