묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
SecurityContextHolder 는 DTO 같은 개념일까요?
강의를 다시 복습하니, SecurityContextHolder 가 지연로딩을 해 주는 역할도 하지만 다른 필터에 SecurityContext를 전달하는 DTO 같은 역할을 하는 것 같다고 느꼈는데 선생님 생각은 어떠신가요?
-
미해결스프링 DB 1편 - 데이터 접근 핵심 원리
sql-error-codes.xml에 없는 DB 종류를 사용할 경우
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]해당 파일을 커스터마이징 해야 하나요 ? 예를 들어 티베로 + 스프링 조합으로 개발을 하게 되면 예외 처리를 개발자가 직접 해줘야 한다고 생각하면 될까요 ?
-
미해결실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)
테스트 후 AfterEach 함수에서 나오는 쿼리
안녕하세요 fetch join까지 적용한 후에 테스트 코드 자체가 N+1 문제가 제거된 것은 확인했습니다.그런데 AfterEach 함수에서 deleteAll을 하는 과정에 fetch join 이전의 N+1 쿼리랑 유사한 쿼리가 나오는데 이게 delete 쿼리를 날리기 위한 데이터를 가져오려는 목적인것 같은데 질문이 있습니다. 혹시 deleteAll 이전에 나오는 쿼리도 N+1처럼 동작하는지테스트 코드이므로 테스트 객체의 모수가 작아 무시해도 되는지이정도 질문하고 싶습니다
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
9분 50초경 default 접근제어자의 이유
선생님 , 안녕하세요. 강의 잘듣고 있습니다!질문이 있어서 글남기게 됩니다! 이번 강의 9분 50초 정도에 AuthoriationManger 인터페이스는 접근제어자가 public으로 되어있는데, 하위 메서드인 verify는 접근제어자가 default로 되어있습니다! 위의 이유가 궁금합니다. AuthrozationManager 와 같은 패키지내의 클래스에서만 verify 메서드에 접근 가능하도록 제한을 두기 위한 것인지 아니면 다른 이유가 있는지 궁금합니다.답변 부탁드리겠습니다! 항상 좋은 강의 감사드립니다.
-
해결됨Practical Testing: 실용적인 테스트 가이드
Mockito로 Stubbing하기 8분경 OrderRepository 테스트
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 강의를 보다가 OrderRepository에 대한 테스트는 직접 짜보라는 말씀을 듣고 직접 한번 작성을 해봤습니다. @ActiveProfiles("test") @DataJpaTest class OrderRepositoryTest { @Autowired private OrderRepository orderRepository; @Autowired private ProductRepository productRepository; @DisplayName("원하는 주문 상태를 가진 주문들을 조회한다.") @Test void findOrdersBy() { // given Product product1 = createProduct("001", HANDMADE, SELLING, "아메리카노", 4000); Product product2 = createProduct("002", HANDMADE, HOLD, "카페라떼", 4500); Product product3 = createProduct("003", HANDMADE, STOP_SELLING, "팥빙수", 7000); productRepository.saveAll(List.of(product1, product2, product3)); Order order1 = createOrderWithOrderStatus(List.of(product1, product2), LocalDateTime.now(), PAYMENT_COMPLETED); Order order2 = createOrderWithOrderStatus(List.of(product3), LocalDateTime.now().minusDays(1), PAYMENT_COMPLETED); Order order3 = createOrderWithOrderStatus(List.of(product1, product2, product3), LocalDateTime.now().plusDays(1), PAYMENT_COMPLETED); orderRepository.saveAll(List.of(order1, order2, order3)); // when List<Order> orders = orderRepository.findOrdersBy( LocalDateTime.now().minusDays(1), LocalDateTime.now().plusDays(1), PAYMENT_COMPLETED ); // then assertThat(orders).hasSize(2) .extracting("orderStatus", "totalPrice", "registeredDateTime") .containsExactlyInAnyOrder( tuple(PAYMENT_COMPLETED, 8500, order1.getRegisteredDateTime()), tuple(PAYMENT_COMPLETED, 15500, order3.getRegisteredDateTime()) ); } private Order createOrder(List<Product> products, LocalDateTime registeredDateTime) { return Order.create(products, registeredDateTime); } private Order createOrderWithOrderStatus(List<Product> products, LocalDateTime registeredDateTime, OrderStatus status) { Order order = createOrder(products, registeredDateTime); order.updateOrderStatus(status); return order; } private Product createProduct(String productNumber, ProductType productType, ProductSellingStatus sellingStatus, String name, int price) { return Product.builder() .productNumber(productNumber) .type(productType) .sellingStatus(sellingStatus) .name(name) .price(price) .build(); } }이런 식으로 작성을 하였는데 제가 궁금한 점은createProduct는 대부분의 테스트 클래스에서 사용되는데 하나의 static 클래스와 같이 외부로 분리하는게 좋지 않을까 라는 생각을 해봤습니다. 저는 Order 클래스의 상태 변경을 위해서 updateOrderStatus라는 메소드를 생성 하였는데 (아직 해당 강의를 끝까지는 보지 않고 강의를 보기전에 먼저 테스트 코드를 작성 해보고 있습니다) 이런 식으로 테스트를 위해서 메소드를 생성 하는 경우도 괜찮을까요?제가 작성한 코드의 given 절이 너무 길어지는 느낌을 받았습니다. 현재는 order와 product를 생성 하는 정도이지만 더 복잡한 로직을 생성 할 경우 given이 너무 길어 지는것에 대한 해결 방안이 있을까요? 최대한 구글을 사용하여 찾아는 보았지만 우빈님의 생각도 궁금하여 여쭤보았습니다! 긴 글 읽어주셔서 감사합니다 🙂
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
v1에서 POST할때 insert문 오류
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용]여기에 질문 내용을 남겨주세요.Postman에서 http://localhost:8080/api/v1/members를 POST하는 것을 하고 있는데실행하면 아래와 같이 뜨고 insert into member (city, street, zipcode, name, member_id) values(NULL, NULL, NULL, 'hello', 1) 도 안뜨고 insert문 또한 한줄로 안나타나고 여러줄로 나옵니다...왜 이런걸까요 ?
-
미해결쥬쥬와 함께 하루만에 끝내는 스프링 테스트
S3통합 테스트 질문
통합 테스트 돌리는 중에java.lang.RuntimeException: java.net.URISyntaxException: Expected scheme-specific part at index 10: localhost:이런 에러가 나서 헤매고 있습니다 ㅜㅜ노션이랑 강의 다시 돌려보면서 틀린 부분 찾고 있는데 없는 것 같고요 scheme문제라고 해서 properties파일을aws.endpoint=localhost:4566 이거 에서aws.endpoint=http://localhost:4566 요걸로 바꿔도 에러가 발생하네요 어떻게 해결해야하나요?
-
미해결스프링 시큐리티 완전 정복 [6.x 개정판]
DefaultHttpSecurityExpressionHandler 가 스프링 컨테이너를 필드값으로 가지는 이유가 뭔가요?
강의 중간 (18: 15)에 커스텀 ExpressionHandler를 만들기 위해 setApplicationContext() 로 스프링 컨테이너를 필드값으로 set 했는데 스프링 컨테이너가 필요한 이유가 무엇인지 궁금합니다.
-
미해결Practical Testing: 실용적인 테스트 가이드
테스트 환경 통합하기 질문 있습니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 테스트 환경이 다르면 스프링을 새로 띄워야 된다고 하셨는데, 여기서 테스트 환경이란게 테스트 클래스마다 의존 관계를 주입 받는 클래스가 하나라도 달라지면 스프링이 새로 뜨게 되는 건가요??
-
미해결재고시스템으로 알아보는 동시성이슈 해결방법
테스트에서 트랜잭션 어노테이션 질문 있습니다.
먼저 좋은 자료 감사합니다. 해당 예제대로 진행하면 전부 동작 잘하는데 비관적 락 테스트 할때 테스트에 @Transactional을 붙이면 동작이 지연되다 실패하는데 그러한 이유로 테스트 전후 처리를 해주시는 걸까요?테스트에서 @Transactional(롤백)을 사용안하시는 이유가 있을까요?
-
미해결토비의 스프링 부트 - 이해와 원리
WebApplicationContext를 DispatcherServlet에 this로 넘기는 것
안녕하세요.스프링 강의 먼저 듣고 부트 강의를 듣고 있습니다.이번 강의에서 초반에는 this가 아니라 applicationContext 변수를 넘겼기 때문에 변수의 타입에 Web을 추가해서 넘겨줬었는데요.후반에는 this로 GenericWebApplicationContext를 넘겨주니까 applicationContext 변수의 타입은 다시 GenericApplicationContext로 하는 것도 괜찮은 방법일까요? 확인해보니까 registerBean 메서드는 GenericApplicationContext의 메서드여서 질문드려봅니다.해당 클래스는 인터페이스 클래스가 아니어서 뭘 써도 상관이 없는걸까요?
-
미해결스프링 핵심 원리 - 고급편
스프링 시큐리티 강의는 계획에 없으신가요?
김영한님 강의 스타일이 너무 제 스타일이라 시큐리티도 배우고 그렇게 싶네요
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
h2database 설치 안됨
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]h2database 설치 페이지로 아예 넘어가질 않습니다.사이트의 문제인건가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
messages.properties로 메시지 관리할 경우 관리 측면에선 편하지만 나중에 프로젝트 분석하는 사람 입장에선 분석이 힘들어질 것 같은데
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]그런 경우 어떤 식으로 보완할 수 있을까요??? (강의보다가 궁금해져서 글 남겨봅니다! )
-
미해결Practical Testing: 실용적인 테스트 가이드
하위 레이어가 상위 레이어를 알고 있는 경우에 대해 질문 있습니다.
안녕하세요. 하위 레이어가 상위 레이어를 알고 있는 경우는 좋지 않다고 하셨는데 만약에 도메인을 순수하게 유지하고 싶어서도메인 엔티티와 jpa 엔티티를 분리하고, service와 jpaRepository에 DIP를 적용하게 되면service에서는 repository 인터페이스를 사용하고,repository 인터페이스를 구현하는 repositoryImpl에서 jpaRepository를 사용하게 될 것 같습니다.이 경우에 repositoryImpl에서는 jpa 엔티티 -> 도메인 엔티티로 변환을 하고, 도메인 엔티티를 service로 반환해주어야 할 것 같은데이렇게 되면 하위 레이어인 infrastructure(persistance) 레이어에서 상위 레이어에 있는 도메인 엔티티에 대한 의존성이 생긴다고 생각하는데 이런 경우는 상위 레이어에 의존성이 생겨도 상관 없는 경우인가요??테스트 강의와 무관한 질문을 드려서 죄송합니다 ㅠㅠ
-
미해결Practical Testing: 실용적인 테스트 가이드
경계값 테스트 작성 시 질문 있습니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요. 경계값을 테스트할 때는 하나의 테스트 메서드 안에 모두 작성하는게 맞는건가요?상품 등록시 상품 번호의 증가로 예를 들면한 자리 -> 한 자리 ( 1 -> 2 )한 자리 -> 두 자리 ( 9 -> 10 )두 자리 -> 세 자리 ( 99 -> 100 ) 이런 식으로 작성할 수 있을 것 같은데, 이렇게 경계값에 대한 모든 경우를 한 메서드에 작성하는게 맞는 것 같긴한데, 경계값이 많아지면 좀 알아보기 힘들 것 같아서 여쭤봅니다..
-
미해결스프링 핵심 원리 - 기본편
MemoryMemberRepository를 2번 선언해도 테스트 결과가 정상인 이유?
[질문 내용]안녕하세요 '주문과 할인 도메인 실행과 테스트' 수강 도중 의문점이 생겨서 질문 남깁니다. MemberServiceImpl 과 OrderServiceImpl 에서 모두 new 생성자를 통해서 MemoryMemberRepository 를 생성하고 있습니다.이렇게 되면 MemberSerivceImpl에서 join 한 Member 객체는 MemberServiceImple 객체에 존재하는 MemoryMemberRepository에만 저장될 것 같아서 OrderServiceImpl에서 선언한 MemoryMemberRepository는 비어있는 상태일 것이라고 생각했습니다. 그런데 OrderServiceImpl에서 선언한 MemoryMemberRepository에서 findById()를 해도 join한 Member 객체를 조회할 수 있게 되는 이유가 무엇인가요?
-
미해결실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
API에서 컬렉션을 직접 반환하는 부분에 관한 질문입니다.
API 개발 기본 - 회원 조회 API의 강의에서, membersV1은 엔티티를 직접 반환하기 때문에 좋지 않고, 컬렉션을 직접 반환하기 때문에 향후 API 스펙을 변경하기 어렵다고 하셨습니다. 따라서 membersV2에서는 엔티티를 직접 반환하지 않고 API 스펙에 따라 DTO를 맞춰 설계하고, 별도의 필드가 생길 것을 대비해 Result 클래스로 한번 감싸서 넘긴 것을 알 수 있었습니다.이후 API 개발 고급부터는, Result 클래스로 감싸지 않고 List<DTO>로만 API의 응답값을 설정하시던데, 일부러 Result 클래스로 감싸는 부분을 생략하신 것인지 궁금합니다. 이와 별개로 실무에서는 Result와 같은 클래스로 감싸고 응답하는 것이 일반적일까요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
gradle 설정
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. Gradle로 빌드하면 localhost:8080 접속시 index 페이지가 잘나옵니다. 그런데 Intellij로 빌드하면 페이지가 안나오는데 왜 그런건가요?
-
미해결Practical Testing: 실용적인 테스트 가이드
비지니스 로직이 퍼시스턴스 계층에 침투하는 경우 관련해서 질문드립니다.
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!먼저 유사한 질문이 있었는지 검색해 보세요.서로 예의를 지키며 존중하는 문화를 만들어가요. 안녕하세요 Business Layer 테스트 (1) 강의 시작 부분에서 Querydsl을 쓰거나 별도의 DAO를 사용하면서 비지니스 로직이 퍼시스턴스 계층에 침투하게 작성하는 경우가 있다고 하셨는데 좀 더 구체적인 예시를 들어주실 수 있나요?그리고 요구사항이 복잡하여 엔티티를 가져오는 쿼리 역시 복잡해지는 경우, 이는 비즈니스 로직이 침투한 것으로 봐야할까요? 일반적인 CRUD 쿼리와 달리 특정 쿼리만 복잡하다면 추가적인 요소가 반영되었을 수도 있다 생각했고 따라서 이러한 경우를 비즈니스 로직의 개입으로 판단해야 하나 의문이 들어 질문 드립니다.