본문 바로가기
(2024-10) 스파르타 내일배움캠프 - 백엔드/TIL

(2024-12-03) TIL, 메모 과제 구조 이해하기 (추가중)

by 어뫄어뫄 2024. 12. 3.

 

 

메모 만들기 실습을 하며 구조가 너무 복잡다단해 이해하기 어려웠다. 그 과정에서 생긴 내용을 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