Beanstalk

๊ฐœ์š”

AWS Elastic Beanstalk๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜/์›น ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๊ณ , ํ™•์žฅํ•˜๊ณ , ๊ด€๋ฆฌํ•˜๋Š”๋ฐ ์žˆ์–ด ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ์™„์ „ ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค

Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Apache, Nginx, Passenger, IIS์™€ ๊ฐ™์€ ์นœ์ˆ™ํ•œ ์„œ๋ฒ„์—์„œ ๊ฐœ๋ฐœ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์„œ๋น„์Šค๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๊ณ  ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค

๊ฐœ๋ฐœ์ž๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์—…๋กœ๋“œํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด AWS Elastic Beanstalk์—์„œ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์—์„œ ๋ฆฌ์†Œ์Šค ํ”„๋กœ๋น„์ €๋‹, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์ž๋™ ํฌ๊ธฐ ์กฐ์ • ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ฐ™์€ ๋ชจ๋“  ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

Elastic Beanstalk ์ž์ฒด ์š”๊ธˆ์€ ์—†์œผ๋ฉฐ, ๋ฐฐํฌ์‹œ ์‚ฌ์šฉ๋˜๋Š” ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๋ฉด ๋จ

๊ฐœ๋…

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

Elastic Beanstalk ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ™˜๊ฒฝ, ๋ฒ„์ „ ๋ฐ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ํฌํ•จํ•œ Elastic Beanstalk ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋…ผ๋ฆฌ์ ์ธ ํ•ญ๋ชฉ์ด๋ฉฐ, ๊ฐœ๋…์ ์œผ๋กœ ํด๋”์™€ ์œ ์‚ฌ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ผ๋ถ€๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๋งŽ์€ ๋ฒ„์ „์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ณ , ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์€ ๊ณ ์œ ํ•จ ์‹คํ–‰ ์ค‘์ธ ํ™˜๊ฒฝ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ด๋ฏธ ์—…๋กœ๋“œํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ์—…๋กœ๋“œํ•˜๊ณ  ์ฆ‰์‹œ ๋ฐฐํฌํ•  ์ˆ˜๋„ ์žˆ์Œ ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ์—…๋กœ๋“œํ•˜์—ฌ ํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „๊ณผ ๋‹ค๋ฅธ ๋ฒ„์ „ ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜๋„ ์žˆ๋‹ค

ํ™˜๊ฒฝ

ํ™˜๊ฒฝ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ์‹คํ–‰ ์ค‘์ธ AWS ๋ฆฌ์†Œ์Šค ๋ชจ์Œ ๊ฐ ํ™˜๊ฒฝ์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „๋งŒ ์‹คํ–‰ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „ ๋˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค ํ™˜๊ฒฝ์„ ์ƒ์„ฑํ•˜๋ฉด Elastic Beanstalk์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•˜๊ฒŒ ๋œ๋‹ค

ํ™˜๊ฒฝ ํ‹ฐ์–ด

ํ™˜๊ฒฝ ํ‹ฐ์–ด๋Š” ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์œ ํ˜•์„ ์ง€์ •ํ•˜๊ณ  Elastic Beanstalk์—์„œ ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๋น„์ €๋‹ํ•˜๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฒฐ์ • ์˜ˆ๋กœ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›น ์„œ๋ฒ„ ํ™˜๊ฒฝ ํ‹ฐ์–ด์—์„œ ์‹คํ–‰๋˜๋ฉฐ, Amazon Simple Queue Service(Amazon SQS) ๋Œ€๊ธฐ์—ด์—์„œ ์ž‘์—…์„ ๊ฐ€์ ธ์˜ค๋Š” ํ™˜๊ฒฝ์€ ์ž‘์—…์ž ํ™˜๊ฒฝ ํ‹ฐ์–ด์—์„œ ์‹คํ–‰๋˜๊ฒŒ ๋œ๋‹ค

ํ™˜๊ฒฝ ๊ตฌ์„ฑ

ํ™˜๊ฒฝ ๊ตฌ์„ฑ์€ ํ™˜๊ฒฝ ๋ฐ ์—ฐ๊ด€๋œ ๋ฆฌ์†Œ์Šค์˜ ์ž‘๋™ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ ์„ค์ •์˜ ๋ชจ์Œ์„ ๊ตฌ๋ถ„ ํ™˜๊ฒฝ์˜ ๊ตฌ์„ฑ ์„ค์ •์„ ์—…๋ฐ์ดํŠธํ•˜๋ฉด Elastic Beanstalk๊ฐ€ ์ž๋™์œผ๋กœ ๊ธฐ์กด ๋ฆฌ์†Œ์Šค์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ์‚ญ์ œํ•˜๊ณ  ์ƒˆ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ฐฐํฌํ•จ (๋ณ€๊ฒฝ ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)

์ €์žฅ๋œ ๊ตฌ์„ฑ

์ €์žฅ๋œ ๊ตฌ์„ฑ์€ ๊ณ ์œ ํ•œ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์ž‘์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ Elastic Beanstalk ์ฝ˜์†”, EB CLI, AWS CLI ๋˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ๋œ ๊ตฌ์„ฑ์„ ์ƒ์„ฑ ๋ฐ ์ˆ˜์ •ํ•˜๊ณ  ํ™˜๊ฒฝ์— ์ ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค

ํ”Œ๋žซํผ

ํ”Œ๋žซํผ์€ ์šด์˜ ์ฒด์ œ(OS), ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์‹คํ–‰ ์‹œ๊ฐ„, ์›น ์„œ๋ฒ„, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„ ๋ฐ Elastic Beanstalk ๊ตฌ์„ฑ ์š”์†Œ์˜ ์กฐํ•ฉ ํ”Œ๋žซํผ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค. Elastic Beanstalk๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์„ ์ œ๊ณต

๋ฐฐํฌ

  1. Elastic Beanstalk๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑ

  2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ๋ฒˆ๋“ค์˜ ํ˜•ํƒœ(์˜ˆ: Java .war ํŒŒ์ผ)๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์„ Elastic Beanstalk์— ์—…๋กœ๋“œ

  3. Elastic Beanstalk๊ฐ€ ์ž๋™์œผ๋กœ ํ™˜๊ฒฝ์„ ์‹คํ–‰ํ•˜๊ณ  ์ฝ”๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ AWS ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ตฌ์„ฑ

  4. ํ™˜๊ฒฝ ์‹คํ–‰ ํ›„์—๋Š” ํ™˜๊ฒฝ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜๊ณ  ์ƒˆ๋กœ์šด ์•ฑ ๋ฒ„์ „์„ ๋ฐฐํฌ

๋ฐฐํฌ์‹œ ํ•„์š”ํ•œ ์ •๋ณด

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ

  2. ๋ฆฌ์ „

  3. ์Šคํƒ ํƒ€์ž…(Node, Java, PHP ๋“ฑ.. + ์ปค์Šคํ…€๋„ ๊ฐ€๋Šฅ)

  4. ๋‹จ์ผ ์ธ์Šคํ„ด์Šค or ์˜คํ† ์Šค์ผ€์ผ๋ง ๋ฐ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

  5. RDS ์„ค์ • (optional)

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ & ํ™˜๊ฒฝ ๊ด€๊ณ„

  • ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์€ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์— ๋ฐฐํฌ ๊ฐ€๋Šฅ

  • ํ•˜๋‚˜์˜ ํ™˜๊ฒฝ์—๋Š” ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งŒ ์ ์šฉ ๊ฐ€๋Šฅ

๋ฐฐํฌ

๋ฐฐํฌ ์ •์ฑ…

์ •์ฑ…

๋ฐฐํฌ์‹คํŒจ์‹œ ์˜ํ–ฅ๋„

๋ฐฐํฌ ์‹œ๊ฐ„

๊ฐ€๋™ ์ค‘์ง€

DNS ๋ณ€๊ฒฝ

๋กค๋ฐฑ ํ”„๋กœ์„ธ์Šค

์ฝ”๋“œ ๋ฐฐํฌ ์œ„์น˜

ํ•œ๋ฒˆ์— ๋ชจ๋‘

๊ฐ€๋™ ์ค‘์ง€

โฑ

์˜ˆ

์•„๋‹ˆ์š”

์ˆ˜๋™ ์žฌ๋ฐฐํฌ

๊ธฐ์กด ์ธ์Šคํ„ด์Šค

๋กค๋ง

๋ฐฐ์น˜๊ฐ€ ์ œ์™ธ๋จ

โฑโฑ

์•„๋‹ˆ์˜ค

์•„๋‹ˆ์˜ค

์ˆ˜๋™ ์žฌ๋ฐฐํฌ

๊ธฐ์กด ์ธ์Šคํ„ด์Šค

์ถ”๊ฐ€ ๋ฐฐ์น˜๋ฅผ ์‚ฌ์šฉํ•œ ๋กค๋ง

๋กค๋ง๊ณผ ์œ ์‚ฌํ•˜๋‚˜ ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ตœ์†Œํ™”

โฑโฑโฑ

์•„๋‹ˆ์˜ค

์•„๋‹ˆ์˜ค

์ˆ˜๋™ ์žฌ๋ฐฐํฌ

์ƒˆ ์ธ์Šคํ„ด์Šค ๋ฐ ๊ธฐ์กด ์ธ์Šคํ„ด์Šค

๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅ

์ตœ์†Œํ™”

โฑโฑโฑโฑ

์•„๋‹ˆ์˜ค

์•„๋‹ˆ์˜ค

์ƒˆ ์ธ์Šคํ„ด์Šค ์ข…๋ฃŒ

์ƒˆ ์ธ์Šคํ„ด์Šค

ํŠธ๋ž˜ํ”ฝ ๋ถ„ํ• 

์ƒˆ ๋ฒ„์ „์œผ๋กœ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ…

โฑโฑโฑโฑ

์•„๋‹ˆ๋กœ

์•„๋‹ˆ๋กœ

ํŠธ๋ž˜ํ”ฝ ์žฌ๋ผ์šฐํŒ… ๋ฐ ์ƒˆ ์ธ์Šคํ„ด์Šค ์ข…๋ฃŒ

์ƒˆ ์ธ์Šคํ„ด์Šค

๋ธ”๋ฃจ/๊ทธ๋ฆฐ

์ตœ์†Œํ™”

โฑโฑโฑโฑ

์•„๋‹ˆ์˜ค

์˜ˆ

Swap URL

์ƒˆ ์ธ์Šคํ„ด์Šค

All at once

Rolling

Rolling with additional batch

Immutable

Blue/Green

ํ”Œ๋žซํผ ์—…๋ฐ์ดํŠธ

Elastic Beanstalk์—์„œ๋Š” ์ƒˆ ํ”Œ๋žซํผ ๋ฒ„์ „์„ ์ •๊ธฐ์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šคํ•˜์—ฌ ๋ชจ๋“  Linux ๊ธฐ๋ฐ˜ ๋ฐ Windows Server ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณต ๊ด€๋ฆฌํ˜• ํ”Œ๋žซํผ ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์˜ˆ์•ฝ๋œ ์œ ์ง€ ๊ด€๋ฆฌ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ตœ์‹  ํ”Œ๋žซํผ ๋ฒ„์ „์œผ๋กœ ์ž๋™์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋„๋ก ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ

  • ํŒจ์น˜ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ

  • ๋งˆ์ด๋„ˆ ๋ฐ ํŒจ์น˜ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ

    ์˜ˆ) ํ”Œ๋žซํผ ๋ฒ„์ „ : 2.0.7

๋ชจ๋‹ˆํ„ฐ๋ง

์ฝ˜์†”์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์šด์˜ ์ •๋ณด๋ฅผ ํ™•์ธํ• ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ™˜๊ฒฝ์˜ ์ƒํƒœ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธ ๊ฐ€๋Šฅ ๊ธฐ๋ณธ์ ์œผ๋กœ, ๊ธฐ๋ณธ CloudWatch ์ธก์ •์น˜๋งŒ ํ™œ์„ฑํ™”๋˜๋ฉฐ 5๋ถ„ ๊ฐ„๊ฒฉ์˜ ๋ฐ์ดํ„ฐ ํ™•์ธ

๋กœ๊ทธ

Elastic Beanstalk ํ™˜๊ฒฝ์˜ Amazon EC2 ์ธ์Šคํ„ด์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๊ตฌ์„ฑ ํŒŒ์ผ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑ๋˜๋ฉฐ, ์ƒ์„ฑ๋œ ๋กœ๊ทธ๋Š” ๊ฐœ๋ณ„ ์ธ์Šคํ„ด์Šค์— ๋กœ์ปฌ๋กœ ์ €์žฅ

  • ํ…Œ์ผ๋กœ๊ทธ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋กœ๊ทธ ํŒŒ์ผ์˜ ๋งˆ์ง€๋ง‰ 100์ค„ Elastic Beanstalk ์ž‘์—… ๋กœ๊ทธ์™€ ์›น ์„œ๋ฒ„ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์˜ ๋กœ๊ทธ

  • ๋ฒˆ๋“ค๋กœ๊ทธ ๋‹ค์–‘ํ•œ ๋กœ๊ทธ ํŒŒ์ผ์˜ ์ „์ฒด ๋กœ๊ทธ๋กœ, yum ๋ฐ cron์˜ ๋กœ๊ทธ์™€ AWS CloudFormation์˜ ์—ฌ๋Ÿฌ ๋กœ๊ทธ๊ฐ€ ํฌํ•จ ๋ฒˆ๋“ค ๋กœ๊ทธ๋ฅผ ์š”์ฒญํ•˜๋ฉด ํ™˜๊ฒฝ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ „์ฒด ๋กœ๊ทธ ํŒŒ์ผ์„ ZIP ์•„์นด์ด๋ธŒ๋กœ ํŒจํ‚ค์ง€ํ•˜๊ณ  ์ด๋ฅผ Amazon S3์— ์—…๋กœ๋“œ

๊ธฐ๋ณธ์„ค์ •์œผ๋กœ๋Š” ํ…Œ์ผ ๋ฐ ๋ฒˆ๋“ค ๋กœ๊ทธ๋Š” ์ƒ์„ฑ๋œ ํ›„ 15๋ถ„์ด ์ง€๋‚˜๋ฉด S3์—์„œ ์ œ๊ฑฐ๋จ ๋กœ๊ทธ ์œ ์ง€๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ต์ฒด์„ค์ •์„ ํ•˜๋ฉด ์˜๊ตฌ ๋ณด๊ด€ ๊ฐ€๋Šฅ CloudWatch Logs๋กœ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Œ

Last updated