inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

테스트 given절 작성 시, "팩토리 메서드를 통한 생성 지양" 관련 문의

미해결

Practical Testing: 실용적인 테스트 가이드

학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요! 먼저 유사한 질문이 있었는지 검색해 보세요. 서로 예의를 지키며 존중하는 문화를 만들어가요. 강의에서 테스트 given절에서 팩토리 메서드를 통한 객체 생성은 어떠한 의도가 들어갈 수 있으므로 지양하라고 하셨습니다. 관련하여 질문이 있습니다. 예를 들어 다음과 같은 팩토리 메서드가 있다고 하면, public class Coffee { private String type; private int size; public Coffee(String type, int size) { this.type = type; this.size = size; } } public class SeasonalCoffeeFactory { public static Coffee createCoffee(String season) { switch (season.toLowerCase()) { case "summer": return new Coffee("Iced Coffee", 50); case "winter": return new Coffee("Hot Coffee", 30); case "spring": return new Coffee("Latte", 40); case "fall": return new Coffee("Pumpkin Spice Latte", 45); default: throw new IllegalArgumentException("Unknown season: " + season); } } } 여름 시즌 커피에 대한 테스트 코드는 다음과 같을 겁니다. @Test public void testCreateSummerCoffee() { Coffee coffee = SeasonalCoffeeFactory.createCoffee("summer"); assertEquals("Iced Coffee", coffee.getType()); assertEquals(50, coffee.getSize()); } 이때 테스트 코드는 시즌에 맞는 커피 메뉴를 given절에 생성한 후 타입 일치여부만 판단하면 됩니다. 하지만 이 부분을 팩토리 메서드로 작성하지 않게되면 커피를 생성함에 있어 if ("summer".equalsIgnoreCase(season)) { coffee = new Coffee("Iced Coffee", 50); } else if... 와 같은 부분이 테스트 코드의 given절에 들어가야하지 않나 싶습니다. 물론 이런 부분에 대해서 if라는 논리구조가 들어갔으니 한번 더 테스트 코드 메서드가 분리되어야하는건가 싶기도 한데 확신이 잘 안 서서 질문 드리고 싶습니다. 긴 글 읽어주셔서 감사합니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
  • 팩토리메서드
ykm8864 댓글 2 좋아요 0 조회수 235

뷰 개발 파일 없음

해결됨

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

다운받은 파일에서 assets/vendor/quill/quill.min.js. quill.min.js가 존재하지않는데 그냥 진행해도 될까요? fragment-foot <script src="assets/vendor/quill/quill.min.js" th:src="@{/assets/vendor/quill/quill.min.js}"></script> 페이지 실행은 잘 되는데 파일이 존재하지않아서 에러가 나옵니다.

  • kotlin
  • mysql
  • docker
  • spring-boot
  • jpa
ailen22 댓글 2 좋아요 0 조회수 172

fragment 분리 에러

해결됨

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

타임리프 뭐가 문제일까요? 아무리 찾아봐도 모르겠습니다ㅜ https://github.com/lee-soohyun/portfolio-lee/commit/56f4909c2ceb6c6e5ad1b6dbb9603e0c2233a825

  • kotlin
  • mysql
  • docker
  • spring-boot
  • jpa
ailen22 댓글 1 좋아요 0 조회수 138

writer 와 content 혼란

미해결

코드로 배우는 React 19 with 스프링부트 API서버

api 서버에서 Todo 엔티티 에는 content 로 했는데 왜 이번 섹션4 강의부터 갑자기 writer 가 나오는 건가요? 원래 writer 인데 content로 잘못 만드신건데 그냥 사용하신건가요? 그냥 계속 진행 해도 별 문제 없는 건지 궁금합니다

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
IGOR 댓글 2 좋아요 0 조회수 166

추스 스키마 질문...

미해결

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

스프링강의 18강 Controller를 3단 분리하기 강의에서 7분 30초쯤에 나오는 추스 스키마? 아무리 찾아도 저는 그런게 없는데 어떻게 하나요? 추스 스키마로 라이브러리 설정이 저는 보이지 않네요 인텔리제이 2024.2.3 울티메이트 사용하고 있습니다.

  • java
  • spring
  • aws
  • mysql
  • spring-boot
  • jpa
하민철(Mincheol) 댓글 2 좋아요 0 조회수 126

6분 41초 영상 질문

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] 해당 영상 6분 41초에서 '사실상 Member에서 Orders의 1대 다가 표현되는 이 컬렉션은 필요가 없다' 라고 말씀해주셨는데 해당 표현에 의미가 1:N 연관 관계가 필요없다는 의미가 아니라 orders속성이 필요없다는 의미가 맞을까요??

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
항상배고픔 댓글 1 좋아요 0 조회수 101

admin 페이지에서 projectSkill 질문 있습니다

해결됨

입문자를 위한 Spring Boot with Kotlin - 나만의 포트폴리오 사이트 만들기

admin 페이지 중 왼쪽에 사이드바에서 projectSkill 클릭할 때 url 이 "/admin/project/skill" 이 아닌, "admin/projectSkill" 로 넘어가져서 오류 페이지로 이동된다면 어디를 고쳐야 할까요? @Controller @RequestMapping("/admin/project/skill") class AdminProjectSkillViewController( private val adminProjectSkillService: AdminProjectSkillService ) { @GetMapping fun projectSkill(model: Model): String { val proejctList = adminProjectSkillService.getProjectList() val skillList = adminProjectSkillService.getSkillList() val formElements = listOf<FormElementDTO>( SelectFormElementDTO("project", 8, proejctList), SelectFormElementDTO("skill", 4, skillList) ) model.addAttribute("formElements", formElements) val table = adminProjectSkillService.getProjectSkillTable() model.addAttribute("table", table) model.addAttribute("detailTable", null) val pageAttributes = mutableMapOf<String, Any>( Pair("menuName", "Projects"), Pair("pageName", table.name), Pair("editable", false), Pair("deletable", true), Pair("hasDetails", false), ) model.addAllAttributes(pageAttributes) return "admin/page-table" } }

  • kotlin
  • mysql
  • docker
  • spring-boot
  • jpa
댓글 2 좋아요 0 조회수 136

테이블이 생성이 안됩니다...

미해결

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? (예/아니오)y 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)y 3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)y [질문 내용] 여기에 질문 내용을 남겨주세요. H2를 삭제 후 재설치도 해봤지만 여전히 테이블이 생기지않습니다...

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
i_12244111 댓글 4 좋아요 0 조회수 280

v5, v6 로 가면서 점점 JPA 를 쓰는 장점이 없어지는 느낌이 들어서요..

미해결

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

JPQL 로 한번에 가져오는 방식으로 변경해가면서 실제 db 로 날아가는 쿼리 횟수는 적어지지만 jpql 에 점점 더 많이 의존하게 되는것 같아요. 전 jpa 가 sql 쿼리 사용의 의존을 줄이고 애플리케이션 단에서 객체지향 적으로 코드를 짤 수 있다는 이유 때문에 사용하는 것으로 알고있는데요.. 물론 orm 만으로 모든 비즈니스 로직을 해결하기엔 힘든 경우도 있다는 것은 잘 이해하고 있지만, JPQL 을 많이 사용할 수록 mybatis 를 사용하는 것과 다를게 없다는 느낌이 드는데.. 현업에서는 n + 1 문제나 쿼리 횟수 최적화를 위해서 jpql 로 많이 작성하는지 궁금해요

  • java
  • spring
  • spring-boot
  • jpa
ewgregerg c 댓글 1 좋아요 1 조회수 340

refresh token filter

미해결

코드로 배우는 React 19 with 스프링부트 API서버

refresh token filter를 validation하고 재발급해주는 걸 컨트롤러로 구현하셨는데 필터로 구현한다면 UsernamePasswordAuthenticationFilter 앞으로 지정한 JWTCheckFilter 에다가 구현하면될까요>?

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
김우철 댓글 2 좋아요 0 조회수 195

TDD 를 적용하면 구현하려는 기능에 필요한 객체들을 설계하고 들어가야 하는건가요?

미해결

Practical Testing: 실용적인 테스트 가이드

안녕하세요 강사님. 요즘 질문을 많이해서 대단히 죄송하게 생각하고 있습니다! 우선 질문 계기를 들어보시죠. [질문을 하게 된 이유] 처음에 최소한으로 돌아가는 쓰레기 코드를 만들었고, 리팩토링으로 객체를 쪼개며 단위 테스트를 작성하고 있었습니다. 근데 갑자기 이런 고민이 들더군요. "TDD 를 적용하려면 어떻게 해야하지?" 하지만 아무리 생각을 해봐도 TDD 를 적용하려면 "쓰레기를 만들고, 여러 객체들로 쪼개 개선 해나가는" 형태의 개발방식에은 사용할 수 없다는 결론에 도달하게 되었습니다. 애초에 TDD 를 적용하려면 "처음부터 구현하려는 기능에 필요한 객체들을 생각하고 만들어나가야 하는건가?" 아니 이러면 너무 피곤하지 않나? 라는 생각이 들었습니다. [본격적인 질문] [질문 1] 처음부터 돌아가는 쓰레기 코드(하나의 클래스에 몰빵) 를 만들고, 리팩토링을 통해 여러 객체로 책임을 분산시키는 형태의 개발 방식은 애초에 TDD 를 적용할 수 없는 것인가요? (TDD 를 적용하면 애초에 스파게티 코드가 나올 수 없는건가요?) [질문 2] TDD 가 애초에 구현하려는 기능에 필요한 객체들을 처음부터 설계하고 들어가는 방식인건가요? [질문 3] TDD 를 적용하려면 구현하는 기능에 필요한 도메인 지식들을 완벽하게 숙지하고 들어가야 코드를 수정하는 일이 별로 없을거라고 생각됩니다. 그렇지 않으면 "일단 쓰레기 구현 -> 리팩토링 -> 테스트" 개발 방식보다 시간이 훨씬 오래 걸릴거라고 생각하는데.. 강사님 생각은 어떠신지 궁금합니다. [질문 4] TDD 를 적용하면 코드 품질이 좋을 수 밖에 없는 이유가 [질문 2] 때문인가요? (한국말 너무 어렵습니다..)

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
PrivilegeEscalate 댓글 2 좋아요 0 조회수 270

주문상품 양방향

해결됨

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문상품과 주문은 다대일 양방향인데 주문상품과 상품은 다대일 단방향으로 하셨는데 첫번째는 양방향으로 설정하신 이유가 뭘까요?

  • java
  • spring
  • 웹앱
  • spring-boot
  • jpa
에어 댓글 1 좋아요 0 조회수 175

em.persist에 대해서 궁금한 점이 있습니다.

미해결

실전! 스프링 데이터 JPA

제 기억속에 jpa 활용편에서 들었던 내용이였던 거 같은데 em.persist()를 호출하게 되면 id값이 자동증가여서 값이 null이기 때문에 em.flush를 호출안해줘도 persist와 동시에 flush가 호출된다고 기억속에 있습니다... 혹시 맞을까요..?

  • java
  • spring
  • spring-boot
  • jpa
kongminoo 댓글 1 좋아요 0 조회수 147

contextLoads() 테스트는 왜 깨진 것인가요?

미해결

Practical Testing: 실용적인 테스트 가이드

강의 중에 별도의 언급 없이 지우고 넘어가셔서 질문합니다. contextLoads() 테스트는 왜 깨진 것인가요? 이 테스트는 지워도 되는 것인가요?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
홍석호 댓글 2 좋아요 0 조회수 285

JWT 체크필터만들기 보고있습니다

미해결

코드로 배우는 React 19 with 스프링부트 API서버

api 가 요청받을때 시큐리티 필터 넘버링되서 13개쭉나오는 설정은 어디서 하는건지 알수있을까요>?

  • react
  • spring-boot
  • jpa
  • jwt
  • redux-toolkit
김우철 댓글 2 좋아요 0 조회수 135

더티체킹에 궁금한 점이 있습니다.

미해결

실전! 스프링 데이터 JPA

public void updateUserName(Long userId, String newName) { User user = userRepository.findById(userId) .orElseThrow(() -> new CustomException("User not found with id: " + userId)); user.setName(newName); userRepository.save(user); } 여기서 findById로 인해 영속성 컨텍스트에 user가 올라가있어서 setName만 해줘도 더티체킹으로 인해서 저장되는 걸로 알고있습니다. 그러면 userRepository.save (user);를 따로 해줘야하나요?

  • java
  • spring
  • spring-boot
  • jpa
kongminoo 댓글 2 좋아요 0 조회수 127

em.flush() 차이에 대해 궁금한 점이 있습니다.

미해결

실전! 스프링 데이터 JPA

Optioanl<Member> findById(Long id)와 @Query("select m from Member m where m.id = :id) Optional<Member> findByid(@Param("id") Long id) 가장 위의 코드는 spring data jpa를 이용해서 작성했기 때문에 em.flush()가 호출될 때 바로 일어나지않고 아래의 코드는 jpql로 작성했기 때문에 로직 호출 시에 바로 em.flush()가 발생하는 거 맞나요?

  • java
  • spring
  • spring-boot
  • jpa
kongminoo 댓글 1 좋아요 0 조회수 115

fetchOne 반환 값 / 실무 Exception

미해결

실전! Querydsl

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요. 1. 강의 내용과 관련된 질문을 남겨주세요. 2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요. (자주 하는 질문 링크: https://bit.ly/3fX6ygx) 3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요. (질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG) 질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요. ========================================= [질문 템플릿] 1. 강의 내용과 관련된 질문인가요? 예 2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예 3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예 [질문 내용] fetchOne()은 결과 값이 없을 경우 null을 반환 하는데 왜 Optional<Member>로 반환 하지 않나요? fetchOne()은 member가 없을 경우 null 반환 합니다. 결과 값을 Optional.ofnullable()로 감싸서 반환 후 서비스 계층에서 null 이면 안될 경우 RutTimeException을 상속한 커스텀 Exception을 발생 시키고 advice에서 처리 하는게 맞나요?

  • java
  • jpa
조희제 댓글 1 좋아요 0 조회수 240

'아래 spring batch 통합 테스트시 @Transactional 사용 어려움 질문'의 추가질문입니다.

미해결

Practical Testing: 실용적인 테스트 가이드

아래 질문에서 ( https://www.inflearn.com/community/questions/939280/spring-batch-%ED%86%B5%ED%95%A9-%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%8B%9C-transactional-%EC%82%AC%EC%9A%A9-%EC%96%B4%EB%A0%A4%EC%9B%80-%EC%A7%88%EB%AC%B8%EC%9D%B4%EC%9A%A5?srsltid=AfmBOorgNyXxuBBsgtD-dGYQq1p884s2u8Wg1u75xaynYq2EooXmmnnM) 즉, 스프링 배치 통합 테스트를 작성하는 경우, 현 강의에서 다루고 있는 테스트 작성법과는 다른 접근이 필요한 것이죠. (배치 수행 시 chunk 단위로 여러 번 트랜잭션이 수행될테니까요) 답변을 달아주셨는데요, 테스트 클래스에 @Transactional 붙이면, 하나의 테스트 메서드 내 스프링 배치의 작업도 일괄 롤백될테니까, 결국엔 테스트 간에 오류를 안일으키지 않나요..?

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
댓글 2 좋아요 0 조회수 296

OrderRepositoryTest에서 Product 객체를 생성하는 것을 생략하고 테스트 해도 괜찮나요?

미해결

Practical Testing: 실용적인 테스트 가이드

OrderRepository에서 startDateTime, endDateTime, orderStatus를 파라미터로 받아 List<Order>를 반환하는 findOrdersBy 쿼리메소드를 테스트하려고합니다. OrderRepositoryTest 내부에서 해당 테스트를 작성하던 중 given절에서 Product 객체를 생성하는 과정을 생략하고 Order 객체를 생성할때 비어있는 리스트를 이용하여 생성하도록 하였습니다. @ActiveProfiles("test") @SpringBootTest class OrderRepositoryTest { @Autowired private OrderRepository orderRepository; @DisplayName("원하는 기간과 원하는 주문상태의 주문들을 조회한다.") @Test void findOrdersBy() { // given LocalDate registeredTime = LocalDate.of(2024, 10, 24); Order order1 = Order.builder() .products(List.of()) .orderStatus(PAYMENT_COMPLETED) .registeredDateTime(registeredTime.atStartOfDay()) .build(); Order order2 = Order.builder() .products(List.of()) .orderStatus(PAYMENT_COMPLETED) .registeredDateTime(registeredTime.plusDays(1).atStartOfDay()) .build(); orderRepository.saveAll(List.of(order1, order2)); // when List<Order> orders = orderRepository.findOrdersBy( registeredTime.atStartOfDay(), registeredTime.plusDays(1).atStartOfDay(), PAYMENT_COMPLETED); // then assertThat(orders).hasSize(1) .extracting("orderStatus", "registeredDateTime") .contains( tuple(PAYMENT_COMPLETED, registeredTime.atStartOfDay()) ); } 이는 테스트하려는 목적이 Order 객체 내부에 적절한 List<OrderProduct> 값을 가지고 있는지를 검증하려는 것이 아니고 findOrdersBy 쿼리메소드가 적절한 Order객체를 가져오는지를 테스트하는 것이라고 생각하였습니다. 위와 같이 실제 객체를 생성하는 것 대신 비어있는 리스트 값을 활용하는 것도 괜찮은지 궁금합니다.

  • spring
  • tdd
  • jpa
  • mockito
  • 소프트웨어-테스트
  • junit5
sanghyeon Lee 댓글 2 좋아요 0 조회수 195

인기 태그

인프런 TOP Writers

주간 인기글