ํ๋ฆ„ ๋ณ€์ˆ˜ ์ฐธ์กฐ

์ด ํŽ˜์ด์ง€๋Š” Apigee ๋ฐ Apigee Hybrid์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Apigee Edge ๋ฌธ์„œ ๋ณด๊ธฐ

์ด ์„น์…˜์—์„œ๋Š” ํ๋ฆ„ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ฐธ์กฐ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Apigee๋Š” ๋‹ค์Œ ํ๋ฆ„ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

apigee                 is                       request
apiproduct             loadbalancing            response
apiproxy               message                  route
client                 messageid                servicecallout
current                mint                     system
environment            organization             target
error                  proxy                    variable
fault                  publishmessage           
graphql                ratelimit                

๋‹ค์Œ ์„น์…˜์—์„œ ๊ฐ ๋ณ€์ˆ˜๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

apigee

์ •์ฑ…์˜ ์‹คํ–‰ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋„์šฐ๋ฏธ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” apigee ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
apigee.metrics.policy.policy_name.timeTaken ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ ์ •์ฑ… ์‹คํ–‰์— ์†Œ์š”๋œ ์‹œ๊ฐ„(๋‚˜๋…ธ์ดˆ)์ž…๋‹ˆ๋‹ค. ์ •์ฑ…

apiproduct

API ์ œํ’ˆ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋„์šฐ๋ฏธ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” apiproduct ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
apiproduct.operation ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

API ์ œํ’ˆ ์ž‘์—…์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” ํ• ๋‹น๋Ÿ‰ ์ •์ฑ…์˜ ์„ค์ • ๋ฐ API ์ œํ’ˆ ์ž‘์—…์˜ ํ• ๋‹น๋Ÿ‰ ์„ค์ •์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด my-operation์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
apiproduct.operation.resource ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ž‘์—…์˜ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
apiproduct.operation.methods ๋ฐฐ์—ด ์ฝ๊ธฐ ์ „์šฉ

์ผ์น˜ํ•˜๋Š” ์ž‘์—…์ด ํ—ˆ์šฉํ•˜๋Š” HTTP ๋ฉ”์„œ๋“œ์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
apiproduct.operation.attributes.key_name ๋ฐฐ์—ด ์ฝ๊ธฐ ์ „์šฉ

key_name์™€ ์ผ์น˜ํ•˜๋Š” ๋งž์ถค ์†์„ฑ ๊ฐ’์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

apiproxy

API ํ”„๋ก์‹œ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” apiproxy ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
apiproxy.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ API ํ”„๋ก์‹œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด My Proxy์ž…๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์š”์ฒญ
apiproxy.revision ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ API ํ”„๋ก์‹œ์˜ ๋ฒ„์ „ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 6์ž…๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์š”์ฒญ
apiproxy.basepath ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ๋ฐฐํฌ ๊ธฐ๋ณธ ๊ฒฝ๋กœ(API ๋ฐฐํฌ ์ค‘์— ์ง€์ •๋จ)์ž…๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์š”์ฒญ

API ํ”„๋ก์‹œ ์ž‘์—…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ API ๋ฐ API ํ”„๋ก์‹œ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

client

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ์š”์ฒญ์„ ์ „์†กํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋˜๋Š” ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” client ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
client.cn ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์— ์ง€์ •๋œ ์ผ๋ฐ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.country ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ๊ตญ๊ฐ€์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.email.address ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.host ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ProxyEndpoint์—์„œ ์ˆ˜์‹ ํ•œ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ HTTP ํ˜ธ์ŠคํŠธ IP์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.ip ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ์‹œ์Šคํ…œ์˜ IP ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๋ž˜ ํด๋ผ์ด์–ธํŠธ IP ๋˜๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ IP์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.locality ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์ง€์—ญ(๋„์‹œ)์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.organization ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์กฐ์ง์ž…๋‹ˆ๋‹ค. Apigee์˜ ์กฐ์ง๊ณผ ๋ฐ˜๋“œ์‹œ ๋™์ผํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์š”์ฒญ
client.organization.unit ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์กฐ์ง ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.port ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

ProxyEndpoint์— ๋ณด๋‚ด๋Š” ๋ฐœ์‹  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ HTTP ํฌํŠธ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.received.end.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ ProxyEndpoint์˜ ๋ฐœ์‹  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ์ˆ˜์‹ ์„ ์™„๋ฃŒํ•œ ์‹œ๊ฐ„์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'์ž…๋‹ˆ๋‹ค.

์ด ์‹œ๊ฐ„ ๊ฐ’์€ ํ•ด๋‹น 32๋น„ํŠธ ํƒ€์ž„์Šคํƒฌํ”„ ์ˆ˜๋Ÿ‰์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.received.end.timestamp Long ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ ProxyEndpoint์˜ ๋ฐœ์‹  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ์ˆ˜์‹ ์„ ์™„๋ฃŒํ•œ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์ž…๋‹ˆ๋‹ค. 1970๋…„ 1์›” 1์ผ(UTC) ์ž์ •๋ถ€ํ„ฐ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์„ ํฌํ•จํ•˜๋Š” 64๋น„ํŠธ(long) ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.received.start.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ ProxyEndpoint์˜ ๋ฐœ์‹  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ์ˆ˜์‹ ์„ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'์ž…๋‹ˆ๋‹ค.

์ด ์‹œ๊ฐ„ ๊ฐ’์€ ํ•ด๋‹น 32๋น„ํŠธ ํƒ€์ž„์Šคํƒฌํ”„ ์ˆ˜๋Ÿ‰์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.received.start.timestamp Long ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ ProxyEndpoint์˜ ๋ฐœ์‹  ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ ์ˆ˜์‹ ์„ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์ž…๋‹ˆ๋‹ค. 1970๋…„ 1์›” 1์ผ(UTC) ์ž์ •๋ถ€ํ„ฐ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์„ ํฌํ•จํ•˜๋Š” 64๋น„ํŠธ(long) ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.resolved.ip ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ™•์ธ๋œ ํด๋ผ์ด์–ธํŠธ IP ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ๊ตฌ์„ฑ๋œ ํด๋ผ์ด์–ธํŠธ IP ํ™•์ธ ์„ค์ • ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ IP ํ™•์ธ ์„ค์ •์ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฒฐ์ •๋œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํด๋ผ์ด์–ธํŠธ IP ํ™•์ธ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
client.scheme ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์ด ์š”์ฒญ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•œ ์ „์†ก์— ๋”ฐ๋ผ HTTP ๋˜๋Š” HTTPS๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.sent.end.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ ProxyEndpoint์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ต ์ „์†ก์„ ์™„๋ฃŒํ•œ ์‹œ๊ฐ„์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ’์€ ํ•ด๋‹น 32๋น„ํŠธ client.sent.end.timestamp์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

PostClientFlow
client.sent.end.timestamp Long ์ฝ๊ธฐ ์ „์šฉ ProxyEndpoint๊ฐ€ ์›๋ž˜ ํด๋ผ์ด์–ธํŠธ ์•ฑ์— ์‘๋‹ต ๋ฐ˜ํ™˜์„ ์™„๋ฃŒํ•œ ์‹œ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ 1970๋…„ 1์›” 1์ผ ์ž์ •(UTC) ์ดํ›„ ๊ฒฝ๊ณผ๋œ ๋ฐ€๋ฆฌ์ดˆ ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” 64๋น„ํŠธ(๊ธด) ์ •์ˆ˜์ž…๋‹ˆ๋‹ค. PostClientFlow
client.sent.start.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ProxyEndpoint๊ฐ€ ๋ฐœ์‹  ํด๋ผ์ด์–ธํŠธ ์•ฑ์— ์‘๋‹ต ๋ฐ˜ํ™˜์„ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„์œผ๋กœ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 'Wed, 21 Aug 2013 19:16:47 UTC'์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ’์€ ํ•ด๋‹น 32๋น„ํŠธ client.sent.start.timestamp์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

PostClientFlow
client.sent.start.timestamp Long ์ฝ๊ธฐ ์ „์šฉ ํ”„๋ก์‹œ๊ฐ€ ProxyEndpoint์—์„œ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ณด๋‚ด๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ 1970๋…„ 1์›” 1์ผ ์ž์ •(UTC) ์ดํ›„ ๊ฒฝ๊ณผ๋œ ๋ฐ€๋ฆฌ์ดˆ ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” 64๋น„ํŠธ(๊ธด) ์ •์ˆ˜๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. PostClientFlow
client.ssl.enabled ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ProxyEndpoint๊ฐ€ TLS/SSL์— ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ true ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
client.state ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

current

ํ˜„์žฌ API ํ”„๋ก์‹œ ํ๋ฆ„์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” current ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
current.flow.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ๋ฆ„์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(์˜ˆ: PreFlow, PostFlow ๋˜๋Š” ์กฐ๊ฑด๋ถ€ ํ๋ฆ„์˜ ์ด๋ฆ„). ํ”„๋ก์‹œ ์š”์ฒญ
current.flow.description ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ๋ฆ„์˜ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ํ๋ฆ„์˜ XML ๊ตฌ์„ฑ์— ์žˆ๋Š” <Description> ์š”์†Œ์˜ ๊ฐ’๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์š”์ฒญ

Apigee UI์˜ Trace ๋ทฐ์—์„œ ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

environment

environment.name ์†์„ฑ์˜ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” environment ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
environment.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋œ ํ™˜๊ฒฝ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ํ”„๋ก์‹œ ์š”์ฒญ

error

์˜ค๋ฅ˜ ํ๋ฆ„์˜ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” error ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
error message ์ฝ๊ธฐ/์“ฐ๊ธฐ ์˜ค๋ฅ˜ ํ๋ฆ„์˜ ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด์ธ message ์œ ํ˜•์˜ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜
error.content ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ ์˜ค๋ฅ˜์˜ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜
error.message ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์˜ค๋ฅ˜์™€ ๊ด€๋ จ๋œ ๋ฉ”์‹œ์ง€๋กœ, ํ•ด๋‹น ๊ฐ’์€ ์˜ค๋ฅ˜ ํ๋ฆ„์ด ์‹คํ–‰๋˜๊ธฐ ์ „์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ฅ˜
error.status.code ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์˜ค๋ฅ˜์™€ ๊ด€๋ จ๋œ HTTP ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 400์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜
error.transport.message TransportMessage ์ฝ๊ธฐ ์ „์šฉ

TransportMessage ์œ ํ˜•์˜ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜
error.state ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ํ๋ฆ„์˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์˜ค๋ฅ˜
error.header.header_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์‘๋‹ต ํ—ค๋”๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฅ˜

fault

๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ์†Œ์Šค, ์ด์œ , ์„ธ๋ถ€์ •๋ณด์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Apigee๋Š” ์ •์ฑ…์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ฐ’์€ ๊ฐ ์ •์ฑ…์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. fault ๋ณ€์ˆ˜๊ฐ€ ์„ค์ •๋˜๋Š” ๋•Œ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ์ •์ฑ… ์˜ค๋ฅ˜ ์ •๋ณด๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
fault.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ์˜ค๋ฅ˜ ์ด๋ฆ„์œผ๋กœ, ๊ฐ ์ •์ฑ… ์ฐธ์กฐ ์ฃผ์ œ์— ํฌํ•จ๋œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ํ‘œ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” FaultRule์— ์ ์šฉ๋˜๋Š” ์กฐ๊ฑด์—์„œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜
fault.reason ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ์˜ค๋ฅ˜์˜ ์›์ธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด OASValidation ์ •์ฑ…์€ ์ธ๋ฐ”์šด๋“œ ์š”์ฒญ์ด OpenAPI ์‚ฌ์–‘์— ๋Œ€ํ•ด ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ๊ฒƒ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ •์ฑ… ์ด๋ฆ„, ์‚ฌ์–‘ ์ด๋ฆ„, ์š”์ฒญ์ด ์ด ์‚ฌ์–‘์— ๋Œ€ํ•ด ๊ฒ€์ฆ๋˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ž์—ด๋กœ ์ด ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ •์ฑ…์—์„œ๋Š” ์ด ๋ณ€์ˆ˜๋ฅผ ์˜ค๋ฅ˜์— ์ ํ•ฉํ•œ ๋ฉ”์‹œ์ง€๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅ˜
fault.category ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ์นดํ…Œ๊ณ ๋ฆฌ. ์˜ˆ๋ฅผ ๋“ค์–ด ์ •์ฑ… ๋‹จ๊ณ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด ๋ณ€์ˆ˜์—์„œ '๋‹จ๊ณ„' ๊ฐ’์„ ๋ณด์กดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” FaultRule์— ์ ์šฉ๋˜๋Š” ์กฐ๊ฑด์—์„œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜
fault.subcategory ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ํ•˜์œ„ ์นดํ…Œ๊ณ ๋ฆฌ. ์˜ˆ๋ฅผ ๋“ค์–ด OASValidation ์ •์ฑ…์—์„œ ์š”์ฒญ์ด OpenAPI ์‚ฌ์–‘์— ๋Œ€ํ•ด ๊ฒ€์ฆ๋˜์ง€ ์•Š์Œ์„ ๊ฐ์ง€ํ•˜๋ฉด ์ด ๋ณ€์ˆ˜๋ฅผ 'OASValidationFailure'๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋Š” FaultRule์— ์ ์šฉ๋˜๋Š” ์กฐ๊ฑด์—์„œ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜

graphql

๋Ÿฐํƒ€์ž„์— GraphQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ GraphQL ์ •์ฑ…์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” graphql ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช…
graphql ๋ณตํ•ฉ ์œ ํ˜• ์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ ์“ฐ๊ธฐ ๋ฃจํŠธ GraphQL ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.fragment ๋ณตํ•ฉ ์œ ํ˜• ์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ ์“ฐ๊ธฐ ์ด ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์กฐ๊ฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.fragment.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ ์ด GraqhQL ์ฟผ๋ฆฌ๋กœ ์ƒ์„ฑ๋œ ํ”„๋ ˆ์ž„ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.fragment.INDEX.selectionSet.INDEX ์œ ํ˜• ์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ ์“ฐ๊ธฐ ์ง€์ •๋œ ์ƒ‰์ธ์— ์žˆ๋Š” ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.fragment.INDEX.selectionSet.INDEX.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ ์“ฐ๊ธฐ ์ง€์ •๋œ ์ƒ‰์ธ์— ์žˆ๋Š” ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.fragment.INDEX.selectionSet.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ ์ด ์กฐ๊ฐ์— ์žˆ๋Š” ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.fragment.INDEX.selectionSet.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ ์“ฐ๊ธฐ ์กฐ๊ฐ์— ์žˆ๋Š” ๊ธฐ๋ณธ ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation ๋ณตํ•ฉ ์œ ํ˜• ์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ ์“ฐ๊ธฐ ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ž‘์—…์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค.

์ž‘์—… ์ˆ˜์ค€์—์„œ ํ• ๋‹น๋Ÿ‰์„ ์„ค์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ํ™˜๊ฒฝ ์ˆ˜์ค€์—์„œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฒ”์œ„
graphql.operation.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ž‘์—…์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.operationType ์—ด๊ฑฐ ์ฝ๊ธฐ ์ „์šฉ ์ด API ํ”„๋ก์‹œ์— ๋Œ€ํ•ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ž‘์—…์˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ query, mutation, all์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet ๋ณตํ•ฉ ์œ ํ˜• ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ž‘์—…์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ž‘์—…์— ์žˆ๋Š” ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ž‘์—…์˜ ๊ธฐ๋ณธ ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ ๋ชฉ๋ก์—์„œ ์ง€์ •๋œ ์ƒ‰์ธ์— ์žˆ๋Š” ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ์ด ์ž‘์—…์— ๋Œ€ํ•ด ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ ๋ชฉ๋ก์—์„œ ์ง€์ •๋œ ์ƒ‰์ธ์— ์žˆ๋Š” ์„ ํƒ ํ•ญ๋ชฉ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.[selectionSet] ๋ณตํ•ฉ ์œ ํ˜• ์ฝ๊ธฐ ์ „์šฉ/์ฝ๊ธฐ ์“ฐ๊ธฐ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ถ”๊ฐ€์ ์ธ ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์— ์žฌ๊ท€์ ์œผ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด selectionSet.index ๋‹ค์Œ์— name ์†์„ฑ์ด ์•„๋‹Œ ๋˜ ๋‹ค๋ฅธ selectionSet.index๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ GraphQL ์ •์ฑ…์— ์„ค์ •ํ•œ <MaxCount> ๊ฐ’์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์ด๊ฒƒ์ด ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.directive ๋ณตํ•ฉ ์œ ํ˜• ์ง€์ •๋œ ์„ ํƒ ํ•ญ๋ชฉ ์ง‘ํ•ฉ์˜ ๊ธฐ๋ณธ ์ง€์‹œ๋ฌธ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.directive.count ๋ณตํ•ฉ ์œ ํ˜• ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.directive.INDEX ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ ์ง€์ •๋œ ์ƒ‰์ธ์˜ ์ง€์‹œ๋ฌธ์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.directive.INDEX.argument.INDEX ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ ์ง€์ •๋œ ์ƒ‰์ธ์˜ ์ธ์ˆ˜์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.directive.INDEX.argument.INDEX.name ๋ฌธ์ž์—ด ์ง€์ •๋œ ์ƒ‰์ธ์˜ ์ธ์ˆ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.directive.INDEX.argument.INDEX.value ๋ฌธ์ž์—ด ์ง€์ •๋œ ์ƒ‰์ธ์˜ ์ธ์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.selectionSet.INDEX.directive.name ๋ฌธ์ž์—ด ๋ฒ”์œ„
graphql.operation.variableDefinitions ๋ณตํ•ฉ ์œ ํ˜• ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ž‘์—…์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ ์ •์˜ ๋ชฉ๋ก์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.variableDefinitions.count ์ •์ˆ˜ ์ฟผ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ž‘์—…์— ๋Œ€ํ•œ ๋ณ€์ˆ˜ ์ •์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.variableDefinitions.INDEX ์ •์ˆ˜ ์ง€์ •๋œ ์ƒ‰์ธ์˜ ๋ณ€์ˆ˜ ์ •์˜์— ๋Œ€ํ•œ ์ฐธ์กฐ์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.variableDefinitions.INDEX.name ๋ฌธ์ž์—ด ์ง€์ •๋œ ์ƒ‰์ธ์˜ ๋ณ€์ˆ˜ ์ •์˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„
graphql.operation.variableDefinitions.INDEX.type ์ง€์ •๋œ ์ƒ‰์ธ์—์„œ ๋ณ€์ˆ˜ ์ •์˜ ๊ฐ’์˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ๋ฒ”์œ„

is

is.error ์†์„ฑ์˜ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” is ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
is.error Boolean ์ฝ๊ธฐ ์ „์šฉ

์˜ค๋ฅ˜ ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

loadbalancing

TargetEndpoint์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ƒํƒœ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” loadbalancing ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
loadbalancing.failedservers ๋ฌธ์ž์—ด ๋ฐฐ์—ด ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ค‘ ์‹คํŒจํ•œ TargetServer ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
loadbalancing.isfallback Boolean ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint์—์„œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ค‘์— ํ˜ธ์ถœ๋˜๋Š” TargetServer์— ๋Œ€ํ•œ ๋Œ€์ฒด๊ฐ€ ์‚ฌ์šฉ ์„ค์ •๋œ ๊ฒฝ์šฐ true์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
loadbalancing.targetserver ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint์—์„œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ค‘์— ํ˜ธ์ถœ๋˜๋Š” TargetServer์ž…๋‹ˆ๋‹ค. ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ์š”์†Œ๋ฅผ ์ •์˜ํ•  ๋•Œ <Path> ์š”์†Œ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ์—๋งŒ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต

message

์š”์ฒญ ํ๋ฆ„์˜ request ๋˜๋Š” ์‘๋‹ต ํ๋ฆ„์˜ response ๋˜๋Š” ์˜ค๋ฅ˜ ํ๋ฆ„์˜ error์™€ ๊ฐ™์€ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” message ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
message message ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ ํ๋ฆ„์˜ request ๋˜๋Š” ์‘๋‹ต ํ๋ฆ„์˜ response ๋˜๋Š” ์˜ค๋ฅ˜ ํ๋ฆ„์˜ error์™€ ๊ฐ™์€ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ์ปจํ…์ŠคํŠธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.content ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ, ์‘๋‹ต, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.content.as.base64 ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ, ์‘๋‹ต, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ํŽ˜์ด๋กœ๋“œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.content.as.url.safe.base64 ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ, ์‘๋‹ต, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ URL-safe base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ํŽ˜์ด๋กœ๋“œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.formparam.param_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์ง€์ •๋œ ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.formparam.param_name.
 values
์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ์ง€์ •๋œ ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.formparam.param_name.
 values.count
์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ์ง€์ •๋œ ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.formparams.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ๋ชจ๋“  ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.formparams.names ์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ๋ชจ๋“  ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.formparams.names.string ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์— ์žˆ๋Š” ๋ชจ๋“  ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.formstring ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ์–‘์‹ ๋ฌธ์ž์—ด ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.header.header_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ์—์„œ ๋ฐœ๊ฒฌํ•œ ํŠน์ • ํ—ค๋”์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋”์— ์‰ผํ‘œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์ฝ์„ ๋•Œ ์ฒซ ๋ฒˆ์งธ ์‰ผํ‘œ๊นŒ์ง€๋งŒ ํ…์ŠคํŠธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public, maxage=16544์ด๋ฉด message.header.cache-control์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ public์ž…๋‹ˆ๋‹ค.

์ „์ฒด ํ—ค๋”๋ฅผ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด message.header.header_name.values.string๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.header.header_name.N ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

๋ฉ”์‹œ์ง€์—์„œ N๋ฒˆ์งธ ํŠน์ • ํ—ค๋”์˜ ๊ฐ’(ํ๋ฆ„์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ์š”์ฒญ ๋˜๋Š” ์‘๋‹ต)์ž…๋‹ˆ๋‹ค. Apigee๋Š” ํ—ค๋” ํ…์ŠคํŠธ ๊ฐ’์„ ์‰ผํ‘œ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ์ƒ‰์ธ์€ ๊ฐ€์žฅ ์™ผ์ชฝ ๊ฐ’์— ๋Œ€ํ•ด 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public,maxage=16544์ด๋ฉด message.header.cache-control.2์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ maxage=16544์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.header.header_name.
 values
์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ์ง€์ •๋œ HTTP ํ—ค๋” ์ด๋ฆ„์˜ ๋ชจ๋“  ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.header.header_name.
 values.count
์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ์ง€์ •๋œ HTTP ํ—ค๋” ์ด๋ฆ„ ๊ฐ’์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.header.header_name.
 values.string
๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ๋‹จ์ผ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋œ ํŠน์ • ํ—ค๋”์˜ ๋ชจ๋“  ๊ฐ’์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public,maxage=16544์ด๋ฉด message.header.cache-control.values.string์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ public,maxage=16544์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.headers.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์—์„œ ๋ชจ๋“  HTTP ํ—ค๋”์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.headers.names ์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์˜ ๋ชจ๋“  HTTP ํ—ค๋” ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.headers.names.string ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์— ์žˆ๋Š” ๋ชจ๋“  ํ—ค๋” ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.path ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ์™ธํ•œ URL์˜ ์ „์ฒด ์š”์ฒญ ๋ฉ”์‹œ์ง€ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.queryparam.param_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ง€์ •๋œ ๋ฉ”์‹œ์ง€ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.queryparam.param_name.N ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

๋ฉ”์‹œ์ง€์—์„œ N๋ฒˆ์งธ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด request.querystring์ด a=hello&a=world์ด๋ฉด message.queryparam.a.1์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ hello์ž…๋‹ˆ๋‹ค.

๋‹จ์ผ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„(์˜ˆ: type=siteid:1&type=language:us-en&type=currency:USD)์— ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ž‘์„ฑํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • siteid:1์—๊ฒŒ message.queryparam.type.1 ๋ถ€์—ฌ
  • message.queryparam.type.2์—์„œ language:en-us์œผ๋กœ ๋ณ€ํ™˜
  • currency:USD์—๊ฒŒ message.queryparam.type.3 ๋ถ€์—ฌ
ํ”„๋ก์‹œ ์š”์ฒญ
message.queryparam.param_name.
 values
์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์— ์žˆ๋Š” ํŠน์ • ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๊ฐ’์ด๋ฉฐ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด์ด a=hello&a=world์ด๋ฉด message.queryparam.a.values ๊ฐ’์€ ['hello', 'world']code>์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.queryparam.param_name.
 values.count
์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ProxyEndpoint๋กœ ์ „์†ก๋œ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ์ง€์ • ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.queryparams.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ProxyEndpoint๋กœ ์ „์†ก๋œ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.queryparams.names ์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ProxyEndpoint๋กœ ์ „์†ก๋œ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.queryparams.names.string ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋ฉ”์‹œ์ง€์— ์žˆ๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.querystring ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ProxyEndpoint๋กœ ์ „์†ก๋œ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ฐ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด http://api.apifactory.com/inventors?name=nick&surname=danger ์š”์ฒญ์˜ ๊ฒฝ์šฐ message.querystring ๊ฐ’์€ name=nick&surname=danger์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.status.code ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

๋Œ€์ƒ ์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
message.transport.message TransportMessage ์ฝ๊ธฐ ์ „์šฉ

์ปจํ…์ŠคํŠธ ๊ฐ์ฒด์ธ TransportMessage ์œ ํ˜•์˜ ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.uri ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•œ ์ „์ฒด URI ๊ฒฝ๋กœ(๋„๋ฉ”์ธ URL ๋’ค์— ์œ„์น˜)์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด http://api.apifactory.com/inventors?name=nikola&surname=tesla ์š”์ฒญ์˜ ๊ฒฝ์šฐ ์ด ๋ณ€์ˆ˜๋Š” inventors?name=nikola&surname=tesla๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.verb ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ๊ณผ ๊ด€๋ จ๋œ HTTP ๋™์‚ฌ(GET, PUT, POST, DELETE ๋“ฑ)์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
message.version ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ProxyEndpoint๋กœ ์ „์†ก๋œ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ HTTP ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

๋ฉ”์‹œ์ง€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ ํ•จ์ˆ˜ ์ฐธ์กฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

messageid

์š”์ฒญ์— ๋Œ€ํ•œ ์ „์—ญ ๊ณ ์œ  ID์˜ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” messageid ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
messageid ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํฌํ•จํ•˜์—ฌ ์š”์ฒญ์— ๋Œ€ํ•œ ์ „์—ญ ๊ณ ์œ  ID๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค. ์ด ID๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์—์„œ ์ˆ˜์‹ ๋œ ์š”์ฒญ์„ ๋ฉ”์‹œ์ง€ ํ”„๋กœ์„ธ์„œ๋กœ ์ „์†ก๋œ ํ›„์— ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

messageid์™€ ์˜ค๋ฅ˜๋ฅผ ๊ฒฐ๋ถ€์‹œํ‚ค๊ธฐ ์œ„ํ•ด ID๋Š” Apigee ์˜ค๋ฅ˜ ๋กœ๊ทธ์— ๋กœ๊น…๋ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

mint

์ˆ˜์ต ์ฐฝ์ถœ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋„์šฐ๋ฏธ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” mint ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
mint.limitscheck.is_request_blocked Boolean ์ฝ๊ธฐ ์ „์šฉ

API ์š”์ฒญ์ด ์ฐจ๋‹จ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. is_subscription_found๊ฐ€ false์ด๋ฉด true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” MonetizationLimitsCheck ์ •์ฑ…์ด API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ์—์„œ ์ˆ˜์ต ์ฐฝ์ถœ ํ•œ๋„ ์ ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.limitscheck.is_subscription_found Boolean ์ฝ๊ธฐ ์ „์šฉ

๊ฐœ๋ฐœ์ž๊ฐ€ API ์ œํ’ˆ์— ๋Œ€ํ•œ ํ™œ์„ฑํ™”๋œ ๊ตฌ๋…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ •๊ธฐ ๊ฒฐ์ œ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ๊ฒฝ์šฐ true๋กœ ์„ค์ •ํ•˜์„ธ์š”.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” MonetizationLimitsCheck ์ •์ฑ…์ด API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ์—์„œ ์ˆ˜์ต ์ฐฝ์ถœ ํ•œ๋„ ์ ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.limitscheck.prepaid_developer_balance ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

์š”๊ธˆ์ œ์˜ ํ†ตํ™”์™€ ์—ฐ๊ฒฐ๋œ ๊ฐœ๋ฐœ์ž์˜ ์„ ๋ถˆ ๊ณ„์ • ์ง€๊ฐ‘์˜ ํ˜„์žฌ ์ž”์•ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.limitscheck.prepaid_developer_currency ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

mint.limitscheck.prepaid_developer_balance ๋ณ€์ˆ˜์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ž”์•ก์˜ ํ†ตํ™”์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.limitscheck.purchased_product_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์—ฐ๊ฒฐ๋œ API ์ œํ’ˆ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” MonetizationLimitsCheck ์ •์ฑ…์ด API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ์—์„œ ์ˆ˜์ต ์ฐฝ์ถœ ํ•œ๋„ ์ ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.limitscheck.status_message ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋””๋ฒ„๊น… ๋ชฉ์ ์˜ MonetizationLimitsCheck ์ •์ฑ… ์‹คํ–‰์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” MonetizationLimitsCheck ์ •์ฑ…์ด API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ์—์„œ ์ˆ˜์ต ์ฐฝ์ถœ ํ•œ๋„ ์ ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.mintng_consumption_pricing_rates ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์†Œ๋น„ ๊ธฐ๋ฐ˜ ์š”๊ธˆ์ž…๋‹ˆ๋‹ค.

์š”๊ธˆ์ œ๋ฅผ ๋งŒ๋“ค ๋•Œ ์š”๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

PostClientFlow
mint.mintng_consumption_pricing_type ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์†Œ๋น„ ๊ธฐ๋ฐ˜ ๊ฐ€๊ฒฉ ์ฑ…์ • ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์˜ˆ: FIXED_PER_UNIT

์š”๊ธˆ์ œ๋ฅผ ๋งŒ๋“ค ๋•Œ ์†Œ๋น„ ๊ธฐ๋ฐ˜ ์š”๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

PostClientFlow
mint.mintng_currency ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ˆ˜์ต ๊ณ„์‚ฐ์„ ์œ„ํ•œ ํ†ตํ™”์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜์—๋Š” currency ์ˆ˜์ต ์ฐฝ์ถœ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

DataCapture ์ •์ฑ…
mint.mintng_dev_share ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

๊ฐœ๋ฐœ์ž์™€ ๊ณต์œ ํ•  ์ˆ˜์ต์ž…๋‹ˆ๋‹ค.

์š”๊ธˆ์ œ๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ฐœ๋ฐœ์ž์™€ ๊ณต์œ ํ•  ์ˆ˜์ต์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

PostClientFlow
mint.mintng_is_apiproduct_monetized Boolean ์ฝ๊ธฐ ์ „์šฉ

API ์ œํ’ˆ์ด ํ˜„์žฌ ์ˆ˜์ต์„ ์ฐฝ์ถœํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค(์ฆ‰, ํ™œ์„ฑ ์š”๊ธˆ์ œ๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ฒฝ์šฐ).

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ VerifyAPIKey ๋˜๋Š” VerifyAccessToken ์ •์ฑ…์— ์˜ํ•ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์ •์ฑ… ์ถ”๊ฐ€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.mintng_price ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

๊ฐœ๋ฐœ์ž ๊ณต์œ ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜์ต์ž…๋‹ˆ๋‹ค.

ํ๋ฆ„ ๋ณ€์ˆ˜์—๋Š” revShareGrossPrice ์ˆ˜์ต ์ฐฝ์ถœ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

DataCapture ์ •์ฑ… ๋ฐ PostClientFlow
mint.mintng_price_multiplier ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

ํŠธ๋žœ์žญ์…˜๋‹น ๋น„์šฉ์— ๊ณฑํ•  ๊ณ„์ˆ˜(๋ฐฐ์ˆ˜)์ž…๋‹ˆ๋‹ค.

ํ๋ฆ„ ๋ณ€์ˆ˜์—๋Š” perUnitPriceMultiplier ์ˆ˜์ต ์ฐฝ์ถœ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

DataCapture ์ •์ฑ… ๋ฐ PostClientFlow
mint.mintng_rate ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

API ํ˜ธ์ถœ ์š”๊ธˆ์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” API ํ˜ธ์ถœ๋‹น ์†Œ๋น„ ๊ธฐ๋ฐ˜ ์š”๊ธˆ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์š”๊ธˆ์ œ๋ฅผ ๋งŒ๋“ค ๋•Œ ์†Œ๋น„ ๊ธฐ๋ฐ˜ ์š”๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. DataCapture ์ •์ฑ…์—์„œ perUnitPriceMultiplier ์ˆ˜์ต ์ฐฝ์ถœ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•œ ๊ฒฝ์šฐ Apigee๊ฐ€ perUnitPriceMultiplier ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๊ณ ๋ คํ•œ ํ›„์— ํŠธ๋žœ์žญ์…˜ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ธก์ •ํ•ญ๋ชฉ์˜ Api price multiplier๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

PostClientFlow
mint.mintng_rate_before_multipliers ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

perUnitPriceMultiplier ๊ณ„์‚ฐ ์—†์ด API ํ˜ธ์ถœ์— ์ฒญ๊ตฌ๋˜๋Š” ์š”๊ธˆ์ž…๋‹ˆ๋‹ค.

DataCapture ์ •์ฑ…์ด perUnitPriceMultiplier ์ˆ˜์ต ์ฐฝ์ถœ ๋ณ€์ˆ˜๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” perUnitPriceMultiplier๋กœ ๋น„์šฉ์„ ๊ณฑํ•˜๊ธฐ ์ „์˜ ํŠธ๋žœ์žญ์…˜ ๋น„์šฉ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

PostClientFlow
mint.mintng_rate_plan_id ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”๊ธˆ์ œ์˜ ID์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ VerifyAPIKey ๋˜๋Š” VerifyAccessToken ์ •์ฑ…์— ์˜ํ•ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์ •์ฑ… ์ถ”๊ฐ€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.mintng_revenue_share_rates ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ˆ˜์ต ๊ณต์œ  ์š”๊ธˆ์ž…๋‹ˆ๋‹ค.

์š”๊ธˆ์ œ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ˆ˜์ต ๊ณต์œ  ์š”๊ธˆ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

PostClientFlow
mint.mintng_revenue_share_type ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ˆ˜์ต ๊ณต์œ  ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด FIXED์ž…๋‹ˆ๋‹ค.

์š”๊ธˆ์ œ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ˆ˜์ต ๊ณต์œ  ์œ ํ˜•์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

PostClientFlow
mint.mintng_tx_success Boolean ์ฝ๊ธฐ ์ „์šฉ

ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ต ์ฐฝ์ถœ๋˜๋Š”์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜์—๋Š” transactionSuccess ์ˆ˜์ต ์ฐฝ์ถœ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

DataCapture ์ •์ฑ…
mint.prepaid_updated_developer_usage ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

์„ ๋ถˆ ๊ฐœ๋ฐœ์ž์˜ ํ˜„์žฌ ์‚ฌ์šฉ๋Ÿ‰์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ๋Ÿ‰์€ ์š”๊ธˆ์ œ ๊ตฌ์„ฑ ๋ฐ perUnitPriceMultiplier ์ˆ˜์ต ์ฐฝ์ถœ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.

PostClientFlow
mint.rateplan_end_time_ms ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

์—ํฌํฌ ์ดํ›„ ์š”๊ธˆ์ œ ๋งŒ๋ฃŒ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ VerifyAPIKey ๋˜๋Š” VerifyAccessToken ์ •์ฑ…์— ์˜ํ•ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์ •์ฑ… ์ถ”๊ฐ€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.rateplan_start_time_ms ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

์—ํฌํฌ ์ดํ›„ ์š”๊ธˆ์ œ ํ™œ์„ฑํ™” ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ VerifyAPIKey ๋˜๋Š” VerifyAccessToken ์ •์ฑ…์— ์˜ํ•ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ธ์ฆ ์ •์ฑ… ์ถ”๊ฐ€๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.status ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ˆ˜์ต ์ฐฝ์ถœ๋œ ํ˜ธ์ถœ์˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์‹œ์—๋งŒ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

PostClientFlow
mint.status_code ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

์ˆ˜์ต ์ฐฝ์ถœ๋œ ํ˜ธ์ถœ์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅ˜ ์‹œ์—๋งŒ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

PostClientFlow
mint.subscription_end_time_ms ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

์—ํฌํฌ ์ดํ›„ API ์ œํ’ˆ ๊ตฌ๋…์˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” MonetizationLimitsCheck ์ •์ฑ…์ด API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ์—์„œ ์ˆ˜์ต ์ฐฝ์ถœ ํ•œ๋„ ์ ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.subscription_start_time_ms ์ˆซ์ž ์ฝ๊ธฐ ์ „์šฉ

์—ํฌํฌ ์ดํ›„ API ์ œํ’ˆ ๊ตฌ๋…์˜ ํ™œ์„ฑํ™” ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์ž…๋‹ˆ๋‹ค.

์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋Š” MonetizationLimitsCheck ์ •์ฑ…์ด API ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API ํ”„๋ก์‹œ์—์„œ ์ˆ˜์ต ์ฐฝ์ถœ ํ•œ๋„ ์ ์šฉ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
mint.tx_success_result Boolean ์ฝ๊ธฐ ์ „์šฉ

ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ์ˆ˜์ต ์ฐฝ์ถœ์ด ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

mint.tx_success_result ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ ๊ฐ’์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • tx_success๋ฅผ true๋กœ ์„ค์ •: transactionSuccess ๋ณ€์ˆ˜๊ฐ€ true์ด๊ณ , ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ต ์ฐฝ์ถœ๋ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ต ์ฐฝ์ถœ๋˜๋ฏ€๋กœ mint.mintng_rate ๋ฐ mint.mintng_dev_share ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค.
  • tx_success๋ฅผ false๋กœ ์„ค์ •: transactionSuccess ๋ณ€์ˆ˜๊ฐ€ false์ด๊ณ , ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ต ์ฐฝ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ต ์ฐฝ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ mint.mintng_rate ๋ฐ mint.mintng_dev_share ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • tx_success๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ 2xx๊ฐ€ ์•„๋‹˜: transactionSuccess ๋ณ€์ˆ˜๊ฐ€ ์บก์ฒ˜๋˜์ง€ ์•Š๊ณ  ํŠธ๋žœ์žญ์…˜์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ(message.status.code)๊ฐ€ 2xx๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ต ์ฐฝ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • tx_success๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ์ƒํƒœ ์ฝ”๋“œ๊ฐ€ 2xx์ž„: transactionSuccess ๋ณ€์ˆ˜๊ฐ€ ์บก์ฒ˜๋˜์ง€ ์•Š๊ณ  ํŠธ๋žœ์žญ์…˜์˜ HTTP ์ƒํƒœ ์ฝ”๋“œ(message.status.code)๊ฐ€ 2xx์ž…๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์ˆ˜์ต ์ฐฝ์ถœ๋ฉ๋‹ˆ๋‹ค.
PostClientFlow

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

organization

organization.name ์†์„ฑ์˜ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” organization ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
organization.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์กฐ์ง์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

์กฐ์ง์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์กฐ์ง ์ดํ•ดํ•˜๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

proxy

API ํ”„๋ก์‹œ ๊ตฌ์„ฑ

๋‹ค์Œ ํ‘œ์—์„œ๋Š” proxy ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
proxy.basepath ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

API ํ”„๋ก์‹œ ์—”๋“œํฌ์ธํŠธ ๊ตฌ์„ฑ์˜ ๊ธฐ๋ณธ ๊ฒฝ๋กœ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” URL์˜ ํ˜ธ์ŠคํŠธ ๋‹ค์Œ์— ์˜ค๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ URI์˜ ํ”„๋ž˜๊ทธ๋จผํŠธ์ž…๋‹ˆ๋‹ค. ์กฐ๊ฑด๋ถ€ ํ๋ฆ„ URI๋Š” ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ /v2/weatherapi์ธ API ํ”„๋ก์‹œ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. (์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ”„๋ก์‹œ ์—”๋“œํฌ์ธํŠธ ๊ตฌ์„ฑ์„ ์ฐธ์กฐํ•˜์„ธ์š”.) ์ด ๊ฒฝ์šฐ ์ธ๋ฐ”์šด๋“œ ์š”์ฒญ์ด URL https://myhost.example.net/v2/weatherapi/forecastrss?w=12797282๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

  • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์€ myhost.example.net์ž…๋‹ˆ๋‹ค. request.header.host ๋ณ€์ˆ˜๋ฅผ ์ฝ์–ด ์ด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” /v2/weatherapi์ž…๋‹ˆ๋‹ค. proxy.basepath ๋ณ€์ˆ˜๋ฅผ ์ฝ์–ด ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฝ๋กœ ์ ‘๋ฏธ์‚ฌ๋Š” /forecastrss์ž…๋‹ˆ๋‹ค. proxy.pathsuffix ๋ณ€์ˆ˜๋ฅผ ์ฝ์–ด ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

API ํ”„๋ก์‹œ ๊ตฌ์„ฑ์—์„œ /v2/*/weatherapicode>์™€ ๊ฐ™์€ ๋™์  ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•˜๋ฉด proxy.basepath ๋ณ€์ˆ˜๋Š” ๋™์  ๊ฒฝ๋กœ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์˜ ์‹ค์ œ URL์„ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด proxy.url ๋ณ€์ˆ˜๋ฅผ ์ฝ๊ณ  ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
proxy.client.ip ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

Apigee๊ฐ€ ์ตœ์ข… ์™ธ๋ถ€ TCP ํ•ธ๋“œ์…ฐ์ดํฌ์—์„œ ์ˆ˜์‹ ํ•œ IP ์ฃผ์†Œ์ธ ์ธ๋ฐ”์šด๋“œ ์ „ํ™”์˜ X-Forwarded-For ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ถœ ํด๋ผ์ด์–ธํŠธ ๋˜๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
proxy.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ProxyEndpoint์— ๊ตฌ์„ฑ๋œ ์ด๋ฆ„ ์†์„ฑ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
proxy.pathsuffix ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ์—์„œ ์ „์†ก๋˜๊ณ  ProxyEndpoint์— ์ˆ˜์‹ ๋˜๋Š” URL์˜ ๊ฒฝ๋กœ ์„œํ”ฝ์Šค ๊ฐ’์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฒฝ๋กœ๋Š” ํ™˜๊ฒฝ ๊ทธ๋ฃน ๋‚ด์—์„œ API ํ”„๋ก์‹œ๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ ๊ฒฝ๋กœ ๊ตฌ์„ฑ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ /v2/weatherapi์ธ API ํ”„๋ก์‹œ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ https://myhost.example.net/v2/weatherapi/forecastrss?w=12797282๋กœ ์ „์†ก๋˜๋Š” ์š”์ฒญ์€ proxy.pathsuffix ๋ณ€์ˆ˜์— /forecastrss ๋ฌธ์ž์—ด์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
proxy.url ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜์—ฌ ProxyEndpoint์—์„œ ์ˆ˜์‹ ํ•œ ํ”„๋ก์‹œ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ์ „์ฒด URL์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

API ํ”„๋ก์‹œ ์ž‘์—…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ API ๋ฐ API ํ”„๋ก์‹œ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

publishmessage

PublishMessage ์ •์ฑ…์ด ์‹คํ–‰๋  ๋•Œ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
publishmessage.message.id ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ Pub/Sub ์„œ๋ฒ„์—์„œ messageId(๊ฒŒ์‹œ๋œ ๋ฉ”์‹œ์ง€์˜ ID)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Apigee๋Š” ๊ฒŒ์‹œ ์š”์ฒญ์ด ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ด ํ๋ฆ„ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

ratelimit

ํ• ๋‹น๋Ÿ‰ ๋˜๋Š” SpikeArrest ์ •์ฑ…์ด ์‹คํ–‰๋  ๋•Œ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” ratelimit ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
ratelimit.policy_name.allowed.count Long ์ฝ๊ธฐ ์ „์šฉ ํ—ˆ์šฉ๋˜๋Š” ํ• ๋‹น๋Ÿ‰ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.used.count Long ์ฝ๊ธฐ ์ „์šฉ ํ• ๋‹น๋Ÿ‰ ๊ฐ„๊ฒฉ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ˜„์žฌ ํ• ๋‹น๋Ÿ‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.available.count Long ์ฝ๊ธฐ ์ „์šฉ ํ• ๋‹น๋Ÿ‰ ๊ฐ„๊ฒฉ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ• ๋‹น๋Ÿ‰ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.exceed.count Long ์ฝ๊ธฐ ์ „์šฉ ํ• ๋‹น๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.total.exceed.count Long ์ฝ๊ธฐ ์ „์šฉ ํ• ๋‹น๋Ÿ‰์„ ์ดˆ๊ณผํ•˜๋ฉด 1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.expiry.time Long ์ฝ๊ธฐ ์ „์šฉ

ํ• ๋‹น๋Ÿ‰์ด ๋งŒ๋ฃŒ๋˜๋Š” ์‹œ์ ๊ณผ ์ƒˆ ํ• ๋‹น๋Ÿ‰ ๊ฐ„๊ฒฉ์ด ์‹œ์ž‘๋˜๋Š” ์‹œ๊ธฐ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” UTC ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ• ๋‹น๋Ÿ‰ ์ •์ฑ… ์œ ํ˜•์ด rollingwindow์ด๋ฉด ํ• ๋‹น๋Ÿ‰ ๊ฐ„๊ฒฉ์ด ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ๊ฐ’์€ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PostClientFlow
ratelimit.policy_name.identifier ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ์ •์ฑ…์— ์—ฐ๊ฒฐ๋œ (ํด๋ผ์ด์–ธํŠธ) ์‹๋ณ„์ž ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.class ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ ํด๋ผ์ด์–ธํŠธ ์‹๋ณ„์ž์™€ ์—ฐ๊ฒฐ๋œ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.class.allowed.count Long ์ฝ๊ธฐ ์ „์šฉ ํด๋ž˜์Šค์— ์ •์˜๋œ ํ—ˆ์šฉ ํ• ๋‹น๋Ÿ‰ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.class.used.count Long ์ฝ๊ธฐ ์ „์šฉ ํด๋ž˜์Šค ๋‚ด์—์„œ ์‚ฌ์šฉ๋œ ํ• ๋‹น๋Ÿ‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.class.available.count Long ์ฝ๊ธฐ ์ „์šฉ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ• ๋‹น๋Ÿ‰ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.class.exceed.count Long ์ฝ๊ธฐ ์ „์šฉ ํ˜„์žฌ ํ• ๋‹น๋Ÿ‰ ๊ฐ„๊ฒฉ์˜ ํด๋ž˜์Šค ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.class.total.exceed.count Long ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“  ํ• ๋‹น๋Ÿ‰ ๊ฐ„๊ฒฉ์—์„œ ํด๋ž˜์Šค์˜ ํ•œ๋„๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ์š”์ฒญ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ํ• ๋‹น๋Ÿ‰ ๊ฐ„๊ฒฉ์— ๋Œ€ํ•œ class.exceed.count ํ•ฉ๊ณ„์ž…๋‹ˆ๋‹ค. PostClientFlow
ratelimit.policy_name.failed Boolean ์ฝ๊ธฐ ์ „์šฉ

์ •์ฑ… ์‹คํŒจ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(true ๋˜๋Š” false).

PostClientFlow

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

request

์ œ๊ณต๋œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

์š”์ฒญ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์š”์ฒญ ๋ฐ์ดํ„ฐ๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋กœ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌ๋˜๋‚˜์š”?๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” request ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
request message ์ฝ๊ธฐ ์ „์šฉ

์ œ๊ณต๋œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.content ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.content.as.base64 ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ํŽ˜์ด๋กœ๋“œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.content.as.url.safe.base64 ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ ๋ฉ”์‹œ์ง€์˜ URL ๋ณด์•ˆ base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ํŽ˜์ด๋กœ๋“œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.formparam.param_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ „์†ก๋œ ์š”์ฒญ์—์„œ ์ง€์ •๋œ ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.formparam.param_name.
 values
์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์— ์žˆ๋Š” ํŠน์ • ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๊ฐ’์ด๋ฉฐ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํŽ˜์ด๋กœ๋“œ๊ฐ€ a=hello&x=greeting&a=world์ด๋ฉด request.formparam.a.values ๊ฐ’์€ ['hello', 'world']์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.formparam.param_name.
 values.count
์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ์ง€์ •๋œ ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๊ฐ’์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.formparam.param_name.N ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

๋ฉ”์‹œ์ง€์—์„œ N๋ฒˆ์งธ ํŠน์ • ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์–‘์‹ ๋ฌธ์ž์—ด์ด a=hello&a=world์ด๋ฉด request.formparam.a.1์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ hello์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.formparams.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ „์†ก๋œ ์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.formparams.names ์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.formparams.names.string ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์–‘์‹ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.formstring ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ์ „์†ก๋œ ์š”์ฒญ์˜ ์ „์ฒด formparam์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด name=test&type=first&group=A์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.grpc.rpc.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

gRPC ๋Œ€์ƒ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. RPC ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. gRPC ํ”„๋ก์‹œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ gRPC API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
request.grpc.service.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

gRPC ๋Œ€์ƒ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. gRPC ์ƒํƒœ ์„œ๋น„์Šค ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. gRPC ํ”„๋ก์‹œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ gRPC API ํ”„๋ก์‹œ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

ํ”„๋ก์‹œ ์š”์ฒญ
request.header.header_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ์—์„œ ๋ฐœ๊ฒฌํ•œ ํŠน์ • ํ—ค๋”์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ—ค๋”์— ์‰ผํ‘œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์ฝ์„ ๋•Œ ์ฒซ ๋ฒˆ์งธ ์‰ผํ‘œ๊นŒ์ง€๋งŒ ํ…์ŠคํŠธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public, maxage=16544์ด๋ฉด request.header.cache-control์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ public์ž…๋‹ˆ๋‹ค.

์ „์ฒด ํ—ค๋”๋ฅผ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด request.header.header_name.values.string๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.header.header_name.N ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ์—์„œ N๋ฒˆ์งธ ํŠน์ • ํ—ค๋”์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. Apigee๋Š” ํ—ค๋” ํ…์ŠคํŠธ ๊ฐ’์„ ์‰ผํ‘œ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ์ƒ‰์ธ์€ ๊ฐ€์žฅ ์™ผ์ชฝ ๊ฐ’์— ๋Œ€ํ•ด 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public, maxage=16544์ด๋ฉด request.header.cache-control.2์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ maxage=16544์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.header.header_name.
 values
์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์—์„œ ํŠน์ • ํ—ค๋”์˜ ๋ชจ๋“  ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.header.header_name.
 values.count
์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์—์„œ ํŠน์ • ํ—ค๋”์˜ ๋ชจ๋“  ๊ฐ’์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.header.header_name.
 values.string
๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์—์„œ ๋‹จ์ผ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋œ ํŠน์ • ํ—ค๋”์˜ ๋ชจ๋“  ๊ฐ’์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public, maxage=16544์ด๋ฉด request.header.cache-control.values.string์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ public, maxage=16544์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.headers.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์—์„œ ๋ชจ๋“  ํ—ค๋”์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.headers.names ์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์—์„œ ๋ชจ๋“  ํ—ค๋”์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.headers.names.string ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์˜ ๋ชจ๋“  ํ—ค๋” ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.path ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ๋Œ€ํ•œ ํ”„๋ก์‹œ๋˜์ง€ ์•Š์€ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ(ํ˜ธ์ŠคํŠธ ์ œ์™ธ)์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์˜ URI๊ฐ€ https://example.com/rest/api/latest์ด๋ฉด request.path์˜ ๊ฐ’์€ /rest/api/latest์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.queryparam.param_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ์—์„œ ๋ฐœ๊ฒฌํ•œ ํŠน์ • ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.queryparam.param_name.N ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ์— ์žˆ๋Š” N๋ฒˆ์งธ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด,request.querystring์ด a=hello&a=world์ธ ๊ฒฝ์šฐ request.queryparam.a.1์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ hello์ž…๋‹ˆ๋‹ค.

๋‹จ์ผ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„(์˜ˆ: type=siteid:1&type=language:us-en&type=currency:USD)์— ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ž‘์„ฑํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

  • siteid:1์—๊ฒŒ request.queryparam.type.1 ๋ถ€์—ฌ
  • request.queryparam.type.2์—์„œ language:en-us์œผ๋กœ ๋ณ€ํ™˜
  • currency:USD์—๊ฒŒ request.queryparam.type.3 ๋ถ€์—ฌ
ํ”„๋ก์‹œ ์š”์ฒญ
request.queryparam.param_name.
 values
์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์— ์žˆ๋Š” ํŠน์ • ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๊ฐ’์ด๋ฉฐ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๋ชฉ๋ก ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด request.querystring์ด a=hello&b=lovely&a=world์ด๋ฉด request.queryparam.a.values์˜ ๊ฐ’์€ ['hello', 'world']์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.queryparam.param_name.
 values.count
์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์—์„œ ํŠน์ • ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๋ชจ๋“  ๊ฐ’์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.queryparams.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์—์„œ ๋ชจ๋“  ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.queryparams.names ์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์—์„œ ๋ชจ๋“  ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.queryparams.names.string ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์— ์žˆ๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.querystring ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ์ „์†ก๋œ ์š”์ฒญ์˜ ์ „์ฒด ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์š”์ฒญ์ด http://host.com/123?name=first&surname=second&place=address์ด๋ฉด ์ด ๋ณ€์ˆ˜๋Š” name=first&surname=second&place=address๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.transportid ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ปจํ…์ŠคํŠธ์ธ TransportMessage ์œ ํ˜•์˜ ์š”์ฒญ ID์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.transport.message ์ „์†ก ๋ฉ”์‹œ์ง€ ์ฝ๊ธฐ ์ „์šฉ

์ปจํ…์ŠคํŠธ์ธ TransportMessage ์œ ํ˜•์˜ ์š”์ฒญ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.uri ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

API ํ”„๋ก์‹œ์—์„œ ํ”„๋ก์‹œ์˜ ๊ธฐ์ค€ URL ์™ธ์—๋„ ProxyEndpoint์˜ ํ”„๋ก์‹œ <BasePath>๋Š” TargetEndpoint์˜ ๋Œ€์ƒ ์„œ๋น„์Šค URL์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

<ProxyEndpoint>
...
  <BasePath>/my-mock-proxy</BasePath>

๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ

<TargetEndpoint>
...
  <HTTPTargetConnection>
    http://mocktarget.apigee.net
  </HTTPTargetConnection>

์š”์ฒญ์—์„œ request.uri๋Š” ํ”„๋ก์‹œ ๊ธฐ๋ณธ ๊ฒฝ๋กœ + ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•œ ์ฃผ์†Œ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์‘๋‹ต์—์„œ request.uri๋Š” HTTPTargetConnection ์ดํ›„ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•œ ์ฃผ์†Œ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

์›๋ž˜ ์š”์ฒญ์€ ํ”„๋ก์‹œ์— ๋“ค์–ด์™”๋Š”๋ฐ ํ”„๋ก์‹œ๋Š” ๋Œ€์ƒ ์„œ๋น„์Šค์— ๋˜ ๋‹ค๋ฅธ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

/my-mock-proxy์˜ ๊ธฐ๋ณธ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” ์ƒ˜ํ”Œ ํ”„๋ก์‹œ์— ๋Œ€ํ•ด ๋‹ค์Œ ํ˜ธ์ถœ์ด ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

http://my_org-test.apigee.net/my-mock-proxy/user?user=Dude

ํ”„๋ก์‹œ๋Š” ๋‹ค์Œ์„ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

http://mocktarget.apigee.net

์ด๋Š” /user?user=Dude๋ฅผ ํ•ด๋‹น URL์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  • ์š”์ฒญ request.uri = /my-mock-proxy/user?user=Dude
  • ์‘๋‹ต: request.uri = /user?user=Dude
ํ”„๋ก์‹œ ์š”์ฒญ(์‘๋‹ต์—์„œ ์ฐจ์ด๋ฅผ ๋ณด์ž„)
request.url ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋Œ€์ƒ ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ์š”์ฒญ์˜ ์ „์ฒด URL์ด๋ฉฐ, ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํฌํ•จํ•˜์ง€๋งŒ ํฌํŠธ ๋ฒˆํ˜ธ(์ง€์ •๋œ ๊ฒฝ์šฐ)๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ƒ˜ํ”Œ ํ”„๋ก์‹œ http://my_org-test.apigee.net/my-mock-proxy/user?user=Dude๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋Œ€์ƒ ์—”๋“œํฌ์ธํŠธ๊ฐ€ http://example.com:8080์ธ ๊ฒฝ์šฐ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์š”์ฒญ: ํ•ด๋‹น ์—†์Œ
  • ์‘๋‹ต: http://example.com/user?user=Dude
๋Œ€์ƒ ์‘๋‹ต
request.verb ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์— ์‚ฌ์šฉ๋˜๋Š” HTTP ๋™์‚ฌ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด GET, PUT, DELETE์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
request.version ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์š”์ฒญ์˜ HTTP ๋ฒ„์ „์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 1.1์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

response

์ œ๊ณต๋œ ํŽ˜์ด๋กœ๋“œ๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ์‘๋‹ต์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” response ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
response message ์ฝ๊ธฐ/์“ฐ๊ธฐ

๋Œ€์ƒ์ด ๋ฐ˜ํ™˜ํ•œ ์ „์ฒด ์‘๋‹ต ๋ฉ”์‹œ์ง€์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.content ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

๋Œ€์ƒ์ด ๋ฐ˜ํ™˜ํ•œ ์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ ํŽ˜์ด๋กœ๋“œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.content.as.base64 ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ Base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ํŽ˜์ด๋กœ๋“œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.content.as.url.safe.base64 ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์‘๋‹ต ๋ฉ”์‹œ์ง€์˜ URL ๋ณด์•ˆ base64๋กœ ์ธ์ฝ”๋”ฉ๋œ ํŽ˜์ด๋กœ๋“œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.event.current.content ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

EventFlow ์ŠคํŠธ๋ฆฌ๋ฐ ์‘๋‹ต์—์„œ ๋ฐ˜ํ™˜๋œ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„œ๋ฒ„ ์ „์†ก ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

EventFlow ์‘๋‹ต
response.event.current.count ์ •์ˆ˜ ์ฝ๊ธฐ

์ „์†ก๋œ ์‘๋‹ต ์ด๋ฒคํŠธ ์ˆ˜๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ง‘๊ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์ˆ˜์‹ ๋œ ๊ฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์„œ๋ฒ„ ์ „์†ก ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

.
EventFlow ์‘๋‹ต
response.header.header_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์‘๋‹ต์—์„œ ์ง€์ •๋œ HTTP ํ—ค๋” ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ—ค๋” ํ…์ŠคํŠธ์— ์‰ผํ‘œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ Apigee๋Š” ์—ฌ๋Ÿฌ ๊ฐ’์„ ์ถ”๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ response.header.header_name์€ ์ฒซ ๋ฒˆ์งธ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public,maxage=16544์ด๋ฉด response.header.cache-control์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ public์ž…๋‹ˆ๋‹ค.

์ „์ฒด ํ—ค๋”๋ฅผ ๋ฌธ์ž์—ด๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด response.header.header_name.values.string๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.header.header_name.
 values
์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

์‘๋‹ต์—์„œ ์ง€์ •๋œ HTTP ํ—ค๋”์˜ ๋ชจ๋“  ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.header.header_name.
 values.count
์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์‘๋‹ต์—์„œ ์ง€์ •๋œ HTTP ํ—ค๋”์˜ ๋ชจ๋“  ๊ฐ’์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.header.header_name.
 values.string
๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์‘๋‹ต์—์„œ ๋‹จ์ผ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ๋œ ํŠน์ • ํ—ค๋”์˜ ๋ชจ๋“  ๊ฐ’์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public,maxage=16544์ด๋ฉด response.header.cache-control.values.string์˜ ๋ฐ˜ํ™˜ ๊ฐ’์€ public,maxage=16544์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.header.header_name.N ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

์‘๋‹ต์—์„œ N๋ฒˆ์งธ ํŠน์ • ํ—ค๋” ๊ฐ’์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค. Apigee๋Š” ํ—ค๋” ํ…์ŠคํŠธ ๊ฐ’์„ ์‰ผํ‘œ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ์ƒ‰์ธ์€ ๊ฐ€์žฅ ์™ผ์ชฝ ๊ฐ’์— ๋Œ€ํ•ด 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด Cache-control ํ—ค๋”๊ฐ€ public,maxage=16544์ด๋ฉด response.header.cache-control.2์€ maxage=16544๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.headers.count ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

์‘๋‹ต์—์„œ ๋ชจ๋“  ํ—ค๋”์˜ ์ˆ˜์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.headers.names ์ปฌ๋ ‰์…˜ ์ฝ๊ธฐ ์ „์šฉ

์‘๋‹ต์—์„œ ๋ชจ๋“  ํ—ค๋”์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.headers.names.string ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์‘๋‹ต์—์„œ ๋ชจ๋“  ํ—ค๋”์˜ ์ด๋ฆ„์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
response.status.code ์ •์ˆ˜ ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ์— ๋Œ€ํ•ด ๋ฐ˜ํ™˜๋œ ์‘๋‹ต ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ message.status.code์— ์ €์žฅ๋œ ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ message๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋Œ€์ƒ ์‘๋‹ต
response.transport.message ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ปจํ…์ŠคํŠธ ๊ฐ์ฒด์ธ TransportMessage ์œ ํ˜•์˜ ์‘๋‹ต์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต

route

<RouteRule> ๋ฐ TargetEndpoint์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” route ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
route.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ProxyEndpoint์—์„œ ์‹คํ–‰๋œ <RouteRule>์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด default์ž…๋‹ˆ๋‹ค. RouteRule์€ ์‹คํ–‰ํ•  API ํ”„๋ก์‹œ TargetEndpoint๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
route.target ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์‹คํ–‰๋œ TargetEndpoint์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด default์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ

servicecallout

ServiceCallout ์ •์ฑ…์— ๋Œ€ํ•œ TargetEndpoint๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” servicecallout ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
servicecallout.policy_name.expectedcn ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

ServiceCallout ์ •์ฑ…์—์„œ ์ฐธ์กฐํ•˜๋Š” TargetEndpoint์˜ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์ƒ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” TargetEndpoint๊ฐ€ TLS/SSL ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
servicecallout.policy_name.target.url ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

ํŠน์ • ServiceCallout ์ •์ฑ…์˜ TargetEndpoint URL์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
servicecallout.requesturi ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

ServiceCallout ์ •์ฑ…์˜ TargetEndpoint URI์ž…๋‹ˆ๋‹ค. URI๋Š” ํ”„๋กœํ† ์ฝœ ๋ฐ ๋„๋ฉ”์ธ ์‚ฌ์–‘์ด ์—†๋Š” TargetEndpoint URL์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

system

์‹œ์Šคํ…œ์˜ IP ์ฃผ์†Œ ๋ฐ ํ”„๋ก์‹œ์— ๋Œ€ํ•œ ์„ธ๋ถ€์ •๋ณด๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” system ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
system.interface.interface_name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์‹œ์Šคํ…œ์˜ IP ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.pod.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ pod์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.region.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๋ฐ์ดํ„ฐ ์„ผํ„ฐ ๋ฆฌ์ „์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์ด ๋ณ€์ˆ˜๋ฅผ ์ฝ์€ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2013๋…„ 8์›” 21์ผ ์ˆ˜์š”์ผ 19:16:47 GMT์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ’์€ ํ•ด๋‹น ๊ฐ’์ธ system.timestamp์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2013๋…„ 8์›” 21์ผ ์ˆ˜์š”์ผ 19:16:47 GMT๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.year ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

system.time์˜ ์—ฐ๋„ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.month ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

system.time์˜ ์›” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.day ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

system.time์˜ ๋‚ ์งœ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.dayofweek ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

system.time์˜ ์š”์ผ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.hour ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

system.time์˜ ์‹œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.minute ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

system.time์˜ ๋ถ„ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.second ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

system.time์˜ ์ดˆ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.millisecond ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

system.time์˜ ๋ฐ€๋ฆฌ์ดˆ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.time.zone ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

์‹œ์Šคํ…œ์˜ ์‹œ๊ฐ„๋Œ€์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.timestamp Long ์ฝ๊ธฐ ์ „์šฉ

์ด ๋ณ€์ˆ˜๋ฅผ ์ฝ์€ ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” 64๋น„ํŠธ(long) ์ •์ˆ˜์ž…๋‹ˆ๋‹ค. 1970๋…„ 1์›” 1์ผ(UTC) ์ž์ •๋ถ€ํ„ฐ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„์„ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 1534783015000์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
system.uuid ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ”„๋กœ์„ธ์„œ์˜ UUID์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

target

์š”์ฒญ ๋Œ€์ƒ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” target ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
target.basepath ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ์˜ TargetEndpoint์— ์ •์˜๋œ ๋Œ€์ƒ ์„œ๋น„์Šค(์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ œ์™ธ)์— ๋Œ€ํ•œ ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ(๋„๋ฉ”์ธ ์ œ์™ธ)์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด API ํ”„๋ก์‹œ๊ฐ€ ๋‹ค์Œ ๋Œ€์ƒ์„ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

<TargetEndpoint name="default">
...
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net/user?user=Dude</URL>
  </HTTPTargetConnection>

์ด ์˜ˆ์‹œ์—์„œ target.basepath๋Š” /user์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ:

<TargetEndpoint name="default">
...
  <HTTPTargetConnection>
    <URL>http://mocktarget.apigee.net</URL>
  </HTTPTargetConnection>

target.basepath๋Š” null์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.copy.pathsuffix Boolean ์ฝ๊ธฐ/์“ฐ๊ธฐ

true์ธ ๊ฒฝ์šฐ ProxyEndpoint์—์„œ TargetEndpoint๋กœ ์ „๋‹ฌ๋˜๋Š” ์š”์ฒญ์€ ๊ฒฝ๋กœ ์„œํ”ฝ์Šค(ProxyEndpoint ๊ธฐ๋ณธ ๊ฒฝ๋กœ์— ์ •์˜๋œ URI ๋’ค์— ์˜ค๋Š” URI ๊ฒฝ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จผํŠธ)๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.copy.queryparams Boolean ์ฝ๊ธฐ/์“ฐ๊ธฐ

true์ธ ๊ฒฝ์šฐ ProxyEndpoint์—์„œ TargetEndpoint๋กœ ์ „๋‹ฌ๋˜๋Š” ์š”์ฒญ์€ ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.country ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ๊ตญ๊ฐ€์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.cn ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint์˜ ์ผ๋ฐ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” TargetEndpoint๊ฐ€ TLS/SSL ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.email.address ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์ด๋ฉ”์ผ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.expectedcn ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

TargetEndpoint์˜ ์ผ๋ฐ˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” TargetEndpoint๊ฐ€ TLS/SSL ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
target.header.host ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

Apigee๊ฐ€ ๋Œ€์ƒ์— ๋Œ€ํ•œ ์•„์›ƒ๋ฐ”์šด๋“œ ์š”์ฒญ์˜ Host ํ—ค๋” ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํ๋ฆ„ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. PSC ์—”๋“œํฌ์ธํŠธ ๊ธฐ๋ฐ˜ ํƒ€๊ฒŸ์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ํƒ€๊ฒŸ URL ๋˜๋Š” ํƒ€๊ฒŸ ์„œ๋ฒ„์—์„œ IP ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์—์„œ ๊ฐ’์„ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.host ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

API ํ”„๋ก์‹œ์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋Œ€์ƒ ์„œ๋น„์Šค์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.ip ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

API ํ”„๋ก์‹œ์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋Œ€์ƒ ์„œ๋น„์Šค์˜ IP ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.locality ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์ง€์—ญ(๋„์‹œ)์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.name ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

targetendpoint์—์„œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋„๋‹ฌํ•˜๋Š” ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.organization ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์กฐ์ง์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.organization.unit ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์กฐ์ง ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.port ์ •์ˆ˜ ์ฝ๊ธฐ ์ „์šฉ

API ํ”„๋ก์‹œ์— ๋Œ€ํ•œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋Œ€์ƒ ์„œ๋น„์Šค์˜ ํฌํŠธ ๋ฒˆํ˜ธ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.received.end.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint๊ฐ€ ๋Œ€์ƒ์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ์ˆ˜์‹ ์„ ์™„๋ฃŒํ•œ ์‹œ๊ฐ„์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'์ž…๋‹ˆ๋‹ค.

์ด ์‹œ๊ฐ„ ๊ฐ’์€ ํ•ด๋‹น 32๋น„ํŠธ ํƒ€์ž„์Šคํƒฌํ”„ ์ˆ˜๋Ÿ‰์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.received.end.
  timestamp
Long ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint๊ฐ€ ๋Œ€์ƒ์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ์ˆ˜์‹ ์„ ์™„๋ฃŒํ•œ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 1534783015000์ž…๋‹ˆ๋‹ค. 1970๋…„ 1์›” 1์ผ(UTC) ์ž์ •๋ถ€ํ„ฐ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์„ ํฌํ•จํ•˜๋Š” 64๋น„ํŠธ(long) ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.received.start.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint๊ฐ€ ๋Œ€์ƒ์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ์ˆ˜์‹ ์„ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'์ž…๋‹ˆ๋‹ค.

์ด ์‹œ๊ฐ„ ๊ฐ’์€ ํ•ด๋‹น 32๋น„ํŠธ ํƒ€์ž„์Šคํƒฌํ”„ ์ˆ˜๋Ÿ‰์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.received.start.
  timestamp
Long ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint๊ฐ€ ๋Œ€์ƒ์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต ์ˆ˜์‹ ์„ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 1534783015000์ž…๋‹ˆ๋‹ค. 1970๋…„ 1์›” 1์ผ(UTC) ์ž์ •๋ถ€ํ„ฐ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์„ ํฌํ•จํ•˜๋Š” 64๋น„ํŠธ(long) ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.scheme ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋ฒ”์œ„ ์‹œ์ž‘: ๋Œ€์ƒ ์‘๋‹ต
์œ ํ˜•: ๋ฌธ์ž์—ด
๊ถŒํ•œ: ์ฝ๊ธฐ/์“ฐ๊ธฐ

์š”์ฒญ ๋ฉ”์‹œ์ง€์— ๋”ฐ๋ผ http ๋˜๋Š” https๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.sent.end.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ TargetEndpoint์— ์ง€์ •๋œ URL๋กœ ์š”์ฒญ ์ „์†ก์„ ์ค‘๋‹จํ•œ ์‹œ๊ฐ„์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'์ž…๋‹ˆ๋‹ค.

์ด ์‹œ๊ฐ„ ๊ฐ’์€ ํ•ด๋‹น 32๋น„ํŠธ ํƒ€์ž„์Šคํƒฌํ”„ ์ˆ˜๋Ÿ‰์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.sent.end.timestamp Long ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ TargetEndpoint์— ์ง€์ •๋œ URL๋กœ ์š”์ฒญ ์ „์†ก์„ ์™„๋ฃŒํ•œ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1377112607413์ž…๋‹ˆ๋‹ค. 1970๋…„ 1์›” 1์ผ(UTC) ์ž์ •๋ถ€ํ„ฐ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์„ ํฌํ•จํ•˜๋Š” 64๋น„ํŠธ(long) ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.sent.start.time ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ TargetEndpoint์— ์ง€์ •๋œ URL๋กœ ์š”์ฒญ ์ „์†ก์„ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„์„ ๋ฌธ์ž์—ด ํ˜•์‹์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'์ž…๋‹ˆ๋‹ค.

์ด ์‹œ๊ฐ„ ๊ฐ’์€ ํ•ด๋‹น 32๋น„ํŠธ ํƒ€์ž„์Šคํƒฌํ”„ ์ˆ˜๋Ÿ‰์˜ ๋ฌธ์ž์—ด ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 'Wed, 21 Aug 2013 19:16:47 UTC'๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’ 1377112607413์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.sent.start.timestamp Long ์ฝ๊ธฐ ์ „์šฉ

ํ”„๋ก์‹œ๊ฐ€ TargetEndpoint์— ์ง€์ •๋œ URL๋กœ ์š”์ฒญ ์ „์†ก์„ ์‹œ์ž‘ํ•œ ์‹œ๊ฐ„์„ ์ง€์ •ํ•˜๋Š” ํƒ€์ž„์Šคํƒฌํ”„ ๊ฐ’์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด 1534783015000์ž…๋‹ˆ๋‹ค. 1970๋…„ 1์›” 1์ผ(UTC) ์ž์ •๋ถ€ํ„ฐ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„(๋ฐ€๋ฆฌ์ดˆ)์„ ํฌํ•จํ•˜๋Š” 64๋น„ํŠธ(long) ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ
target.ssl.enabled Boolean ์ฝ๊ธฐ ์ „์šฉ

TargetEndpoint๊ฐ€ TLS/SSL์—์„œ ์‹คํ–‰ ์ค‘์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ
target.state ๋ฌธ์ž์—ด ์ฝ๊ธฐ ์ „์šฉ

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•œ TLS/SSL ์ธ์ฆ์„œ์˜ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

๋Œ€์ƒ ์‘๋‹ต
target.url ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

TargetEndpoint XML ํŒŒ์ผ ๋˜๋Š” ๋™์  ๋Œ€์ƒ URL์—์„œ ๊ตฌ์„ฑ๋œ URL(๋ฉ”์‹œ์ง€ ํ๋ฆ„ ์ค‘์— target.url๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ)์ž…๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋Š” ์ถ”๊ฐ€ ๊ฒฝ๋กœ ์š”์†Œ ๋˜๋Š” ์ฟผ๋ฆฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€์› ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์š”์ฒญ

variable

variable.expectedcn ์†์„ฑ์˜ ์ปจํ…Œ์ด๋„ˆ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํ‘œ์—์„œ๋Š” variable ๋ณ€์ˆ˜์˜ ์†์„ฑ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์†์„ฑ ์œ ํ˜• ์ฝ๊ธฐ/์“ฐ๊ธฐ ์„ค๋ช… ๋ฒ”์œ„ ์‹œ์ž‘
variable.expectedcn ๋ฌธ์ž์—ด ์ฝ๊ธฐ/์“ฐ๊ธฐ

TLS/SSL์—์„œ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ ์ผ๋ฐ˜ ์ด๋ฆ„์— ๋…ธ์ถœ๋œ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ ์š”์ฒญ

TLS ์ž‘์—…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ TLS ๊ตฌ์„ฑ ์˜ต์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”.