본문 바로가기

AWS & CICD7

[DevOps] Git Actions Self-hosted Runner로 배포 자동화 파이프라인 구축 문제 상황: SSH 타임아웃캡스톤 플젝에 대한 게시글! 일반적으로 AWS 클라우드 서버를 사용하는데 컴공과 캡스톤 수업의 경우 대학 측에서 교내 서버를 대여해 줄 수 있다고 했고, 우리 팀은 학교 NAT 환경에서 확인한 공인 IP로 승인을 받아 해당 IP로만 학교 서버에 접근이 가능한 상황이었다.이 상황에서 일반적인 AWS 기준의 배포 스크립트를 작성할 경우 나타났던 문제점과 해결 방안에 대해 기록하고자 한다. ssh 연결을 통한 접속을 해야했기에 교내 캡스톤 서버에서 ssh-keygen을 통해서 개인키와 공개키를 이미 만들어 둔 상황이었다.개인키공개키git secret로 관리개인 settings ssh key로 관리actions runner가 서버 ssh 접속할 수 있도록 함github이 서버로부터.. 2025. 4. 9.
[AWS] RDS를 cmd로 localhost에 복제하기 문제 상황2024년 2월부터 배포했던 프로젝트에서 AWS 프리티어가 이번달 (2025.02)에 종료가 되는 상황이다. 내가 2024년 2월에 시작했던 또 다른 프로젝트를 운영하면서 이용했던 rds를 따로 복제해두지 못한 것에 대한 후회가 남아 AWS의 서로 다른 RDS 인스턴스 간 Replication이 가능하지만 새로운 계정으로 서버 마이그레이션을 하기 전 이 서비스는 내 로컬 상에도 기록 용으로 복제를 해두고자 한다. 먼저 db 복제라는 것은 물리적 기기를 복제하는 것이 아니라 테이블간 관계, 그 내부의 운영 시 테이블 내 데이터 등 모든 정보를 "SQL" 파일로 만들어서 내가 원하는 db에 그 sql 파일을 그대로 실행하여 똑같은 db를 만드는 것이다. 특별한 rdb 툴 설치 없이(이제 윈도우 드라.. 2025. 2. 23.
[DevOps] Docker Compose 블루그린 무중단 배포 성공 도커와 로드밸런싱을 이용한 블루그린 무중단 배포를 학습하고 정리하는 게시글이다. (chatGPT가 대신 코드 짜준거 아님!!ㅎㅎ) 이에 대한 최종 PR 링크이다. 이 pr에 해당하는 프로젝트 이외에 다른 프로젝트에서 도커를 이용한 배포를 하였으나 약간 자신이 없는 버전이었었는데 pr 링크에서 하고 있는 프로젝트에서 정석대로 블루그린 배포를 구현해내고 블루그린 컨테이너가 번갈아 실행되는 부분까지 로그를 찍어가며 확인을 마쳤다. 오랜 기간 왜 안되는지에 대한 원인 파악을 했었는데 데브옵스로서 무중단 배포를 실현한 과정을 기록으로 남기고자 한다.  git action으로 CI/CD 파이프라인을 설계해서 배포를 진행하다보면 배포 때마다 shut down되는 현상이 발생한다. 왜냐하면 새로운 jar 파일을 실행하.. 2024. 8. 29.
[AWS] Nginx 502 해결 시행착오 Redis를 도입하여 성능 개선하려는 노력을 드디어 끝마쳤다!! 이 PR 링크에서 localhost redis 서버가 아니라 AWS 운영DB 목적의 Redis 구축까지 완료하여 배포된 코드를 확인할 수 있다. 현재 내가 구축한 REDIS를 도입하여 리펙토링한 프로젝트의 아키텍쳐는 아래와 같다. 아래 모식도에서  클라이언트에서 vpc로 진입하는 port는 8080이 아니라 3000(리액트)이다. 이 아키텍쳐를 구축하면서 가장 어려움을 겪었던 부분은 502 Gateway error 였다. Trial and Errorlocalhost에서 레디스 캐시를 통한 조회 API 성능 향상 및 로그인 시 RefreshToken을 redis에 저장하는 과정을 충분히 테스트를 거쳐 모두 200 ok를 확인했다면 이제 AWS.. 2024. 8. 18.
[AWS] CloudWatch로 Memory 모니터링 및 Email 경보 발송 이전에 EC2 프리티어 사양 문제(메모리)로 Out-Of-Memory Killer 상황을 swap memory를 도입하여 해결한 견적이 있다. 그래서 백엔드 내부 회의를 통해 AWS CloudWatch 경보 도입 및 Email 발송 기능 도입에 대한 이야기가 나왔고 이를 내가 실현해보게 되었다.  OOM Killer 문제의 본질적인 원인이 cpu 용량 부족이 아니라 메모리 부족이었기 때문에 메모리를 모니터링하고자 하였고 cloudwatch 삽질하면서 cpu 모니터링 경보도 생성해보았으나 df -h 명령어를 통해서도 파일 시스템 등의 용량 자체는 매우 넉넉히 남아 데이터 부족 문제가 떴었다. (모니터링할 데이터가 부족했다는 의미: 그만큼 cpu 용량은 굉장히 많이 남아있었다는 뜻)(cpu 모니터링을 하고자.. 2024. 7. 2.
[AWS] 프리티어 EC2 예기치 않은 중단 현상(feat. swap memory) DevOps 역할도 맡고 있는 벡엔드 프로젝트에서 AWS 관리를 내가 도맡고 있는데 매번 동일한 문제를 일시적으로 같은 방식으로 해결하다보니 항상 문제의 본질적인 원인이 해결되지 못한 채 주기적으로 같은 문제가 발생하고 있었다. 오늘 이에 대한 근본적인 해결책을 찾게 되어 정리하고자 한다. 문제 상황현재 AWS EC2는 프리티어 버전이다. 이 EC2 서버를 사용하는 도중 갑자기 돌연 서버가 멈춰버린다. 프론트 측에서 "스웨거가 안열려요..." 이렇게 콜이 오는데 그동안 나는 EC2를 재부팅하고 SSH 인바운드 규칙 편집으로 내 IP를 할당해서 SSH 연결을 통해 매번 재배포를 하는 방식으로 해결했었다. 하지만 위에서 언급했다 싶이,, 이 방법은 일시적이고 항상 또 스웨거가 안열린다는 연락이 주기적으로 오.. 2024. 6. 23.
[CICD] application 관리 submodule 문제를 git secrets으로 해결하기: DEV, PROD 분리 그동안 AWS RDS, S3, credentials와 같은 민감 정보를 Springboot project git 레포에 올릴 수가 없어서 .gitignore로 처리하였고 submodule을 이용해서 private repo access token을 git secret 상에 넣고 cicd pipeline에서 submodule 항목을 true로 설정하여 build시 submodule 내 코드들을 원하는 프로젝트 path로 복사하여 jar 파일을 만듦으로써 해결하였다. 그러나 dev에서는 jpa 속성을 update로 하는 것이 좋지만 prod 환경에서는 validate로 설정이 되어야했기에 이러한 부분까지 submodule로 분리하여 관리하는 것이 어렵다고 느껴져 submodule을 해제하고 git secret.. 2024. 5. 15.