개요최근 진행한 프로젝트에서 동시성 문제로 인한 에러를 경험했습니다. 게시글에 '좋아요'를 토글할 수 있는 기능이 있는데, 사용자가 이 버튼을 빠르게 연타하면 MySQL에 동일한 Unique Key로 insert를 시도하게 되면서 중복 엔트리 예외가 발생하는 케이스였습니다. 처음에는 조회 쿼리에 배타적 Lock을 추가해서 해결했습니다. 에러를 해결하는게 우선이니, 가장 쉽고 빠른 방법을 선택했습니다. 그런데 Lock으로 해결하는 방식은 최선의 방법이 아니었다고 생각했습니다. Lock으로 인해 불필요한 DB 부하가 발생하고, 무엇보다 응답 시간이 길어져 사용자 경험에 악영향을 끼친다고 느꼈기 때문입니다. 그래서 동시에 들어오는 요청들을 순서대로 처리해주는 메시지 큐 시스템을 도입했습니다. 요청에 대한 성공..
개요최근 참여한 팀 프로젝트에서 경험한 CI/CD 파이프라인 구축 방법에 대해 공유하고자 합니다.자동으로 빌드 및 배포를 수행하는 Github Actions 스크립트를 프로젝트 소스코드에 포함시키는 방법으로 구성하였고, 최종 배포 단계에서는 Docker Hub를 통해 빌드된 Docker 이미지를 서버로 옮기는 방법으로 구성하였습니다.저처럼, 배포 Docker 이미지나 소스 코드가 외부에 노출되어도 상관없는 오픈 프로젝트를 진행 중인 분들에게 도움이 되기를 바랍니다. 이 글은 각자 필요한 시크릿 환경 변수들을 사전에 Github 저장소의 Secrets and Variables 메뉴에 모두 등록해놓았다는 가정 하에 작성하였습니다.또한 변수명은 임의로 작성한 것이니, 이 점 참고하며 읽어주시기 바랍니다. 기술..