[Nginx] Web Server와 WAS, 그리고 Nginx에 대하여
·
Nginx
1. 서론  웹 지식을 공부하다보면 웹 서버와 웹 어플리케이션 서버(WAS)에 대한 언급이 심심치 않게 나온다. 필자는 웹 서비스 아키텍처에 대한 제대로된 개념이 확립되지 않았을 시기, 이러한 용어들이 직관적으로 와닿지 않았다. 따라서 웹 서버와 WAS가 "실제로" 어떤 형태로 존재하고 쓰이는지 정확하게 인지할 수 없었다. 하지만 프로젝트의 개발과 배포 과정을 몸소 거치며 실제 아키텍처를 피부로 느끼는 과정에서 해당하는 개념들을 나름대로 정확히 이해할 수 있게 되었다. 이번 게시에서 웹 서버와 WAS 및 Nginx 대한 설명을 기록하며 스스로는 물론이고 보는 이로 하여금 해당 개념에 대한 직관적인 이해를 제시하려 한다.2. 웹 서비스 아키텍처  먼저 간단하게 설명하자면, 웹 서버는 정적인 컨텐츠(HTML..
[Docker] Spring boot App 배포 (4) - 서버에 배포하기
·
Docker
1. 서론  빌드 도구인 gradle을 이용해 스프링부트 어플리케이션 build를 성공했다면, 실행 가능한 JAR 파일을 얻었을 것이다. 우리는 이제 이 JAR 파일을 사용해서 WAS가 내장된 스프링부트 어플리케이션에 대한 도커 이미지를 만들고 컨테이너로 구동시킬 것이다. 이전에 우리는 배포 서버로 AWS EC2 인스턴스를 활용하기로 했다. 이전 포스팅들의 흐름대로라면, EC2 인스턴스에는 Docker가 설치된 상태이고, 자신의 로컬 PC에는 빌드된 JAR 파일이 존재하는 상태이다. 도커 컨테이너는 배포 서버인 EC2 인스턴스 안에 띄워야하므로, 현재 EC2 인스턴스 내부에는 활용해야 하는 JAR 파일이 존재하지 않는다는 문제가 발생한다. 이를 해결하기 위한 2가지 방법이 있다.Docker hub를 이용..
[Docker] Spring boot App 배포 (3) - Web App 구동 및 빌드
·
Docker
1. 서론  도커를 설치했다면, 도커 컨테이너를 만들 준비가 완료되었다는 뜻이다. 그렇다면 이제 이미지를 만들어 이를 컨테이너에 담아 우리가 원하는 어플리케이션으로 동작하도록 해야 한다. 당연히 이번의 경우, 컨테이너에 담길 어플리케이션은 스프링부트 어플리케이션이다. 스프링부트 어플리케이션을 이미지로 만들기 위해서는 스프링부트 프로젝트를 빌드해서 나온 산출물인 Executable JAR 파일이 필요하다. 따라서 본격적인 Docker 활용 전에, 웹 어플리케이션 구동과 스프링부트 프로젝트 빌드에 대해 살펴보자.2. Java 웹 어플리케이션 구동 방식  Java 웹 어플리케이션 구동 방식에는 2가지가 있다.외장 WAS : 톰캣과 같은 Web Application Server(이하 WAS) 내부에 WAR 파일..
[Docker] Spring boot App 배포 (2) - EC2 기본 + Docker 설치
·
Docker
1. 서론  Docker를 사용하려면 Docker를 설치해야 한다. 설치되는 곳은 우리의 PC일수도 있고, AWS와 같은 클라우드 서비스일 수도 있다. 우리가 어떤 어플리케이션을 배포한다고 가정하면 어플리케이션이 실제로 존재하는 서버는 우리의 PC가 될 수도 있고, 클라우드 서비스를 이용해 서버를 구축할 수도 있다. 즉, Docker를 활용해 우리의 어플리케이션을 배포하기 위해서는 서버를 어디에서 어떻게 구축할지부터 결정해야 한다.  필자는 AWS EC2 서비스를 활용했다. AWS 계정을 새로 생성하면 1년 동안 일부 AWS 서비스를 무료로 이용할 수 있는데, 이를 프리티어라고 한다. 프리티어인 경우 매월 정해진 최대 사용량을 초과하지 않는다면 아예 무료이고, 성능이 아쉽다면 딱 한단계 높은 인스턴스로 ..
[Docker] Spring boot App 배포 (1) - Docker 기본
·
Docker
1. 서론  신한DS SW Academy에서 진행한 2차 프로젝트는 웹 어플리케이션이다. 프론트엔드는 React, 백엔드는 Spring boot 모듈로 구현되었다. 해당 프로젝트에서 배포를 위해 DevOps 체계를 구축했는데, DevOps 체계에서 CI(Continuous Integration)와 CD(Continuous Deployment)의 자동화는 불가피한 요소이다. 바로 이 자동화의 중심에 Docker라는 리눅스 컨테이너 기술이 있다. 쉽게 말하면, Docker는 이런 자동화 과정에서 필요한 것을 만들고, 올리고, 내릴 수 있는 일꾼이라고 생각하면 편하다. Docker의 기본적인 개념부터 살펴보도록 하자.2. 가상화란?  Wikipedia에서 정의하는 정돈된 정의는 다음과 같다.가상화(假像化, v..
[Spring boot] OAuth(Google) & JWT Login (7) - JWT 인증 필터 + 그 외
·
Spring boot/Spring security
1. 서론  이전 포스팅(https://inthebleakmidwinter.tistory.com/6)에서 JWT를 생성하는 JwtTokenProvider와 이를 HTTP Cookie 형태로 포장시켜주는 JwtCookieProvider 객체에 대해 설명했다. 이번에는 Security Configuration을 시작으로 이 객체들을 이용해, 개발자가 커스텀한 필터(JwtAuthenticationFilter)를 거쳐 사용자를 검증하는 과정을 알아보자.2. 필터체인 설정에서 .addFilterBefore() 메서드SecurityConfig.java...@Configuration@EnableWebSecurity@RequiredArgsConstructorpublic class SecurityConfig { pri..
[Spring boot] OAuth(Google) & JWT Login (6) - JWT + 쿠키
·
Spring boot/Spring security
1. 서론  대부분의 웹/모바일 어플리케이션은 회원가입 및 로그인 서비스를 제공하고 있으며, 이는 각 개인이 어떤 어플리케이션 안에서 타인이 범접할 수 없는 공간을 가지고 있다는 것을 의미한다. 이에 따라 서비스 이용자는 계정 생성 및 접속에 있어서 이용자 본인이 맞다고 인증할 수 있어야 하고, 서비스 제공자는 인증이 완료된 이용자가 자신의 서비스를 안전하게 이용할 수 있도록 시스템을 구축해야한다. 즉, 개발자는 사용자가 안전하게 인증할 수 있도록 서비스를 구성하고, 인증된 사용자에게 적합한 자원 접근을 위한 권한을 인가하도록 구현해야 한다. 이 지향점의 중심에 JWT(JSON WEB Token)가 있다.  토큰은 웹 등의 어플리케이션에서 이용자 개인을 확인할 수 있게하는 수단 중 하나이다. 토큰에는 크..
[Spring boot] OAuth(Google) & JWT Login (5) - OAuth 동작 ②
·
Spring boot/Spring security
1. 서론  이전 포스팅(https://inthebleakmidwinter.tistory.com/4)에서 OAuth2LoginAuthenticationFilter가 4. Access Token 요청 ~ 7. 유저 정보 제공 과정을 처리한다고 설명했다. 개발자가 SecurityConfiguration을 커스터마이징할 때, oauth2Login()을 활성화시키면 OAuth2LoginConfigurer가 추가되어 이 configurer가 Security Filter Chain에 OAuth2LoginAuthenticationFilter를 추가한다. request는 Dispatcher Servlet에 도달하기전 이 필터(또는 다른 여러 필터)를 거치게 되며 지정된 redirect-uri 패턴으로 오는 reques..
[Spring boot] OAuth(Google) & JWT Login (4) - OAuth 동작 ①
·
Spring boot/Spring security
1. 서론  OAuth(Open Authorization)은 2006년 최초 출시된 인증을 위한 개방형 표준 프로토콜이다. 최초 출시 시기인 2006년 트위터와 Ma.gnolia가 주도하여 1.0버전을 개발하였으며, 이후 더욱 개선된 1.0a버전도 출시되었지만 일부 어플리케이션에서 보안성을 확보하지 못하는 사례가 존재했다. 기존보다 보안성을 강화하고 단순화시킨 2.0버전이 2012년에 등장하게 되었고, 지금까지 여러 어플리케이션에서 아주 유용하게 사용되고 있는 프로토콜이라 할 수 있겠다.   OAuth가 등장하기 이전에는, 특정 서비스에서 다른 서비스의 기능을 이용할 수 있게 하기 위해 다음과 같이 아주 위험한 방법을 사용하고 있었다. 어떤 회원이 현재 이용하고 있는 서비스를 A, A를 통해 이용하고 싶..
[Spring boot] OAuth(Google) & JWT Login (3) - Security 구성 및 동작
·
Spring boot/Spring security
1. 서론  본격적인 OAuth, JWT 구현에 앞서, 이전 포스팅들에서 생략하고 넘어갔었던 본 프로젝트의 Security Configuration과 이 구성이 적용되는 정확한 동작 과정을 파악해보고자 한다.2. Custom Security Configuration  Security Configuration은 Spring security 동작에 대한 환경 설정을 구성하고 있다. 즉, 인증과 인가에 대한 모든 흐름과 그에 대한 설정을 관리한다. 웹 서비스가 로드 될 때 Spring Container(https://ittrue.tistory.com/220)에 의해 관리된다.SecurityConfig.javapackage com.urcarcher.be.blkwntr.auth;import org.springfr..