프로젝트 회고

실전 프로젝트 - Pillnuts 기술 정리

김영재0412 2023. 2. 5. 23:37

필너츠 바로가기

 

필너츠 - pillnuts

 

pillnuts.store

 

실전프로젝트로 만든 사이트를  2월 1일에 배포하였다. 의약품의 효능, 효과 등 정보를 제공하고 성분을 그래프화 시켜 가독성을 높이고 비교까지 가능한 사이트이다. 회고는 나중에 하고 오늘은 내가 구성한 기술 스택을 먼저 정리하겠다.

 

 

먼저 웹서버부터 정리하겠다.

 

우선, 나는 회원가입, 로그아웃, 유저 정보 조회 및 수정, 삭제, 건강 꿀팁 조회 등 간단한 걸 맡았고 이메일, 휴대폰 인증, 이미지 업로드, 인프라를 담당했다.

아마 회원가입 로그아웃 기타등등은 기본이어서 따로 설명할 필요 없을거 같고 이메일, 휴대폰 인증은 우선 서버에서 요청을 보내는거보다 분리하는게 좀 더 깔끔할거 같아서 람다로 분리시켰다. 이메일은 node mailer를 이용하였고 휴대폰은 sens를 이용하였다.

 

회원가입 시 인증이 너무 복잡하다 라는 의견이 많아 이메일 인증은 빼고 휴대폰 인증만 남겨둔 상태에서 휴대폰 인증은 유료서비스이기에 누군가 악의적으로 요청을 무수히 보낸다면 그만큼 요금을 내야하기에 rate-limit를 걸어 ip당 제한을 걸어둔 상태이고 하루 총 사용량도 제한을 해둔 상태이다. 또한 api-gateway를 통해 람다로 요청을 보내는데 권한부여자를 붙여 서버에서만 요청을 보낼 수 있게 구현하였다.

 

이미지 업로드는 multer를 쓰지않고 s3 presignedURL를 이용하여 이미지의 데이터가 서버로 오지않고도 구현하게끔 구성하였다.

 

인프라는 우선 좀 다양하게 구성해보았는데 CI/CD는 github actions을 이용하여 구성하였고 ec2에 바로 배포하는 것이 아닌 ecs를 통하여 docker로 배포하였다. 그 이유는 docker를 이용하여 롤링 배포를 하여 무중단 배포가 가능하였고 pm2 없이도 graceful reload가 가능하며 컨테이너에 배포하다보니 호환성, 의존성 같은 문제에 대해 신경쓰지않아도 되서 편하기에 선택했다. 

 

또한 오토스케일링도 설정해놨는데 먼저 무중단 배포이다보니 컨테이너가 종료되지않고 새로운 배포되는 컨테이너가 돌아가고 기존의 컨테이너도 돌아가는 타이밍이 생기기에 컨테이너 당 cpu 할당을 넉넉하게 하지 못 하기에 설정했다. 오토스케일링이 되면 디스코드로 알람도 보내 현황을 알 수 있다.

 

또한, cpu 메모리 사용량, 로드밸런서로 들어오는 요청, 상태코드, ecs의 로그 등을 cloudwatch를 이용해서 확인하는데 좀 더 시각화 시키고 다른 팀원들도 볼 수 있게 그라파나로 볼 수 있게끔 구현하였다.

 

대충 웹서버는 이정도이고 채팅서버를 정리하겠다.

 

채팅서버는 별 거 없는데 우선 CI/CD는 code deploy를 통해서 자동화 시켰고 pm2로 사용하고 있다. 

 

그리고 socket.io를 이용해서 실시간 통신을 하고 있으며 평소에는 챗봇모드이다가 채팅연결 버튼을 누르면 실시간 상담으로 바뀌게끔 구현하였다.

 

누군가 실시간 상담을 요청하면 슬랙으로 알림이 가게끔 구현하였다.

 

대충 적었을 때 이정도인거 같다. 우선 나중에 한번 싹 정리해서 회고 때 올릴테니 지금 글은 맛보기, 예고편정도라고 생각하면 될 것 같다.