SlideShare una empresa de Scribd logo
1 de 86
Descargar para leer sin conexión
카카오 광고 플랫폼 MSA 적용사례
(API Gateway 도입과 인증 구현)
황민호(robin.hwang)
DSP개발파트
Kakao Moment
카카오 광고 플랫폼 (Moment)
노출 지면은 지속적으로 확대 예정입니다
카카오 이용자가 있는 곳이라면 어디든 찾아가서 광고를 노출합니다.
카카오 서비스를 비롯한 주요 네트워크 지면에 노출 됩니다.
카카오 광고 플랫폼 (Moment)
카카오 광고 플랫폼은 광고 등록부터 광고 성과 분석까지 가능한 원스탑 시스템입니다
카카오 광고 플랫폼은 광고 목적 최적화를 지원합니다
카카오 광고 플랫폼은 오디언스 타겟팅을 지원합니다
캠페인
광고 목적 선택
광고그룹
타겟팅 설정
예산 설정
광고 노출
심사 완료 시
보고서
광고 성과 분석
소재
광고 소재 등록
디지털 광고 시스템
SUPPLY SIDE

Platform
AUDIENCE
AD
INVESTMENT
DSP
DSP
SSP
AD
EXCHANGE
SSP
SSP
DATA EXCHANGE / DATA LAKE / DMP
Header
Bidding
DEMAND SIDE

Platform
Advertiser
Agency
.
Publisher
DSP
,
카카오 광고 DSP
Moment
Agency
Admin
Review
,
광고주를 위한 서비스
광고 등록 및 정산 보고서 등
대행사를 위한 서비스
광고계정 영업권 관리 등
광고 플랫폼 관리
광고 소재 심사
광고주
.
대행사
3
관리자
4
심사자
카카오 광고 DSP
Moment
Agency
Admin
Review
Ad Server
Billing
Report
Ranking
Targeting
API Server Related Support
Aggregation
카카오 광고 DSP
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
API Server Related Support
RabbitMQ
MySQL
Kakao Auth
카카오 광고 DSP
Moment
Agency
Admin
Review
Aggregation
Billing
Report
API Server Related Support
A

P
I

G

A
T
E
W
A
Y
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
RabbitMQ
MySQL
Kakao Auth
Ad Server
API Gateway
Authentication
Authorization
MSA
API
Gateway
API Gateway




Logging




인증/인가




Aggregation




Mediation
API
Routing




Statistic




Limitation
API
Gateway
AWS API Gateway
API Gateway
ZUUL
API
Gateway
AWS API Gateway
API
Gateway
API Gateway 선택
Spring
Cloud Services
Spring
Cloud
ZUUL Spring Framework
Simple
Netflix
ZUUL
AWS API Gateway
API Gateway 선택
ZUUL
Netflix OSS (Open Source Software center)
image : http://lucasmatt.com/2017/08/22/spring-microservices/
Spring Cloud with Netflix OSS
Service A
Hystrix
RibbonEureka
Feign
Gateway
Hystrix
RibbonEureka
Zuul
OAuth2
Service
Discovery
Eureka
Monitor
Service
Dashboard
Routing
Proxy
Zuul
Client
Trace
Service
zipkin
Config
Service
Spring-Config
Rest
Client
Feign
Load
Balancing
Ribbon
Circuit
Breaker
Hystrix
Cloud BusCloud StreamCloud SecurityOAuth2
Service A
Hystrix
RibbonEureka
Feign
Service A
Hystrix
RibbonEureka
Feign
Service B
Hystrix
RibbonEureka
Feign
Service B
Hystrix
RibbonEureka
Feign
Service B
Hystrix
RibbonEureka
Feign
그렇다면.. 카카오 광고 DSP 구성은?
Moment
Agency
Admin
Review
,
광고주
.
대행사
3
관리자
4
심사자
Review
Admin
Agency
Moment
그렇다면.. 카카오 광고 DSP 구성은?
Moment
Agency
Admin
Review
API
GATEWAY
(Zuul)
L7
L7
L7
L7
zuul:
routes:
moment:
url: http://moment-api:8080
agency:
url: http://agency-api:8080
admin:
url: http://admin-api:8080
review:
url: http://review-api:8080
application.yml
,
광고주
.
대행사
3
관리자
4
심사자
Review
Admin
Agency
Moment
그렇다면.. 카카오 광고 DSP 구성은?
Moment
Agency
Admin
Review
API
GATEWAY
(Zuul)
L7
L7
L7
L7
Review
AggregationL7
zuul:
routes:
moment:
url: http://moment-api:8080
agency:
url: http://agency-api:8080
admin:
url: http://admin-api:8080
review:
url: http://review-api:8080
application.yml
aggregation:
url: http://aggregation-api:8080
,
광고주
.
대행사
3
관리자
4
심사자
잘 돌아가던 어느날..
(구성이 뭔가 빈약하긴 하지만)
서비스 장애
서비스 장애 원인
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
서비스 장애 원인
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
서비스 장애 원인
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
OOM발생
서비스 장애 원인
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
OOM발생
Timeout
서비스 장애 원인
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
OOM발생
Timeout
서비스 장애 원인
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
OOM발생
Timeout
Connection 증가
서비스 장애 원인
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
RestTemplate
connection timeout : 5 sec
read timeout : 10 sec
connection request timeout : 0 (default)
OOM발생
Timeout
Connection 증가
서비스 장애 원인
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
RestTemplate
connection timeout : 5 sec
read timeout : 10 sec
connection request timeout : 0 (default) -> 5 sec
OOM발생
Timeout
Connection 증가
Circuit Breaker(Hystrix) 적용
image : http://lucasmatt.com/2017/08/22/spring-microservices/
Circuit Breaker(Hystrix) 적용
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
H
Y
S
T
R
I
X
Circuit Breaker(Hystrix) 적용
Moment
Agency
Admin
Review
Aggregation
Ad Server
Billing
Report
Batch
Notification
Ranking
Targeting
Plus Friends
CTS
Tenth
Hadoop
Elastic Search
Kakao Account
API Server Related Support
G

A
T
E
W
A
Y
RabbitMQ
MySQL
H
Y
S
T
R
I
X
Isolation
Circuit Open!
Eureka와 Ribbon은?
image : http://lucasmatt.com/2017/08/22/spring-microservices/
G

A
T
E
W
A
Y
Review
Admin
Agency
Moment
Hystrix + Ribbon 구성
Moment
Agency
Admin
Review
Ribbon
Ribbon
Ribbon
Ribbon
Review
AggregationRibbon
zuul:
routes:
moment:
path: /moment/**
serviceId: moment
agency:
path: /agency/**
serviceId: agency
moment:
ribbon:
listOfServices: http://moment-
api-01:8080, http://moment-api-02:8080,..
agency:
ribbon:
listOfServices: http://agency-api-01:8080,
http://agency-api-02:8080,..
application.yml
ribbon:
eureka:
enabled: false
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
Review
Admin
Agency
Moment
Hystrix + Ribbon 구성
Moment
Agency
Admin
Review
Ribbon
Ribbon
Ribbon
Ribbon
Review
AggregationRibbon
zuul:
threadPool:
useSeparateThreadPools: true
ribbonIsolationStrategy: THREAD
hystrix:
threadpool:
default:
coreSize: 10
maximumSize: 20
command:
default:
circuitBreaker:
requestVolumeThreshold: 10
errorThresholdPercentage: 50
moment:
circuitBreaker:
requestVolumeThreshold: 20
errorThresholdPercentage: 50
application.yml
H
Y
S
T
R
I
X
metrics.rollingStats.timeInMilliseconds : 감시 시간, 기본값 10초
circuitBreaker.requestVolumeThreshold : 감시 시간 내 요청 수, 기본값 20
circuitBreaker.errorThresholdPercentage : 요청 대비 오류율, 기본값 50
10초이내에 발생한 요청 20번 동안 50% 오류 발생시 Circuit을 Open
서버 내리니까 에러나는데..?
유레카 없이 로드 밸런싱 안된건가?
G

A
T
E
W
A
Y
Review
Admin
Agency
Moment
Hystrix + Ribbon 구성
Moment
Agency
Admin
Review
Ribbon
Ribbon
Ribbon
Ribbon
Review
AggregationRibbon
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
Review
Admin
Agency
Moment
Hystrix + Ribbon 구성
Moment
Agency
Admin
Review
Ribbon
Ribbon
Ribbon
Ribbon
Review
AggregationRibbon
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
Review
Admin
Agency
Moment
Hystrix + Ribbon 구성
Moment
Agency
Admin
Review
Ribbon
Ribbon
Ribbon
Ribbon
Review
AggregationRibbon
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
Review
Admin
Agency
Moment
Hystrix + Ribbon 구성
Moment
Agency
Admin
Review
Ribbon
Ribbon
Ribbon
Ribbon
Review
AggregationRibbon
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
Review
Admin
Agency
Moment
Hystrix + Ribbon 구성
Moment
Agency
Admin
Review
Ribbon
Ribbon
Ribbon
Ribbon
Review
AggregationRibbon
?????
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
Moment
Ribbon - Load Balancing & Fault tolerance
Moment
Ribbon
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
Ribbon - Load Balancing & Fault tolerance
Ribbon
Default:
Round Robin
API 3
API 2
API 1
API 4
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
Ribbon - Load Balancing & Fault tolerance
Ribbon
Default:
Round Robin
API 3
API 2
API 1
API 4
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
API 3
Ribbon - Load Balancing & Fault tolerance
API 2
Ribbon
API 1
API 4
Default:
Round Robin
circuit open!
timeout Exception??H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
API 3
Ribbon - Load Balancing & Fault tolerance
API 2
Ribbon
API 1
API 4
Default:
Round Robin
circuit open!
timeout Exception??H
Y
S
T
R
I
X
Ribbon - Load Balancing & Fault tolerance
RibbonHYSTRIX
timeout
(읽기시간 + 커넥션시간) * 재시도횟수 * 재시도 서버수
moment:
ribbon:
MaxAutoRetries: 1 # Retry 횟수
MaxAutoRetriesNextServer: 1 # Retry할 (다음) 서버 수
OkToRetryOnAllOperations: true # 모든 operation에 retry 유무
ServerListRefreshInterval: 2000 # 서버 갱신 시간
ConnectTimeout: 3000 # connection timeout
ReadTimeout: 3000 # read timeout
listOfServers:
execution:
isolation:
thread:
timeoutInMilliseconds: 1000
ribbonTimeout =
(ribbonReadTimeout + ribbonConnectTimeout)
* (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1)
>
timeout
Ribbon - Load Balancing & Fault tolerance
RibbonHYSTRIX
timeout
(읽기시간 + 커넥션시간) * 재시도횟수 * 재시도 서버수
moment:
ribbon:
MaxAutoRetries: 0 # Retry 횟수
MaxAutoRetriesNextServer: 0 # Retry할 (다음) 서버 수
OkToRetryOnAllOperations: true # 모든 operation에 retry 유무
ServerListRefreshInterval: 2000 # 서버 갱신 시간
ConnectTimeout: 1000 # connection timeout
ReadTimeout: 2000 # read timeout
listOfServers:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
ribbonTimeout =
(ribbonReadTimeout + ribbonConnectTimeout)
* (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1)
>
timeout
해결안됨
Ribbon - Load Balancing & Fault tolerance
RibbonHYSTRIX
timeout
(읽기시간 + 커넥션시간) * 재시도횟수 * 재시도 서버수
ribbonTimeout =
(ribbonReadTimeout + ribbonConnectTimeout)
* (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1)
>
timeout
moment:
ribbon:
MaxAutoRetries: 1 # Retry 횟수
MaxAutoRetriesNextServer: 1 # Retry할 (다음) 서버 수
OkToRetryOnAllOperations: true # 모든 operation에 retry 유무
ServerListRefreshInterval: 2000 # 서버 갱신 시간
ConnectTimeout: 3000 # connection timeout
ReadTimeout: 3000 # read timeout
listOfServers:
execution:
isolation:
thread:
timeoutInMilliseconds: 1000
G

A
T
E
W
A
Y
API 3
Ribbon - Load Balancing & Fault tolerance
API 2
Ribbon
H
Y
S
T
R
I
X
API 1
API 4
Load
Balancer
moment:
ribbon:
listOfServers:
ServerListRefreshInterval
LoadBalancer는 Eureka를 사용중일
경우 서버 목록을 갱신하며 사용하지 않을
때는 property 파일의 서버 목록을 주기
적으로 갱신한다
이때 서버 상태를 체크하지 않음
G

A
T
E
W
A
Y
API 3
Ribbon - Load Balancing & Fault tolerance
API 2
Ribbon
H
Y
S
T
R
I
X
API 1
API 4
Load
Balancer
moment:
ribbon:
listOfServers:
ServerListRefreshInterval
LoadBalancer는 Eureka를 사용중일
경우 서버 목록을 갱신하며 사용하지 않을
때는 property 파일의 서버 목록을 주기
적으로 갱신한다
이때 서버 상태를 체크하지 않음Ping
서버 목록을 주기적으로 Ping 을 날려서
리스트에서 제외시키는 별도의 작업을 수
행한다
NFLoadBalancerPingInterval
(default 30 sec)
이때 default가 dummyPing 인데
isAlive( ) 에서 무조건 true로 리턴
G

A
T
E
W
A
Y
Ribbon - Load Balancing & Fault tolerance
H
Y
S
T
R
I
X
moment:
ribbon:
NFLoadBalancerPingClassName: com.kakao.dsp.ServerAlivePing
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule
# round robin 방식을 기본으로 하되 서버가 현재 처리가능한 상태인지 체크(ping)한다
NFLoadBalancerPingInterval: 3 #sec
import com.netflix.loadbalancer.PingUrl;
public class ServerAlivePing extends PingUrl {
@Override
public String getPingAppendString() {
return "/alive";
}
}
Dummy ping -> PingUrl
Round Robin -> AvailabilityFilteringRule
G

A
T
E
W
A
Y
API 3
Ribbon - Load Balancing & Fault tolerance
API 2
Ribbon
API 1
API 4
Default:
Round Robin
서버 목록 제외
H
Y
S
T
R
I
X
G

A
T
E
W
A
Y
API 3
Ribbon - Load Balancing & Fault tolerance
API 2
Ribbon
API 1
API 4
Default:
Round Robin
서버 목록 제외
H
Y
S
T
R
I
X
서버 요청 제한은 어떻게 하지?
Open API 도 만들어야 하는데...
2018.06 GA Release
Filter
Predicate
Spring Flux
Limit Rate
Spring Cloud
Non-Blocking
Websocket support
Spring Framework 5
2018.05 Release
Netty Server
Http/2
Protection
Limit Rate
Websocket support
Origin Concurrency
API Gateway
ZUUL
API
Gateway
ZUUL2
Spring Cloud
Gateway
Blocking API
Servelet 2.5
Websocket not support
API Spring Cloud Gateway - Rate Limit 예제
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
return builder.routes()
.route(p -> p
.path(“/api/**”)
.filters(f ->
f.requestRateLimiter(r -> {
r.setRateLimiter(new RedisRateLimiter(10, 20))
}).uri(“http://moment.kakao.com/api”))
.build();
}
// HTTP 429 - Too Many Requests
https://en.wikipedia.org/wiki/Token_bucket
Token_bucket
redis-rate-limiter.replenishRate : drop없이 사용자당 처리 가능한 초당 요청 수
redis-rate-limiter.burstCapacity : 사용자당 허용된 초당 요청 수 (0이면 모두 블럭)
Zuul
Pre filter
라우팅 전 실행
logging 및 인증 등 처리
Routing Filter
요청에 대한 라우팅 처리
Post Filter
라우팅 후 실행
사용자 정의 헤더 추가/제거
통계 및 matrix 수집
Error Filter
에러 발생시 핸들링
Http ResponseHttp Request
HTTP Request
Pre Filter Routing Filter Post Filter
Custom Filter
API Servers
Error Filter
Netty Server
Handlers
Zuul2
Netty Handlers
네트워크 프로토콜, 웹서버,
Connection 관리, 프록시 작업
Inbound Filter
요청을 proxy 하기전 처리
인증, 라우팅, Request 변경 등
Endpoint Filter
정적 응답 반환
요청을 백엔드 서비스로 프록시
Outbound Filter
응답이 반환된 후 실행
gziping, matrix
사용자 정의 헤더 추가/제거
ResponseRequest
Internet
Endpoint
Filter
API Servers
Netty Client
Handlers
Outbound
Filter
Inbound
Filter
Inbound
Filter
Inbound
Filter
Outbound
Filter
Outbound
Filter
기존 Zuul 과 유사한 구조, Netty 적용
Spring Cloud Gateway
Gateway Handler Mapping
경로와 일치하는지 판단
Gateway Web Handler
요청과 관련된 필터 체인을 통해
요청을 전송
Filter
필터는 프록시 요청이 보내지기
전후에 나뉘어서 로직 수행
Proxy Filter
프록시 요청이 처리될때 수행
Gateway Client
Gateway Handler
Mapping
Proxied
Service
Gateway Web
Handler
Filter
Filter
Filter
Proxy
Filter
Predicate
Filter
Predicat와 Filter로 모든 요청 처리
Spring Cloud Gateway PredicateFactory
After
Before
Between
Cookie
Header
Host
Remote Address
Method
Path
Query
spring:
cloud:
gateway:
routes:
- id: foo_route
uri: lb://foo
predicates:
- After=2018-09-04T14:00:00.000+09:00[Asia/Seoul]
- Cookie=chocolate, ch.p
- Header=X-Request-Id, d+
- Host=**.foo.org
- RemoteAddr=192.168.1.1/24
- Method=GET
- Path=/foo/{segment}
- Query=foo, ba
- Query=baz
- Cookie=chocolate, ch.p
Spring WebFlux의 HandlerMapping 의 일부를 적용하여 라우팅을 표현 합니다
Spring Cloud Gateway FilterFactory
{Add|Remove}RequestHeader
{Add|Remove}RequestParameter
{Add|Remove}ResponseHeader
SetStatus
SetResponseHeader
SecureHeaders
PreserveHostHeader
Hystrix
RequestRateLimiter
RedirectTo
PrefixPath
RewritePath
SetPath
StrixPrefix
SaveSession
spring:
cloud:
gateway:
routes:
- id: foo_route
uri: lb://foo
filters:
- AddRequestHeader=X-Request-Foo, Bar
- AddRequestParameter=foo, bar
- AddResponseHeader=X-Response-Foo, Bar
- SetStatus=401
- SetResponseHeader=X-Response-Foo, Bar
- PreserveHostHeader
- Hystrix=myCommandName
- RequestRateLimiter=10, 50, userKeyResolver
- RedirectTo=302, http://kakao.com
- PrefixPath=/mypath
- RewritePath=/consumingserviceendpoint, /
backingserviceendpoint
- SetPath=/{segment}
- StripPrefix=2
- SaveSession
필터를 통해 HTTP 요청이나 응답 데이터를 필터링하여 수정합니다
API Gateway
Authentication
Authorization
MSA
마이크로 서비스 인증 및 권한 부여 방법
분산
세션
관리
세션 복제

(Session Replication)
중앙 집중식 세션

(Centralized Session Storage)
클라이언트 토큰
SSO (Single Sign-On)
API게이트웨이를 통한 클라이언트 토큰
고정 세션관리

(Sticky Session)
세션 VS 토큰
마이크로 서비스 인증 및 권한 부여 방법
분산
세션
관리
고정 세션관리

(Sticky Session)
세션 복제

(Session Replication)
중앙 집중식 세션

(Centralized Session Storage)
클라이언트 토큰
SSO (Single Sign-On)
API게이트웨이를 통한 클라이언트 토큰
서버
서버
특정 사용자의 모든 요청이 동일한 서버로 전송
로드 밸런서에 의해 강제 리로드시 모든 사용자
의 세션데이터가 손실되는 위험 존재
마이크로 서비스 인증 및 권한 부여 방법
분산
세션
관리
고정 세션관리

(Sticky Session)
세션 복제

(Session Replication)
중앙 집중식 세션

(Centralized Session Storage)
클라이언트 토큰
SSO (Single Sign-On)
API게이트웨이를 통한 클라이언트 토큰
서버
서버
각 인스턴스가 모든 세션 데이터를 저장하고
네트워크를 통해 동기화됨
인스턴스가 증가할 수록 많은 대역폭이 필요해짐
마이크로 서비스 인증 및 권한 부여 방법
분산
세션
관리
고정 세션관리

(Sticky Session)
중앙 집중식 세션

(Centralized Session Storage)
클라이언트 토큰
SSO (Single Sign-On)
API게이트웨이를 통한 클라이언트 토큰
서버
서버
공유 세션 저장소에서 사용자 데이터를 엑세스
가용성과 확장성이 좋은편
세션 저장소에 대한 보호 매커니즘이 필요
세션 복제

(Session Replication)
마이크로 서비스 인증 및 권한 부여 방법
분산
세션
관리
고정 세션관리

(Sticky Session)
클라이언트 토큰
SSO (Single Sign-On)
API게이트웨이를 통한 클라이언트 토큰
서버
서버
인증 정보를 사용자 브라우저에 저장
보통 쿠키 형태로 저장됨
위,변조가 불가하도록 암호화 필요
시스템마다 인증처리 필요
세션 복제

(Session Replication)
중앙 집중식 세션

(Centralized Session Storage)
마이크로 서비스 인증 및 권한 부여 방법
분산
세션
관리
고정 세션관리

(Sticky Session)
클라이언트 토큰
SSO (Single Sign-On)
API게이트웨이를 통한 클라이언트 토큰
서버
SSO

서버
사용자는 한번 로그인 하면 다른 여러 시스템에
추가 인증프로세스 없이 접근 가능
유저가 접근시마다 SSO 서버와 상호 작용 필요
인증을 위한 반복적인 네트워크 트래픽을 사용
세션 복제

(Session Replication)
중앙 집중식 세션

(Centralized Session Storage)
마이크로 서비스 인증 및 권한 부여 방법
분산
세션
관리
고정 세션관리

(Sticky Session)
SSO (Single Sign-On)
API게이트웨이를 통한 클라이언트 토큰
서버
서버
게이트웨이에서 인증정보 처리
위,변조가 불가하도록 암호화 필요
세션 복제

(Session Replication)
중앙 집중식 세션

(Centralized Session Storage)
클라이언트 토큰
Gate
way
카카오 광고 플랫폼 (moment) 인증
분산
세션
관리
고정 세션관리

(Sticky Session)
SSO (Single Sign-On)
API게이트웨이를 통한 클라이언트 토큰
세션 복제

(Session Replication)
중앙 집중식 세션

(Centralized Session Storage)
클라이언트 토큰
G

A
T
E
W
A
Y
Admin
Agency
Moment
Aggregation
Billing
Report
카카오 광고 플랫폼 (moment) 인증
Admin
Agency
Moment
Aggregation
Billing
Report
G

A
T
E
W
A
Y
로그인
F
R
O
N
T
Kakao
Account
/login/moment
cookie
JWT
광고계정 생성
POST /moment/adAccounts
JWT (JSON Web Token)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG
9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT (JSON Web Token)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG
9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
base64enc({
“alg”: “HS256”,
“typ”: “JWT”
})
Header
JWT (JSON Web Token)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG
9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
base64enc({
“alg”: “HS256”,
“typ”: “JWT”
})
Header
base64enc({
“key1”: “value1”,
“key2”: “value2”,
“exp”: “1426420800”
})
Payload
JWT (JSON Web Token)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG
9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
base64enc({
“alg”: “HS256”,
“typ”: “JWT”
})
Header
base64enc({
“key1”: “value1”,
“key2”: “value2”,
“exp”: “1426420800”
})
Payload
HMACSHA256({
base64enc(header)
+ ‘.’ +
base64enc(payload)
, secretKey
})
Signature
JWT (JSON Web Token)
수평으로 쉽게 확장 가능
세션방식의 인증의 경우 중앙 

세션 스토리지 시스템이 필요함,
Sticky session방식은 비용증대
유지 보수 및 디버그 용이
Base64 방식으로 데이터 인코딩되
어 웹 토큰 자체에 포함됨
RESTful 서비스에 적합
쿠키방식의 경우 쿠키의 출처가
된 도메인에 대해서만 사용할 수
있는 단점 해소
보안성
암호화 알고리즘으로 암호화하여 

클라이언트 변조를 막음
특정IP 주소로 JWT발행 및 브라우
저 핑거 프린팅 등을 사용하여 토큰
탈취에 따른 보안 강화
토큰 자체 만료시간 기술
토큰 만료시간을 미리 알고 갱신
요청을 할 수 있음
JSON Web Token은 디지털 서명을 통해 확인하고 신뢰할 수 있는 정보를 보내는데 사용됩니다.
카카오 광고 플랫폼 (moment) 인증
Admin
Agency
Moment
Aggregation
Billing
Report
G

A
T
E
W
A
Y
로그인
F
R
O
N
T
Kakao
Account
/login/moment
cookie
JWT
광고계정 생성
POST /moment/adAccounts
카카오 광고 플랫폼 (moment) 인증
Access
Refresh
Refresh Token
Access Token • 자원에 직접 Access하는데 필요한 정보를 포함
• 클라이언트의 권한 부여 여부를 판단
• 만료날짜가 있으며 토큰 수명이 짧음
• Access Token을 재발급 하는데 필요한 정보를 포함
• 만료될 수 있으며 일반적으로 오랜기간 사용됨
• 누출되지 않도록 엄격한 관리가 필요함
• 발급된 IP 기준으로 제한을 두거나 브라우저 핑거프린터 정보등을 통해 

유효성 확인 필요
.
,
카카오 광고 플랫폼 (moment) 인증
Access
Refresh
Refresh Token
Access Token
• ID
• 서비스Type
• 사용자정보
• 광고계정ID
• 권한 정보
• 생성시간
• 만료시간
• ID
• 서비스Type
• IP정보
• 생성시간
• 만료시간
.
,
Admin
Agency
Moment
Aggregation
Billing
Report
G

A
T
E
W
A
Y
Gateway에서 header 로 변환해서 처리
카카오 광고 플랫폼 (moment) 인가
리소스 서버
리소스 서버
인증서버
G

A
T
E
W
A
Y
인증요청
권한부여
role={member}
role={member}
응답
권한없음
일반적으로는 별도 인증서버를 통해 권한을 획득하고, 리소스 서버에서 권한 체크를 한다
카카오 광고 플랫폼 (moment) 인가
리소스 서버
리소스 서버
인증서버
G

A
T
E
W
A
Y
인증요청
권한부여
role={member}
보고서 조회
role={member}
멤버 승인
응답
권한없음
카카오 광고 플랫폼에서는 게이트웨이에서 권한을 통합관리 하고 있음
보고서 조회
응답
카카오 광고 플랫폼 (moment) 인가
Gateway에서 권한은 알아서 해주세요
1. 서비스별 권한 정의
2. API 서버들 URL PATH 수집
3. 수집된 URL PATH별로 Spring Security에 권한 맵핑
실행
고민 1. 계속 추가되는 API, 계속 변경되는 권한을 계속 적용해야 하나?
(Resource 소유권 혹은 Resource Boundary 체크는 Gateway에서 힘듬)
2. Gateway에서 인증정보를 전부 알고 있어야 하나?
로그아웃 했는데도 ...?
JWT 특성상 자체 만료시간이 기술되어 있으므로 강제 무효화가 안됨
API게이트웨이를 통한 클라이언트 토큰
Resource Server Auth ServerAPI GatewayUser
Authenticates with Auth Server Forward
Generate JWT
Grant JWT
Translate to opaque
token and save
Grant opaque token
Request Access With
opaque token
Translate to Auth token
Forward Access with Auth Token
Valid Auth Token
Return Resource
Logout with opaque Token
Remove opaque token
AccessToken 무효화 => JWT 관리 및 opaque token 고려중
Q&A

Más contenido relacionado

La actualidad más candente

AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016Amazon Web Services Korea
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유Hyojun Jeon
 
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드Opennaru, inc.
 
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020Amazon Web Services Korea
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 Amazon Web Services Korea
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021AWSKRUG - AWS한국사용자모임
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?VMware Tanzu Korea
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기NHN FORWARD
 
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)Amazon Web Services Korea
 
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017Amazon Web Services Korea
 
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호(넥슨코리아) :: AWS Community Day 2020
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호(넥슨코리아) :: AWS Community Day 2020쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호(넥슨코리아) :: AWS Community Day 2020
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호(넥슨코리아) :: AWS Community Day 2020AWSKRUG - AWS한국사용자모임
 
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon Web Services Korea
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Wangeun Lee
 
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 rockplace
 
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅Amazon Web Services Korea
 
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나Amazon Web Services Korea
 

La actualidad más candente (20)

AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
게임서비스를 위한 ElastiCache 활용 전략 :: 구승모 솔루션즈 아키텍트 :: Gaming on AWS 2016
 
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
 
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
Amazon S3 이미지 온디맨드 리사이징을 통한 70% 서버 비용 줄이기 - AWS Summit Seoul 2017
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드
 
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트::  AWS Summit Online Korea 2020
천만사용자를 위한 AWS 클라우드 아키텍처 진화하기 – 문종민, AWS솔루션즈 아키텍트:: AWS Summit Online Korea 2020
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
 
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
Amazon EKS로 간단한 웹 애플리케이션 구축하기 - 김주영 (AWS) :: AWS Community Day Online 2021
 
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
MSA 전략 2: 마이크로서비스, 어떻게 구현할 것인가?
 
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
[2019] PAYCO 쇼핑 마이크로서비스 아키텍처(MSA) 전환기
 
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)
AWS Summit Seoul 2015 -CloudFront와 Route53 기반 콘텐츠 배포 전략 (GS네오텍-박정수)
 
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
 
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호(넥슨코리아) :: AWS Community Day 2020
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호(넥슨코리아) :: AWS Community Day 2020쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호(넥슨코리아) :: AWS Community Day 2020
쿠알못이 Amazon EKS로 안정적인 서비스 운영하기 - 최용호(넥슨코리아) :: AWS Community Day 2020
 
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
Amazon SageMaker 모델 배포 방법 소개::김대근, AI/ML 스페셜리스트 솔루션즈 아키텍트, AWS::AWS AIML 스페셜 웨비나
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계
 
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
Amazon Aurora 성능 향상 및 마이그레이션 모범 사례 - AWS Summit Seoul 2017
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성
 
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
[AWS Builders] AWS와 함께하는 클라우드 컴퓨팅
 
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
AWS Single Sign-On (SSO) 서비스 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
 

Similar a 카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개

AWS All-in 그리고 그 이후::김승철,이성익,최홍식::AWS Summit Seoul 2018
AWS All-in 그리고 그 이후::김승철,이성익,최홍식::AWS Summit Seoul 2018AWS All-in 그리고 그 이후::김승철,이성익,최홍식::AWS Summit Seoul 2018
AWS All-in 그리고 그 이후::김승철,이성익,최홍식::AWS Summit Seoul 2018Amazon Web Services Korea
 
하이브리드 모바일 어플리케이션 개발을 위한 새로운 도구, AWS Amplify (강정희, AWS 솔루션즈 아키텍트) :: AWS DevDa...
하이브리드 모바일 어플리케이션 개발을 위한 새로운 도구, AWS Amplify (강정희, AWS 솔루션즈 아키텍트) :: AWS DevDa...하이브리드 모바일 어플리케이션 개발을 위한 새로운 도구, AWS Amplify (강정희, AWS 솔루션즈 아키텍트) :: AWS DevDa...
하이브리드 모바일 어플리케이션 개발을 위한 새로운 도구, AWS Amplify (강정희, AWS 솔루션즈 아키텍트) :: AWS DevDa...Amazon Web Services Korea
 
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018Amazon Web Services Korea
 
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018 서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018 Amazon Web Services Korea
 
Bespin global(베스핀글로벌) aws summit seoul 0415
Bespin global(베스핀글로벌) aws summit seoul 0415Bespin global(베스핀글로벌) aws summit seoul 0415
Bespin global(베스핀글로벌) aws summit seoul 0415BESPIN GLOBAL
 
AWS MobileHub와 AWS Amplify를 사용한 하이브리드 모바일 어플리케이션 개발하기 l 강정희 솔루션즈 아키텍트
AWS MobileHub와 AWS Amplify를 사용한 하이브리드 모바일 어플리케이션 개발하기 l 강정희 솔루션즈 아키텍트AWS MobileHub와 AWS Amplify를 사용한 하이브리드 모바일 어플리케이션 개발하기 l 강정희 솔루션즈 아키텍트
AWS MobileHub와 AWS Amplify를 사용한 하이브리드 모바일 어플리케이션 개발하기 l 강정희 솔루션즈 아키텍트Amazon Web Services Korea
 
AWS 테크놀로지 파트너 프로그램 업데이트 (한승찬, 파트너 사업개발 담당 매니져, AWS) :: AWS TechShift 2018
AWS 테크놀로지 파트너 프로그램 업데이트 (한승찬, 파트너 사업개발 담당 매니져, AWS) :: AWS TechShift 2018AWS 테크놀로지 파트너 프로그램 업데이트 (한승찬, 파트너 사업개발 담당 매니져, AWS) :: AWS TechShift 2018
AWS 테크놀로지 파트너 프로그램 업데이트 (한승찬, 파트너 사업개발 담당 매니져, AWS) :: AWS TechShift 2018Amazon Web Services Korea
 
AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018
AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018
AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018Amazon Web Services Korea
 
GS Neotek aws_Amazon_CloudFrontDay2018_session5
GS Neotek aws_Amazon_CloudFrontDay2018_session5GS Neotek aws_Amazon_CloudFrontDay2018_session5
GS Neotek aws_Amazon_CloudFrontDay2018_session5GS Neotek
 
AWS 인공지능 서비스를 이용한 SAP 비즈니스 프로세스 자동화 (이상규, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 인공지능 서비스를 이용한 SAP 비즈니스 프로세스 자동화 (이상규, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 인공지능 서비스를 이용한 SAP 비즈니스 프로세스 자동화 (이상규, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 인공지능 서비스를 이용한 SAP 비즈니스 프로세스 자동화 (이상규, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
 
왜 우리는 마이크로서비스를 구현하고자 하는가?::김민성,이준희::AWS Summit Seoul 2018
왜 우리는 마이크로서비스를 구현하고자 하는가?::김민성,이준희::AWS Summit Seoul 2018왜 우리는 마이크로서비스를 구현하고자 하는가?::김민성,이준희::AWS Summit Seoul 2018
왜 우리는 마이크로서비스를 구현하고자 하는가?::김민성,이준희::AWS Summit Seoul 2018Amazon Web Services Korea
 
AWS Amplify를 통한 손쉬운 모바일 애플리케이션 개발하기 - 김필중 솔루션즈 아키텍트, AWS :: AWS Summit Seoul ...
AWS Amplify를 통한 손쉬운 모바일 애플리케이션 개발하기 - 김필중 솔루션즈 아키텍트, AWS :: AWS Summit Seoul ...AWS Amplify를 통한 손쉬운 모바일 애플리케이션 개발하기 - 김필중 솔루션즈 아키텍트, AWS :: AWS Summit Seoul ...
AWS Amplify를 통한 손쉬운 모바일 애플리케이션 개발하기 - 김필중 솔루션즈 아키텍트, AWS :: AWS Summit Seoul ...Amazon Web Services Korea
 
개발자를 위한 클라우드 기술 트렌드- 윤석찬, AWS 테크에반젤리스트 :: Hello T 개발자 컨퍼런스
개발자를 위한 클라우드 기술 트렌드- 윤석찬, AWS 테크에반젤리스트 :: Hello T 개발자 컨퍼런스개발자를 위한 클라우드 기술 트렌드- 윤석찬, AWS 테크에반젤리스트 :: Hello T 개발자 컨퍼런스
개발자를 위한 클라우드 기술 트렌드- 윤석찬, AWS 테크에반젤리스트 :: Hello T 개발자 컨퍼런스Amazon Web Services Korea
 
하이퍼커넥트에서 자동 광고 측정 서비스 구현하기 - PyCon Korea 2018
하이퍼커넥트에서 자동 광고 측정 서비스 구현하기 - PyCon Korea 2018하이퍼커넥트에서 자동 광고 측정 서비스 구현하기 - PyCon Korea 2018
하이퍼커넥트에서 자동 광고 측정 서비스 구현하기 - PyCon Korea 2018승호 박
 
클라우드 세상에서 살아남기 (2) “진화의시작: 인프라 엔지니어에서 Ops 엔지니어로”::이한주::AWS Summit Seoul 2018
클라우드 세상에서 살아남기 (2) “진화의시작: 인프라 엔지니어에서 Ops 엔지니어로”::이한주::AWS Summit Seoul 2018클라우드 세상에서 살아남기 (2) “진화의시작: 인프라 엔지니어에서 Ops 엔지니어로”::이한주::AWS Summit Seoul 2018
클라우드 세상에서 살아남기 (2) “진화의시작: 인프라 엔지니어에서 Ops 엔지니어로”::이한주::AWS Summit Seoul 2018Amazon Web Services Korea
 
Radware ADC Solution
Radware ADC SolutionRadware ADC Solution
Radware ADC Solutionradwarekorea
 
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
 
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Amazon Web Services Korea
 
분석 워크로드 마이그레이션의 모든 것-김기영, AWS Analytics Specialist SA / 김성일, AWS Analytics Sp...
분석 워크로드 마이그레이션의 모든 것-김기영, AWS Analytics Specialist SA / 김성일, AWS Analytics Sp...분석 워크로드 마이그레이션의 모든 것-김기영, AWS Analytics Specialist SA / 김성일, AWS Analytics Sp...
분석 워크로드 마이그레이션의 모든 것-김기영, AWS Analytics Specialist SA / 김성일, AWS Analytics Sp...Amazon Web Services Korea
 

Similar a 카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개 (20)

AWS All-in 그리고 그 이후::김승철,이성익,최홍식::AWS Summit Seoul 2018
AWS All-in 그리고 그 이후::김승철,이성익,최홍식::AWS Summit Seoul 2018AWS All-in 그리고 그 이후::김승철,이성익,최홍식::AWS Summit Seoul 2018
AWS All-in 그리고 그 이후::김승철,이성익,최홍식::AWS Summit Seoul 2018
 
하이브리드 모바일 어플리케이션 개발을 위한 새로운 도구, AWS Amplify (강정희, AWS 솔루션즈 아키텍트) :: AWS DevDa...
하이브리드 모바일 어플리케이션 개발을 위한 새로운 도구, AWS Amplify (강정희, AWS 솔루션즈 아키텍트) :: AWS DevDa...하이브리드 모바일 어플리케이션 개발을 위한 새로운 도구, AWS Amplify (강정희, AWS 솔루션즈 아키텍트) :: AWS DevDa...
하이브리드 모바일 어플리케이션 개발을 위한 새로운 도구, AWS Amplify (강정희, AWS 솔루션즈 아키텍트) :: AWS DevDa...
 
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
고급 서버리스 앱 개발 자세히 살펴보기::김필중:: AWS Summit Seoul 2018
 
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018 서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
서버리스 웹 애플리케이션 구축 방법론::김현수:: AWS Summit Seoul 2018
 
Bespin global(베스핀글로벌) aws summit seoul 0415
Bespin global(베스핀글로벌) aws summit seoul 0415Bespin global(베스핀글로벌) aws summit seoul 0415
Bespin global(베스핀글로벌) aws summit seoul 0415
 
AWS MobileHub와 AWS Amplify를 사용한 하이브리드 모바일 어플리케이션 개발하기 l 강정희 솔루션즈 아키텍트
AWS MobileHub와 AWS Amplify를 사용한 하이브리드 모바일 어플리케이션 개발하기 l 강정희 솔루션즈 아키텍트AWS MobileHub와 AWS Amplify를 사용한 하이브리드 모바일 어플리케이션 개발하기 l 강정희 솔루션즈 아키텍트
AWS MobileHub와 AWS Amplify를 사용한 하이브리드 모바일 어플리케이션 개발하기 l 강정희 솔루션즈 아키텍트
 
AWS 테크놀로지 파트너 프로그램 업데이트 (한승찬, 파트너 사업개발 담당 매니져, AWS) :: AWS TechShift 2018
AWS 테크놀로지 파트너 프로그램 업데이트 (한승찬, 파트너 사업개발 담당 매니져, AWS) :: AWS TechShift 2018AWS 테크놀로지 파트너 프로그램 업데이트 (한승찬, 파트너 사업개발 담당 매니져, AWS) :: AWS TechShift 2018
AWS 테크놀로지 파트너 프로그램 업데이트 (한승찬, 파트너 사업개발 담당 매니져, AWS) :: AWS TechShift 2018
 
AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018
AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018
AWS를 활용한 다양한 DB 마이그레이션 및 게임 엔진 서버 구축 방법::맹상영 대표, 엔클라우드24::AWS Summit Seoul 2018
 
GS Neotek aws_Amazon_CloudFrontDay2018_session5
GS Neotek aws_Amazon_CloudFrontDay2018_session5GS Neotek aws_Amazon_CloudFrontDay2018_session5
GS Neotek aws_Amazon_CloudFrontDay2018_session5
 
AWS 인공지능 서비스를 이용한 SAP 비즈니스 프로세스 자동화 (이상규, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 인공지능 서비스를 이용한 SAP 비즈니스 프로세스 자동화 (이상규, AWS 솔루션즈 아키텍트) :: AWS DevDay2018AWS 인공지능 서비스를 이용한 SAP 비즈니스 프로세스 자동화 (이상규, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
AWS 인공지능 서비스를 이용한 SAP 비즈니스 프로세스 자동화 (이상규, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
발표자료
발표자료 발표자료
발표자료
 
왜 우리는 마이크로서비스를 구현하고자 하는가?::김민성,이준희::AWS Summit Seoul 2018
왜 우리는 마이크로서비스를 구현하고자 하는가?::김민성,이준희::AWS Summit Seoul 2018왜 우리는 마이크로서비스를 구현하고자 하는가?::김민성,이준희::AWS Summit Seoul 2018
왜 우리는 마이크로서비스를 구현하고자 하는가?::김민성,이준희::AWS Summit Seoul 2018
 
AWS Amplify를 통한 손쉬운 모바일 애플리케이션 개발하기 - 김필중 솔루션즈 아키텍트, AWS :: AWS Summit Seoul ...
AWS Amplify를 통한 손쉬운 모바일 애플리케이션 개발하기 - 김필중 솔루션즈 아키텍트, AWS :: AWS Summit Seoul ...AWS Amplify를 통한 손쉬운 모바일 애플리케이션 개발하기 - 김필중 솔루션즈 아키텍트, AWS :: AWS Summit Seoul ...
AWS Amplify를 통한 손쉬운 모바일 애플리케이션 개발하기 - 김필중 솔루션즈 아키텍트, AWS :: AWS Summit Seoul ...
 
개발자를 위한 클라우드 기술 트렌드- 윤석찬, AWS 테크에반젤리스트 :: Hello T 개발자 컨퍼런스
개발자를 위한 클라우드 기술 트렌드- 윤석찬, AWS 테크에반젤리스트 :: Hello T 개발자 컨퍼런스개발자를 위한 클라우드 기술 트렌드- 윤석찬, AWS 테크에반젤리스트 :: Hello T 개발자 컨퍼런스
개발자를 위한 클라우드 기술 트렌드- 윤석찬, AWS 테크에반젤리스트 :: Hello T 개발자 컨퍼런스
 
하이퍼커넥트에서 자동 광고 측정 서비스 구현하기 - PyCon Korea 2018
하이퍼커넥트에서 자동 광고 측정 서비스 구현하기 - PyCon Korea 2018하이퍼커넥트에서 자동 광고 측정 서비스 구현하기 - PyCon Korea 2018
하이퍼커넥트에서 자동 광고 측정 서비스 구현하기 - PyCon Korea 2018
 
클라우드 세상에서 살아남기 (2) “진화의시작: 인프라 엔지니어에서 Ops 엔지니어로”::이한주::AWS Summit Seoul 2018
클라우드 세상에서 살아남기 (2) “진화의시작: 인프라 엔지니어에서 Ops 엔지니어로”::이한주::AWS Summit Seoul 2018클라우드 세상에서 살아남기 (2) “진화의시작: 인프라 엔지니어에서 Ops 엔지니어로”::이한주::AWS Summit Seoul 2018
클라우드 세상에서 살아남기 (2) “진화의시작: 인프라 엔지니어에서 Ops 엔지니어로”::이한주::AWS Summit Seoul 2018
 
Radware ADC Solution
Radware ADC SolutionRadware ADC Solution
Radware ADC Solution
 
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
Java 엔터프라이즈 어플리케이션을 효과적으로 마이크로서비스로 전환하기 (박선용, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
서버리스 앱 배포 자동화 (김필중, AWS 솔루션즈 아키텍트) :: AWS DevDay2018
 
분석 워크로드 마이그레이션의 모든 것-김기영, AWS Analytics Specialist SA / 김성일, AWS Analytics Sp...
분석 워크로드 마이그레이션의 모든 것-김기영, AWS Analytics Specialist SA / 김성일, AWS Analytics Sp...분석 워크로드 마이그레이션의 모든 것-김기영, AWS Analytics Specialist SA / 김성일, AWS Analytics Sp...
분석 워크로드 마이그레이션의 모든 것-김기영, AWS Analytics Specialist SA / 김성일, AWS Analytics Sp...
 

Más de if kakao

바닥부터 시작하는 Vue 테스트와 리팩토링
바닥부터 시작하는 Vue 테스트와 리팩토링바닥부터 시작하는 Vue 테스트와 리팩토링
바닥부터 시작하는 Vue 테스트와 리팩토링if kakao
 
카카오커머스를 지탱하는 Angular
카카오커머스를 지탱하는 Angular카카오커머스를 지탱하는 Angular
카카오커머스를 지탱하는 Angularif kakao
 
프렌즈타임 웹앱 삽질기
프렌즈타임 웹앱 삽질기프렌즈타임 웹앱 삽질기
프렌즈타임 웹앱 삽질기if kakao
 
카프카 기반의 대규모 모니터링 플랫폼 개발이야기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기카프카 기반의 대규모 모니터링 플랫폼 개발이야기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기if kakao
 
TOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryTOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryif kakao
 
딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식if kakao
 
딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅if kakao
 
눈으로 듣는 음악 추천 시스템
눈으로 듣는 음악 추천 시스템눈으로 듣는 음악 추천 시스템
눈으로 듣는 음악 추천 시스템if kakao
 
Keynote / 2018
Keynote / 2018Keynote / 2018
Keynote / 2018if kakao
 
카카오 봇 플랫폼 소개
카카오 봇 플랫폼 소개카카오 봇 플랫폼 소개
카카오 봇 플랫폼 소개if kakao
 
다음웹툰의 UX(Animation, Transition, Custom View)
다음웹툰의 UX(Animation, Transition, Custom View)다음웹툰의 UX(Animation, Transition, Custom View)
다음웹툰의 UX(Animation, Transition, Custom View)if kakao
 
모바일 게임플랫폼과 인프라 구축 경험기
모바일 게임플랫폼과 인프라 구축 경험기모바일 게임플랫폼과 인프라 구축 경험기
모바일 게임플랫폼과 인프라 구축 경험기if kakao
 
카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기if kakao
 
다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기if kakao
 
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례if kakao
 
액티브X 없는 블록체인 기반 PKI 시스템
액티브X 없는 블록체인 기반 PKI 시스템액티브X 없는 블록체인 기반 PKI 시스템
액티브X 없는 블록체인 기반 PKI 시스템if kakao
 
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain PlatformKlaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platformif kakao
 
Kakao Cloud Native Platform, 9rum
Kakao Cloud Native Platform, 9rumKakao Cloud Native Platform, 9rum
Kakao Cloud Native Platform, 9rumif kakao
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우if kakao
 
스프링5 웹플럭스와 테스트 전략
스프링5 웹플럭스와 테스트 전략스프링5 웹플럭스와 테스트 전략
스프링5 웹플럭스와 테스트 전략if kakao
 

Más de if kakao (20)

바닥부터 시작하는 Vue 테스트와 리팩토링
바닥부터 시작하는 Vue 테스트와 리팩토링바닥부터 시작하는 Vue 테스트와 리팩토링
바닥부터 시작하는 Vue 테스트와 리팩토링
 
카카오커머스를 지탱하는 Angular
카카오커머스를 지탱하는 Angular카카오커머스를 지탱하는 Angular
카카오커머스를 지탱하는 Angular
 
프렌즈타임 웹앱 삽질기
프렌즈타임 웹앱 삽질기프렌즈타임 웹앱 삽질기
프렌즈타임 웹앱 삽질기
 
카프카 기반의 대규모 모니터링 플랫폼 개발이야기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기카프카 기반의 대규모 모니터링 플랫폼 개발이야기
카프카 기반의 대규모 모니터링 플랫폼 개발이야기
 
TOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor libraryTOROS N2 - lightweight approximate Nearest Neighbor library
TOROS N2 - lightweight approximate Nearest Neighbor library
 
딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식딥러닝을 이용한 얼굴 인식
딥러닝을 이용한 얼굴 인식
 
딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅딥러닝을 활용한 뉴스 메타 태깅
딥러닝을 활용한 뉴스 메타 태깅
 
눈으로 듣는 음악 추천 시스템
눈으로 듣는 음악 추천 시스템눈으로 듣는 음악 추천 시스템
눈으로 듣는 음악 추천 시스템
 
Keynote / 2018
Keynote / 2018Keynote / 2018
Keynote / 2018
 
카카오 봇 플랫폼 소개
카카오 봇 플랫폼 소개카카오 봇 플랫폼 소개
카카오 봇 플랫폼 소개
 
다음웹툰의 UX(Animation, Transition, Custom View)
다음웹툰의 UX(Animation, Transition, Custom View)다음웹툰의 UX(Animation, Transition, Custom View)
다음웹툰의 UX(Animation, Transition, Custom View)
 
모바일 게임플랫폼과 인프라 구축 경험기
모바일 게임플랫폼과 인프라 구축 경험기모바일 게임플랫폼과 인프라 구축 경험기
모바일 게임플랫폼과 인프라 구축 경험기
 
카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기카카오뱅크 모바일앱 개발 이야기
카카오뱅크 모바일앱 개발 이야기
 
다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기다음 모바일 첫 화면 개선기
다음 모바일 첫 화면 개선기
 
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
글로벌 게임 플랫폼에서 무정지, 무점검 서버 개발과 운영 사례
 
액티브X 없는 블록체인 기반 PKI 시스템
액티브X 없는 블록체인 기반 PKI 시스템액티브X 없는 블록체인 기반 PKI 시스템
액티브X 없는 블록체인 기반 PKI 시스템
 
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain PlatformKlaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
Klaytn: Service-Oriented Enterprise-Grade Public Blockchain Platform
 
Kakao Cloud Native Platform, 9rum
Kakao Cloud Native Platform, 9rumKakao Cloud Native Platform, 9rum
Kakao Cloud Native Platform, 9rum
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
 
스프링5 웹플럭스와 테스트 전략
스프링5 웹플럭스와 테스트 전략스프링5 웹플럭스와 테스트 전략
스프링5 웹플럭스와 테스트 전략
 

카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개

  • 1. 카카오 광고 플랫폼 MSA 적용사례 (API Gateway 도입과 인증 구현) 황민호(robin.hwang) DSP개발파트
  • 3. 카카오 광고 플랫폼 (Moment) 노출 지면은 지속적으로 확대 예정입니다 카카오 이용자가 있는 곳이라면 어디든 찾아가서 광고를 노출합니다. 카카오 서비스를 비롯한 주요 네트워크 지면에 노출 됩니다.
  • 4. 카카오 광고 플랫폼 (Moment) 카카오 광고 플랫폼은 광고 등록부터 광고 성과 분석까지 가능한 원스탑 시스템입니다 카카오 광고 플랫폼은 광고 목적 최적화를 지원합니다 카카오 광고 플랫폼은 오디언스 타겟팅을 지원합니다 캠페인 광고 목적 선택 광고그룹 타겟팅 설정 예산 설정 광고 노출 심사 완료 시 보고서 광고 성과 분석 소재 광고 소재 등록
  • 5. 디지털 광고 시스템 SUPPLY SIDE
 Platform AUDIENCE AD INVESTMENT DSP DSP SSP AD EXCHANGE SSP SSP DATA EXCHANGE / DATA LAKE / DMP Header Bidding DEMAND SIDE
 Platform Advertiser Agency . Publisher DSP ,
  • 6. 카카오 광고 DSP Moment Agency Admin Review , 광고주를 위한 서비스 광고 등록 및 정산 보고서 등 대행사를 위한 서비스 광고계정 영업권 관리 등 광고 플랫폼 관리 광고 소재 심사 광고주 . 대행사 3 관리자 4 심사자
  • 7. 카카오 광고 DSP Moment Agency Admin Review Ad Server Billing Report Ranking Targeting API Server Related Support Aggregation
  • 8. 카카오 광고 DSP Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search API Server Related Support RabbitMQ MySQL Kakao Auth
  • 9. 카카오 광고 DSP Moment Agency Admin Review Aggregation Billing Report API Server Related Support A
 P I
 G
 A T E W A Y Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search RabbitMQ MySQL Kakao Auth Ad Server
  • 13. AWS API Gateway API Gateway ZUUL API Gateway
  • 14. AWS API Gateway API Gateway API Gateway 선택 Spring Cloud Services Spring Cloud ZUUL Spring Framework Simple Netflix ZUUL
  • 15. AWS API Gateway API Gateway 선택 ZUUL
  • 16. Netflix OSS (Open Source Software center) image : http://lucasmatt.com/2017/08/22/spring-microservices/
  • 17. Spring Cloud with Netflix OSS Service A Hystrix RibbonEureka Feign Gateway Hystrix RibbonEureka Zuul OAuth2 Service Discovery Eureka Monitor Service Dashboard Routing Proxy Zuul Client Trace Service zipkin Config Service Spring-Config Rest Client Feign Load Balancing Ribbon Circuit Breaker Hystrix Cloud BusCloud StreamCloud SecurityOAuth2 Service A Hystrix RibbonEureka Feign Service A Hystrix RibbonEureka Feign Service B Hystrix RibbonEureka Feign Service B Hystrix RibbonEureka Feign Service B Hystrix RibbonEureka Feign
  • 18. 그렇다면.. 카카오 광고 DSP 구성은? Moment Agency Admin Review , 광고주 . 대행사 3 관리자 4 심사자
  • 19. Review Admin Agency Moment 그렇다면.. 카카오 광고 DSP 구성은? Moment Agency Admin Review API GATEWAY (Zuul) L7 L7 L7 L7 zuul: routes: moment: url: http://moment-api:8080 agency: url: http://agency-api:8080 admin: url: http://admin-api:8080 review: url: http://review-api:8080 application.yml , 광고주 . 대행사 3 관리자 4 심사자
  • 20. Review Admin Agency Moment 그렇다면.. 카카오 광고 DSP 구성은? Moment Agency Admin Review API GATEWAY (Zuul) L7 L7 L7 L7 Review AggregationL7 zuul: routes: moment: url: http://moment-api:8080 agency: url: http://agency-api:8080 admin: url: http://admin-api:8080 review: url: http://review-api:8080 application.yml aggregation: url: http://aggregation-api:8080 , 광고주 . 대행사 3 관리자 4 심사자
  • 21. 잘 돌아가던 어느날.. (구성이 뭔가 빈약하긴 하지만) 서비스 장애
  • 22. 서비스 장애 원인 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL
  • 23. 서비스 장애 원인 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL
  • 24. 서비스 장애 원인 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL OOM발생
  • 25. 서비스 장애 원인 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL OOM발생 Timeout
  • 26. 서비스 장애 원인 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL OOM발생 Timeout
  • 27. 서비스 장애 원인 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL OOM발생 Timeout Connection 증가
  • 28. 서비스 장애 원인 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL RestTemplate connection timeout : 5 sec read timeout : 10 sec connection request timeout : 0 (default) OOM발생 Timeout Connection 증가
  • 29. 서비스 장애 원인 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL RestTemplate connection timeout : 5 sec read timeout : 10 sec connection request timeout : 0 (default) -> 5 sec OOM발생 Timeout Connection 증가
  • 30. Circuit Breaker(Hystrix) 적용 image : http://lucasmatt.com/2017/08/22/spring-microservices/
  • 31. Circuit Breaker(Hystrix) 적용 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL H Y S T R I X
  • 32. Circuit Breaker(Hystrix) 적용 Moment Agency Admin Review Aggregation Ad Server Billing Report Batch Notification Ranking Targeting Plus Friends CTS Tenth Hadoop Elastic Search Kakao Account API Server Related Support G
 A T E W A Y RabbitMQ MySQL H Y S T R I X Isolation Circuit Open!
  • 33. Eureka와 Ribbon은? image : http://lucasmatt.com/2017/08/22/spring-microservices/
  • 34. G
 A T E W A Y Review Admin Agency Moment Hystrix + Ribbon 구성 Moment Agency Admin Review Ribbon Ribbon Ribbon Ribbon Review AggregationRibbon zuul: routes: moment: path: /moment/** serviceId: moment agency: path: /agency/** serviceId: agency moment: ribbon: listOfServices: http://moment- api-01:8080, http://moment-api-02:8080,.. agency: ribbon: listOfServices: http://agency-api-01:8080, http://agency-api-02:8080,.. application.yml ribbon: eureka: enabled: false H Y S T R I X
  • 35. G
 A T E W A Y Review Admin Agency Moment Hystrix + Ribbon 구성 Moment Agency Admin Review Ribbon Ribbon Ribbon Ribbon Review AggregationRibbon zuul: threadPool: useSeparateThreadPools: true ribbonIsolationStrategy: THREAD hystrix: threadpool: default: coreSize: 10 maximumSize: 20 command: default: circuitBreaker: requestVolumeThreshold: 10 errorThresholdPercentage: 50 moment: circuitBreaker: requestVolumeThreshold: 20 errorThresholdPercentage: 50 application.yml H Y S T R I X metrics.rollingStats.timeInMilliseconds : 감시 시간, 기본값 10초 circuitBreaker.requestVolumeThreshold : 감시 시간 내 요청 수, 기본값 20 circuitBreaker.errorThresholdPercentage : 요청 대비 오류율, 기본값 50 10초이내에 발생한 요청 20번 동안 50% 오류 발생시 Circuit을 Open
  • 36. 서버 내리니까 에러나는데..? 유레카 없이 로드 밸런싱 안된건가?
  • 37. G
 A T E W A Y Review Admin Agency Moment Hystrix + Ribbon 구성 Moment Agency Admin Review Ribbon Ribbon Ribbon Ribbon Review AggregationRibbon H Y S T R I X
  • 38. G
 A T E W A Y Review Admin Agency Moment Hystrix + Ribbon 구성 Moment Agency Admin Review Ribbon Ribbon Ribbon Ribbon Review AggregationRibbon H Y S T R I X
  • 39. G
 A T E W A Y Review Admin Agency Moment Hystrix + Ribbon 구성 Moment Agency Admin Review Ribbon Ribbon Ribbon Ribbon Review AggregationRibbon H Y S T R I X
  • 40. G
 A T E W A Y Review Admin Agency Moment Hystrix + Ribbon 구성 Moment Agency Admin Review Ribbon Ribbon Ribbon Ribbon Review AggregationRibbon H Y S T R I X
  • 41. G
 A T E W A Y Review Admin Agency Moment Hystrix + Ribbon 구성 Moment Agency Admin Review Ribbon Ribbon Ribbon Ribbon Review AggregationRibbon ????? H Y S T R I X
  • 42. G
 A T E W A Y Moment Ribbon - Load Balancing & Fault tolerance Moment Ribbon H Y S T R I X
  • 43. G
 A T E W A Y Ribbon - Load Balancing & Fault tolerance Ribbon Default: Round Robin API 3 API 2 API 1 API 4 H Y S T R I X
  • 44. G
 A T E W A Y Ribbon - Load Balancing & Fault tolerance Ribbon Default: Round Robin API 3 API 2 API 1 API 4 H Y S T R I X
  • 45. G
 A T E W A Y API 3 Ribbon - Load Balancing & Fault tolerance API 2 Ribbon API 1 API 4 Default: Round Robin circuit open! timeout Exception??H Y S T R I X
  • 46. G
 A T E W A Y API 3 Ribbon - Load Balancing & Fault tolerance API 2 Ribbon API 1 API 4 Default: Round Robin circuit open! timeout Exception??H Y S T R I X
  • 47. Ribbon - Load Balancing & Fault tolerance RibbonHYSTRIX timeout (읽기시간 + 커넥션시간) * 재시도횟수 * 재시도 서버수 moment: ribbon: MaxAutoRetries: 1 # Retry 횟수 MaxAutoRetriesNextServer: 1 # Retry할 (다음) 서버 수 OkToRetryOnAllOperations: true # 모든 operation에 retry 유무 ServerListRefreshInterval: 2000 # 서버 갱신 시간 ConnectTimeout: 3000 # connection timeout ReadTimeout: 3000 # read timeout listOfServers: execution: isolation: thread: timeoutInMilliseconds: 1000 ribbonTimeout = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1) > timeout
  • 48. Ribbon - Load Balancing & Fault tolerance RibbonHYSTRIX timeout (읽기시간 + 커넥션시간) * 재시도횟수 * 재시도 서버수 moment: ribbon: MaxAutoRetries: 0 # Retry 횟수 MaxAutoRetriesNextServer: 0 # Retry할 (다음) 서버 수 OkToRetryOnAllOperations: true # 모든 operation에 retry 유무 ServerListRefreshInterval: 2000 # 서버 갱신 시간 ConnectTimeout: 1000 # connection timeout ReadTimeout: 2000 # read timeout listOfServers: execution: isolation: thread: timeoutInMilliseconds: 5000 ribbonTimeout = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1) > timeout 해결안됨
  • 49. Ribbon - Load Balancing & Fault tolerance RibbonHYSTRIX timeout (읽기시간 + 커넥션시간) * 재시도횟수 * 재시도 서버수 ribbonTimeout = (ribbonReadTimeout + ribbonConnectTimeout) * (maxAutoRetries + 1) * (maxAutoRetriesNextServer + 1) > timeout moment: ribbon: MaxAutoRetries: 1 # Retry 횟수 MaxAutoRetriesNextServer: 1 # Retry할 (다음) 서버 수 OkToRetryOnAllOperations: true # 모든 operation에 retry 유무 ServerListRefreshInterval: 2000 # 서버 갱신 시간 ConnectTimeout: 3000 # connection timeout ReadTimeout: 3000 # read timeout listOfServers: execution: isolation: thread: timeoutInMilliseconds: 1000
  • 50. G
 A T E W A Y API 3 Ribbon - Load Balancing & Fault tolerance API 2 Ribbon H Y S T R I X API 1 API 4 Load Balancer moment: ribbon: listOfServers: ServerListRefreshInterval LoadBalancer는 Eureka를 사용중일 경우 서버 목록을 갱신하며 사용하지 않을 때는 property 파일의 서버 목록을 주기 적으로 갱신한다 이때 서버 상태를 체크하지 않음
  • 51. G
 A T E W A Y API 3 Ribbon - Load Balancing & Fault tolerance API 2 Ribbon H Y S T R I X API 1 API 4 Load Balancer moment: ribbon: listOfServers: ServerListRefreshInterval LoadBalancer는 Eureka를 사용중일 경우 서버 목록을 갱신하며 사용하지 않을 때는 property 파일의 서버 목록을 주기 적으로 갱신한다 이때 서버 상태를 체크하지 않음Ping 서버 목록을 주기적으로 Ping 을 날려서 리스트에서 제외시키는 별도의 작업을 수 행한다 NFLoadBalancerPingInterval (default 30 sec) 이때 default가 dummyPing 인데 isAlive( ) 에서 무조건 true로 리턴
  • 52. G
 A T E W A Y Ribbon - Load Balancing & Fault tolerance H Y S T R I X moment: ribbon: NFLoadBalancerPingClassName: com.kakao.dsp.ServerAlivePing NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule # round robin 방식을 기본으로 하되 서버가 현재 처리가능한 상태인지 체크(ping)한다 NFLoadBalancerPingInterval: 3 #sec import com.netflix.loadbalancer.PingUrl; public class ServerAlivePing extends PingUrl { @Override public String getPingAppendString() { return "/alive"; } } Dummy ping -> PingUrl Round Robin -> AvailabilityFilteringRule
  • 53. G
 A T E W A Y API 3 Ribbon - Load Balancing & Fault tolerance API 2 Ribbon API 1 API 4 Default: Round Robin 서버 목록 제외 H Y S T R I X
  • 54. G
 A T E W A Y API 3 Ribbon - Load Balancing & Fault tolerance API 2 Ribbon API 1 API 4 Default: Round Robin 서버 목록 제외 H Y S T R I X
  • 55. 서버 요청 제한은 어떻게 하지? Open API 도 만들어야 하는데...
  • 56. 2018.06 GA Release Filter Predicate Spring Flux Limit Rate Spring Cloud Non-Blocking Websocket support Spring Framework 5 2018.05 Release Netty Server Http/2 Protection Limit Rate Websocket support Origin Concurrency API Gateway ZUUL API Gateway ZUUL2 Spring Cloud Gateway Blocking API Servelet 2.5 Websocket not support
  • 57. API Spring Cloud Gateway - Rate Limit 예제 @Bean public RouteLocator myRoutes(RouteLocatorBuilder builder) { return builder.routes() .route(p -> p .path(“/api/**”) .filters(f -> f.requestRateLimiter(r -> { r.setRateLimiter(new RedisRateLimiter(10, 20)) }).uri(“http://moment.kakao.com/api”)) .build(); } // HTTP 429 - Too Many Requests https://en.wikipedia.org/wiki/Token_bucket Token_bucket redis-rate-limiter.replenishRate : drop없이 사용자당 처리 가능한 초당 요청 수 redis-rate-limiter.burstCapacity : 사용자당 허용된 초당 요청 수 (0이면 모두 블럭)
  • 58. Zuul Pre filter 라우팅 전 실행 logging 및 인증 등 처리 Routing Filter 요청에 대한 라우팅 처리 Post Filter 라우팅 후 실행 사용자 정의 헤더 추가/제거 통계 및 matrix 수집 Error Filter 에러 발생시 핸들링 Http ResponseHttp Request HTTP Request Pre Filter Routing Filter Post Filter Custom Filter API Servers Error Filter
  • 59. Netty Server Handlers Zuul2 Netty Handlers 네트워크 프로토콜, 웹서버, Connection 관리, 프록시 작업 Inbound Filter 요청을 proxy 하기전 처리 인증, 라우팅, Request 변경 등 Endpoint Filter 정적 응답 반환 요청을 백엔드 서비스로 프록시 Outbound Filter 응답이 반환된 후 실행 gziping, matrix 사용자 정의 헤더 추가/제거 ResponseRequest Internet Endpoint Filter API Servers Netty Client Handlers Outbound Filter Inbound Filter Inbound Filter Inbound Filter Outbound Filter Outbound Filter 기존 Zuul 과 유사한 구조, Netty 적용
  • 60. Spring Cloud Gateway Gateway Handler Mapping 경로와 일치하는지 판단 Gateway Web Handler 요청과 관련된 필터 체인을 통해 요청을 전송 Filter 필터는 프록시 요청이 보내지기 전후에 나뉘어서 로직 수행 Proxy Filter 프록시 요청이 처리될때 수행 Gateway Client Gateway Handler Mapping Proxied Service Gateway Web Handler Filter Filter Filter Proxy Filter Predicate Filter Predicat와 Filter로 모든 요청 처리
  • 61. Spring Cloud Gateway PredicateFactory After Before Between Cookie Header Host Remote Address Method Path Query spring: cloud: gateway: routes: - id: foo_route uri: lb://foo predicates: - After=2018-09-04T14:00:00.000+09:00[Asia/Seoul] - Cookie=chocolate, ch.p - Header=X-Request-Id, d+ - Host=**.foo.org - RemoteAddr=192.168.1.1/24 - Method=GET - Path=/foo/{segment} - Query=foo, ba - Query=baz - Cookie=chocolate, ch.p Spring WebFlux의 HandlerMapping 의 일부를 적용하여 라우팅을 표현 합니다
  • 62. Spring Cloud Gateway FilterFactory {Add|Remove}RequestHeader {Add|Remove}RequestParameter {Add|Remove}ResponseHeader SetStatus SetResponseHeader SecureHeaders PreserveHostHeader Hystrix RequestRateLimiter RedirectTo PrefixPath RewritePath SetPath StrixPrefix SaveSession spring: cloud: gateway: routes: - id: foo_route uri: lb://foo filters: - AddRequestHeader=X-Request-Foo, Bar - AddRequestParameter=foo, bar - AddResponseHeader=X-Response-Foo, Bar - SetStatus=401 - SetResponseHeader=X-Response-Foo, Bar - PreserveHostHeader - Hystrix=myCommandName - RequestRateLimiter=10, 50, userKeyResolver - RedirectTo=302, http://kakao.com - PrefixPath=/mypath - RewritePath=/consumingserviceendpoint, / backingserviceendpoint - SetPath=/{segment} - StripPrefix=2 - SaveSession 필터를 통해 HTTP 요청이나 응답 데이터를 필터링하여 수정합니다
  • 64. 마이크로 서비스 인증 및 권한 부여 방법 분산 세션 관리 세션 복제
 (Session Replication) 중앙 집중식 세션
 (Centralized Session Storage) 클라이언트 토큰 SSO (Single Sign-On) API게이트웨이를 통한 클라이언트 토큰 고정 세션관리
 (Sticky Session) 세션 VS 토큰
  • 65. 마이크로 서비스 인증 및 권한 부여 방법 분산 세션 관리 고정 세션관리
 (Sticky Session) 세션 복제
 (Session Replication) 중앙 집중식 세션
 (Centralized Session Storage) 클라이언트 토큰 SSO (Single Sign-On) API게이트웨이를 통한 클라이언트 토큰 서버 서버 특정 사용자의 모든 요청이 동일한 서버로 전송 로드 밸런서에 의해 강제 리로드시 모든 사용자 의 세션데이터가 손실되는 위험 존재
  • 66. 마이크로 서비스 인증 및 권한 부여 방법 분산 세션 관리 고정 세션관리
 (Sticky Session) 세션 복제
 (Session Replication) 중앙 집중식 세션
 (Centralized Session Storage) 클라이언트 토큰 SSO (Single Sign-On) API게이트웨이를 통한 클라이언트 토큰 서버 서버 각 인스턴스가 모든 세션 데이터를 저장하고 네트워크를 통해 동기화됨 인스턴스가 증가할 수록 많은 대역폭이 필요해짐
  • 67. 마이크로 서비스 인증 및 권한 부여 방법 분산 세션 관리 고정 세션관리
 (Sticky Session) 중앙 집중식 세션
 (Centralized Session Storage) 클라이언트 토큰 SSO (Single Sign-On) API게이트웨이를 통한 클라이언트 토큰 서버 서버 공유 세션 저장소에서 사용자 데이터를 엑세스 가용성과 확장성이 좋은편 세션 저장소에 대한 보호 매커니즘이 필요 세션 복제
 (Session Replication)
  • 68. 마이크로 서비스 인증 및 권한 부여 방법 분산 세션 관리 고정 세션관리
 (Sticky Session) 클라이언트 토큰 SSO (Single Sign-On) API게이트웨이를 통한 클라이언트 토큰 서버 서버 인증 정보를 사용자 브라우저에 저장 보통 쿠키 형태로 저장됨 위,변조가 불가하도록 암호화 필요 시스템마다 인증처리 필요 세션 복제
 (Session Replication) 중앙 집중식 세션
 (Centralized Session Storage)
  • 69. 마이크로 서비스 인증 및 권한 부여 방법 분산 세션 관리 고정 세션관리
 (Sticky Session) 클라이언트 토큰 SSO (Single Sign-On) API게이트웨이를 통한 클라이언트 토큰 서버 SSO
 서버 사용자는 한번 로그인 하면 다른 여러 시스템에 추가 인증프로세스 없이 접근 가능 유저가 접근시마다 SSO 서버와 상호 작용 필요 인증을 위한 반복적인 네트워크 트래픽을 사용 세션 복제
 (Session Replication) 중앙 집중식 세션
 (Centralized Session Storage)
  • 70. 마이크로 서비스 인증 및 권한 부여 방법 분산 세션 관리 고정 세션관리
 (Sticky Session) SSO (Single Sign-On) API게이트웨이를 통한 클라이언트 토큰 서버 서버 게이트웨이에서 인증정보 처리 위,변조가 불가하도록 암호화 필요 세션 복제
 (Session Replication) 중앙 집중식 세션
 (Centralized Session Storage) 클라이언트 토큰 Gate way
  • 71. 카카오 광고 플랫폼 (moment) 인증 분산 세션 관리 고정 세션관리
 (Sticky Session) SSO (Single Sign-On) API게이트웨이를 통한 클라이언트 토큰 세션 복제
 (Session Replication) 중앙 집중식 세션
 (Centralized Session Storage) 클라이언트 토큰 G
 A T E W A Y Admin Agency Moment Aggregation Billing Report
  • 72. 카카오 광고 플랫폼 (moment) 인증 Admin Agency Moment Aggregation Billing Report G
 A T E W A Y 로그인 F R O N T Kakao Account /login/moment cookie JWT 광고계정 생성 POST /moment/adAccounts
  • 73. JWT (JSON Web Token) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG 9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
  • 74. JWT (JSON Web Token) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG 9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c base64enc({ “alg”: “HS256”, “typ”: “JWT” }) Header
  • 75. JWT (JSON Web Token) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG 9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c base64enc({ “alg”: “HS256”, “typ”: “JWT” }) Header base64enc({ “key1”: “value1”, “key2”: “value2”, “exp”: “1426420800” }) Payload
  • 76. JWT (JSON Web Token) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG 9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c base64enc({ “alg”: “HS256”, “typ”: “JWT” }) Header base64enc({ “key1”: “value1”, “key2”: “value2”, “exp”: “1426420800” }) Payload HMACSHA256({ base64enc(header) + ‘.’ + base64enc(payload) , secretKey }) Signature
  • 77. JWT (JSON Web Token) 수평으로 쉽게 확장 가능 세션방식의 인증의 경우 중앙 
 세션 스토리지 시스템이 필요함, Sticky session방식은 비용증대 유지 보수 및 디버그 용이 Base64 방식으로 데이터 인코딩되 어 웹 토큰 자체에 포함됨 RESTful 서비스에 적합 쿠키방식의 경우 쿠키의 출처가 된 도메인에 대해서만 사용할 수 있는 단점 해소 보안성 암호화 알고리즘으로 암호화하여 
 클라이언트 변조를 막음 특정IP 주소로 JWT발행 및 브라우 저 핑거 프린팅 등을 사용하여 토큰 탈취에 따른 보안 강화 토큰 자체 만료시간 기술 토큰 만료시간을 미리 알고 갱신 요청을 할 수 있음 JSON Web Token은 디지털 서명을 통해 확인하고 신뢰할 수 있는 정보를 보내는데 사용됩니다.
  • 78. 카카오 광고 플랫폼 (moment) 인증 Admin Agency Moment Aggregation Billing Report G
 A T E W A Y 로그인 F R O N T Kakao Account /login/moment cookie JWT 광고계정 생성 POST /moment/adAccounts
  • 79. 카카오 광고 플랫폼 (moment) 인증 Access Refresh Refresh Token Access Token • 자원에 직접 Access하는데 필요한 정보를 포함 • 클라이언트의 권한 부여 여부를 판단 • 만료날짜가 있으며 토큰 수명이 짧음 • Access Token을 재발급 하는데 필요한 정보를 포함 • 만료될 수 있으며 일반적으로 오랜기간 사용됨 • 누출되지 않도록 엄격한 관리가 필요함 • 발급된 IP 기준으로 제한을 두거나 브라우저 핑거프린터 정보등을 통해 
 유효성 확인 필요 . ,
  • 80. 카카오 광고 플랫폼 (moment) 인증 Access Refresh Refresh Token Access Token • ID • 서비스Type • 사용자정보 • 광고계정ID • 권한 정보 • 생성시간 • 만료시간 • ID • 서비스Type • IP정보 • 생성시간 • 만료시간 . , Admin Agency Moment Aggregation Billing Report G
 A T E W A Y Gateway에서 header 로 변환해서 처리
  • 81. 카카오 광고 플랫폼 (moment) 인가 리소스 서버 리소스 서버 인증서버 G
 A T E W A Y 인증요청 권한부여 role={member} role={member} 응답 권한없음 일반적으로는 별도 인증서버를 통해 권한을 획득하고, 리소스 서버에서 권한 체크를 한다
  • 82. 카카오 광고 플랫폼 (moment) 인가 리소스 서버 리소스 서버 인증서버 G
 A T E W A Y 인증요청 권한부여 role={member} 보고서 조회 role={member} 멤버 승인 응답 권한없음 카카오 광고 플랫폼에서는 게이트웨이에서 권한을 통합관리 하고 있음 보고서 조회 응답
  • 83. 카카오 광고 플랫폼 (moment) 인가 Gateway에서 권한은 알아서 해주세요 1. 서비스별 권한 정의 2. API 서버들 URL PATH 수집 3. 수집된 URL PATH별로 Spring Security에 권한 맵핑 실행 고민 1. 계속 추가되는 API, 계속 변경되는 권한을 계속 적용해야 하나? (Resource 소유권 혹은 Resource Boundary 체크는 Gateway에서 힘듬) 2. Gateway에서 인증정보를 전부 알고 있어야 하나?
  • 84. 로그아웃 했는데도 ...? JWT 특성상 자체 만료시간이 기술되어 있으므로 강제 무효화가 안됨
  • 85. API게이트웨이를 통한 클라이언트 토큰 Resource Server Auth ServerAPI GatewayUser Authenticates with Auth Server Forward Generate JWT Grant JWT Translate to opaque token and save Grant opaque token Request Access With opaque token Translate to Auth token Forward Access with Auth Token Valid Auth Token Return Resource Logout with opaque Token Remove opaque token AccessToken 무효화 => JWT 관리 및 opaque token 고려중
  • 86. Q&A