5์ฃผ์ฐจ wls

2022. 9. 1. 20:25ใ†์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

 ๐Ÿ” Q1. API๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

API๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์šด์˜์ฒด์ œ๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ํŒŒ์ผ ์ œ์–ด, ์ฐฝ ์ œ์–ด, ํ™”์ƒ ์ฒ˜๋ฆฌ, ๋ฌธ์ž ์ œ์–ด ๋“ฑ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

API๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ, ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ์ •์˜ ๋ฐ ํ”„๋กœํ† ์ฝœ ์„ธํŠธ๋กœ๋„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์†Œํ”„ํŠธ์›จ์–ด์˜ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์•Œ์ง€ ๋ชปํ•˜๋”๋ผ๋„ ์ œํ’ˆ ๋˜๋Š” ์„œ๋น„์Šค๊ฐ€ ์„œ๋กœ ์˜์‚ฌ์†Œํ†ต์„ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ์„ ๋ณด๋‹ค ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ ์ธ๋ ฅ๊ณผ ์‹œ๊ฐ„, ๋น„์šฉ ๋“ฑ์„ ์ ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ์–ด ๋งŽ์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ์—…์—์„œ๋Š” ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ฉ ๋ฐ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์—ฐ๊ตฌ, ๊ฐœ๋ฐœ์„ ํ†ตํ•ด ์„ค๊ณ„ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

 

 ๐Ÿ” Q2. Client์™€ Sever๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Client(์„œ๋น„์Šค๋ฅผ ์š”์ฒญ)

ํด๋ผ์ด์–ธํŠธ๋ž€, ์„œ๋ฒ„์—์„œ ์„œ๋น„์Šค๋ฅผ ์š”๊ตฌํ•˜๋Š” ์‚ฌ์šฉ์ž๋‚˜ ์ปดํ“จํ„ฐ์ด๋‹ค. ์›น๋ธŒ๋ผ์šฐ์ €๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋™์ž‘ํ•˜์—ฌ, ๊ทธ๋ž˜์„œ ์›น๋ธŒ๋ผ์šฐ์ €์ธ ํฌ๋กฌ, ํŒŒ์ด์–ดํญ์Šค, ์ต์Šคํ”Œ๋กœ๋Ÿฌ๋ฅผ โ€˜์›น ํด๋ผ์ด์–ธํŠธโ€™ ๋ผ๊ณ  ํ•œ๋‹ค.

Server(์„œ๋น„์Šค๋ฅผ ์ œ๊ณต)

์„œ๋ฒ„๋ž€, ์„œ๋ฒ„ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ•˜๋“œ์›จ์–ด์ด๋‹ค. ์›น์„œ๋ฒ„๋Š” ์„œ๋ฒ„์—์„œ ๋™์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜์„œ โ€˜์›น์„œ๋ฒ„โ€™ ๋ผ๊ณ  ํ•œ๋‹ค.

 

๐Ÿ” Q3. WAS๋ž€ ๋ฌด์—‡์ธ๊ฐ€? Web Server์™€ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

WAS(Web Application Server) DB์กฐํšŒ๋‚˜ ๋‹ค์–‘ํ•œ ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋™์ ์ธ ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ Application Server. HTTP๋ฅผ ํ†ตํ•ด ์ปดํ“จํ„ฐ๋‚˜ ์žฅ์น˜์— ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ˆ˜ํ–‰ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง„์ด๋‹ค. ์ฆ‰, JSP,Servlet ๊ตฌ๋™ ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค.

๋ถ„์‚ฐ ํŠธ๋žœ์žญ์…˜, ๋ณด์•ˆ, ๋ฉ”์‹œ์ง•, ์“ฐ๋ ˆ๋“œ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. DB์„œ๋ฒ„์™€ ๊ฐ™์ด ์ˆ˜ํ–‰๋˜๋ฉฐ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ DB์ ‘์† ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. Tomcat, JBoss, Jeus, Web Sphere ๋“ฑ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.

WAS๋Š” Web Server์™€ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์— ์žˆ์–ด ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค. WAS์˜ ๊ฒฝ์šฐ DB์กฐํšŒ๋‚˜ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ, ๋‹จ์ˆœํ•œ ์ •์  ์ปจํ…์ธ ์˜ ๊ฒฝ์šฐ Web Server๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ฆ‰, WAS๋Š” ๋™์  ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„์ด๋ฉฐ, Web Server๋Š” ์ •์  ์ปจํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„์ด๋‹ค.

 

๐Ÿ” Q4. HTTP ํ”„๋กœํ† ์ฝœ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์ธํ„ฐ๋„ท์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋Š” ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์˜ ํ”„๋กœํ† ์ฝœ๋กœ TCP/IP ์œ„์—์„œ ์ž‘๋™ํ•œ๋‹ค. HTTP๋Š” ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋“ ์ง€ ์ „์†กํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋ผ ์žˆ๋‹ค. HTTP๋กœ ๋ณด๋‚ผ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” HTML๋ฌธ์„œ, ์ด๋ฏธ์ง€, ๋™์˜์ƒ, ์˜ค๋””์˜ค, ํ…์ŠคํŠธ ๋ฌธ์„œ ๋“ฑ ์—ฌ๋Ÿฌ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

 

 ๐Ÿ” Q5. Restful API๋Š” ๋ฌด์—‡์ธ๊ฐ€?

REST ์•„ํ‚คํ…์ฒ˜์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ค€์ˆ˜ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค

API๊ฐ€ RESTful๋กœ ๊ฐ„์ฃผ๋˜๋ ค๋ฉด ๋‹ค์Œ ๊ธฐ์ค€์„ ๋”ฐ๋ฅธ๋‹ค.

  • ํด๋ผ์ด์–ธํŠธ, ์„œ๋ฒ„ ๋ฐ ๋ฆฌ์†Œ์Šค๋กœ ๊ตฌ์„ฑ๋˜์—ˆ์œผ๋ฉฐ ์š”์ฒญ์ด HTTP๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜
  • ์Šคํ…Œ์ดํŠธ๋ฆฌ์Šค(stateless) ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜: ์š”์ฒญ ๊ฐ„์— ํด๋ผ์ด์–ธํŠธ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ, ๊ฐ ์š”์ฒญ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ณ  ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์Œ
  • ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ฐ„์†Œํ™”ํ•˜๋Š” ์บ์‹œ ๊ฐ€๋Šฅ ๋ฐ์ดํ„ฐ
  • ์ •๋ณด๊ฐ€ ํ‘œ์ค€ ํ˜•์‹์œผ๋กœ ์ „์†ก๋˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„ ํ†ตํ•ฉ ์ธํ„ฐํŽ˜์ด์Šค. ์—ฌ๊ธฐ์— ํ•„์š”ํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    • ์š”์ฒญ๋œ ๋ฆฌ์†Œ์Šค๊ฐ€ ์‹๋ณ„ ๊ฐ€๋Šฅํ•˜๋ฉฐ ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋œ ํ‘œํ˜„๊ณผ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•œ๋‹ค.
    • ์ˆ˜์‹ ํ•œ ํ‘œํ˜„์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜๋˜๋Š” ์ž๊ธฐ ๊ธฐ์ˆ ์ (self-descriptive) ๋ฉ”์‹œ์ง€์— ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ• ์ง€ ์„ค๋ช…ํ•˜๋Š” ์ •๋ณด๊ฐ€ ์ถฉ๋ถ„ํžˆ ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.
    • ํ•˜์ดํผ๋ฏธ๋””์–ด: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•œ ํ›„ ํ•˜์ดํผ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ˜„์žฌ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ ๊ธฐํƒ€ ๋ชจ๋“  ์ž‘์—…์„ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์š”์ฒญ๋œ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐ ๊ด€๋ จ๋œ ์„œ๋ฒ„(๋ณด์•ˆ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋“ฑ์„ ๋‹ด๋‹น)์˜ ๊ฐ ์œ ํ˜•์„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณผ ์ˆ˜ ์—†๋Š” ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์ฒด๊ณ„ํ™”ํ•˜๋Š” ๊ณ„์ธตํ™”๋œ ์‹œ์Šคํ…œ.
  • ์ฝ”๋“œ ์˜จ๋””๋งจ๋“œ(์„ ํƒ ์‚ฌํ•ญ): ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ฅผ ์ „์†กํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ.

DIY Section

๐Ÿ”‘ Q1. URL์™€ URI์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€?

URL์€ ์›น ์ฃผ์†Œ๋ผ๊ณ  ํ•˜๋ฉฐ, ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ ์ƒ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ์–ด๋”” ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•œ ๊ทœ์•ฝ์ด๋‹ค. URL์€ ํŠน์ • ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ํ†ตํ•ฉ ์ž์› ์‹๋ณ„์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์›น ๊ธฐ์ˆ ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋…ผ๋ฆฌ์  ๋˜๋Š” ๋ฌผ๋ฆฌ์  ๋ฆฌ์†Œ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด ์‹œํ€€์Šค๋‹ค.

URL๊ณผ URL์˜ ์ฐจ์ด์ ์€ ์‹๋ณ„๊ณผ ์œ„์น˜์˜ ์ฐจ์ด๋‹ค. ํŠน์ • ์ฃผ์†Œ http://opentutorials.org:3000/main?id=HTML&page=12Visit Website๋ฅผ ์˜ˆ๋กœ ๋“ค์—ˆ์„ ๋•Œ

http://opentutorials.org:3000/main๊นŒ์ง€๋Š” URL์ด๋ฉฐ http://opentutorials.org:3000/main?id=HTML&page=12๊นŒ์ง€๋Š” URI์ด๋‹ค.

?id=HTML&page=12 ํ•ด๋‹น ๋ถ€๋ถ„์ด id๊ฐ’์„ HTML๋กœ, page๋ฅผ 12๋กœ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ์‹๋ณ„ ๋ถ€๋ถ„์„ ์˜๋ฏธํ•˜๋ฉฐ, ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

 ๐Ÿ”‘ Q2. Scheduler

์Šคํ”„๋ง์—์„œ Scheduler๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์— Cron๋ฐฉ์‹๊ณผ fixed๋ฐฉ์‹์ด ์žˆ๋‹ค. cron๋ฐฉ์‹์€ ์ •ํ•ด์ง„ ์š”์ผ, ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์„ค์ •์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ cron = * * * * * * ์— ์ดˆ, ๋ถ„, ์‹œ, ์ผ, ์›”, ์š”์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋‚ ์งœ์— ๋Œ€ํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

fixed ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ์‹คํ–‰ ๊ธฐ์ ์—์„œ ํŠน์ • ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„ ๊ธฐ๋Šฅ์ด ์ž‘๋™ํ•˜๊ฒŒ ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

fixedDelay : milliseconds ๋‹จ์œ„๋กœ, ์ด์ „ ์ž‘์—…์ด ๋๋‚œ ์‹œ์ ์œผ๋กœ ๋ถ€ํ„ฐ ๊ณ ์ •๋œ ์‹œ๊ฐ„์„ ์„ค์ •ํ•œ๋‹ค. ex) fixedDelay = 5000
fixedDelayString : fixedDelay์™€ ๊ฐ™์€๋ฐ property์˜ value๋งŒ ๋ฌธ์ž์—ด๋กœ ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. ex) fixedDelay = "5000"
fixedRate : milliseconds ๋‹จ์œ„๋กœ, ์ด์ „ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๊ธฐ ์‹œ์ž‘ํ•œ ์‹œ์ ์œผ๋กœ ๋ถ€ํ„ฐ ๊ณ ์ •๋œ ์‹œ๊ฐ„์„ ์„ค์ •ํ•œ๋‹ค. ex) fixedRate = 3000
fixedRateString : fixedDelay์™€ ๊ฐ™์€๋ฐ property์˜ value๋งŒ ๋ฌธ์ž์—ด๋กœ ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค. ex) fixedRate = "3000"

fixedDelay์™€ fixedRate์˜ ์ฐจ์ด๊ฐ€ ๋ณด์ด๋Š”๋ฐ Rate์˜ ๊ฒฝ์šฐ ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ๊ฐ„๊ณผ ์ƒ๊ด€์—†์ด ์ผ์ • ์ฃผ๊ธฐ๋งˆ๋‹ค ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  Delay์˜ ๊ฒฝ์šฐ ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ๊ฐ„ ํฌํ•จ ์ž‘์—…์„ ๋งˆ์นœ ํ›„ ์ฃผ๊ธฐ ํƒ€์ด๋จธ๊ฐ€ ๋Œ์•„ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๋Š” ์ฐจ์ด๋ฅผ ๋ณด์ธ๋‹ค.

 

 ๐Ÿ”‘ Q3.@RequestMapping์ด๋ž€?

์šฐ๋ฆฌ๋Š” ํŠน์ • uri๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด Controller์—์„œ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ• ์ง€ ์ •์˜๋ฅผ ํ•œ๋‹ค.

์ด๋•Œ ๋“ค์–ด์˜จ ์š”์ฒญ์„ ํŠน์ • ๋ฉ”์„œ๋“œ์™€ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด @RequestMapping์ด๋‹ค.

@RequestMapping์—์„œ ๊ฐ€์žฅ ๋งŽ์ด์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์€ value์™€ method์ด๋‹ค.

value๋Š” ์š”์ฒญ๋ฐ›์„ url์„ ์„ค์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

method๋Š” ์–ด๋–ค ์š”์ฒญ์œผ๋กœ ๋ฐ›์„์ง€ ์ •์˜ํ•˜๊ฒŒ ๋œ๋‹ค.(GET, POST, PUT, DELETE ๋“ฑ)

@RequestMapping(value = "/hello", method = RequestMethod.GET)

์˜ˆ์‹œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋“ค์–ด๋ณด๋ฉด ์ด๋Ÿฐ์‹์œผ๋กœ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ /hello๋ผ๋Š” ๋‚ด์šฉ์œผ๋กœ GET, POST, PUT, DELETE๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋‚˜ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.

@RestController
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String helloGet(...) {
        ...
    }

    @RequestMapping(value = "/hello", method = RequestMethod.POST)
    public String helloPost(...) {
        ...
    }

    @RequestMapping(value = "/hello", method = RequestMethod.PUT)
    public String helloPut(...) {
        ...
    }

    @RequestMapping(value = "/hello", method = RequestMethod.DELETE)
    public String helloDelete(...) {
        ...
    }
}

์ด๋Ÿฐ์‹์œผ๋กœ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ ‡์ง€๋งŒ ๋ถˆํŽธํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

๊ทธ๋ž˜์„œ ์ฐพ์€ ๋ฐฉ๋ฒ•์ด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

@RestController
@RequestMapping(value = "/hello")
public class HelloController {

    @GetMapping()
    public String helloGet(...) {
        ...
    }

    @PostMapping()
    public String helloPost(...) {
        ...
    }

    @PutMapping()
    public String helloPut(...) {
        ...
    }

    @DeleteMapping()
    public String helloDelete(...) {
        ...
    }
}

๊ณตํ†ต์ ์ธ url์€ class์— @RequestMapping์œผ๋กœ ์„ค์ •์„ ํ•ด์ฃผ์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  @GetMapping, @PostMapping, @PutMapping, @DeleteMapping์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ƒ๋žต์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

๋’ค์— ์ถ”๊ฐ€์ ์œผ๋กœ url์„ ๋ถ™์ด๊ณ  ์‹ถ๋‹ค๋ฉด @GetMapping, @PostMapping, @PutMapping, @DeleteMapping ์— ์ถ”๊ฐ€์ ์ธ url์„ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

@RestController
@RequestMapping(value = "/hello")
public class HelloController {
    @GetMapping("/hi")
    public String helloGetHi(...) {
        ...
    }
}

์œ„์—์žˆ๋Š” helloGetHi์— ๋“ค์–ด๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š” /hello/hi๋กœ ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.

์ถ”๊ฐ€์ ์ธ ๋‚ด์šฉ์œผ๋กœ @RequestMapping์€ Class์™€ Method์— ๋ถ™์ผ ์ˆ˜ ์žˆ๊ณ  @GetMapping, @PostMapping, @PutMapping, @DeleteMapping๋“ค์€ Method์—๋งŒ ๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.

 

 ๐Ÿ”‘ Q4. GitHub Action๋ž€?

GitHub Actions๋Š” ์ฝ”๋“œ ์ €์žฅ์†Œ(repository)๋กœ ์œ ๋ช…ํ•œ GitHub์—์„œ ์ œ๊ณตํ•˜๋Š” CI(Continuous Integration, ์ง€์† ํ†ตํ•ฉ)์™€ CD(Continuous Deployment, ์ง€์† ๋ฐฐํฌ)๋ฅผ ์œ„ํ•œ ๋น„๊ต์  ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ GitHub์—์„œ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐœ์ธ์€ ๋ˆ„๊ตฌ๋‚˜ GitHub์—์„œ ์ฝ”๋“œ ์ €์žฅ์†Œ๋ฅผ ๋ฌด๋ฃŒ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ CI/CD ์„œ๋น„์Šค ๋Œ€๋น„ ์ง„์ž…์žฅ๋ฒฝ์ด ๋‚ฎ์€ ํŽธ์ž…๋‹ˆ๋‹ค.

GitHub Actions๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ฝ”๋“œ ์ €์žฅ์†Œ์—์„œ ์–ด๋–ค ์ด๋ฒคํŠธ(event)๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํŠน์ • ์ž‘์—…์ด ์ผ์–ด๋‚˜๊ฒŒ ํ•˜๊ฑฐ๋‚˜ ์ฃผ๊ธฐ์ ์œผ๋กœ ์–ด๋–ค ์ž‘์—…๋“ค์„ ๋ฐ˜๋ณตํ•ด์„œ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ฝ”๋“œ ์ €์žฅ์†Œ์— Pull Request๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด GitHub Actions๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ฝ”๋“œ ๋ณ€๊ฒฝ๋ถ„์— ๋ฌธ์ œ๊ฐ€ ์—†๋Š”์ง€ ๊ฐ์ข… ๊ฒ€์‚ฌ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ ์š”. ์–ด๋–ค ์ƒˆ๋กœ์šด ์ฝ”๋“œ๊ฐ€ ๋ฉ”์ธ(main) ๋ธŒ๋žœ์น˜์— ์œ ์ž…(push)๋˜๋ฉด GitHub Actions๋ฅผ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋นŒ๋“œ(build)ํ•˜๊ณ  ์ƒ์šฉ ์„œ๋ฒ„์— ๋ฐฐํฌ(deploy)ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งค์ผ ๋ฐค ํŠน์ • ์‹œ๊ฐ์— ๊ทธ๋‚  ํ•˜๋ฃจ์— ๋Œ€ํ•œ ํ†ต๊ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ์—์„œ ์ง€์†์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ๋ฐ˜๋ณต ์ž‘์—…๋“ค์„ ์—…๊ณ„์—์„œ๋Š” ์†Œ์œ„ CI/CD๋ผ๊ณ  ๋งŽ์ด ์ค„์—ฌ์„œ ๋ถ€๋ฅด๋Š”๋ฐ์š”. ์‚ฌ๋žŒ์ด ๋งค๋ฒˆ ์ง์ ‘ ํ•˜๊ธฐ์—๋Š” ๋น„ํšจ์œจ์ ์ธ๋ฐ๋‹ค๊ฐ€ ์‹ค์ˆ˜ํ•  ์œ„ํ—˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— GitHub Actions์™€ ๊ฐ™์€ ์ž๋™ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

GitHub Actions๋Š” ๊ธฐ์กด CI/CD ์„œ๋น„์Šค ๋Œ€๋น„ ๊ฐ„ํŽธํ•œ ์„ค์ •๊ณผ ๋†’์€ ์ ‘๊ทผ์„ฑ์œผ๋กœ ํŠนํžˆ ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ๋งŽ์€ ํ˜ธ์‘์„ ์–ป๊ณ  ์žˆ๋Š”๋ฐ์š”. ์˜ˆ์ „์—๋Š” CI/CD๊ฐ€ DevOps ์—”์ง€๋‹ˆ์–ด์˜ ์ „์œ ๋ฌผ๋กœ๋งŒ ์—ฌ๊ฒจ์ง€๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ ์ตœ๊ทผ์—๋Š” GitHub Actions์„ ํ†ตํ•ด์„œ ์ผ๋ฐ˜ ๊ฐœ๋ฐœ์ž๋“ค๋„ ์–ด๋ ต์ง€ ์•Š๊ฒŒ CI/CD ์„ค์ •์„ ์Šค์Šค๋กœ ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๐Ÿ”‘ Q5. POSTMAN์ด๋ž€ ๋ฌด์—‡์ด๊ณ  ์™œ ์‚ฌ์šฉ ํ•˜์—ฌ์•ผ ํ•˜๋Š”๊ฐ€?

POSTMAN์€ API ๊ฐœ๋ฐœ์„ ๋ณด๋‹ค ๋น ๋ฅด๊ณ  ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋ฉฐ, ๊ฐœ๋ฐœ๋œ API๋ฅผ ํ…Œ์ŠคํŠธํ•˜์—ฌ ๋ฌธ์„œํ™” ๋˜๋Š” ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€ ์ฃผ๋Š” ํ”Œ๋žซํผ์ด๋‹ค.

Postman์€ ๋ชจ๋“  API ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด์„œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋ณ€์ˆ˜ ๋ฐ ํ™˜๊ฒฝ, request ์„ค๋ช…, ํ…Œ์ŠคํŠธ ๋ฐ ์‚ฌ์ „ ์š”์ฒญ์— ํ•„์š”ํ•œ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ๋“ฑ POSTMAN์€ ํ˜„์žฌ ์›Œํฌ ํ”Œ๋กœ์šฐ๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์•ˆ๋˜์—ˆ๋‹ค.

์‚ฌ์šฉ ํ•˜๋Š”์ด์œ ๋Š”?

URL์„ ํ†ตํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•˜๋Š”๊ฒƒ์€ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค. ์‹ค์ œ๋กœ ๊ฐœ๋ฐœํ•  ๊ฒฝ์šฐ, ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฒ„ํŠผ์„ ๋งŒ๋“ค๊ณ , ์ด๋ฒคํŠธ๋ฅผ ๋งŒ๋“ค๊ณ , ๋ฒ„ํŠผ์— ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ด๋ฒคํŠธ์—์„œ๋Š” ์š”์ฒญ์„ ํ•˜๊ณ , ์š”์ฒญ์„ ํ•œ ์ดํ›„์—๋Š” ์‘๋‹ต์„ ๋ฐ›๊ณ , ๊ทธ ์‘๋‹ต์„ ๋ฐ›์€ ๋‚ด์šฉ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๊ฒŒ ๋œ๋‹ค. Authorization์ด๋‚˜ Header, Body๋ฅผ ์ˆ˜์ •ํ•˜๋Š”๊ฑด ๋”๋”์šฑ ์ œํ•œ์ด ๋งŽ๋‹ค. ํ•˜์ง€๋งŒ ํฌ์ŠคํŠธ๋งจ์€ ํ•ด๋‹น ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•ด๋†“์€ ํˆด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋˜ํ•œ OS์— ์ƒ๊ด€์—†์ด ์–ด๋””์—์„œ๋‚˜ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๊ฐ€๋ฒผ์šด ํˆด์ด์—ฌ์„œ ๊ฐ€์šฉ์„ฑ์ด ๋›ฐ์–ด ๋‚˜๋‹ค. ๋˜ํ•œ ๊ณ„์ •์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, ๋‚ด๊ฐ€ ์š”์ฒญํ•œ Request ํžˆ์Šคํ† ๋ฆฌ, ํ…Œ์ŠคํŠธํ•œ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ ์–ด๋””์„œ๋‚˜ ๋‚ด๊ฐ€ ์ž‘์—…ํ–ˆ๋˜ ํ™˜๊ฒฝ์ด ๊ตฌ์ถ•๋œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.