[Devops] spring boot 블루/그린 무중단 배포 (gitlab ci, docker, nginx)
·
개발/Devops
spring boot로 무중단 배포를 이용하려고 한다. spring boot도 code deploy, elastic beanstalk 등등 무중단 배포 방법은 많다. 그중에서도 블루/그린 방법으로 docker를 이용하고 nginx도 공부할겸 nginx로 배포하려고 한다. 먼저 배포 과정은 아래와 같다. (1) gitlab에 push (2) 8080에 실행되고 있는 spring boot 멈춘 후 업데이트 (3) 8080 업데이트 후 실행 (4) 8081 멈춘후 업데이트 이러한 배포 방식을 블루/그린 이라고 하며 블루 컨테이너를 주로 보여주고 업데이트시에만 그린 컨테이너를 이용하는 방법이다. 그렇게 하여 기존 제공되는 서비스는 멈추지 않고 변경사항을 적용할 수 있다. 나는 업데이트 적용 후 green을 멈추..
[Devops] react 무중단 배포 (gitlab ci, s3, cloudfront)
·
개발/Devops
react 프로젝트를 gitlab ci 를 이용하여 s3에 저장 후 cloudfront에 배포한 경험을 정리한다. 깃허브액션, 도커를 이용하여 자동배포는 설정해본적이 있지만 서비스가 중단되지 않는 무중단 배포는 아니었다. 이번엔 서비스가 중단되지 않는 무중단 배포를 설정해보려고 한다. react를 무중단 배포 하는 방법은 여러가지가 있다. Cloudfront로 ec2를 따로 관리 안해줘도 된다는 점과 protect 정책, cdn 등 많은 걸 지원해줘서 cloudfront로 결정했다. 배포 과정은 다음과 같다. 1. gitlab github와는 다르게 gitlab은 runner를 따로 설치해서 사용해야 한다. 그래서 먼저 gitlab runner를 등록해야 한다. 처음 이부분을 모르고 계속 실패했다가 나중..
[AWS] AMI로 EC2 인스턴스 공장 만들기
·
개발/AWS
최근 오토스케일링 그룹을 만드는 과정에서 애를 좀 많이 먹었다. 처음에 EC2인스턴스를 오토스케일링 그룹으로 만들어주면 알아서 되겠지~ 했다가 많은 삽질을 했다. 그래서 그 삽질한 부분을 정리하려고 한다. 오토스케일링 그룹이란 유동적으로 인스턴스의 수를 관리하는 것이다. 예를 들면 하나의 EC2 인스턴스로 홈페이지를 만들었다고 하자. 평소엔 잘 돌아가다가 갑자기 이벤트를 진행하여 사용자들이 몰렸다. 그래서 서버가 터졌다. 흔히 수강신청, 티켓팅 등 유저들이 몰리면서 서버가 터지는 경우가 있다. 만약 어느정도 유저들이 몰리면 새로운 EC2 인스턴스를 자동으로 생성하고 이벤트가 끝나면 생성했던 EC2를 종료한다면 가격적으로 금상첨화일것이다. 예는 들었지만 내 생각은 수강신청, 티켓팅은 단시간에 몰리는 경우는..
[Spring Boot] 오버로딩 언제 할 수 있을까
·
개발/Spring Boot
오버로딩이란 메소드 이름은 같지만 다른 역할을 하는 메소드들을 만드는 것이다. 흔히들 오버라이딩과 오버로딩을 비교하곤 하지만 다른 개념이라 생각하여 따로 정리했다. 나는 개인적으로 오버로딩이란 개념을 좋아한다. 왜냐하면 같은 메소드 이름으로 여러 기능을 하는 메소드를 만들수 있기때문에 메소드 이름 작명의 수고를 덜어준다. 이름을 짓는 건 언제나 창작의 고통이기 때문에 오버로딩을 좋아하게 되었다. 그래서 오버로딩 어디까지 할 수 있는지 알아보기 위해 글을 쓴다. 1. 매개변수가 다를때 가장 보편적인 경우이다. 매개변수가 다를때 오버로딩이 가능하다. (1) 매개변수 갯수가 다를때 public void Method1() {} public void Method1(int a) {} (2) 매개변수 타입이 타를때 ..
[Java] 필드 주입시 생성자에 this 꼭 써야할까?
·
개발/JAVA
나는 아래와 같이 class 에서 생성자 코드를 작성시 항상 생각없이 this를 썼다. class Board { String name; String content; public Board(String name, String content) { this.name = name; this.content = content; } } 한번도 this를 꼭 써야하나라는 고민은 하지 않았기 때문이다. 대부분 클래스의 생성자로 필드 주입시 위와 같이 this를 사용한다. 왜냐하면 필드의 변수명과 생성자로 주입받는 파라미터의 변수명이 같기 때문이다. class Board { String name; String content; public Board(String name, String content) { name = nam..