본문 바로가기
부트캠프/코드스테이츠 백엔드부트캠프 43기

코드스테이츠 백엔드 부트캠프 43기 (개인프로젝트 - todoList)

by 고구마는호박고구마 2023. 4. 7.

모든 과정이 끝이 나고 간단한 개인프로젝트 시간이 찾아왔다.

기능 요구사항은 매우 단간하다. text 를 저장, 읽고, 수정, 삭제 (CRUD) 과정만 하면 된다.

 

먼저 프론트엔드부분이 제공되는 사이트에서 나의 로컬주소로 요청을 하여 데이터를 출력하는 형식으로 진행이 되었다.

이런식으로 사이틑 안에서 나의 로컬주소를 호출하는 과정에서 

CORS 정책 - 외부 사이트에 접근하는 것을 막는 정책

이러한 접근을 해제하기 위하여 사용하는 Controller 에 @CrossOrigin 에너테이션을 설정해주면 CORS 해제가능.

 

다음으로 가장먼저 데이터를 받아와서 저장하는 POST 요청을 처리해 보았다.

 

@RequestBody - json 형식으로 넘어올때 데이터를 정해놓은 body 형식으로 받는다.
@PathVariable - uri에 키값으로 넘어온 데이터를 받는다.
@RequestParam  - uri에 데이터 형식으로 넘오온 데이터를 받는다.

 

 

요구사항에서

{
  “title” : “운동하기”,
  “todo_Order” : 1,
  “completed” : false
}

이런식으로 post 리퀘스트가 넘어왔지만 사이트에서 개발자 모드를 진행하여 실제 요청된 데이터를 보니 todo_Order가 아니라 order로 되어있어 수정해주었다.

 

 

POST

1. 먼저 json 으로 넘어온 데이터를 객체형식으로 받아오는 작업을 하였다 - @RequestBody를 통하여 자동변환

2. Mapper 를 설정하여서 받은 객체를 디비에 변환할 객체를 만들고 그 객체로 변환해 주었다.

  - 이때 넘오오는 order의 값을 보면 SQL 명령중 ORDER가 있어 문제가 되니 따로 이름을 변경하는 설정을 해주었다.

3. 요청을 받고 디비에 저장할 객체까지 만들었기에 Service 계층으로 보내어 처리한다.

4. 디비랑 연결을 위하여 

  1. build.gradle 에서 인텔리제이와 mysql 연동에 필요한 dependency를 설정하고

  2. application.yml 에서 나의 mysql 정보와 연동을 하였다.

  3. 그리고 레포지토리 인터페이스를 생성하고 JpaRepository를 상속받아 설정을 완료 하였다.

5. 서비스계층에서 레포지토리의 함수인 save 함수를 통하여 저장을 완료하고 완료된 객체를 리턴받는다.

6. 리턴받은 객체를 다시 컨트롤러에서 클라이언트에게 리턴한다.

 

 

DELETE

1. 삭제같은 경우는 특정회원 = 키값을 전달받아 삭제를 한다. 그렇기에 uri에서 키값을 받아 처리한다.

2. 컨트롤러에서 키값을 받으면 키값을 서비스계층에 보낸다.

3. 서비스 계층에서는 전달받은 키값이 데이터 베이스에 있는지 확인을 한다. (요청을 받은 과정에서 키값이 변조되거나 실수로 잘못된 값을 보낼 수 도 있기에 때문에)

4. 정상적이면 객체를 받아와서 레포지토리 명령으로 삭제를 한다.

 

 

PATCH

1. 수정을 하기위해서는 수정을 하는 사용자 키값, 수정하려는 매개변수로 받는다.

API 명세

2. PostDTO 부분에서는 ID값이 필요가 없었지만 PATCH에서는 ID값이 필요하기에 새로운 PatchDTO를 만들어서 매개변수로 받는다. - 키값은 uri로 넘어오기에 따로 set함수를 통하여 설정 

3. PATCH도 마찬가지로 디비객체로 변환작업을 해주고 디비객체를 서비스계층으로 전송한다.

4.서비스계층에서도 마찬가지로 키값이 존재하는지 확인을 하고 디비에 있는 키값의 객체를 바꾸려는 객체의 내용으로 수정한다.

 

 

GET - 특정 사용자 불러오기1. 딜리트와 마찬가지로 uri 키값을 받아와서 서비스 계층으로 보낸다.2. 서비스계층에서도 디비에 키값이 있는지 확인하고 리턴을 하였다.

 

GET - 모든 사용자 보기1. 먼저 서비스 계층에서 레퍼지토리 메서드를 이용하여 모든 사용자의 리스트를 List 형식으로 받는다. findAll() 2. 컨트롤러에서 리스트를 받으면 response 타입으로 변환해 주어 전송해주기 위해서 mapper를 통하여 알맞은 형식으로 변환해 준다. 3. 변환해줄 리스트 타입으로 받았으면 리턴을 해준다.

 

 

 


-Mapper 가 변환해준다 하여도 Mapper가 만들어 놓은 메서드를 확인해보다. (어떠한 식으로 돌아가는지 - 그래야 오류를 찾기 쉬움)-implementation dependencies 에서  'mysql:mysql-connector-java' 이 작동이 안된다면 최신버전을 text에 추가하여 실행해본다.

 

 

댓글