개발

    [Devops] react 무중단 배포 (gitlab ci, s3, cloudfront)

    react 프로젝트를 gitlab ci 를 이용하여 s3에 저장 후 cloudfront에 배포한 경험을 정리한다. 깃허브액션, 도커를 이용하여 자동배포는 설정해본적이 있지만 서비스가 중단되지 않는 무중단 배포는 아니었다. 이번엔 서비스가 중단되지 않는 무중단 배포를 설정해보려고 한다. react를 무중단 배포 하는 방법은 여러가지가 있다. Cloudfront로 ec2를 따로 관리 안해줘도 된다는 점과 protect 정책, cdn 등 많은 걸 지원해줘서 cloudfront로 결정했다. 배포 과정은 다음과 같다. 1. gitlab github와는 다르게 gitlab은 runner를 따로 설치해서 사용해야 한다. 그래서 먼저 gitlab runner를 등록해야 한다. 처음 이부분을 모르고 계속 실패했다가 나중..

    [AWS] AMI로 EC2 인스턴스 공장 만들기

    최근 오토스케일링 그룹을 만드는 과정에서 애를 좀 많이 먹었다. 처음에 EC2인스턴스를 오토스케일링 그룹으로 만들어주면 알아서 되겠지~ 했다가 많은 삽질을 했다. 그래서 그 삽질한 부분을 정리하려고 한다. 오토스케일링 그룹이란 유동적으로 인스턴스의 수를 관리하는 것이다. 예를 들면 하나의 EC2 인스턴스로 홈페이지를 만들었다고 하자. 평소엔 잘 돌아가다가 갑자기 이벤트를 진행하여 사용자들이 몰렸다. 그래서 서버가 터졌다. 흔히 수강신청, 티켓팅 등 유저들이 몰리면서 서버가 터지는 경우가 있다. 만약 어느정도 유저들이 몰리면 새로운 EC2 인스턴스를 자동으로 생성하고 이벤트가 끝나면 생성했던 EC2를 종료한다면 가격적으로 금상첨화일것이다. 예는 들었지만 내 생각은 수강신청, 티켓팅은 단시간에 몰리는 경우는..

    [Spring Boot] 오버로딩 언제 할 수 있을까

    오버로딩이란 메소드 이름은 같지만 다른 역할을 하는 메소드들을 만드는 것이다. 흔히들 오버라이딩과 오버로딩을 비교하곤 하지만 다른 개념이라 생각하여 따로 정리했다. 나는 개인적으로 오버로딩이란 개념을 좋아한다. 왜냐하면 같은 메소드 이름으로 여러 기능을 하는 메소드를 만들수 있기때문에 메소드 이름 작명의 수고를 덜어준다. 이름을 짓는 건 언제나 창작의 고통이기 때문에 오버로딩을 좋아하게 되었다. 그래서 오버로딩 어디까지 할 수 있는지 알아보기 위해 글을 쓴다. 1. 매개변수가 다를때 가장 보편적인 경우이다. 매개변수가 다를때 오버로딩이 가능하다. (1) 매개변수 갯수가 다를때 public void Method1() {} public void Method1(int a) {} (2) 매개변수 타입이 타를때 ..

    [Java] 필드 주입시 생성자에 this 꼭 써야할까?

    나는 아래와 같이 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..

    [Spring Boot] Mockito란?

    1. Mokito Mokito는 단위 테스트를 위한 mocking 프레임 워크이다. 쉽게 말해 가짜 객체인 Mock을 생성해주고 관리하고 검증할수 있도록 지원한다. 구현체가 없거나 의존성을 고려하지 않고 특정 단위만 테스트 할 수 있도록 환경을 만들어준다. 2. Mock객체 여기서 registerComment 메소드를 부르면 CommentDao의 insertComment가 실행되어야 한다고 하자. 이를 위해 테스트를 한다고 했을때 중점으로 볼 부분은 insertComment가 호출이 되었는지 아닌지 이다. 즉, 내부에 어떤 코드가 작성되어있는지는 관심없고 결과가 중요한 것이다. registerComment 메소드의 단위 테스트를 실행하기 위해 Mock객체는 여기서 CommentDao를 가짜로 사용할 수 ..

    [Spring Boot] DI 구현 방법 3가지

    DI를 구현하는 방법은 필드주입, 세터 주입, 생성자 주입으로 3가지가 있다. 이 3가지에 대해서 간단하게 정리하려고 한다. 먼저 DI를 하면 외부에서 의존성을 주입받기 때문에 (1) 테스트가 용이해지고 (2) 객체간 결합도를 낮추고 (3) 코드의 재사용성을 높인다. 1. 필드 주입 @Controller public class FoodController { @Autowired private FoodService foodService; } 필드에 @Autowired 어노테이션만 붙여주면 의존성이 주입된다. 코드가 간결하지만 프레임워크에 의존적이고 외부에서 수정이 불가하다. 외부에서 수정이 불가하다는 것은 테스트 코드 작성시 객체를 수정수 없다는 말이 된다. 2. 세터 주입 @Controller public..