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 ํ์คํ ๋ฆฌ, ํ ์คํธํ ํ๊ฒฝ์ ๊ทธ๋๋ก ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ์ธ์ ์ด๋์๋ ๋ด๊ฐ ์์ ํ๋ ํ๊ฒฝ์ด ๊ตฌ์ถ๋๋ค๋ ํน์ง์ด ์๋ค.