Peony의 기록 창고 🌼
article thumbnail
[Spring Boot] Custom validator annotation 만들기
SpringBoot 2024. 11. 8. 17:50

API를 만들다보면 종종 클라이언트가 보낸 값을 검사하는 과정이 필요해진다. 그럴때 검증하는 로직들을 매 비즈니스 로직마다 반복적으로 넣지 말고, 어노테이션을 만들어서 사용해보도록 하자. ConstraintValidator 가 뭔데 ?ConstraintValidator은 jakarta.validation에서 제공하는 유효성 검증 인터페이스이다.ConstraintValidatorsns Controller 진입 전인, Interceptor에서 동작한다.이 반식은 똑같은 코드를 여러 번 반복해서 작성할 필요가 없으며, 코드 통일성 유지할 수 있어 개발 효율성을 높일 수 있다는 장점이 있다. 객체 지향 관점에서 바라봤을때도, 결합도를 낮추고 응집력을 높일 수 있다는 점에서 좋다. ConstraintValidat..

article thumbnail
[Test] Junit5로 Repository 테스트 코드를 작성해보자.
SpringBoot/Test 2024. 7. 3. 15:19

어노테이션@DataJpaTest @ActiveProfiles("test") @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)@DataJpaTest: JPA 관련 컴포넌트만 로드하여 테스트를 수행. 일반적으로 인메모리 데이터베이스를 사용하여 빠르게 테스트를 실행한다.@ActiveProfiles("test"): 테스트 환경 설정@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE): 기본적으로 @DataJpaTest는 인메모리 데이터베이스를 사용.replace = AutoConfigureTestDatabase.Replace.NONE 를 해주..

[Test] 통합 테스트 VS 단위 테스트
SpringBoot/Test 2024. 7. 2. 15:54

이번 프로젝트를 리팩토링하면서 꼭 해보자 했던 것이 바로 테스트 코드 작성이었다. 이전에 통합 테스트를 해본 적은 있지만, 단위 테스트는 제대로 경험해본 적이 없었다. 시간에 쫓기다 보니 단위 테스트를 작성할 기회가 없었고, 중요하다는 것을 알았지만 항상 뒤로 미루다 작성하지 않았었다. 이번에는 단위 테스트를 통해 프로젝트의 안정성과 품질을 한층 더 높여보려고 단위 테스트란 무엇인지, 코드는 어떻게 짜는지에 대해 알아보려고 한다. 단위 테스트 (Unit Test)란?단위 테스트(Unit Test)는 소프트웨어 테스트의 한 유형으로, 소프트웨어의 개별 구성 요소 또는 모듈이 예상대로 작동하는지 검증하는 과정이다. 여기서 "단위"는 보통 메서드, 함수, 또는 클래스와 같은 소프트웨어의 가장 작은 테스트 가능..

article thumbnail
[QueryDSL] QueryDSL, 그게 뭔데 ?
SpringBoot/QueryDSL 2024. 5. 12. 17:04

QueryDSL은 SQL, JPQL 등을 코드로 작성할 수 있도록 해주는 ✨빌더 오픈소스 프레임워크✨ 이다.사실, QueryDSL 이 JPA 에서만 사용하는 프레임워크로만 알 수도 있지만, JPA 뿐만 아닌 다양한 언어에 대해서도 서비스를 제공한다.공식사이트 Querydsl - Unified Queries for JavaUnified Queries for Java. Querydsl is compact, safe and easy to learn. querydsl.com QueryDSL JPAQueryDSL은 하이버네이트 쿼리 언어(HQL)의 쿼리를 타입에 안전하게 생성 및 관리해주는 프레임워크이다.자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만, 복잡한 쿼리..

[Spring Security] Spring Security 6.1 : Security Config deprecated
SpringBoot/Spring Security 2023. 10. 9. 20:53

Springboot 3.1.0 환경에서 Spring Security로 인증 방식을 구현하던 중 FilterChain 등록 코드에서 deprecated 에러가 등장했다. 'csrf()' is deprecated and marked for removal Spring Security 6.1.0 SpringBoot 3.1.0 버전은 Spring Security 6.1.0 버전을 dependency 한다. Spring Security 6.1.0의 release note를 살펴보면 and()와 non-lambda DSL methods를 deprecating 했다고 나와있다. non-lambda DSL? Spring Security 5.2 release 부터 lambda DSL을 지원해왔었다. 다만 이번 releas..

[JPA 활용1] 웹 계층 개발
SpringBoot/JPA 활용1 2023. 9. 18. 20:05

타임리프 관련은 강의 내용에 있으니, 컨트롤러 부분만 정리해보았다. 홈 컨트롤러 등록 @Controller @Slf4j public class HomeController { @RequestMapping("/") public String home() { log.info("home controller"); return "home"; } } 회원 등록, 조회 회원 등록 폼 객체 폼 객체를 사용해서 화면 계층과 서비스 계층을 명확하게 분리하자. @Getter @Setter public class MemberForm { @NotEmpty(message = "회원 이름은 필수 입니다") private String name; private String city; private String street; private..

[JPA 활용1] 주문 도메인 개발
SpringBoot/JPA 활용1 2023. 9. 18. 03:13

상품 도메인 기능 : 상품 등록, 목록 조회, 상품 수정 상품 도메인은 간단하니 생략하고 주문 도메인으로 넘어가보자. 주문 도메인 구현 기능 : 상품 주문, 주문 내역 조회, 주문 취소 주문 엔티티 @Entity @Getter @Setter @Table(name = "orders") public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", cascade = CascadeType.ALL) privat..

article thumbnail
[JPA 활용1] 회원 도메인 개발
SpringBoot/JPA 활용1 2023. 9. 14. 01:25

애플리케이션 아키텍처 계층형 구조 사용 controller, web: 웹 계층 service: 비즈니스 로직, 트랜잭션 처리 repository: JPA를 직접 사용하는 계층, 엔티티 매니저 사용 domain: 엔티티가 모여 있는 계층, 모든 계층에서 사용 패키지 구조 jpabook.jpashop domain exception repository service web 개발 순서: 서비스, 리포지토리 계층을 개발하고, 테스트 케이스를 작성해서 검증, 마지막에 웹 계층 적용 회원 리포지토리 @Repository @RequiredArgsConstructor public class MemberRepository { private final EntityManager em; public void save(Membe..

article thumbnail
[JPA 활용1] 도메인 분석 설계 & 구현 준비
SpringBoot/JPA 활용1 2023. 9. 13. 17:00

실제 동작하는 화면은 다음과 같다. 기능 목록 회원 - 등록, 조회 상품 - 등록, 수정, 조회 주문 - 주문, 주문 내역 조회, 주문 취소 기타 요구사항 상품은 재고 관리가 필요하다. 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 상품 주문시 배송 정보를 입력할 수 있다. 도메인 분석 설계 도메인 모델과 테이블 설계 도메인 모델 회원, 주문, 상품의 관계 : 회원은 여러 상품을 주문할 수 있다. 그리고 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계다. 따라서 그림처럼 주문상품이라는 엔티티를 추가해서 다대다 관계를 일대 다, 다대일 관계로 풀어냈다. 다만, 카테고리와 상품은 경험을 위해 다대다로 두었다. 상품 분류 : 도서, 음반, 영화는 상..

article thumbnail
[JPA 활용1] 프로젝트 환경설정
SpringBoot/JPA 활용1 2023. 9. 12. 00:51

프로젝트 환경설정 https://start.spring.io/ Dependencies spring-boot-starter-web 톰캣, 스프링 웹 MVC 등 지원 spring-boot-starter-thymeleaf 뷰 단을 SSR로 제공하는 타임리프 템플릿 엔진 Spring-boot-starter-data-jpa aop, jdbc (HikariCP 커넥션 풀), 하이버네이트 , 스프링 데이터 jpa 등 지원 spring-boot-starter(공통) 스프링 부트 + 스프링 코어 + 로깅 등 지원 테스트 라이브러리 spring-boot-starter-test junit, mockito, assertj, spring-test 핵심 라이브러리 스프링 MVC 스프링 ORM JPA, 하이버네이트 스프링 데이터 ..