๐ฉ๐ป๋ฐฐ๊ฒฝ๐ฉ๐ป
์จ๋ฒ์์ ์ด๋ฏธ์ง๋ฅผ ์ ํํด ์๋ฒ๋ก ์ ์กํ๋ ์์
์ด ์ฃผ์ด์ก๋ค. ์ด์ ์ ๋ช ๋ฒ ์ด๋ฏธ์ง๋ฅผ ์์ฒญํ๊ณ ๋ฐ์๋ณธ ๊ฒฝํ์ด ์์ด ๋ฌด๋ฆฌ๊ฐ ์์ ๊ฑฐ๋ผ ์๊ฐํ์ง๋ง, ๊ทธ๋๋ 3rd party์ธ Alamofire๋ฅผ ์ฌ์ฉํ์ด์ ๊ฐ๋จํ์๊ณ ์ง๊ธ์ Apple์ built-in์ธ URLSession์ ์ฌ์ฉํด์ผํด์ ๋ง์ด ํท๊ฐ๋ ธ๋ค.
๐ฎ cURL Vs HTTP
API๋ฌธ์๋ ํํ์ ์ฐจ์ด ๋ฑ์ผ๋ก iOS๋ง ์๊ณ ์์ด์๋ ์์ ํ ์ดํดํ๊ธฐ ์ด๋ ต๋ค. ๊ทธ๋์ ํด์๋ ์๋ฒ ์ฐ๊ฒฐ ๊ฒฝํ๊ณผ ๊ตฌ๊ธ๋ง์ ๋ฐํ์ผ๋ก ์ง๊ธ๊น์ง ์ ์ดํดํ๋ฉฐ ์ฐ๊ฒฐํด์๋ค. ์ค๋๋ง์ ์ด๋ฏธ์ง ์ ๋ก๋ ์๋ฒ ์ฐ๊ฒฐ์ ํ๋ ค๊ณ ๋ณด๋ API๋ฅผ ์ดํดํ๊ธฐ ์ด๋ ค์ ๋ค. ๋ด๊ฐ ๋ฐ๋ก ์ฐพ์ ๊ณต๋ถํ๋ mutipart/form-data ์ฐ๊ฒฐ ๊ตฌ์กฐ์๋ ๋ง์ด ๋ฌ๋ผ ๋ฐฉ๋ฒ์ด ๋ค์ํ๊ฑด๊ฐ ์ถ์ด ๊ตฌ๊ธ๋ง์ ์ ๋ง ๋ง์ด ํด๋ดค์ง๋ง ๋๊ฐ์ ๊ตฌ์กฐ๋ง ์์๋ค.
--Boundary- (์ฝ๋)
Content-Dispotion: form-data; name="name"
Forest
--Boundary- (์ฝ๋)
Content-Dispotion: form-data; name="name"
Tree
--Boundary- (์ฝ๋)
Content-Dispotion: form-data; name="name"; filename="filename.jpg"
(Data ๊ฐ)
--Boundary-(์ฝ๋)—
์ฃผ์ด์ง API๋ก๋ cURL์ ํ์ธํ ์ ์์๋๋ฐ ์ด๋ฏธ์ง ์
๋ก๋์๋ ๋ค๋ฅธ API์๋ ์๋ ์ต์
(-f)์ด ์์ด ํด๋น ์ต์
์ด ํด๊ฒฐ์ ์ด์ ๊ฐ ๋์ด ์ฃผ์ง ์์๊น ์ถ์ด ๋ ์ด์ฌํ ๊ตฌ๊ธ๋งํ๋ค. ๊ทธ๋ฌ๋ค ์๊ฒ ๋ ๊ฑด ๋ฐ๋ก Postman์ ํตํด Code snippet, ์ฆ ์์ฑ๋ ์ฝ๋๋ก ๋ณผ ์ ์๋ค๋ ์ฌ์ค์ด๋ค. ๊ทธ๋์ Postman์ ์ฌ์ฉํด ์ด๋ฏธ์ง ์
๋ก๋๋ฅผ ํด๋ณด์๋๋ ๋ด๊ฐ ๊ตฌ๊ธ๋ง์ ํตํด ๋ณด์์จ ์์์ด ๋ฐ๋ก HTTP ์์์ด์๋ค.
๐ค๐ป HTTP๋ ํต์ ๊ท์ฝ
HTTP๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ ์์์ ์ฃผ๊ณ ๋ฐ์ ๋ ์ฌ์ฉํ๋ ํต์ ๊ท์ฝ์ด๋ค. HTTP๋ IT ์ง์์ ๊ธฐ๋ณธ์ด๋ผ ์ ๋ง ๋ง์ด ๋ฐฐ์ฐ๊ณ ์๊ณ ์์ง๋ง ๊ธฐ๋ฅ ๊ตฌํ์ ์ด์ ์ด ๋ง์ถฐ์ ธ ๊ธฐ๋ณธ์ ์ธ ์ง์์ ์๊ณ ์์๋ ๊ฒ ๊ฐ๋ค. ์ด์จ๋ HTTP๋ ํต์ '๊ท์ฝ'์ด๊ธฐ ๋๋ฌธ์ ์ ํด์ง ์์์ด ์กด์ฌํ๋ค. ๊ทธ๊ฒ ๋ฐ๋ก ๋ด๊ฐ ๊ตฌ๊ธ๋งํ๋ฉด์ ๊ณ์ ๋ด์๋ ๊ตฌ์กฐ์๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ค๋ฉด ๋ฌด์กฐ๊ฑด ๊ท์ฝ์ ์ง์ผ์ ๋ณด๋ด์ผ ํ๋ค. mutipart/form-data๋ฅผ ๋ณด๋ผ ๋๋ HTTP Header์ multipart/form-data๋ผ๋ ํ์ ๊ณผ ๊ณ ์ ํ ๊ฐ์ธ Boundary๋ฅผ ํ ๋นํด Body์์ ์ฌ์ฉํ ๊ฐ์ ๋ฏธ๋ฆฌ ์๋ ค์ฃผ๊ณ , ์ดํ ์๋ HTTP body ๊ตฌ์กฐ๊ฐ ๋ฐ๋ณต๋์ด ๋ํ๋๋ฉฐ ์ด๋ฅผ ๋ชจ๋ ๋ชจ์ ํ ๋ฒ์ HTTP body์ ํ ๋นํ๋ค.
๐ค ๊ทธ๋ผ cURL์ ๋ญ๊น?
cURL์ด๋, ๋ค์ํ ํต์ ํ๋กํ ์ฝ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ช
๋ น์ค ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ์ํํธ์จ์ด์ด๋ค. HTTP, HTTPS๋ฅผ ํฌํจํ ์ฌ๋ฌ ํต์ ํ๋กํ ์ฝ์ ์ง์ํ๋ค. ๊ทธ๋ฌ๋๊น HTTP๋ฅผ ์์ฝ๊ฒ ์ฌ์ฉํ๋ ค๊ณ ๋ง๋ ๊ฒ์ด๋ค. ๊ทธ๋์ HTTP ์์๊ณผ ๋ด์ฉ์ด ๋น์ทํ๋ฉด์๋ ๊ฐ๋จํ๊ฒ ์์ฑ๋ ๊ฒ์ด๋ค.
๐ง๐ปโ๏ธ ๋ง๋ฌด๋ฆฌ
์์ฆ ์์ฃผ ๋๋ผ๋ ๊ฒ์ ๊ธฐ๋ณธ์ด ๋์ด์ผ ์์ฉ์ด ๋๋ค๋ ์ฌ์ค์ด๋ค. 3rth party๋ ์ด๋ค ๊ธฐ๋ฅ์ด๋ ๊ธฐ๋ณธ์ ์ธ ๊ฒ์์ ์์๋์ด ๋ง๋ค์ด์ก๋๋ฐ ์ด๋ฌํ ์์ฉ๋ ๊ฒ์ ๋ง๋๋๋ฐ ์ง์คํ๋ ๊ฒ ๊ฐ๋ค. URLSession๊ฐ์ด built-in๋ ๋๊ตฌ๋ค์ ๋ ๊น์ด ๊ณต๋ถํ๊ณ ์์ฃผ ์ฌ์ฉํด๋ณด๋ฉฐ ๋ด๊ฒ์ผ๋ก ๋ง๋ค๊ณ ๊ทธ๊ฒ๋ค์ด ์ ๋ถํธํด์ 3rth party๊ฐ ๋์จ๊ฑด์ง ์ง์ ๋๊ปด๋ด์ผ๊ฒ ๋ค.