어제 개념적으로 흔들렸던 부분과 과제를 배포하며 발생했던 이슈에 대해 이야기 해볼려한다.
첫번째로 어제 가장 헷갈렸던 부분이 아래의 그림으로 모든게 설명된다.
- 처음 고민하던 것은 Client가 PUT, DELET 요청시 id값과 password를 어떻게 서버로 전달하는가였다.
→ ajax의 id와 data를 전달하여 controller가 @Pathvariable 과 @RequestBody 전달받아 해결하였다.
- 전달 받은 password를 어떻게 DB에 있는 password와 비교할 수 있을까?
→ 전달 받은 값은 서버내부에서 사용하던 DTO와 다른 객체를 생성하여 데이터를 넣었으며, DB에 있는 데이터는 전달받은 id값을 이용해 해당 데이터를 찾아 password 값을 가지고 client의 입력에 의한 password와 비교하였다.
- PUT, DELETE는 어디서 처리해야하는가?
→ Service 부분에서 처리해야한다고 생각하였다. DB의 데이터와 client의 데이터를 비교하고 그에 따라 DB가 달라지기 때문에 Service에서 처리하여 그 여부를 Controller에 전달하고 값의 변화를 DTO에 담아 Repository에 전달하였다.
AWS 배포중 발생한 이슈
AWS EC2에 배포한 SpringBoot Application과 RDS를 연결할 때 이슈가 발생 (Communications link failure)
배포전 로컬에서 잘 실행되던 프로덕트가 빌드 후 배포를 하니까 아래와 같은 이슈가 발생하였다.
문제 인식 : 에러 로그 com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure aws → Spring 과 DB사이의 연결 문제
구글링을 통해 원인을 찾아보니 같은 VPC를 사용중이기 때문에 privateIP를 허용해 RDS의 인바운드 규칙에 추가해 주어야한다는 것을 찾고 이슈를 해결하였다.
내 IPv4에서 동작하지만, 같은 VPC 사용시 사용할 수 없었던 이유를 찾아봐야할 것 같다. 네트워크는 너무 어려운것 같다...