이번 글에서는 ElastiCache Redis 클러스터를 생성해보겠습니다. 0. ElastiCache란? 분산 인 메모리 캐시(In-Memory-Cache)를 손쉽게 생성하고 확장할 수 있는 서비스입니다. 읽기 중심의 서비스(소셜 네트워크, 게임, 추천 엔진 등)을 제공해야 하는 환경, 고속으로 데이터를 분석해야 하는 환경에 적합합니다. ElastiCache는 두 가지 캐시 엔진을 지원합니다. • Memcached : 유명한 분산 메모리 캐시 시스템입니다. • Redis : String, Hash, List, Set, Sorted Set 등 다양한 데이터 형식을 제공하는 키-값(Key-Value) 데이터 저장소입니다. 자세한 내용은 아래의 책을 참고하시길 바랍니다. 아마존 웹 서비스를 다루는 기술:실무에..
이번 글에서는 AWS에서 제공하는 NoSQL 분산 데이터베이스인 DynamoDB의 테이블을 생성해보겠습니다. 0. DynamoDB란? AWS에서 개발한 NoSQL 데이터베이스를 제공하는 서비스입니다. DynamoDB는 성능과 편의성, 대규모 DB 구축에 필요한 비용을 절감할 수 있습니다. 읽기와 쓰기가 매우 빈번하고 처리 속도가 빨라야 하는 환경, 작은 용량의 데이터가 매우 많을 때, 고가용성(High Availability)의 분산 데이터베이스를 자체 운영하기 부담될 때 DynamoDB를 사용하면 됩니다. DynamoDB는 성능과 고가용성을 위해 데이터를 3곳의 가용영역(AZ)에 복제해 저장합니다. 또한, 저장할 수 있는 데이터 용량에 제한이 없습니다. 데이터 용량이 증가하면 DynamoDB가 알아서 ..
이번 글에서는 RDS DB 인스턴스의 Read Replica를 만들어 DB의 성능을 향상시켜 보겠습니다. 0. Read Replica란? RDS DB 인스턴스의 읽기전용 인스턴스 입니다. 서비스에서 읽기 위주의 작업이 많은 경우 Read Replica를 여러개 만들어 부하를 분산할 수 있습니다. 즉, 쓰기 작업은 마스터 DB 인스턴스에 하고 읽기 작업은 Read Replica에 할당하면 마스터 DB 인스턴스의 부하를 줄일 수 있습니다. 마스터 DB 인스턴스에 쓰기를 하면 자동으로 Read Replica DB 인스턴스로 데이터가 복제됩니다. 단, 즉시 복제되는 것은 아니며 약간의 시간차가 있습니다. 자세한 내용은 아래의 책을 참고하시길 바랍니다. 아마존 웹 서비스를 다루는 기술:실무에서 알아야 할 기술은 ..
이번 글에서는 Signed URL을 활용해 CloudFront의 콘테츠 사용을 제한해보겠습니다. 0. Signed URL이란? CloudFront로 배포되는 파일의 사용을 제한하는 기능 Signed URL은 특정 날짜가 지나면 파일을 받지 못하게 하고 싶을 때, 특정 날짜 이후에 파일을 받게 하고 싶을 때, 특정 IP에서만 파일을 받을 수 있도록 할때 사용합니다. Signed URL은 크게 2가지가 있습니다. Canned Policy Signed URL : 파일 1개의 사용을 제한합니다. 또한, 특정 날짜가 지나면 파일을 받지 못하게 하는 기능만 사용할 수 있습니다. Custom Policy Signed URL : 파일 여러 개의 사용을 제한합니다. 특정 날짜가 지나면 파일을 받지 못하게 하는 기능, 특..
이번 글에서는 CloudFront로만 접근을 제한한 S3 Bucket의 Bucket Policy를 수정해보겠습니다. 0. Restrict Bucket Access란? S3 Bucket에 CloudFront만 접근할 수 있도록 설정하는 옵션입니다. 1. OAI (Origin Access Identity) 이번 실습에선 이미 S3 버킷과 연결된 CloudFront가 있다고 가정하겠습니다. 자세한 내용은 아래의 책을 참고하시길 바랍니다. 아마존 웹 서비스를 다루는 기술:실무에서 알아야 할 기술은 따로 있다! COUPANG www.coupang.com 또한, CloudFront를 생성할때 'Restirct Bucket Access'를 Yes로 선택해 S3로의 접근을 CloudFront로 한정했습니다. 'Gran..
이번 글에서는 Invalidation을 사용해 CloudFront 콘텐츠를 강제로 갱신해보도록 하겠습니다. 0. CloudFront란? 전 세계에 파일을 빠른 속도로 배포하는 CDN 서비스입니다. 전 세계를 대상으로하는 서비스를 준비한다면, 세계 곳곳에 서버를 구축하는것은 현실적으로 불가능합니다. AWS를 사용하더라도, 모든 리전에 EC2 인스턴스와 S3버킷을 생성하는것은 비효율적이며, 비용도 많이 들게 됩니다. 이때 CloudFront를 이용해 EC2 인스턴스, ELB, S3 버킷의 내용을 에지 로케이션(Edge Location)에 캐시(Cache)하면 효율적으로 글로벌 서비스를 구축 할 수 있습니다. 자세한 내용은 아래의 책을 참고하시길 바랍니다. 아마존 웹 서비스를 다루는 기술:실무에서 알아야 할 ..
이번 글에서는 AWS에서 생성한 EC2에 Elastic IP를 등록해보겠습니다. 0. Elastic IP란? Elastic IP는 고정된 공인 IP입니다. EC2 인스턴스를 생성하면 공인 IP가 부여됩니다. 하지만, 이 IP주소는 EC2 인스턴스가 중단되면 반납됩니다. 이후 EC2 인스턴스를 재실행하면 이 공인 IP는 바뀔 수 있습니다. 만약 DNS 도메인에 EC2 인스턴스의 IP주소를 연결해놓았는데, 이 IP 주소가 바뀌게 된다면 문제가 발생합니다. 이를 해결하고자 AWS에서는 한 번 할당 받으면 절대 바뀌지 않은 Elastic IP를 제공합니다. 자세한 내용은 아래의 책을 참고하시길 바랍니다. 아마존 웹 서비스를 다루는 기술:실무에서 알아야 할 기술은 따로 있다! COUPANG www.coupang...
이번 글에서는 AWS에서 S3 데이터를 백업하는 두 가지 방법에 대해 알아보겠습니다. 0. S3 데이터가 유실되었을때 대처법은? AWS S3의 '버킷 버저닝' 혹은 '수명 주기' 설정을 통해 사용자는 S3데이터가 유실되었을때 손쉽게 백업된 데이터를 활용할 수 있습니다. 1. 버킷 버저닝 설정 이번 실습을 위해선 AWS S3에 1개의 Bucket이 필요합니다. 첫번째 방법은 S3의 내장 기능인 '버킷 버저닝(S3 Version Control)' 방법을 사용하는 것입니다. 이를 활용하면 손쉽게 파일들의 버전을 관리할 수 있으며, 삭제된 파일도 복구할 수 있습니다. 자세한 내용은 아래의 책을 참고하시길 바랍니다. 아마존 웹 서비스를 다루는 기술:실무에서 알아야 할 기술은 따로 있다! COUPANG www.co..
이번 글에서는 AWS에서 S3 Bucket에 올려진 이미지 파일을 특정 도메인에서만 접근할 수 있도록 제한해보겠습니다. 0. HTTP Referer란? HTTP는 헤더값으로 웹 브라우저에서 생성하는 데이터 입니다. 예를들어 http://naver.com 웹사이트에서 특정 링크를 클릭하거나 태그로 그림 파일을 보여줄때 해당 Resource로 보내는 HTTP 헤더의 Referer값은 http://naver.com 입니다. 따라서 링크를 어디서 클릭했는지, 그림 파일을 어디서 보여주고 있는지를 알 수 있습니다. S3에서는 이 Referer값을 판단해 파일을 보여줄지 말지 제한할 수 있습니다. 1. Bucket 생성하기 이번 실습을 위해선 AWS S3에 2개의 Bucket이 필요합니다. 자세한 내용은 아래의 책..
13. Custom Classes for OAuth2 Authentication OAuth2 Authentication을 위해 사용하는 custom classes는 다음과 같습니다. 13-1) HttpCookieOAuth2AuthorizationRequestRepository HttpCookieOAuth2AuthorizationRequestRepository는 authorization request를 cookie에 save 및 retireve 하기위해 사용됩니다. HttpCookieOAuth2AuthorizationRequestRepository @Component public class HttpCookieOAuth2AuthorizationRequestRepository implements Authori..
11. Security Configuration 다음으로 Security Configuration을 생성하겠습니다. SecurityConfig @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity( securedEnabled = true, jsr250Enabled = true, prePostEnabled = true ) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private CustomUserDetailsService customUserDetailsService; @Autowired private CustomOAuth2UserService custom..
이번 글에서는 Spring Boot App에서 Spring Security와 JWT를 사용해 Goolgle Login 기능을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Intro 이번글의 모든 내용은 이 글을 참고하였습니다. 😎 저는.. 위의 글을 읽으면서 전체 프로젝트의 구조를 이해하고, 내용을 이해하는데 굉장히 오랜시간이 걸렸습니다. Spring Security 시리즈를 작성하게된 이유도, Google Login의 흐름을 이해하기 위해서 입니다. 😅 물론, 아직도 이해가 안되는 부분이 있지만.. 혹시 포트폴리오를 위해 구글/네이버 로그인 등을 적용하시려거든, 반드시 Spring Security가 어떻게 작동하는 것인지 먼저 학습하시는 것을 추천드립니다. 2. Project Structure 먼..
이번 글에서는 Spring Boot App에서 JWT를 사용해 Authenticaiton과 Authorization을 수행하는 방법에 대해 알아보도록 하겠습니다. 1. JWT JWT에 관한 내용은 이글을 참고하시길 바랍니다. 이번글에서는 하나의 Spring Boot App에서 Authenticatoin과 Authorization을 같이 수행하도록 하겠습니다. 1-1) sample application 이번글에서 사용할 RestController는 다음과 같습니다. JWT는 주로 API Server에 사용되므로, View 단은 다루지 않겠습니다. Rest API @RestController @RequestMapping("api/public") @RequiredArgsConstructor @CrossOrig..
이번 글에서는 Thymeleaf와 Spring Security를 Integeration하는 방법에 대해 알아보도록 하겠습니다. 1. Consider Security & View 이번글에서는 이전글에서 Thymeleaf로 작성한 page에 spring security를 integration 해보도록 하겠습니다. 실제 서비스되는 어플리케이션에서는 다음과 같이 security를 고려한 view를 작성할 수 있습니다. • 로그인/비로그인 사용자 별로 show/hide 할 content를 구분합니다. • ROLE/Permission 별로 show/hide 할 content를 구분합니다. • 로그인한 사용자의 이름/permissions을 display합니다. 2. Thymeleaf Integeration 위와 같은..
이번 글에서는 Form Authentication을 customize 하는 방법에 대해 알아보도록 하겠습니다. 1. Default Parameter 이번글에서는 이전글에 적용했던 Form Authentication의 defualt parameter를 customize 해보도록 하겠습니다. 이전에 사용한 spring security의 form authentication default parameter는 다음과 같습니다. • /login • username • password • remember-me 이를 아래와 같이 변경해보도록 하겠습니다. • /signin • txtUsername • txtPassword • checkRememberMe 2. Customize Login Page 먼저 기존 login p..
이번 글에서는 Spring Boot App에 Form Authentication을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Form Authentication 이번에는 이전글에서 생성한 spring boot app에 Form Authentication을 적용해보겠습니다. 이전까지는 사용자가 로그인할때 위와 같이 브라우저에서 직접 로그인창을 띄워 아이디와 비밀번호를 입력했습니다. 이러한 인증 방법을 Http Basic Authentication이라고하며, 이를 사용하기위해 위와 같이 SecurityConfiguration에 httpBasic( )을 정의했습니다. 이번에는 이를 개선해 Thymeleaf로 Login Page를 직접 만들어서 인증을 구현해보겠습니다. 2. Form Login Page ..
이번 글에서는 Spring Boot App에 Database Authentication을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Database Authentication 이번에는 이전글에서 생성한 spring boot app에 Database Authentication을 적용해보겠습니다. 이전글에서는 아래와 같이 WebSecurityConfigurerAdapter를 상속한 SecurityConfiguration에 InMemory Authentication에 사용할 유저 정보를 일일이 입력해두었습니다. SecurityConfiguriaton @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception..
이번 글에서는 Spring Boot App에 SSL/HTTPS를 적용하는 방법에 대해 알아보도록 하겠습니다. 1. SSL/HTTPS SSL/HTTPS 개념은 이 글에서 확인하시길 바랍니다. 😎 Spring Boot App에 SSL/HTTPS를 적용하기위해선 아래와 같은 절차를 수행하게 됩니다. 순서대로 살펴보겠습니다. • Get SSL Certificate • Modify application.yml • Add ServletWebServerFactory as @Bean 1-1) get SSL certificate 저는 Self Signed SSL Certificate를 사용하겠습니다. 먼저 윈도우 기준으로 cmd 창을 관리자 권한으로 열어 jdk의 bin directory로 이동합니다. 다음으로 아래의 ..
이번 글에서는 Spring Boot App에 Authority Based Authorization을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Authority Based Authorization 이번에는 이전글에서 생성한 spring boot app에 Authority Based Authorization을 적용해보겠습니다. authority based authorization을 사용하면, role based 보다 세분화하여 사용자들의 접근을 제한할 수 있습니다. 실제로 application을 운영할때에는 대부분 authority base로 authorization을 수행합니다. 간단히 Role은 여러개의 authority가 조합된 덩어리라고 생각할 수 있습니다. 😎 1-1) overall 아래와..
이번 글에서는 Spring Boot App에 Role Based Authorization을 적용하는 방법에 대해 알아보도록 하겠습니다. 1. Role Based Authorization 이번에는 이전글에서 생성한 spring boot app에 Role Based Authorization을 적용해보겠습니다. 앞서 생성했던 app에서는 사용자의 ROLE에 관계없이 모든 resource에 접근이 가능했습니다. 하지만, 실제 운영 환경에서는 사용자의 ROLE 별로 접근 가능한 resource가 달라야 하므로 이를 적용해보도록 하겠습니다. 1-1) overall 아래와 같이 SecurityConfiguration를 변경합니다. SecurityConfiguration @Configuration @EnableWebS..