본문 바로가기

Infra

(11)
[AWS] SQS 전송 지연 설정 엔티티를 저장한 후, 그 정보를 이메일로 보내는 기능을 구현하였습니다. 이메일을 전송하는 작업은 시간이 오래 걸리는 작업이므로, 이를 비동기적으로 처리하기 위해 메세지 큐를 사용하였습니다. 저희 팀은 AWS 의 SQS(Simple Queue Service) 를 사용하고 있습니다.  간단하게 예시를 들어보겠습니다. 우선 메세지 전송 처리부터 구현해보겠습니다.@Transactionalfun create(seller: Seller, inquiry: Inquiry): InquiryHistory { val inquiryHistory = inquiryRepository.save(InquiryHistory( inquiry = inquiry, actionAt = ZoneDateTime.n..
[DevOps] CodeDeploy로 Spring Boot 프로젝트 CD 적용하기 프로젝트를 진행할 때 변경한 코드가 올려져 있는 Github Repository로 부터 서버에서 pull해서 build하고 deploy하는 과정이 너무 번거로웠다. 나는 이러한 문제를 해결하기 위해서 Github Actions를 사용하여 Repository에 특정한 이벤트(나와 같은 경우 pull request)가 발생하면 자동으로 빌드하고 빌드된 프로젝트 파일을 AWS S3에 올리도록 하였다(CI 과정). 그 후는 Github Actions가 CodeDeploy에게 배포 명령을 내리고 AWS Code Deploy Agent가 appspec.yml의 절차를 따라 배포 서버(EC2)에 배포하는 과정을 거친다(CD 과정). 이번 포스팅은 GithubActions로 S3에 저장된 빌드 파일은 EC2 인스턴스로..
[DevOps] Github Actions으로 Spring Boot 프로젝트 CI 적용하기 프로젝트를 진행할 때 변경한 코드가 올려져 있는 Github Repository로 부터 서버에서 pull해서 build하고 deploy하는 과정이 너무 번거로웠다. 나는 이러한 문제를 해결하기 위해서 Github Actions를 사용하여 Repository에 특정한 이벤트(나와 같은 경우 pull request)가 발생하면 자동으로 빌드하고 빌드된 프로젝트 파일을 AWS S3에 올리도록 하였다. 그 후는 AWS Code Deploy가 배포 서버(EC2)에 배포하는 과정을 거친다. 이번 포스팅은 GithubActions으로 Spring Boot 프로젝트 CI 적용하는 부분을 작성하였다. Github Actions 구성요소 Github Actions Workflow의 각 job은 가상 머신 runner 또는..
[AWS] Spring 2.7 버전에서 profile에 따른 파라미터 AWS Parameter Store에 등록하기 깃허브에 데이터베이스의 암호와 같은 민감한 정보를 올리면 위험하기에 민감한 정보는 따로 저장해야 한다고 한다. 나는 AWS Parameter Store에 저장하여 불러오는 방식을 택하였다. Spring Cloud 버전 확인 자신의 Spring Boot 프로젝트 버전과 맞는지 확인하고 공식 문서에서 자신의 버전과 맞는 Spring Cloud를 결정해야 한다. 이 글은 다음과 같은 환경에서 진행했다. SpringBoot : 2.7.12 Java : 11 SpringCloud : 2021.0.5 요약 1. Spring Boot 프로젝트 설정 2. AWS Parameter store 설정 3. 콘솔에서 AWS Parameter Store 불러오기 1. Spring Boot 프로젝트 설정 1. build.grad..
[DevOps] CI/CD란 무엇인가? 반복된 과정을 자동화하는 CI/CD 개발자가 코드를 변경할 때 마다 빌드, 테스트, 통합, 배포하는 과정을 반복하게 된다. 반복된 과정을 매번 하는 것은 비효율적이기 때문에 자동화하는 것이 좋다. 코드를 변경하는 것은 매번 달라지기 때문에 자동화가 어렵지만 그 외 과정은 적절한 설정을 하게 되면 자동화가 가능하다. 즉, 빌드, 테스트, 통합, 배포하는 과정을 자동화하는 것을 CI/CD라고 한다. CI와 CD는 다른 과정이다. CI(Continuous Integration, 지속적 통합)란? 빌드 Build → 테스트 Test → 통합 Merge → 배포 Deploy 단순하게 배포하기 전까지의 과정이다. 개발자는 배포 전에 코드를 여러 브랜치에서 통합하는 과정을 거친다. 배포 전까지의 과정이 여러 코드를 ..
[AWS] EC2 - 인스턴스 생성 및 접속 요약 1. EC2 인스턴스 생성 2. SSH 프로토콜로 EC2 인스턴스 접속 1. EC2 인스턴스 생성 1. EC2 > 인스턴스 > 인스턴스 시작 버튼을 눌러 인스턴스를 생성한다. 2. EC2를 식별할 수 있는 이름 및 태그를 작성한다. 3. 생성하려는 EC2의 OS 이미지와 버전 인스턴스 유형을 선택한다. OS 이미지는 Ubuntu 20.04 LTS를 사용하였다. 프리티어로 사용하는 경우 프리티어 사용 가능한지 여부를 꼭 확인해야 한다. * 주의 : CodeDeploy를 EC2에 설치해야 한다면 OS 이미지 및 버전을 꼭 확인해야 한다. 처음에 Ubuntu 22.04 LTS를 사용했다가 Code Deploy가 설치되지 않아 처음부터 다시 생성했다. 인스턴스 서버 크기도 마찬가지로 t2.micro가 프리..
[AWS] EC2 인스턴스에 HTTPS 적용 - ACM, Route53, ALB S3 버킷에 배포된 정적 웹 사이트에 HTTPS를 적용하고, Mixed Content Error를 직면하였다. 간단히 말해 HTTPS 적용된 정적 웹 사이트에서 HTTPS가 적용되지 않은 톰캣 서버에 요청했기 때문에 발생한 문제이다. 이를 해결하기 위해 Application Laod Balancer를 이용하여 EC2 인스턴스에 배포한 톰캣 서버에 HTTPS로 접근하기로 하였다. Application Load Balancer Elastic Load Balancing은 둘 이상의 가용 영역에서 EC2 인스턴스, 컨테이너, IP 주소 등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산한다. 등록된 대상의 상태를 모니터링하면서 상태가 양호한 대상으로만 트래픽을 라우팅한다. Elastic Load Balanci..
[AWS] S3에 배포한 웹에 HTTPS 적용 - ACM, Route53, Cloud Front S3웹사이트 엔드포인트에 HTTPS를 적용하려고 하였으나 S3 웹 사이트 엔드포인트는 HTTPS를 지원하지 않는다. AWS는 배포한 웹사이트를 더 안전하고, 보안을 강화하기 위해서 CloudFront를 사용하여 HTTPS를 적용하는 방법을 안내하고 있다. CloudFront Cloud Front는 AWS의 CDN(Content Delivery Network)서비스이다. 지리적으로 분산된 서버들을 연결한 네트워크(CDN)에서 Cloud Front는 클라이언트의 콘텐츠 요청으로 Origin Server에서 받아온 콘텐츠를 Edge Location에 캐싱하고 이후 같은 요청이 들어왔을 때, 그 캐싱해둔 것을 사용자에게 제공한다. 이러한 Cloud Front의 특성을 이용하여 Cloud Front Edge Se..