본문 바로가기

개발 일지

[TIL]이노베이션 캠프 15일차

Spring 입문 주차 8.12(금) ~ 8.18(목)

1. 개인 과제: 게시판 CRUD 기능을 하는 백엔드 서버 만들기, AWS 배포
2. 팀 과제: Spring 핵심 키워드 정리(필수 4개, 선택 4개)

 

진행 계획

- 12일(금) Spring 핵심 키워드 정리

- 13일(토) Spring 핵심 키워드 정리

- 14일(일) 개인과제에 필요한 강의 수강 및 공부

- 15일(월) API 명세서 작성, Use Case 그리기

- 16일(화) 게시판 CRUD 기능 코드 작성

- 17일(수) 게시판 CRUD 기능 코드 작성

- 18일(목) 게시판 CRUD 기능 코드 작성 및 AWS 배포

 

 

 

1. 개인 과제 진행 상황

 

요구사항

  1. 전체 게시글 목록 조회 API
    • 제목, 작성자명, 작성 날짜를 조회하기
    • 작성 날짜 기준으로 내림차순 정렬하기
  2. 게시글 작성 API
    • 제목, 작성자명, 비밀번호, 작성 내용을 입력하기
  3. 게시글 조회 API
    • 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
  4. 게시글 비밀번호 확인 API
    • 비밀번호를 입력 받아 해당 게시글의 비밀번호와 일치여부 판단하기
  5. 게시글 수정 API
    • 제목, 작성자명, 비밀번호, 작성 내용을 수정되게 하기
  6. 게시글 삭제 API
    • 글이 삭제되게 하기

 

1) Use Case 그리기

 

2) API 작성

기능 Method URL Request Response
전체 게시글 목록 조회 GET /api/posts - {
  "createdAt" : "2022-08-15",
  "modifiedAt" : "2022-08-15",
  "id" : 1,
  "title" : "제목",
  "username" : "작성자",
  "content" : "내용"
  },
  {
  "createdAt" : "2022-08-15",
  "modifiedAt" : "2022-08-15",
  "id" : 2,
  "title" : "제목",
  "username" : "작성자",
  "content" : "내용"
  }
게시글 작성 POST /api/posts {
"title" : "제목",
"username" : "작성자",
"password" : "비밀번호",
"content" : "내용"
}
{
  "createdAt" : "2022-08-15",
  "modifiedAt" : "2022-08-15",
  "id" : 1,
  "title" : "제목",
  "username" : "작성자",
  "content" : "내용"
}
게시글 조회 GET /api/posts/{id} - {
  "createdAt" : "2022-08-15",
  "modifiedAt" : "2022-08-15",
  "id" : 1,
  "title" : "제목",
  "username" : "작성자",
  "content" : "내용"
}
게시글 비밀번호 확인 POST /api/posts/{id} {
"password" : "비밀번호"
}
{
"success" : true,
"data" : null,
"error" : null
}
게시글 수정 PUT /api/posts/{id} {
"title" : "수정 제목",
"username" : "수정 작성자",
"password" : "수정 비밀번호",
"content" : "수정 내용"
}
{

  "createdAt" : "2022-08-15",
  "modifiedAt" : "2022-08-15",
  "id" : 1,
  "title" : "수정 제목",
  "username" : "수정 작성자",
  "content" : "수정 내용"
}
게시글 삭제 DELETE /api/posts/{id} - {
"success" : true,
"data" : null,
"error" : null
}

 

3) 관심사 분리

- Controller

PostRestController: 게시글 관련 컨트롤러

 

- Service

PostService : 게시글 수정

 

- Repository

PostRepository: 게시글 데이터 관리

 

- Dto

PostResponseDto: Post 응답 관련Dto

PostRequestDto: Post 요청 관련 Dto

 

- Entity

Post: 작성자(username), 글 제목(title), 내용(contents), 비밀번호(password)

Timestamped: 글 작성 및 수정 시간 확인

 

 

2. 새로 배운 것

1) API: 클라이언트-서버 간 약속, 클라이언트는 약속한 형식으로 서버에게 요청(Request)을 보내고, 서버가 요구사항을 처리하여 응답(Response)을 반환

 

2) REST(Representational State Transfer): 주소에 명사, 요청 방식에 동사(CRUD를 지칭)를 사용하여 의도를 명확히 드러냄을 의미

자원(URI): 잘 표현된 HTTP URI로 리소스(서비스를 제공하는 시스템 자원) 정의

행위(HTTP Method): HTTP메소드로 리소스에 대한 행위 정의

표현(Representations): 리소스는 JSON, XML과 같은 언어로 표현

 

- REST URL 주의사항

  • 주소에 들어가는 명사들은 복수형을 사용 -> /course(x)  /courses(o) 
  • 주소에 동사는 가급적 사용하지 않음 -> /accounts/edit(x) /accounts/put(o)

 

3) HTTP 메소드와 CRUD

HTTP 메소드 의미 역할 예시
POST Create 리소스 생성 POST /courses → 강의 생성 요청
GET Read 해당 URI의 리소스 조회 GET /courses → 강의 전체 목록 조회 요청
GET /courses/1 → ID가 1번인 강의 조회 요청
PUT Update 해당 URI의 리소스 수정 PUT /courses/3 → ID가 3번인 강의 수정 요청
DELETE Delete 해당 URI의 리소스 삭제 DELETE /courses/2 → ID 2번인 강의 삭제 요청

* CRUD: 데이터 관리의 기본 기능 생성 (Create), 조회 (Read), 변경 (Update), 삭제 (Delete)

 

 

4) DTO(Data Transfer Object): 데이터 사용 시 기존 클래스 사용하지않고 새로운 클래스 만들자

-> 데이터 읽기, 수정하기할 때 기존 클래스를 사용한다면 DB가 망가질 수도 있기 때문에 DTO를 완충재로 활용하는 것

 

 

3. 오늘 한 일 / 회고

- 개인 과제: Use Case 작성, API 작성

- 스프링 강의 듣기

 

4. TO-DO LIST

- 스프링 강의 완료

- 개인 과제: 게시판 CRUD 코드 작성하기