[ API ]
API는 'Application Programming Interface'의 약자로, 애플리케이션에서 제공하는 인터페이스를 의미한다. API를 통해 서버 또는 프로그램 사이를 연결할 수 있게 한다
웹 API는 클라이언트와 웹 리소스 사이의 네트워크 통신을 위한 게이트웨이라고 생각할 수 있다.
[ REST API ]
Representational State Transfer API의 약자로, REST 원칙을 따르는 API
1. 자원을 이름으로 구분하여 2. 해당 자원의 상태를 주고받는 모든 것을 의미
주로 HTTP 프로토콜을 사용하여 서버와 클라이언트 간의 상호작용을 처리한다.
REST API는 리소스(데이터 및 기능)를 URI(Uniform Resource Identifier)로 식별하고, HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 해당 리소스를 처리한다.
- GET: 리소스를 가져오거나 조회할 때 사용
- POST: 새로운 리소스를 생성할 때 사용
- PUT: 기존 리소스를 업데이트할 때 사용
- DELETE: 리소스를 삭제할 때 사용
[ @RestController ]
- @Controller에 @ResponseBody가 추가된 것이다. JSON 형태로 객체 데이터를 반환하는 것이 주 목적이다.
- 주로 객체를 ResponseEntity로 감싸서 리턴한다.
[ @Controller와 @RestController의 차이점 ]
- @Controller는 클래스를 Spring MVC 컨트롤러로 표시하는데 사용. 그러나 @RestController는 Restful 웹서비스에서 사용되는 특수 컨트롤러이며 @Controller+@ResponseBody와 동일
- @RestController를 표시하면 모든 메소드가 뷰 대신 객체로 작성됨. 반면, @Controller는 뷰의 이름을 리턴하기도 함
[ Mapping annotation ]
@RequestMapping : 클라이언트 요청 정보를 어떤 controller가 처리할지 매핑하기 위함. URL을 포함해서 명시한다. 그래서 웹 브라우저에서 해당 URL이 호출되면 Controller 내부의 메서드가 호출된다
@Controller : 스프링이 자동으로 스프링 빈으로 등록한다.
@RestController : 이 역시 스프링이 자동으로 스프링 빈으로 등록한다. controller처럼 반환 값으로 뷰를 찾는 것이 아닌, HTTP 메시지 바디에 바로 입력한다.
편리한 mapping annotation
@GetMapping : 리소스 가져오거나 조회
@PostMapping : 새로운 리소스 생성
@PutMapping : 리소스 수정
@DeleteMapping : 리소스 삭제
[ DTO ]
- Data Transfer Object, 즉 DTO는 데이터 전송 객체로, 주로 어플리케이션의 다른 계층 간에 데이터를 전달하는데 사용된다.
- 순수한 데이터 객체만 가진 클래스이다
- 불변성을 유지하기 위해 Setter 사용을 지양해야 한다.
- Getter는 객체의 필드 값을 읽는 메서드
- Setter는 객체의 필드 값을 설정하는 메서드
[ Entity ]
- 데이터베이스 테이블과 매핑되는 자바 객체이다.
- 각 인스턴스는 데이터베이스 테이블의 한 행(row)에 해당된다.
- 각 필드는 데이터베이스 테이블의 열(column)에 해당된다.
- @Entity : 클래스가 엔티티임을 선언
- @Id : 해당 필드가 테이블의 기본 키(primary key)임을 선언
[ Repository ]
- 데이터베이스 작업을 처리하는 인터페이스이다.
- CRUD ( Create, Read, Update, Delete ) 작업을 쉽게 진행할 수 있게 한다.
[ Service ]
- 데이터베이스와의 상호작용을 담당하고 주로 비즈니스 로직을 처리한다
- 일반적으로 controller와 저장소(repository, dto) 중간에 위치한다
- @Transactional과 도메인 간의 연산 순서를 보장한다
- transaction이란 데이터베이스 관리시스템의 상호작용 단위
[ Repository, Service, Controller ]
Repository: 데이터베이스 조작의 중심
Repository는 데이터베이스와 직접 상호작용하는 역할을 한다. Entity에 대한 Create, Read, Update, Delete (CRUD) 연산을 수행한다.
데이터베이스 쿼리를 생성하고, 실행해서 데이터를 읽거나 수정한다. Repository는 Entity의 상세한 데이터 접근을 다루고, 데이터베이스와의 중간 계층 역할을 한다.
Service: 비즈니스 로직의 중심
Service는 비즈니스 로직을 처리하고 제어하는 역할을 한다. Repository를 활용하여 데이터베이스와 상호작용하며, 여러 Repository를 조합하여 복잡한 비즈니스 로직을 수행한다.
데이터베이스 연산 결과를 가공하거나 여러 데이터베이스 연산을 조합하여 비즈니스 요구 사항을 충족한다. Repository 및 Entity와 서비스 간의 중재자 역할을 한다.
Controller: 클라이언트와의 대화
Controller는 HTTP 요청과 응답을 처리하고 클라이언트와 상호작용하는 역할을 한다. 사용자 요청을 받아서 Service를 호출하고 Service의 응답을 클라이언트에게 반환한다.
라우팅 및 미들웨어를 설정하고, 요청의 유효성 검사 및 인증을 수행한다. HTTP 응답 및 상태 코드를 설정하여 클라이언트에게 응답을 제공한다.
Repository, Service, Controller 이 구분은 코드를 더 명확하게 구조화하고, 역할을 분리하여 유지보수성을 향상시킨다. 비즈니스 로직과 데이터베이스 조작이 분리돼서 코드 재사용성과 테스트 용이성을 높여준다. 또한, 다양한 데이터베이스 및 클라이언트 요청과의 상호작용을 관리하는데 도움이 된다.
[ @PathVariable ]
- PathVariable 어노테이션은 URL 경로에서 변수 값을 추출하는 데 사용된다.
- 주로 RESTful 웹 서비스에서 사용자가 전달한 결로의 일부를 동적으로 추출하는데 사용된다.
- 메서드의 매개변수 앞에 @PathVariable 어노테이션을 사용하여 경로 변수와 매핑한다.
- 예를 들어, users/{userId} 와 같은 URL 패턴에서 {userId} 부분을 추출하여 매개 변수로 사용할 수 있다.
[ @RequestBody ]
- RequestBody 어노테이션은 HTTP 요청의 본문 (body)에 있는 데이터를 객체로 변환하는 데 사용된다.
- 주로 POST 또는 PUT 요청과 함께 데이터를 전송할 때 사용된다.
- 메서드의 매개변수 앞에 RequestBody 어노테이션을 사용하여 요청 본문의 데이터를 객체로 변환한다.
- JSON 형식의 요청 본문 데이터를 객체로 변환하여 사용할 수 있다.
'spring' 카테고리의 다른 글
게시판 프로젝트- 2 (4) | 2024.07.25 |
---|---|
RequestDto, ResponseDto (3) | 2024.07.23 |
게시판 프로젝트 (0) | 2024.07.18 |
entity와 domain, dto (0) | 2024.07.18 |
application.properties (7) | 2024.07.18 |