효과는 굉장했다!
비교적 짧다면 짧지만 왠지 멀게만 느껴졌었던 2주간의 기간이 지나고 중간발표의 날이 되었는데, 하려는 목표에 비해 많은 것을 하려고 했던 날들이었던 만큼 많은 것들을 배우기도 하였고 많은 어려움도 있었지만, 3명이라는 부담감과 각자 맡은 바를 열심히 해주어서 목표했던 성과까지 도달할 수 있었다고 생각한다.
남은 4주간에도 다듬고, 개선해야 할 부분들을 개선시켜 서로가 웃으면서 만족할 수 있는 프로젝트를 완성시켜보고 싶다.
사실 처음 프론드작업을 한 것을 제외하면 내가 기여한 부분은 CD와 부하테스트밖에 없고 그마저도 성공적으로 해내지 못해 팀원들에게 미안하기도 하고 지나온 시간 동안 난 무엇을 했는가에 대한 많은 생각이 들었었는데, 긴 시간은 아니었지만 항해를 하면서 느꼈던 쓸데없는 삽질은 없다.라고 느꼈던 만큼 크게 어렵게 생각하지 않고 앞으로 에 대한 고민만 할 생각이다. 앞으로 더 더 더 잘하자는 다짐만 있을 뿐이다.
어려웠던 부분
AWS Elastic BeanStalk 배포 중 소켓연결이 반복적으로 끊기는 문제
AWS Elastic BeanStalk 배포 중 소캣 연결이 반복적으로 끊기는 문제가 있었는데 EB기능을 써보겠다고 인스턴스를 2개를 만들어 둔 게 화근이었다.
socket.io 최초연결 시 polling이 ELB로 인해 계속해서 통신하는 인스턴스가 달라져 연결이 반복적으로 끊겼는데 일단 급한 대로 방법을 찾아본 결과 ec2 ELB 기능 중 세션을 고정하는 sticky session을 이용하여 최초로 연결된 서버로만 요청을 보내게끔 해결하였다.
이후 그렇다면 단일 인스턴스라면 문제가 없는 것일까?라는 궁금증에 다시 sticky sesion기능을 비활성화한 후
문제가 다시 생기는 것을 확인 후에 단일 인스턴스로 설정한 결과 정상적으로 작동하였고, 현재 프로젝트는 추후에 MSA를 적용시킬 것이나, 현재는 모놀로 식으로 프런트 페이지까지 한 서버로 구현이 되어있어 이대로 진행하기로 하였다.
추후, 세션저장소를 따로 두고(redis 혹은 다른 방법) 채팅서버를 따로 두어 문제를 해결해 볼 생각이다.
Elastic Beanstalk을 이용한 github action 사용 시 배포는 되지만 EB가 아직 준비되지 않았다고 나오는 문제
# Deploy to Elastic Beanstalk
- name: Deploy to EB
uses: einaregilsson/beanstalk-deploy@v21
with:
aws_access_key: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
application_name: great-app
environment_name: Greatapp-env-1
region: ap-northeast-2
version_label: ${{ steps.current-time.outputs.formattedTime }}
deployment_package: deploy.zip
yml 파일의 일부 코드인데, 다른 부분은 정상적으로 지나가고 배포까지도 잘 되지만 EB상태를 확인하는 부분에서 준비되지 않았다(??)라는 매개변수 오류를 나타내었는데, 구글링해 보았을 때는 여러 원인들이 있었으나 모두 아니었고 결과적으로는 두줄의 코드를 추가해주고 나서 해결되었다.
wait_for_deployment: false # CD중 배포완료를 기다리지 않는다.
wait_for_environment_recovery: 300 # 배포 후 healthy한 상태로 돌아가길 기다리는 시간 설정
추정하기로는 healthy 한 상태로 돌아가길 기다리는 시간은 따로 설정하지 않아도 30초의 시간 동안 기다리는 게 default로 정해져 있어 오류해결과는 상관없을 것이라 생각되고, wait_for_deployment 가 false 일 때 CD과정 중에 배포가 완료되는 것을 기다리지 않는다는 부분이 무언가 힌트가 되는것 같아 생각해 보면, 보통 같은버전을 배포하려고하면 비슷한 에러가 났던것을 생각해보면 이미 배포 중인 파일을 체크하는 과정에서 매개변수오류가 나왔을 것 같은데 이 부분은 솔직히 확실하지 않아서 정확하게 판단하기는 어려운 것 같다.
앞으로 중요한 과제
- socket.io와 로드밸런싱
- docker, dockerhub
- kubernetes
- MSA
- CI / CD
- 부하테스트
- ISSA와 PAAS