[코드트리] 양떼 목장 코드 챌린지를 활용해 코테 대비 - 1
·
코테
최근 백준이 서비스 종료한 후로 다른 알고리즘 문제은행 서비스들을 떠돌아다니고 있다.처음에는 프로그래머스를 계속 사용하다가 다른 좋은 서비스들이 없나 찾아보게 되었다.최근에는 코드트리를 알게되어서 사용하고있다. 코드트리는 기본적으로 유료구독 서비스이다. 하지만 알고리즘 커리큘럼을 체계적으로 잘 정리해둬서 무슨 문제를 풀어야하는지 방향을 좀 잘 잡아주는 것 같다.또한 풀거나 제출한 문제를 자동으로 깃허브에 커밋해주기도 해서 잔디심기에도 좋다. 결정적으로 코드트리를 사용하게 된 계기는 갭체크라는 기능인데 무료로 간단한 코딩테스트를 통해 현재 본인의 코딩 실력을 진단받을 수 있고 결과 분석 페이지를 제공해준다.해당 페이지에서 내가 약한 파트를 잡아주고 그 파트를 1주일 동안 무료로 집중해서 풀어볼 수 있게 열..
Blue-Green 무중단 배포 구현
·
배포/AWS
이번에 인턴 프로젝트를 진행하면서 인프라를 또 한번 구축하게 됐다.기존에 부트캠프를 진행하면서 팀원이 구축해둔 배포 인프라에서 OIDC와 SSM을 적극 활용하면서 보안 측면에서 고도화 해봤는데 이번에는 기존에 팀원이 구축한 Blue-Green 무중단 배포 인프라와 내가 고도화 시켰던 인프라를 접목해보았다. 구축해본 배포 인프라에 대해 정리하고자 한다.인턴 프로젝트는 보안 문제 때문에 구체적인 구현이나 코드를 공유하지 못할 것 같다.기존 방식의 문제일반적인 배포 방식은 다음과 같다. 1. 서버 중지2. 새 버전 코드 배포3. 서버 재시작 이 방식에서는 반드시 서버의 다운타임이 발생한다.그동안에는 규모도 작고 외부서비스도 별게 없어서 크게 문제가 없었는데 점점 규모가 있는 프로젝트를 진행하게 되면서 배포할 ..
Prisma ORM 기반 코드에서 발생하는 갱신 손실(Lost Update) 문제
·
데이터베이스/ORM
전자상거래 플랫폼 백엔드 프로젝트를 진행하면서 Prisma ORM으로 쿼리들을 작성했는데 갱신 손실 문제가 발생해 해당 로직에서 사용되는 쿼리들을 Raw Query로 튜닝하여 해결하였다.그 과정을 정리하려고 한다.문제 상황주문 API에서 주문 데이터를 새로 생성할 때 사용자가 요청한 주문 수량과 실제 DB에 주문 가능 한 재고 수량을 계산해서 주문 데이터 생성을 진행해야한다.// 1. 주문 생성 const result = await this.prisma.$transaction(async (tx) => { // 주문 아이템 기준으로 재고 먼저 확보 (재고 locking) for (const item of builtData.matchedOrderItems) { const ..
AWS SNS의 정의와 Lambda를 활용한 알림 발송 구현
·
배포/AWS
이번 글에서는 저번에 이어 알림 발송 시스템 구축에 대해 자세히 작성하려고 한다.로그나 메트릭 수집 세팅과 달리 알림 발송은 전부 aws 콘솔에서 진행했고 모니터링의 용도 보다 범용적으로도 사용이 가능해서 아에 글을 분리하려고 했다.AWS SNS(Simple Notification Service)Amazon SNS는 내구성이 뛰어나고 안전한 고가용성의 완전 관리형 게시/구독 메시징 서비스이며, 이 서비스를 이용하면 마이크로서비스, 분산 시스템 및 이벤트 기반 서버리스 애플리케이션을 쉽게 분리할 수 있습니다. Amazon SNS는 많은 처리량이 필요한 푸시 기반 다자간 메시징을 위한 주제를 제공합니다.푸시 알림 서비스 - Amazon Simple Notification Service(SNS) - AWS 푸..
AWS CloudWatch + Lambda를 활용한 모니터링 / 알림 시스템 구축
·
배포/AWS
저번 글까지 해서 기존의 배포 환경을 고도화 해가는 과정에 대해 어느정도 정리했다.이번 글에서는 cloudwatch와 lambda를 통해 모니터링 및 알림 시스템을 구축하고 적용하는 내용에 대해 정리하려고 한다.CloudWatch vs Prometheus내가 이번에 구축해본 cloudwatch 보다 대부분 prometheus + grafana의 조합을 많이 사용하는 것 같다.일단 프로메테우스가 오픈소스이기 때문에 별도의 비용이 안들고 클라우드 와치에 비해 대시보드도 예쁘게 꾸밀 수 있기 때문인 것 같다.하지만 내가 일단 클라우드 와치로 모니터링 시스템을 구축한 이유는 프로메테우스와 그라파나의 조합은 별도의 모니터링 서버를 구성해서 운영해야한다.그래서 일단 모니터링에 대해 이해하고 빠르게 결과를 보기 위해..
AWS SSM Run Command 정의, 사용법
·
배포/AWS
저번 글에 이어서 이번엔 run command에 대해서 정리하려고 한다.run command도 parameter store와 마찬가지로 ssm의 도구 중 하나다.또한 run command도 aws 인프라이기 때문에 iam을 통해 접근 제어를 할 수 있어 관리가 편하다.Run Command의 정의AWS Systems Manager의 도구인 Run Command를 사용하여 관리형 노드의 구성을 원격으로 안전하게 관리할 수 있습니다. 관리형 노드는 Systems Manager용으로 구성된 하이브리드 및 멀티클라우드 환경의 모든 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 또는 비 EC2 시스템입니다. Run Command를 사용하면 일반적인 관리 작업을 자동화하고 대규모로..
AWS SSM Parameter store의 정의, 사용법
·
배포/AWS
parameter store는 aws ssm(systems manager)의 도구 중 하나다. 먼저 systems manager는 aws, 온프레미스, 멀티 클라우드 환경에서 노드를 대규모로 관리하고 운영할 수 있도록 도와준다고 나와있다.쉽게 생각하면 이름대로 시스템 관리자의 역할을 하는 통합 툴 같은 느낌이다. systems manager의 도구들로는 patch manager, session manager, parameter store, run command 등 다양한 도구들이 있다.이 도구들은 노드 도구, 애플리케이션 도구, 운영도구 등으로 나누어진다. patch manager, session manager, run command 등이 노드 도구이고 paramter store는 애플리케이션 도구다.도..
github actions와 aws로 ssh, .env 없는 ci/cd 구축하기 - 3
·
배포/AWS
지난번에는 aws ssm parameter store를 사용해서 github secret과 배포 스크립트에서 불필요한 운영용 환경변수들을 전부 제거했다.이번에는 aws ssm run command와 OIDC를 사용해서 ssh와 배포용 환경변수들도 최대한 제거해나간 과정을 정리하려고 한다.ssh 없이 ec2에 접근하고 스크립트 실행하기현재 코드 상황에서는 github secret에서 ssh key 값을 가져와 키 파일을 만들고 그 키 파일을 통해 ec2에 접속한다.그 후 ssh로 접속한 ec2 내부에서 배포를 위한 스크립트 들을 직접 실행하게 된다.- name: Setup SSH key run: | mkdir -p ~/.ssh echo "${{ secrets.EC2_SSH_KEY }}" > ~..