Spring Boot/MVC

    [Spring MVC] application.yml 프로파일 기능 사용법

    [Spring MVC] application.yml 프로파일 기능 사용법

    프로파일(Profile) 적용 및 실행 application-local.yml과 application-server.yml 프로파일 생성 로컬 환경에서 개발을 진행할 때는 기존 application.yml 파일에 이미 설정되어 있는 H2를 사용하고, 서버용 jar 파일을 빌드할 경우에는 빌드 전에 application.yml 파일에 기존의 H2 정보 대신에 서버에서 사용하는 DB 정보로 수정한 뒤에 빌드하면 된다. 하지만, Spring에서 제공하는 프로파일 기능을 사용하면 편리하게 빌드가 가능하다. application.yml 파일 외에 application-local.yml 파일과 application-server.yml 파일을 추가한다. (1) application.yml 파일은 주로 애플리케이션의 실..

    [Spring MVC] API 문서화 - Spring Rest Docs

    [Spring MVC] API 문서화 - Spring Rest Docs

    API 문서화란? 클라이언트가 REST API 백엔드 애플리케이션에 요청을 전송하기 위해서 알아야 하는 요청 정보(URI, request body, query parameter 등)를 문서로 정리하는 것을 의미한다. API 문서는 개발자가 요청 URL(또는 URI) 등의 API 정보를 직접 수기로 작성할 수도 있고, 애플리케이션 빌드를 통해 API 문서를 자동 생성할 수도 있다. Spring Rest Docs Spring Rest Docs는 REST API 문서를 자동으로 생성해 주는 Spring 하위 프로젝트이다. Spring Rest Docs를 사용한 API 문서화의 대표적인 장점은 테스트 케이스에서 전송하는 API 문서 정보와 Controller에서 구현한 Request Body, Response ..

    [Spring MVC] 테스팅(Testing) - Mockito

    Mock이란? 목업(Mock-up)은 실제 제품이 나오기 전에 내부적으로 사용하기 위한 모형(가짜) 제품을 의미한다. 단위 테스트나 슬라이스 테스트 등에 Mock 객체를 사용하는 것을 바로 Mocking이라고 한다. Mockito란? Mockito란 Mock 객체를 생성하고, 해당 Mock 객체가 진짜처럼 동작하게 하는 역할을 해주는 Spring Framework의 라이브러리이다. Mockito의 Mocking 기능을 이용해서 테스트하고자 하는 대상에서 다른 영역(다른 계층 또는 외부 통신이 필요한 서비스 등)을 단절시켜 오로지 테스트 대상에만 집중할 수 있다. Stubbing이란? Stubbing은 테스트를 위해서 Mock 객체가 항상 일정한 동작을 하도록 지정하는 것을 의미한다. MemberContr..

    [Spring MVC] 테스팅(Testing)

    [Spring MVC] 테스팅(Testing)

    작은 단위의 테스트로 미리미리 버그를 찾을 수 있기 때문에 애플리케이션의 덩치가 커진 상태에서 문제의 원인을 찾아내는 것보다 상대적으로 더 적은 시간 안에 문제를 찾아낼 가능성이 높다. Spring에서는 계층별로 테스트 할 수 있는 테스트 기법을 지원 해주고 있다. 단위 테스트(Unit Test)란? 기능 테스트는 주로 클라이언트 입장에서 애플리케이션이 제공하는 기능이 올바르게 동작하는지를 테스트하는 것이다. 통합 테스트는 개발자가 테스트의 주체가 되는 것이 일반적이다. 클라이언트 툴 없이 테스트 코드를 실행시켜 이루어지는 경우가 많다. 슬라이스 테스트는 애플리케이션을 특정 계층으로 쪼개어 테스트하는 것을 의미한다. 단위 테스트는 비즈니스 로직에서 사용하는 메서드 단위로 테스트하는 것을 의미한다. 단위 ..

    [Spring MVC] 트랜잭션(Transaction)

    [Spring MVC] 트랜잭션(Transaction)

    트랜잭션(Transaction)이란? 여러개의 작업을 그룹으로 묶는 것이다. 논리적으로 하나의 작업으로 인식해서 전부 성공하든가 전부 실패하든가의 둘 중 하나로만 처리되어야 한다. 이러한 All or Nothing이라는 트랜잭션 처리 방식은 애플리케이션에서 사용하는 데이터의 무결성을 보장하는 핵심적인 역할을 한다. 또한 트랜잭션은 애플리케이션의 핵심 로직 아닌 부가 기능이기 때문에 AOP의 적용 대상 중 하나라고 볼 수 있다. ACID 원칙 원자성(Atomicity) 트랜잭션에서의 원자성이란 작업을 더 이상 쪼갤 수 없음을 의미한다. 논리적으로 하나의 작업으로 인식하여 All or Noting 중 하나로만 처리되는 것이 보장되어야 한다. 일관성(Consistency) 트랜잭션이 에러없이 성공적으로 종료될..

    [Spring MVC] Spring Data JPA 데이터 액세스 계층 구현

    Spring Data JPA란? Spring Data JDBC와 Spring Data JPA는 Spring Data라는 패밀리 그룹에 포함되어 있다. Spring Data라는 추상화 된 데이터 액세스 접근 방식으로 구성이 되어 있기 때문에 Spring Data JDBC와 Spring Data JPA라는 기술은 사용하는 방식이 거의 유사하다. JPA vs Hibernate ORM vs Spring Data JPA 용어 정리 JPA(Jakarta Persistence API) 엔터프라이즈 Java 애플리케이션에서 관계형 데이터베이스를 사용하기 위해 정해놓은 표준 스펙이다. Hibernate ORM JPA라는 표준 스펙을 구현한 구현체이다. 실제 사용하는 API라고 볼 수 있다. Spring Data JPA ..

    [Spring MVC] JPA Entity 매핑과 연관 관계 매핑

    [Spring MVC] JPA Entity 매핑과 연관 관계 매핑

    Entity 매핑 JPA를 이용해 데이터베이스의 테이블과 상호 작용(데이터 저장, 수정, 조회, 삭제 등)을 하기 위해 데이터베이스의 테이블과 엔티티 클래스 간의 매핑 작업이 필요하다. Entity 매핑 작업을 크게 나누어 본 경우 Entity 클래스와 데이터베이스 테이블 간의 매핑 기본키 매핑 Entity 필드(멤버 변수)와 데이터베이스 테이블 컬럼 간의 매핑 Entity 간의 연관 관계 매핑 Entity 클래스와 데이터베이스 테이블 간의 매핑 @Entity(name = "USERS") @Table(name = "USERS") public class Member { @Id private Long memberId; } @Entity 해당 애너테이션을 클래스 레벨에 붙이면 JPA 관리 대상 엔티티가 된다...

    [Spring MVC] JPA(Java Persistence API) 개요

    JPA란? Java 진영에서 사용하는 ORM(Object-Relational Mapping) 기술의 Spec이다. 다시 말해, Java의 인터페이스로 사양이 정의되어 있기 때문에 JPA라는 표준 사양을 구현한 구현체는 따로 있다는 것을 의미한다. ORM(Object-Relational Mapping) 객체와 데이터베이스 테이블의 매핑을 통해 엔티티 클래스 객체 안에 포함된 정보를 테이블에 저장하는 기술 Hibernate ORM JPA 표준 사양을 구현한 구현체로는 Hibernate ORM, EclipseLink, DataNucleus 등이 있다. 앞으로 다룰 Hibernate ORM은 JPA에서 정의해둔 인터페이스를 구현한 구현체로써 JPA 지원 기능 이외에 Hibernate 자체 API 역시 지원하고 ..