전체 글

전체 글

    [Test] Spring Layer별 테스트 작성

    Spring Boot 레이어별 테스트 작성 가이드 Domain JUnit, AssertJ 등 테스트 편의 도구를 이용해서 테스트한다. Repository 인메모리 DB를 사용하고, JPA 관련 설정만 불러오는 @DataJpaTest를 이용해서 Repository의 동작(저장 및 조회)에 대해 테스트한다. 저장을 위한 JPA 연관 관계가 적절히 구성되었는지, Repository 메소드가 제대로 구현되었는지 확인하는 것을 목적으로 한다. JPA 관련 어노테이션 없이 코드를 작성해서 저장에 실패하는 테스트 코드를 먼저 작성하고, JPA 규칙에 맞는 어노테이션을 추가해서 테스트 코드를 통과시킨다. 기본적으로 인메모리 DB를 사용하나 테스트에 사용할 DB를 지정할 수 있다. Service 트랜잭션을 관리하는 것이..

    [Test] Spring Boot 테스트 클래스 정의 어노테이션

    Test의 종류 @SpringBootTest 통합 테스트 실제 App과 동일한 환경에서 테스트 @WebMvcTest 컨트롤러 테스트 웹상에서의 요청과 응답에 대한 테스트 @DataJpaTest JPA 관련된 설정을 로드하여 테스트 기본적으로 인메모리 DB로 테스트 테스트가 끝날 때마다 자동으로 테스트에 사용한 데이터를 롤백 @RestClientTest Rest 통신의 JSON 형식이 예상대로 응답을 반환하는지 등을 테스트

    [Test] JUnit5를 이용한 테스트 코드 작성

    JUnit5란? JVM에서 사용하는 테스트 프레임워크 테스트 개발을 위한 API 제공 Spring Boot 2.2.X 버전에서는 기본적으로 제공 (spring-boot-starter-test) JUnit4, JUnit5의 차이점 Spring 기본 제공 여부 구성된 모듈 사용하는 어노테이션 JUnit5는 Java 8부터 이용 가능 JUnit5 주요 어노테이션 @Test 테스트 메소드임을 선언 @DisplayName 테스트 메소드의 이름 표기 @BeforeAll static으로 작성하고, 테스트 class가 실행되기 전에 실행되는 곳 @BeforeEach 각 테스트 메소드가 실행되기전 실행 @AfterEach 각 테스트 메소드가 실행된 후 실행 @AfterAll static으로 작성하고, 테스트 class가..

    엔티티 매핑 2 (연관관계)

    연관관계 매핑 기초 목표 🤔 객체와 테이블 연관관계의 차이를 이해 객체의 참조와 테이블의 외래 키를 매핑 객체가 지향하는 패러다임과 관계가 지향하는 패러다임의 차이를 이해하고 적절하게 매핑하는 방법을 이해한다. 용어 방향(Direction) : 단방향, 양방향 다중성(Multiplicity) : 다대일, 일대다, 일대일, 다대다 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리 주인이 필요함 연관관계가 필요한 이유 [예제 시나리오] 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. @Entity public class Member{ ... private Long teamId; ... } 연관관계가 없다면, 엔티티에 매번 외래키를 매핑해야 하고, 연관된 테..

    엔티티 매핑 1(테이블, 컬럼, 키 매핑 전략)

    엔티티 매핑 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 1. 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 함 JPA를 사용해서 테이블과 매핑할 클래스 기본 생성자 필수(public 또는 protected 접근제한자) 가급적 name 속성은 따로 지정하지 않고 클래스명 그대로 사용한다. @Table 엔티티와 매핑할 테이블 지정 name 속성 : 테이블 이름 catalog : 데이터베이스 catalog 매핑 schema : 데이터베이스 schema 매핑 uniqueConstraints : DDL 생성 시에 유니크 제약 조건 생성 데이터..

    영속성 관리 - 내부 동작 방식

    JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑 영속성 컨텍스트 : JPA 내부 동작 방식 JPA 내부구조 영속성 컨텍스트 플러시 준영속 상태 영속성 컨텍스트란? 영속성 컨텍스트란? 1. 엔티티를 영구 저장하는 환경 2. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다. (클라이언트의 요청 하나당 하나의 엔티티 매니저가 생성된다.) 영속화란? 엔티티 매니저의 persist()를 통해 엔티티를 DB에 저장하는 것이 아닌 영속성 컨텍스트에 저장하는 것 em.persist(entity); 엔티티의 생명주기 비영속(new/transient) : 영속성 컨텍스트와 관계가 없는 상태(객체 생성만 한 것) 영속(managed) : 영속성 컨텍스트에 관리되고 있는 상태 준영속(detached) : 영속..

    JPA는 왜 사용해야 하는가?

    JPA는 왜 사용해야 하는가? 관계형 데이터베이스를 이용해 SQL 중심적인 개발을 할 때 맞닿는 문제가 두 가지 있다. 하나는 객체지향 패러다임과 관계형 패러다임의 불일치와 SQL의 유지보수 문제이다. 비즈니스 서비스를 개발할 때 수십 개, 수백 개의 테이블을 관리하고, 각 테이블마다 컬럼을 관리하는 것은 쉬운 일이 아니다. 특히 개발 중 기획된 내용이 변경됨으로 기존 코드를 수정해야할 때가 빈번하게 발생하는데 이때 들어가는 비용은 무시할 수 없다. ORM은 최근에 갑자기 등장된 것이 아니라 꽤 오래 전부터 다뤄지는 영역이었고, 자바의 ORM 기술 표준인 JPA에 대해 알아보도록 한다. JPA를 사용함으로 얻는 이점 1. CRUD 코드 작성 소요시간을 대폭적으로 감소시켜 생산성 증가 2. 테이블의 변경사..

    H2 console 세팅 & 접속

    1. yaml 설정 # h2 yaml spring: datasource: hikari.jdbc-url: jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL jpa: hibernate: direct: org.hibernate.dialect.MySQL5InnoDBDialect ddl-auto: create h2: console: enabled: true 2. 웹 콘솔 접속 http://localhost:8080/h2-console 3. JDBC URL 수정 jdbc:h2:mem://localhost/~/testdb;MODE=MYSQL 복사 후 JDBC URL에 붙여넣기 4. 접속 Connect 버튼을 눌러 접속한다.

    [Git] Git Flow 전략

    🔍 주제 Git Branch 전략 중 하나인 Gir Flow는 프로젝트를 전략적으로 관리할 수 있도록 하는 전략입니다. Git Flow전략에서의 브랜치 종류 5개 feature/{티켓기능} : 개발자가 특정 기능을 개발할 때 사용하는 브랜치 develop : 개발 브랜치, 기능 구현 완료 후 develop에 머지 release : 배포(출시)하기 위해 준비하는 브랜치, release 브랜치의 코드를 바탕으로 QA팀에서 QA를 수행 master : 실제 서비스로 런칭될 코드가 런칭되는 브랜치, 프로덕트 레벨 hotfix : 버그 수정 등 긴급 패치 시 사용하는 브랜치, 수정된 내용은 develop과 master에 동시에 머지 협업툴인 Slack, Jira와 함께 사용하면 더 효율적으로 사용할 수 있다. 개..