포시코딩

3월 2주차 - 스파르타 내일배움캠프 17주차 본문

WIL

3월 2주차 - 스파르타 내일배움캠프 17주차

포시 2023. 3. 13. 13:24
728x90

이번 주 알게 된 점

event-emitter

https://4sii.tistory.com/457

 

3월9일 - @nestjs/event-emitter

개요 Node.js의 Event Emitter는 특정 이벤트에 리스너 함수를 달아서 이벤트가 발생했을 때 이를 캐치할 수 있도록 만들어진 api라고 한다. 오늘은 Nest.js에서 Event Emitter를 쓰는 법을 알아보고자 한다.

4sii.tistory.com

이번주에는 아프기도 했고 지금까지 배웠던 걸 발산하는 시간이라

크게 새롭게 배운건 없다.

다만 진짜 새롭게 배운게 딱 하나 event-emitter인데

 

서버 내부에서 socket 사용하듯 메서드끼리의 통신이 가능한 기능이었다.

생각보다 유용하게 쓰이는 부분이 있는 것 같은데

일단 나는 Bull Queue 대기열에 추가하고

해당 대기열에서 빠져나와 작업을 처리할 job을 기다리는 용도로 사용했다.

 

이것도 팀원이 추천해준 기능이고 기초 응용 방법을 내 코드에 적용해 보여주었는데

아직도 배울게 많다는 걸 느낀다.

 

이번 주 목표 달성

Nest.js 동시성 문제 해결

https://4sii.tistory.com/456

 

[Nest.js] 동시성 문제 다루기 with. JMeter, Bull Queue, event-emitter

개요 https://4sii.tistory.com/423 [Nest.js][동시성 문제] Bull Queue - 작성중 개요 https://4sii.tistory.com/422 [동시성 문제] (1) Transaction 사용과 통 Lock 걸어버리기 코드 Back-End: Nest.js - boards.service.ts async joinGroup(bo

4sii.tistory.com

드디어 오랫동안 잡고 있던 동시성 문제를 해결할 수 있었다.

Bull Queue를 통해 대기열을 만들어 동시에 들어오는 요청들을 제어할 수 있었고

event-emitter를 통해 대기열에 넣고 기다리는 클라이언트의 요청에 대해 응답을 리턴해 줄 수 있었다.

 

이 과정을 rabbitMQ? 를 통해 해결할 수도 있다고도 하고

실제로 참고한 당근마켓에서는 모임 참여에 대해 어떤 로직이 들어가는지 정말 궁금해졌다.

 

위 방법을 통해 해결을 했지만 오히려 더 개선할 수 있다는 생각이 끊이질 않았는데

일단은 이번 프로젝트에서는 더 해결해야할 부분이 많기 때문에 여기까지 하고 나중에 개인적으로 알아봐야겠다.

 

프로젝트 1차 배포

Front-End

프로젝트를 외부에서 접속 가능하게 배포를 미리미리 진행해보자는 의견이 있어

진행하게 되었다.

일단 React로 이루어진 프론트엔드 서버는 vercel을 이용하기로 했고

https://vercel.com

 

Vercel: Develop. Preview. Ship. For the best frontend teams

Vercel is the platform for frontend developers, providing the speed and reliability innovators need to create at the moment of inspiration.

vercel.com

사용 결과 매우 쉽게 배포할 수 있었는데

그냥 내 개인 repo의 브랜치를 업로드하면 알아서 {이름}.vercel.app 도메인으로 접속 가능한 

정적 사이트를 만들어주었다.

 

우리 팀의 organization으로 만들어진 repo로 배포되게 적용하고 싶었지만 그건 유료라 일단 패스..

나중에 S3에 세팅하는 방법을 알아보자는 팀원의 말이 있어 그쪽으로 시간되면 알아볼 계획

 

Back-End

백엔드는 일단 EC2에서 git clone을 하고 npm run start를 통해 서버 실행을 해놓은 상태이다.

빌드 후 빌드 파일을 실행하는 방법이 나중에 CI/CD를 고려해 더 나아 보이는데

당장은 방법을 몰라 알아보는중..

 

그와 별개로 프론트와 백 둘 다 상용 서버로 만든 후 쿠키에서 말썽이 있었는데

https://4sii.tistory.com/463

 

[Nest.js] 쿠키를 받지 못하는 문제 (상용 서버)

개요 Front-End 서버와 Back-End 서버가 각각 vercel과 aws ec2 에 배포된 상황에서 FE에서 로그인 하며 전달 받은 accessToken, refreshToken이 BE로 요청을 보낼 때 헤더에는 담겨 전달되지만 정작 서버에서 받지

4sii.tistory.com

 

프론트 서버의 도메인을 백 서버의 도메인과 같에 (root 도메인이 같게) 만든 후 

쿠키를 저장할 때 document.cookie에서 domain 세팅 옵션을 추가함으로 해결을 했다.

 

글로 설명하니 단 두줄로 요약이 되었는데 참 오래 걸리고 복잡한 문제였다. 흑흑..

 

당장은 누구에게 보여주기 위한 세팅은 끝났고 

이제 내부적으로 우리가 사용하기 쉽게 배포 환경을 구성해야 한다.

 

이 과정도 만만치 않아 보이지만 그래도 믿음직스러운 팀원들이 있기에 힘내서 해낼 생각이다. ㅍㅇㅌ

 

다음 주 목표

  • 중간 발표 준비
728x90