본문 바로가기
Sesac 웹 풀스택[새싹X코딩온]/Spring

3. Rest API 정의(DTO,VO, Annotation)

by 이쟝 2023. 3. 11.

API(Application Programming Interface)

요청과 응답을 구성하는 방법에 대한 정보

REST(Representational State Transfer)

서버와 클라이언트 통신 방법 중 하나로, http URI를 통해 자원을 명시하고 http method를 이용해 자원을 교환하는 통신 방법

- REST 아키텍처의 조건을 준수하는 API 

- REST의 규칙을 모두 지켜 구현된 웹 서비스 => RESTful 하다!!

REST의 특징

  • Server-Client 구조
  • Stateless(무상태)
  • Cacheable (캐시 처리 가능)
  • Layered System (계층화)
  • Uniform Interface (인터페이스 일관성)

REST의 장단점

장점 단점
http 프로토콜의 인프라를 그대로 사용하기 때문에 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다.  http method 형태가 제한적이다.
http 표준 프로토콜을 따르는 모든 플랫폼에서 사용이 가능하다. 구형 브라우저에서는 호환이 되지 않아 지원해주지 못하는 동작이 많다.(IE)
서버와 클라이언트의 역할을 명확하게 분리한다.  

RESTful이란?

Rest의 원리를 따르는 시스템으로 원리를 따르기만 하면 다 RESTful은 아니다.
원리를 따르면서 REST API 설계 규칙을 올바르게 지킨 시스템이 RESTful한 시스템이다.

DTO(Data Transfer Object)

- 계층 간 데이터 교환을 위해 사용하는 객체
- 다른 로직을 가지지 않는 순수한 데이터 객체 (Java Beans

 

 

VO(Value Object)

- DTO와 비슷하지만, VO는 read-Only 속성을 갖고 있는 객체
- Getter만 가지고 있어서 값에 대한 수정이 불가능하다. (Setter x)

 

  DTO VO
목적 계층간 데이터 전달 값 자체 표현
동등성  필드값이 같아도 같은 객체 x 필드값이 같으면 같은 객체
가변성 setter 존재 시 가변 불변
setter 비존재 시 불가변 
로직 getter/setter외의 로직이 필요하지 않음 getter/setter외의 로직이 있어도 무방함

Bean

- Spring IoC 컨테이너가 관리하는 JAVA 객체
- Spring에서는 new를 이용해 만들어진 객체가 아니라 Spring에서 관리하는 Bean 이라는 객체를 이용한다.

장점

의존성 관리가 용이하다. 똑같은 객체가 여러 번 만들어지는 것이 아니라 하나를 만들면 그것을 재 사용한다. => 메모리 절약

Bean 등록 방법

@Component

  • 가장 쉬운 방법으로 클래스 선언부에 @Component를 사용하면 된다.
  • 자바 설정 클래스를 직접 만들기
    • 설정 클래스를 만들고 @Configuration 이용
    • 해당 클래스 안의 메서드에 @Bean 이용
  • Bean으로 등록된 객체를 의존성 주입받아 사용하려면 @Autowired를 사용하면 된다.

Annotation 

- Java에서 @는 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하게 해준다.
- 프로그램에게 추가적인 정보를 제공해주는 메타데이터

장점

  • 코드량이 감소한다.
  • 유지보수가 쉽다
  • 생산성이 증가한다.

@Bean

개발자가 직접 제어 불가능한 외부 라이브러리 등을 Bean으로 등록하고자 할 때 사용되는 Annotation

@Component

- 개발자가 직접 작성한 Class를 Bean으로 등록하기 위한 Annotation
- 즉, 간단하게 Bean을 등록하기 위해 사용되는 Annotation

@SpringBootApplication

- @Configuration, @EnableAutoConfiguration, @ComponentScan, 이 3가지가 합쳐진 Annotation
- Spring Boot 어플리케이션 실행 초기 진입점에 위치하는 Annotation

@Autowired

- 스프링 컨테이너에 등록한 Bean 에게 의존 관계 주입이 필요할 때, DI(의존성 주입)을 도와주는 어노테이션
- 즉 @Autowired를 사용한 클래스에서 적용된 클래스를 사용할 수 있게 해준다.