
지난 글에서 Jenkins와 Github Webhooks를 이용하여 배포 자동화하는 방법에 대해 알아 보았다. 이번 글에서는 지금까지 구현한 프로젝트 내용과 Nginx를 이용하여 무중단 배포가 이루어 질 수 있도록 로드밸런싱을 설정하는 방법에 대해서 알아보자. 1. VM 인스턴스 추가 Rolling 배포를 구현하기 위해 서버를 2개이상 두어야 할 필요가 있다. 요구 성능에 따라서 여러개의 서버를 둘 수도 있지만, 서울 region에 서버를 4개를 초과하여 만들 수 없기 때문에 편의상 2개의 인스턴스만 이용해 보도록 하자. 우선 GCP에서, 이전에 생성해 둔 워커 인스턴스와 같은 설정으로 VM 인스턴스를 하나 더 추가하자. 그리고 이전 글에서 했던것 처럼 인스턴스에 SSH로 접속하여 lsof와 java를 ..

지난 글에서 Jenkins에서 VM인스턴스에 SSH로 접속하도록 설정하는 과정을 설명했다. 이번에는 Jenkins와 Github Webhooks를 이용하여 배포를 자동화하는 방법에 대해 알아보자. 프로젝트를 만드는 방법과, Git과 Github를 사용하는 방법에 대해서는 생략하겠다. 1. Jenkins에서 새로운 Item 생성하기 Jenkins의 대시보드에서 새로운 Item을 생성하자. Item의 이름을 입력하고 Freestyle project를 선택하고 OK를 클릭하자. 2. Github와 연동하기 OK를 눌러 Item을 생성하면, 아래와 같은 내용들을 설정할 수 있는 창이 나온다. 또는 Jenkins에서 생성한 Item에서 구성을 클릭하면 위의 내용들을 변경할 수도 있다. 소스 코드 관리에서 Git을..
OAuth 2.0 에서 access token를 얻는 4가지 인증방식중 하나인 Authorization Code Grant 인증방식에 대해 알아보자. Authorization Code Grant 특징 OAuth2.0에서 가장 많이 사용되는 인증방식으로, Access token을 얻기 위해 사용되는 인증방식이다. S2S 방식이기 때문에 백엔드 서버가 있는 서비스에 적용하기 적합한 방식이다. 따라서 클라이언트는 써드파티 서비스의 백엔드 서버이다. client-secret, Access-token과 같은 민감정보가 외부에 노출되지 않아 보안상 안전하다. Authorization Code Grant Flow 인증과정은 어떻게 이루어질까 ? 인증과정을 그림으로 나타내면 다음과 같다. 공식문서를 참고했다. +---..

Spring Security와 OAuth를 이용하여 로그인 기능을 구현하기 위해 OAuth 2.0에 대해 공부해 봤다. 인증과 인가? 인증(authentication) : 사용자의 신원을 확인하는 절차이다. 인가(authorization) : 사용자가 어떤 리소스에 접근할 수 있는지 또는 어떤 동작을 수행할 수 있는지를 검증하는 절차이다. OAuth 2.0 이란 ? OAuth 2.0(Open Authorization 2.0, OAuth2)란 표준 인증 프로토콜이다. Oauth는 인증(authentication)에 대한 프로토콜이다. (인가를 고려한 프로토콜은 아님) Oauth는 사용자의 ID와 비밀번호 없이도 접근 권한을 위임 받을 수 있는 표준 인증 프로토콜이다. Oauth는 다른 웹사이트(구글, 네이..

지난 글에서 GCP VM인스턴스에 Jenkins 설치하는 과정을 설명했다. 젠킨스를 이용하여 빌드/배포를 자동화하기 위해서는 젠킨스가 인스턴스에 접속할 필요가 있다. 인스턴스에 접속할때에는 보안상 젠킨스만 VM인스턴스에 접근할 수 있도록 만들어 주어야 할 필요가 있는데 이때, SSH 접속을 이용하여 해결할 수 있다. 인스턴스에 SSH로 접속하도록 설정하는 방법을 알아보자. 대략적인 방식은 아래와 같다. 먼저 Jenkins에서 비대칭키를 생성하고 공개키를 인스턴스에 등록해 주면, 이후 인스턴스의 공개키는 Jenkins가 개인키로 복호화할 수 있으므로 Jenkins만 인스턴스에 접근할 수 있게 된다. 위의 내용들을 설정해 보자. 1. Jenkins에서 개인키와 공개키쌍 생성하기 젠킨스가 실행된 vm 인스턴스..

GCP의 VM 인스턴스를 이용하여 Jenkins를 설치하고, 초기 설정세팅을 하는 방법에 대해 알아보자. 1. GCP VM 인스턴스 생성하기 VM 인스턴스를 생성하면서 설정한 내용들은 다음과 같다. 아래와 같이 이름을 설정하고 리전은 서울을 선택했다. 머신 유형은 이전에 micro로 설정하였는데 작은 메모리 때문인지 젠킨스가 잘 동작하지 않아서 넉넉하게 medium으로 설정했다. 부팅 디스크는 CentOS 7 버전을 사용했다. 아래와 같이 방화벽 설정에 체크해 주었다. 2. VM 인스턴스에 패키지 설치하기 Jenkins를 설치하기 전에 maven 이나 gradle을 설치해 주자. 먼저 VM 인스턴스에 SSH로 접속해 보자. 아래의 그림에서 SSH를 누르면 된다. yum 명령어를 이용하여 패키지 설치하기 ..
Spring의 @Autowired와 그 쓰임새를 알아보자. @Autowired를 이용하면 필요한 의존 객체에 해당하는 빈을 찾아 필드 또는 파라미터명에 주입할 수 있다. @Autowired는 Spring 컨테이너가 관리하는 Bean에서만 사용이 가능하다. @Autowired 로 Bean을 매칭하는 방법 타입 매칭 (같은 타입이거나 그 타입의 자식들을 다 가져옴) 타입 매칭의 결과가 2개 이상인 경우 필드명 또는 파라미터명 으로 빈 이름 매칭하여 주입 해당하는 이름의 빈이 없으면 NoUniqueBeanDefinitionException 오류가 발생한다. 2.와 같이 매칭 결과가 여러개인 경우, 특정 빈을 주입받기 위한 방법 ? 예시) DiscountPolicy를 상속받는 FixDiscountPolicy, ..

Intellij에서 gradle을 이용하여 프로젝트에 Querydsl 라이브러리를 추가하고, Q파일을 생성하는 방법에 대해 알아보겠습니다. 1. build.gradle 에서 querydsl 추가하기 프로젝트를 생성시 언어는 Java 11 디펜던시는 Spring Web, Spring Data JPA, Lombok 그리고 H2 Database를 추가해 놓은 상태이며, build.gradle의 초기 설정은 아래와 같습니다. plugins { id 'org.springframework.boot' version '2.6.4' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'study' version = '0.0.1..