백엔드 멘토링

2023/04/10 - Spring 공부중 관련 질문들 [1]

piedra_de_flor 2023. 4. 13. 16:12

REST Api

 

REST API : REST API란 REST를 기반으로 만들어진 Api를 뜻합니다.

- 여기서 REST란? Representational State Transfer의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다.

 

REST는

  1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
  2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
  3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다.

REST Api의 특징은

1. Client(서버-클라이언트 구조)
2. Stateless(무상태)
3. Cacheable(캐시 처리 가능)
4. Layered System(계층화)
5. Uniform Interface(인터페이스 일관성)
이다.

 

 

 


 

Apache, Tomcat

 

Apache란  오픈 소스 소프트웨어 그룹인 아파치 소프트웨어 재단에서 만드는 웹 서버 프로그램이다.

Apache는 정적인 데이터를 처리하는 웹 서버로 동적으로 데이터를 처리할 수 는 없다.

 

톰캣이란 Apache처럼 아파치 그룹에서 만든 WAS로 기본 Web sever인 Apache와는 다르게 동적인 데이터를 처리할 수 있게 만들어졌다.

 

톰캣에는 정적인 데이터를 처리할 수 있는 Apache같은 Web sever와 동적인 데이터를 처리할 수 있는 서블릿 컨테이너가 모두 들어있어, Apache 톰캣이라고 많이 불린다.

 

Apache와 Tomcat 장단점 장점 단점
Apache - 처리 속도가 빠름
- 구조가 단순하여 비용절감
- 트래픽 과부하에 강함
- 정적인 데이터만 처리 가능
- 다른 서비스와 상호작용 불가
Tomcat - 동적 데이터 처리 가능 - 아파치에 비해 속도가 느림
- 트래픽 과부하에 약함

 

 


 

localhost

 

localhost란 컴퓨터 네트워크에서 사용하는 루프백 호스트명으로, 자신의 컴퓨터를 의미합니다.

자신의 컴퓨터를 원격의 컴퓨터처럼 통신할 수 있기에 테스트용으로 많이 쓰입니다.

 

Spring 프레임 워크에서는 자체적인 내장형 서버로 Tomcat, Jetty 등을 사용하고 있는데 Spring을 실행시킬 경우 내장형 서버가 자동으로 구축되며 이를 우리는 localhost를 사용해서 접근할 수 있게 된다.

 

 

 


 

 

 

Controller, service, repository, domain 차이

 

Spring 프레임워크에서는 보통 Model-View-Controller (MVC) 패턴을 따르는 웹 애플리케이션을 개발합니다. 이 패턴은 애플리케이션을 세 가지 주요 부분으로 분리하여 개발하는 방식입니다. 이 세 가지 주요 부분은 Controller, Service, Repository(DAO)입니다. 또한, 애플리케이션에서 사용하는 도메인 객체(Domain)도 매우 중요합니다.

 

  • Controller: 웹 요청을 받아서 처리하고, 결과를 반환하는 역할을 합니다. Controller는 사용자가 보낸 요청을 받아서, Service를 호출하거나, 도메인 객체를 이용하여 처리한 뒤, 사용자에게 결과를 반환합니다.
  • Service: 비즈니스 로직을 처리하는 역할을 합니다. Service는 Controller로부터 받은 요청을 처리하고, Repository(DAO)를 이용하여 데이터베이스와 통신합니다. Service는 여러 개의 Repository를 조합하여 비즈니스 로직을 수행합니다.
  • Repository(DAO): 데이터베이스에 접근하는 역할을 합니다. Repository는 데이터베이스와 통신하여 데이터를 읽고 쓰는 등의 작업을 수행합니다.
  • Domain: 애플리케이션에서 사용하는 객체를 정의하는 역할을 합니다. Domain은 데이터베이스에 저장되는 데이터의 구조를 정의하고, 애플리케이션에서 사용되는 객체의 구조를 정의합니다.

이러한 방식으로 개발을 하면

  1. 각각의 역할이 명확히 구분된다
  2. 유지보수 및 테스트가 용이해진다
  3. 어플리케이션의 확장성이 높아진다

라는 장점이 있다.

 

 


 

 

Get 과 Post의 차이,  DTO, DAO, VO, Entity 차이

Get 방식 : 주로 데이터 조회할때 사용하며 URL에 데이터가 포함되어 전송되기 때문에 보안에 취약하다는 단점이 있지만

                 캐싱을 활용하여 더 빠른 조회가 가능하다.

Post 방식 : 데이터를 전송할때 사용되며, http 메세지의 body부분에 데이터를 담아 전송하기 떄문에 많은 양의 데이터

                   전송에 유리하지만 캐싱이 불가능하다.

 


 

DTO : (Data Transfer Object) 의 약자로 서로 다른 레이어 간의 데이터 교환을 담당하는 객체이다. 주로 Controller와Service 계층 사이에서의 데이터 전송에 사용됩니다. 일반적으로는 Setter / Getter 메소드를 가지고 있습니다.

DAO : (Data Access Object) 의 약자로 데이터베이스와의 접근을 담당하는 객체입니다. 데이터베이스에 접근하여 CRUD작업을 수행합니다.

VO : (Value Object) 의 약자로 domain에서 사용되는 값 객체입니다, Read only이며 DTO와 유사하지만 데이터 전송을 담 당하는 DTO와는 달리 domain 객체에서 사용되는 값을 가지고 있는 객체입니다.

Entity : 데이터베이스와 직접 매핑되는 객체로 데이터베이스 테이블내에 존재하는 컬럼만을 필드로 가지고 있습니다.

DB와 직접 매핑되어 있기 때문에 데이터의 변화를 줄이기 위해 Settet 메소드를 사용해서는 안된다.

 

※ DTO 와 Entity의 차이는 DTO 같은 경우에는 데이터의 변화가 많지만 DB와 직접 연결되어 있는 Entity 같은 경우에는

    데이터의 변화가 잦으면 다른 클래스에도 문제가 될 수 도 있기 떄문에 둘을 꼭 분리 해 놓아야한다.

 

 

출처 : Entity, DTO, 그리고 DAO (tistory.com)