# Back-End/Spring

    [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가..

    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 버튼을 눌러 접속한다.

    [JPA] 연관 관계를 가진 엔티티의 생성

    다대일의 관계에서 데이터를 저장할 때 연관관계를 매핑시키는 방법에 대한 글입니다. 문제상황 "유저는 여러 개의 상점을 등록할 수 있다." 상점을 저장하기 위해 유저에 대한 정보를 갖게 해줘야 했습니다. (비슷한 경우는 게시물 저장 시 사용자의 정보 갖게 하기) 먼저 저장에 사용되는 Store 엔티티와 DTO를 알아보겠습니다. 👉 Store 엔티티 @Getter @NoArgsConstructor @Entity public class Store extends BaseTimeEntity { @Id @Column(name = "STORE_ID") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false..

    [JPA] hibernate.ddl-auto 옵션 정리

    hibernate.ddl-auto 속성이란? Spring Boot 서버가 실행될 때 연결된 DBMS의 스키마의 변경이 있을 때 어떤 방법으로 변경할 지 정하는 속성이다. 이때 사용할 수 있는 전략은 4가지가 있다. none: 변경하지 않음 (대부분의 DB에서 디폴트값) update: 변경된 스키마만 적용 validate: 변경된 스키마가 있는지 확인하고 변경이 있다면 Application을 종료 create: 시작될 때 테이블을 DROP 하고 테이블을 다시 생성 create-drop: 시작과 종료에서 모두 drop 개발 초기 단계 : create 또는 update 테스트 서버 : update 또는 validate 스테이징, 운영 서버 : validate 또는 none

    인증과 인가란?

    📖 인증이란? (Authentication) 보호된 리소스에 접근하는 것을 허용하기 이전에 등록된 유저의 신원을 입증하는 과정 📖 인가란? (Authorization) 요청된 리소스에 접근할 수 있는 권한이 있는 인증된 유저인지 입증하는 과정 인증된 사용자만이 인가 받을 수 있다. 인증된 사용자만이 인가받을 수 있다. 인가 받은 "인증된 사용자"만이 요청된 자료에 접근할 수 있다. 인증과 인가의 방법 인증하기 : Request Header 인증 유지하기 : 브라우저의 쿠키, Session 안전하게 인증하기 : Server 효율적으로 인증하기 : Token (Ex: JWT : Json Web Token) 다른 채널을 통해 인증하기 : OAuth 1. Request Header 사용자는 Request Hea..

    ORM 과 SQL Mapper 비교

    ORM vs SQL Mapper 얼마 전 [스프링 부트와 AWS로 혼자 구현하는 웹 서비스] 라는 도서를 읽으며 처음 ORM이라는 기술을 접했다. 이전에 회사에서 접했던 스프링 프로젝트에서는 Ibatis 혹은 Mybatis(SQL Mapper)를 이용하여 직접 작성한 SQL문으로 RDB에 질의를 하고 그 결과를 객체에 매핑을 시켜줬었는데, 도서를 읽으며 토이프로젝트에 JPA라는 기술을 사용하니 SQL 구문을 직접 작성하지 않고 간단한 CRUD는 모두 처리할 수 있어 편리하였다. 지금까지 스프링 프로젝트를 진행하며 사용해본 기술에 대해 정리하고자 글을 작성한다. 📝 영속성(Persistence) 먼저 데이터가 갖는 특성 중 영속성을 알아본다. 영속성이란 데이터를 생성한 프로그램이 종료되더라도 사라지지 않는..