스프링 부트 기초 - 2

2 minute read

2022-10-25 스프링부트

Swagger

Swagger

서버로 요청되는 API 리스트를 HTML 화면으로 문서화하여 테스트 할 수 있는 라이브러리

이 라이브러리는 서버가 가동되면서 @RestController를 읽어 API를 분석하여 HTML 문서로 작성함

Swagger가 필요한 이유

  • REST API의 스펙을 문서화 하는 것은 매우 중요

  • API를 변경할 때마다 Reference 문서를 계속 바꿔야하는 불편함이 있음

Swagger 설정 방법

  • @Configuration : 어노테이션 기반의 환경 구성을 돕는 어노테이션 IoC Container에게 해당 클래스를 Bean 구성 Class임을 알려줌

  • @Bean : 개발자가 직접 제어가 불가능한 외부 라이브러리 등을 Bean으로 만들 경우에 사용

🔔 Swagger 오류

  • Controller의 목록이 나오지 않는다 swagger오류.png


🔔 Swagger 오류 원인

  • Controller가 속해있는 패키지명으로 해야한다 swagger오류원인.png
@Bean
public Docket api() {
   return new Docket(DocumentationType.SWAGGER_2)
     .apiInfo(apiInfo())
     .select()
     .apis(RequestHandlerSelectors.basePackage("studio.thinkground.aroundhub"))
     .paths(PathSelectors.any())
     .build();
}


🔔 해결

  • basePackage 부분을 변경

swagger오류해결.png

@Bean
public Docket api() {
   return new Docket(DocumentationType.SWAGGER_2)
     .apiInfo(apiInfo())
     .select()
     .apis(RequestHandlerSelectors.basePackage("studio.thinkground.testproject"))
     .paths(PathSelectors.any())
     .build();
}



Lombok

반복되는 메소드를 Annotation을 사용하여 자동으로 작성해주는 라이브러리

일반적으로 VO, DTO, Model, Entity 등의 데이터 클래스에서 주로 사용됨

Lombok 대표적인 어노테이션

1) @Getter // @Setter

해당 클래스에 선언되어 있는 필드를 기반으로 ‘getFiled’, ’setFiled’와 같은 식으로 자동으로 메소드를 생성

2) @NoArgsConstrutor // @AllArgsConstructor // @RequiredArgsConstructor

  • @NoArgsConstrutor : 파라미터가 없는 생성자를 생성
  • @AllArgsConstructor : 모든 필드값을 파라미터로 갖는 생성자를 생성
  • @RequiredArgsConstructor : 필드값 중 final이나 @NotNull인 값을 갖는 생성자 생성

1) @ToString

  • toString 메소드를 자동으로 생성해주는 기능

  • @ToString 어노테이션에 exclude 속성을 사용하여 특정 필드를 toString에서 제외시킬 수 있음

4) @EqualsAndHashCode

  • equals, hashCode 메소드를 자동으로 생성

  • equals : 두 객체의 내용이 같은지 동등성(equality)를 비교하는 연산자

  • hashCode : 두 객체가 같은 객체인지 동일성(identity)를 비교하는 연산자

  • callSuper 속성을 통해 메소드 생성시 부모 클래스의 필드까지 고려할지 여부 설정 가능

  • callSuper = true → 부모 클래스 필드 값들도 동일한지 체크

@Data 해당 어노테이션을 사용하면, 앞서 나온 기능들을 한번에 추가해줌

  • @Getter // @Setter
  • @RequiredArgsConstructor
  • @ToString
  • @EqualsAndHashCode
package studio.thinkground.testproject.dto;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class MemberDTO {

    private String name;
    private String email;
    private String organization;

}



ORM(Object Relational Mapping)

🔔 ORM 이란?

어플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미

Java의 데이터 클래스와 관계형 데이터베이스의 테이블을 매핑

객체지향 프로그래밍과 관계형 데이터베이스의 차이로 발생하는 제약사항을 해결해주는 역할을 수행

대표적으로 JPA, Hibernate등이 있음(Persistent API)

3.png

ORM의 장점

  • SQL 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있음
  • 재사용 및 유지보수가 편리
  • DBMS에 대한 종석성이 줄어듬

ORM의 단점

  • 복잡성이 커질 경우 ORM만으로 구현하기 어려움
  • 잘못 구현할 경우 속도 저하 발생
  • 대형 쿼리는 별도의 튜닝이 필료할 수 있음



JPA

JPA는 Java Persistance API의 줄임말이며, ORM과 관련된 인터페이스의 모음

Java 진영에서 표준 ORM으로 채택되어 있음

ORM이 큰 개념이라고 하면, JPA는 더 구체화 시킨 스펙을 포함하고 있음



Hibernate

ORM Framework 중 하나

JPA의 실제 구현체 중 하나이며, 현재 JPA 구현체 중 가장 많이 사용됨

4.png

Spring Data JPA

Spring Framework에서 JPA를 편리하게 사용할 수 있게 지원하는 라이브러리

  • CRUD 처리용 인터페이스 제공
  • Repository 개발 시 인터페이스만 작성하면 구현 객체를 동적으로 생성해서 주입
  • 데이터 접근 계층 개발시 인터페이스만 작성해도 됨

Hibernate에서 자주 사용되는 기능을 조금 더 쉽게 사용할 수 있게 구현

5.png

📑 출처

Categories:

Updated:

Leave a comment