Programming/[Spring Boot]

    리포지토리 테스트 코드 작성

    리포지토리의 기본 메서드에 대한 테스트는 큰 의미가 없다.검증을 마치고 제공된 것이기 때문 데이터베이스 연동 여부데이터베이스를 제외시키기테스트용 데이터베이스 사용하기 데이터베이스 저장 테스트package com.springboot.test.data.repository; import com.springboot.test.data.entity.Product; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.orm.jpa.D..

    JPA save vs saveAndFlush

    JpaRespository 인터페이스에서 save와 saveAndFlush 라는 메서드가 존재한다.두 메서드 모두 인자 내의 데이터를 데이터베이스에 저장하는 메서드이다.두 메서드가 어떤 차이가 있는지 알아보자. Docs 살펴보기JpaRepository (Spring Data JPA Parent 3.0.3 API)declaration: package: org.springframework.data.jpa.repository, interface: JpaRepositoryhttps://docs.spring.io/spring-data/jpa/docs/current/api/org/springframework/data/jpa/repository/JpaRepository.html위 사이트로 접속하게 되면 JpaRepo..

    Entity 관련 Annotation

    @Entity해당 클래스가 Entity 임을 명시한다.클래스 자체는 테이블과 일대일로 매칭해당 클래스의 인스턴스는 테이블에서 하나의 레코드를 의미한다.@TableEntity 클래스는 테이블과 매핑되므로 특별한 경우가 아니면 @Table Annotation이 필요가 없다.사용해야 할 때클래스의 이름과 테이블의 이름을 다르게 지정해야 하는 경우위 Annotation을 명시하지 않으면 테이블의 이름과 클래스의 이름이 동일하다는 의미이다.@Id테이블의 기본값 역할로 사용된다.모든 Entity는 @Id Annotation이 필요하다.@GeneratedValue일반적으로 @Id Annotatio과 함께 사용된다.값 생성 방식GeneratedValue를 사용하지 않는 방식(직접 할당)애플리케이션에서 자체적으로 고유한..

    Lombok

    💡데이터(Entity 등) 클래스를 생성할 때 반복적으로 사용하는 getter/setter 같은 메서드를 Annotation으로 대체하는 기능 제공장점Annotation 기반으로 코드를 작성하므로 생산성이 높아짐반복되는 코드를 생략할 수 있어 가독성이 높아짐Lombok을 안다면 코드를 유추할 수 있어 유지보수에 용이 Intellij에 Lombok 설치File→Settings 에 들어간다.File→SettingsPlugins→lombok 검색 후 설치한다.Plugins→lombok 설치File→Settings→Build, Execution, Deployment→Compiler→Annotation Processors 에서 Enable annotation processing을 체크한다.맛보기다음과 같은 클래스..

    JpaRepository getById, findById

    SpringBoot에서 DB 작업을 도와주는 JPA 에서 JpaRepository 라는 interface를 지원해준다. 이 메소드 중 getById, findById의 차이를 살펴보자 getById실제 객체를 반환한다. 다음 코드를 살펴보자public Product selectProduct(Long number) { Product selectedProduct = productRepository.getById(number); return selectedProduct; }number를 Id로 하여 Id기반으로 데이터를 찾아내는 메소드이다. 반환실제로 반환되는 것은 Product 객체이다. 데이터가 없는 경우EntityNotFoundException 예외가 발생한다.findByIdOptional 객체 반환한다..

    DB 관련 용어

    ORM :: Object Realation Mapping💡JAVA의 객체와 RDB의 테이블을 자동으로 매핑하는 방법장점ORM을 사용하면 데이터베이스 쿼리를 객체지향적으로 조작이 가능하다.객체로 데이터베이스를 접근이 가능하다.재사용, 유지보수가 편리하다.데이터베이스에 대한 종속성이 줄어든다.객체를 기반으로 데이터베이스 테이블을 관리하기 때문에 데이터베이스에 종속적이지 않다.단점ORM만으로 서비스를 구현하기에는 한계가 있다.복잡한 서비스의 경우 코드만으로 구현하기 까다로움JPA :: Java Persistence APIJava에서 ORM 기술 표준으로 채댁된 인터페이스 모음ORM은 개념적인 느낌이라면, JPA는 개념적인 느낌을 인터페이스로 표현한 것이다.이 인터페이스를 이용한 구현체를 확인해보자.대표적인 구..

    Swagger를 활용한 REST API 명세 문서화

    💡API가 어떤 로직을 수행하고, 어떤 데이터를 받아 어떤 형식으로 반환하는지 정리해준다.의존성 추가하기pom.xml 에 다음 의존성을 추가한다. io.springfox springfox-boot-starter 3.0.0 의존성 추가 결과는 다음과 같다.Swagger 관련 설정 코드 작성com.springboot.api.config.SwaggerConfiguration.java를 생성한다.package com.springboot.api.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web...

    PUT/DELETE API 만들기

    PUT API💡POST API와 유사하나, 보통 DB 리소스 값을 업데이트하는데 사용클래스 생성package com.springboot.api.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1/put-api") public class PutController { }@RequestBody를 활용한 PUT 메서드 구현POST와 마찬가지로 데이터의 형태가 정해져 있는경우, 그렇지 않은 경우 2가지로 나눈다.데이터의 형태가 정해져 있지 않은 경우..

    POST API 만들기

    POST API💡저장하고자 하는 리소스나 값을 body에 담아서 서버에 전달하는 방식body는 보통 JSON 형식으로 주고받는다. (XML도 있긴하다.)공통 URL 생성하기package com.springboot.api.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1/post-api") public class PostController { }@RequestBody를 활용한 POST 메서드 구현2가지 방식으로 구현한다.어떤 형태로 값이 들..

    GET API 만들기

    다음처럼 Controller 패키지에 GetController를 생성한다.package com.springboot.api.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/api/v1/get-api") public class GetController { }매개변수가 없는 GET 메서드 구현GetController내에 @GetMapping(”/name”) Annotation을 사용하여 메서드를 생성한다.추후에는 메서드 형식에 맞게 다음처럼 Annotat..