메모 만들기 실습을 하며 구조가 너무 복잡다단해 이해하기 어려웠다. 그 과정에서 생긴 내용을 API 수준으로 정리하려 노력하였다.
1) Create Memo
- Method: POST
- Endpoint: /memos
- Description: Create a new memo.
- Request Body (JSON):
{ "title": "string", "contents": "string" }
- Response (201 Created):
{ "id": 1, "title": "string", "contents": "string" }
MemoController.createMemo(requestDto: MemoRequestDto) : ResponseEntity<MemoResponseDto>
└── MemoService.saveMemo(requestDto: MemoRequestDto) : MemoResponseDto
└── MemoRepository.saveMemo(memo: Memo) : MemoResponseDto
1. 클라이언트 요청: HTTP POST /memos, Body: { "title": "Sample", "contents": "Sample content" }
2. MemoController.createMemo(@RequestBody requestDto: MemoRequestDto) : ResponseEntity<MemoResponseDto>
├── **@RequestBody**
│ - HTTP 요청의 Body를 MemoRequestDto 객체로 자동 변환 (JSON → Java Object).
│ - Jackson 라이브러리를 사용하여 JSON 데이터를 역직렬화.
├── 의존성 주입: memoService.saveMemo(requestDto)
│ - **@RestController**
│ - 컨트롤러 클래스임을 명시하며, 모든 메서드에서 @ResponseBody가 기본 적용.
│ - MemoController는 MemoService의 구현체를 생성자 주입(@Autowired)으로 전달받음.
└── 반환: ResponseEntity<>(memoService 결과, HttpStatus.CREATED)
- HTTP 상태코드 201(CREATED)을 반환.
- **ResponseEntity**
- HTTP 응답 Body와 상태코드를 명시적으로 설정 가능.
3. MemoService.saveMemo(requestDto: MemoRequestDto) : MemoResponseDto
├── Memo 객체 생성: new Memo(requestDto.getTitle(), requestDto.getContents())
│ - Memo 엔티티를 요청 데이터로 초기화.
└── MemoRepository.saveMemo(memo) 호출
4. MemoRepository.saveMemo(memo: Memo) : MemoResponseDto
├── SimpleJdbcInsert로 데이터 삽입
│ - SQL Insert 쿼리를 실행하고, 생성된 ID를 반환.
│ - **Spring JDBC**
│ - 데이터베이스 작업을 간소화하는 추상화 계층 제공.
├── MemoResponseDto 객체 생성 후 반환
│ - Insert 결과와 Memo 데이터를 기반으로 ResponseDto 생성.
└── 반환: MemoResponseDto(id, title, contents)
2. Get All Memos
- Method: GET
- Endpoint: /memos
- Description: Retrieve all memos.
- Response (200 OK):
[ { "id": 1, "title": "string", "contents": "string" }, { "id": 2, "title": "string", "contents": "string" } ]
MemoController.findAllMemos()
└── MemoService.findAllMemos()
└── MemoRepository.findAllMemos()
1.HTTP GET /memos
2.MemoController.findAllMemos() : List<MemoResponseDto>
├── @GetMapping
│ - HTTP GET 요청을 /memos 경로로 매핑.
│ - 요청을 해당 메서드로 라우팅.
├── 의존성 주입: memoService.findAllMemos() 호출
│ - @RestController
│ - 컨트롤러 클래스임을 명시하며, 메서드 반환값을 JSON으로 직렬화.
└── 반환: List<MemoResponseDto>
- 서비스 계층에서 반환된 데이터를 그대로 클라이언트로 전달.
- Spring이 반환값을 JSON 형태로 자동 직렬화.
3.MemoService.findAllMemos() : List<MemoResponseDto>
├── Repository 계층 호출: memoRepository.findAllMemos()
│ - 서비스 계층에서는 별다른 로직 없이 데이터 조회를 Repository에 위임.
└── 반환: Repository 계층에서 받은 List<MemoResponseDto>를 그대로 반환.
4.MemoRepository.findAllMemos() : List<MemoResponseDto>
├── JdbcTemplate.query() 호출
│ - SQL 쿼리를 실행하여 memo 테이블의 모든 행을 조회.
│ - Spring JDBC
│ - Spring의 JdbcTemplate을 사용해 데이터베이스 작업 간소화.
│ - RowMapper
│ - 각 데이터베이스 행을 MemoResponseDto 객체로 매핑.
└── 반환: 데이터베이스에서 조회된 List<MemoResponseDto>
5.Spring이 서비스 계층에서 받은 List<MemoResponseDto>를 JSON으로 직렬화.
HTTP 응답 상태 코드 200(OK)와 함께 클라이언트로 반환.
'(2024-10) 스파르타 내일배움캠프 - 백엔드 > TIL' 카테고리의 다른 글
(2024-12-02) TIL (1) | 2024.12.02 |
---|---|
(2024-11-29) TIL (1) | 2024.11.29 |
(2024-11-28) TIL (0) | 2024.11.28 |
(2024-11-27) TIL (1) | 2024.11.27 |
(2024-11-26) TIL (0) | 2024.11.26 |