환영합니다 ⸜(⠀ ᐢ ᵕ ᐢ )⸝‍⸜( ᐢ ᵕ ᐢ )⸝‍

CI/CD와 무중단 배포 적용기
·
인프라
CI (Continuous Integration)지속적 통합이라는 뜻으로 개발을 진행하면서도 품질을 관리할 수 있도록 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리할 수 있음을 의미한다. CD (Continuous Deployment)지속적 배포라는 뜻으로 빌드의 결과물을 프로덕션으로 릴리스하는 작업을 자동화하는 것을 의미한다. 무중단 배포새로운 서비스를 배포하기 위해 기존 서비스를 종료해야하는데, 그 과정에 다운 타임이 발생한다. 이 다운 타임동안 사용자들은 서비스를 이용하지 못한다. 그렇기에 무중단 배포가 필요한 것이다.많은 구현 방법이 있지만, Nginx를 이용한 무중단 배포가 쉽고 저렴해 이 방법으로 구현해보겠다. 1. 롤링 배포 (Rolling Deployment)..
[OUAT] 3. AWS SPOT 인스턴스 실행
·
인프라
오류 1: User data가 실행되지 않음 1. 실제 User Data 스크립트 확인 sudo sed -n '1,200p' /var/lib/cloud/instance/scripts/part-001 2. cloud-init 실행 로그(에러 포함) sudo tail -n 200 /var/log/cloud-init.log cloud-init 로그에 “Exec format error. Missing #! in script?”가 보이는데, 실제 User data를 보면 맨 앞에 공백이 있어 #!/bin/bash가 인식되지 않았다고 한다. 공백이 생기지 않게 다시 런쳐 템플릿을 설정해주고, 새 버전으로 등록한다. 오류 2: 런쳐 템플릿 IAM 권한 빠트림Spot 인스턴스까지는 만들어지는데, 도커가 띄워지..
[OUAT] 2. AWS SPOT 인스턴스 etc 생성하기
·
인프라
스팟 플릿 요청이 아닌 인스턴스 생성의 스팟 인스턴스 유형이다.우리가 쓰려는 SPOT 인스턴스는 일반 EC2 인스턴스를 SPOT 가격으로 실행하는 것이다.SPOT 플릿 요청은 여러 Spot 인스턴스를 묶어서 목표 용량을 유지하기 위한 것이라고 한다. 차이는 다음과 같다.항목Spot 인스턴스Spot Fleet규모1대다수기동 방식수동자동종료수동목표 용량 유지복잡도낮음높음제어권사용자AWS적합한 용도단일 GPU 워커대규모 배치우린 필요할때만 껐다 키는 용도기 때문에 SPOT 인스턴스가 맞다. SPOT 인스턴스 생성GPU AMI를 골라준다. 인스턴스 유형은 가장 저렴한 걸로.. 기존 ec2에 쓰는 VPC를 고르고, 퍼블릿 서브넷을 고른다.프라이빗으로 하지 않은 이유는프라이빗으로 하면 SQS S3 접근이 불가해 ..
[빈 시리즈-3] 조회 대상 빈이 2개 이상일 때
·
개념
앞선 글에서 생성자 주입이 가장 권장되는 의존관계 주입 방식이라는 점을 살펴보았습니다.실제로 대부분의 서비스 코드는 생성자 주입 또는 Lombok을 활용한 생성자 주입을 사용합니다.그러나 생성자 주입을 사용하더라도, 타입은 맞는데 스프링이 빈을 주입하지 못하는 오류를 마주치는 경우가 있습니다. 이 글에서는 생성자 주입을 기준으로 왜 이러한 문제가 발생하는지, 스프링이 어떤 기준으로 빈을 선택하는지,그리고 그 기준을 개발자가 어떻게 제어할 수 있는지를 설명합니다. 참고) 이 글에서 설명하는 빈 선택 규칙은 생성자 주입뿐만 아니라 필드 주입, setter 주입 등 모든 자동 의존관계 주입 방식에 동일하게 적용됩니다. 1. 문제 상황: 같은 타입의 빈이 2개일 때구현체 두 개를 빈으로 등록한 경우public..
[빈 시리즈-2] 스프링은 언제 의존관계를 주입하는가
·
개념
1. 빈이 등록된 다음엔?컴포넌트 스캔을 통해 스프링은 애플리케이션 시작 시 여러 객체를 빈으로 등록합니다.하지만 빈이 등록되었다고 해서 곧바로 애플리케이션이 동작할 수 있는 것은 아닙니다.서비스는 리포지토리를 필요로 하고, 컨트롤러는 서비스를 필요로 합니다. 등록된 빈들을 서로 연결하는 과정을 의존관계 주입(DI)이라고 합니다. 2. 자동 의존관계 주입 @Autowired스프링은 자동 의존관계 주입이라는 기능을 제공합니다.이 기능을 명시적으로 표현하는 애노테이션이 @Autowired입니다. 이 애노테이션의 의미는 다음과 같습니다.스프링 컨테이너에 등록된 빈 중에서 타입이 맞는 객체를 찾아 자동으로 주입하라 @Autowiredprivate MemberRepository memberRepository;이..