๐Ÿ›ณ๏ธ ๋ฐฐํฌ ๋ฐ ์ธํ”„๋ผ

์ง€๊ธˆ๊นŒ์ง€์˜ ์„ค์ •์œผ๋กœ๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๊ฐ€ merge๋  ๋•Œ๋งˆ๋‹ค EC2์— ์ ‘์†ํ•ด์„œ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์‰˜ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ง์ ‘ ์‹คํ–‰ํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฃผ๊ธฐ๊ฐ€ ๋นˆ๋ฒˆํ• ์ˆ˜๋ก ๋งค๋ฒˆ EC2์— ์ ‘๊ทผํ•˜์—ฌ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์€ ๋”์šฑ ๋ฒˆ๊ฑฐ๋กœ์›Œ์ง‘๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” CD ๊ธฐ์ˆ ์ธ Jenkins๋ฅผ ์ ์šฉํ•˜์—ฌ ์œ„์˜ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง CI/CD ํ”Œ๋กœ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ CI/CD๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. PR์ด ์ƒ์„ฑ๋˜๋ฉด Github Actions์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์œ„ ๊ณผ์ •์ด ์„ฑ๊ณตํ•ด์•ผ๋งŒ main ๋ธŒ๋žœ์น˜์— mergeํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. github์˜ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜์— mergeํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๊ณผ์ •์„ ์  ํ‚จ์Šค์—์„œ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ (CI) JARํŒŒ์ผ ๋นŒ๋“œ JARํŒŒ์ผ์„ EC2์— ์ „์†ก EC2 ์ ‘์† ..
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” PR์„ ๋‚ ๋ ธ์„ ๋•Œ ํ•ด๋‹น PR์ด ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ์ž๋™์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , ๋งŒ์•ฝ ํ…Œ์ŠคํŠธ์— ์‹คํŒจํ•œ๋‹ค๋ฉด mergeํ•  ์ˆ˜ ์—†๋„๋ก ๋ฉ”์ธ ๋ธŒ๋žœ์น˜๋ฅผ ๋ณดํ˜ธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง Github Actions ์„ค์ • Repository์— ๋“ค์–ด๊ฐ€์„œ Actions - Java with Gradle์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ์œ„ yml ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. name: Java CI with Gradle on: pull_request: branches: [ "main" ] permissions: contents: read jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: ๐Ÿณ JDK 11 ์„ธํŒ… uses: actions/..
์ด์ „ ๊ธ€์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™ํ•  ๋•Œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋Œ€์‹  Git Submodule์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด์„œ ์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง Git Submodule ๊นƒ ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‹ค ๋ณด๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค. ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋Š” ์™ธ๋ถ€์—์„œ ๊ฐœ๋ฐœํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋˜๊ฐ€ ๋‚ด๋ถ€ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์ž์ฃผ ์ƒ๊ธฐ๋Š” ์ด์Šˆ๋Š” ๋‘ ํ”„๋กœ์ ํŠธ๋ฅผ ์„œ๋กœ ๋ณ„๊ฐœ๋กœ ๋‹ค๋ฃจ๋ฉด์„œ๋„ ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋‹ค๋ฅธ ํ•˜๋‚˜ ์•ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Atom ํ”ผ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด์ž. Atom ํ”ผ๋“œ๋ฅผ ์ƒ์„ฑ..
์ด์ „ ๊ธ€์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ EC2 ์„œ๋ฒ„์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์šฉ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์— MYSQL์„ ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋Š” ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB๋ฅผ ์ง์ ‘ ์—ฐ๋™ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ”„๋ง ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ ์šฐ์„  ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ ์ž‘์„ฑํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. public class Member { private Long id; private String email; private String password; public Member(Long id, String email, String password) { this.id = id; this.email = email; this.password = password; } publ..
์ด์ „ ๊ธ€์—์„œ๋Š” EC2 ์„œ๋ฒ„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š” ๊ณผ์ •์„ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด์„œ ์ž๋™ํ™”๋ฅผ ํ–ˆ์—ˆ๋Š”๋ฐ์š”, ์‚ฌ์‹ค ์ด๋•Œ ๋ฐฐํฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‚ด์žฅ H2 DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ์—๋Š” Mysql ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„œ๋ฒ„์— ๋„์›Œ์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ์š”, ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ƒˆ๋กœ์šด EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ ๋’ค, ๊ทธ๊ณณ์—์„œ Mysql์„ ์‹คํ–‰์‹œ์ผœ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง ์ƒˆ๋กœ์šด EC2 ์ƒ์„ฑํ•˜๊ธฐ ํ•ด๋‹น ๊ธ€์˜ ๊ณผ์ •์—์„œ ์ง„ํ–‰ํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ๋ฉด ๋˜๋Š”๋ฐ์š”, ์ค‘๋ณต๋œ ๊ณผ์ •์ด์ง€๋งŒ ์•„์ฃผ ์‚ด์ง ์ฐจ์ด์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ๋ก€์ฐจ๋ก€ ์ง„ํ–‰ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € EC2 ๋Œ€์‹œ๋ณด๋“œ์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ธ์Šคํ„ด์Šค ์‹œ์ž‘์„ ํด๋ฆญํ•ด์ฃผ์„ธ์š”. ์ด๋ฆ„์€ ๋งˆ์Œ๋Œ€๋กœ ์ง€์–ด์ฃผ์„ธ์š”. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ OS ์ด๋ฏธ์ง€๋Š” Ubun..
์ด์ „ ๊ธ€์—์„œ๋Š” EC2 ์„œ๋ฒ„์—์„œ ์ง์ ‘ ๊นƒํ—ˆ๋ธŒ ํ”„๋กœ์ ํŠธ๋ฅผ clone๋ฐ›๊ณ  ์ง์ ‘ ์‹คํ–‰ํ•ด ๋ณด์•˜๋Š”๋ฐ์š”, ์‚ฌ์‹ค ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด์„œ ๋ฐฐํฌ๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ๊ท€์ฐฎ์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ด์„œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ปค๋ฐ‹์„ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ์„  EC2 ์ธ์Šคํ„ด์Šค์— ์ ‘๊ทผํ•˜์—ฌ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ PULL ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. PULL ์„ ๋ฐ›์€ ์ดํ›„์—๋Š” ์ด๋ฅผ ๋นŒ๋“œํ•˜๊ณ , ๊ธฐ์กด์— ์‹คํ–‰์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ข…๋ฃŒ์‹œํ‚ค๊ณ , ์ƒˆ๋กญ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ๋„์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๊ธฐ๋Šฅ์˜ ๊ฐœ๋ฐœ์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ ๋งˆ๋‹ค ํ•ด์•ผ ํ•˜๋Š” ๊ท€์ฐฎ์€ ๋ฐ˜๋ณต ์ž‘์—…๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ๋ฐ˜๋ณต ์ž‘์—…์„ ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด์„œ ์ž๋™ํ™” ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿง ์–ด๋– ํ•œ ์ˆœ์„œ๋กœ ๋ฐฐํฌ๊ฐ€ ์ด๋ฃจ์–ด์งˆ๊นŒ? ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์ „์—, ์šฐ์„  ๋ฐฐํฌ๊ฐ€ ์–ด๋– ํ•œ ์ˆœ์„œ๋กœ ์ด๋ฃจ์–ด์งˆ์ง€ ..
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด์ „ ๊ธ€์—์„œ ์ƒ์„ฑํ•œ EC2์— ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋„์›Œ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž์‹ ์˜ ์•„๋ฌด๋Ÿฐ ์Šคํ”„๋ง ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. (๋‹จ maven์ด ์•„๋‹Œ gradle์„ ๋Œ€์ƒ์œผ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค) ๐Ÿง ๊นƒํ—ˆ๋ธŒ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ํ”„๋กœ์ ํŠธ ์˜ฌ๋ฆฌ๊ธฐ ์ด๋ฏธ ๊นƒํ—ˆ๋ธŒ์— ํ”„๋กœ์ ํŠธ๋ฅผ ์˜ฌ๋ ค๋‘์…จ๋‹ค๋ฉด ํ•ด๋‹น ๊ณผ์ •์€ ๊ฑด๋„ˆ๋›ฐ์–ด๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์˜ˆ์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ฌ๋ ค๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ clone๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก, code ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๋’ค ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๐Ÿง EC2 ์—์„œ ํ”„๋กœ์ ํŠธ clone๋ฐ›๊ธฐ ์ด์ „ ๊ธ€์—์„œ๋„ ๋‹ค๋ฃจ์—ˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜์—ฌ ์ ‘์†ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ssh -i [ํ‚คํŽ˜์–ด] ubuntu@[ํผ๋ธ”๋ฆญ IPv4 ์ฃผ์†Œ] ssh -i mallang-ke..
๐Ÿง ์–ด๋ ค์šด ๋ฐฐํฌ ๋ฐฐํฌ๋Š” ์ฐธ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ง€๊ธˆ ์ •๋ง ๋„ˆ๋ฌด ์–ด๋ ค์›Œ์„œ ์šธ ๊ฒƒ ๊ฐ™์•„์š”. ํ•˜์ง€๋งŒ, ๋ฐฐํฌ๋ฅผ ์ฒ˜์Œ ํ•ด๋ณด๋Š” ๋ชจ๋‘๊ฐ€ ๋‹ค ์ €์™€ ๊ฐ™์€ ๊ฐ์ •์ผ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐฐํฌ๋ฅผ ์ฒ˜์Œํ•˜๋Š” ์ œ๊ฐ€, ์ด ๊ธ€์„ ์จ๊ฐ€๋ฉด์„œ ์ž๋™ ๋ฐฐํฌ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ์„ธ์„ธํžˆ ์ •๋ฆฌํ•จ์œผ๋กœ์จ, ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์œผ๋กœ ์ด๋ ‡๊ฒŒ ์ •๋ฆฌ๋ฅผ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๋ฌด์—‡๋ณด๋‹ค, ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋“ค์ด ๋„ˆ๋ฌด ๋ถˆ์นœ์ ˆํ•˜๋‹ฌ๊นŒ... ์ •๋ง ์•„๋ฌด๊ฒƒ๋„ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์ด ์ด๊ฑธ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ ..? ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์–ด์„œ ์ œ๊ฐ€ ๊ทธ๋ƒฅ ์ €๋ฅผ ์œ„ํ•ด์„œ ์ •๋ฆฌ๋ฅผ ํ•˜๊ณ  ์žˆ๋„ค์š”..๐Ÿ˜ญ) ์˜ˆ์ƒํ•˜๋Š” ๋ชฉ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. AWS ๊ณ„์ • ๋งŒ๋“ค๊ธฐ ~ EC2 ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๊ณ  ์ ‘์†ํ•˜๊ธฐ (์ด๋ฒˆ ๊ธ€) ๊ฐ„๋‹จํ•œ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ณ  ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ฆฌ๊ธฐ -> EC2์—์„œ ์†์ˆ˜ clone๋ฐ›์•„ ..
๋ง ๋ž‘
'๐Ÿ›ณ๏ธ ๋ฐฐํฌ ๋ฐ ์ธํ”„๋ผ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก