๐ฏ ์ฃผ์
์น API์ ๋ฐ์ ๊ณผ์ ์์ SOAP์์ REST๋ก์ ์ ํ์ด ์ผ์ด๋ ์ด์ ์ ๊ทธ ์ฅ๋จ์ ์ ๋ํด ์์๋ณด์.
์น API
๋จผ์ ๊ฐ๋จํ๊ฒ API์ ์น API์ ๊ฐ๋ ์ ์ง๊ณ ๋์ด๊ฐ์.
API?
API(Application Programming Interface)
- ์์ฒญ๊ณผ ์๋ต์ ์ฌ์ฉํ์ฌ ๋ ์ ํ๋ฆฌ์ผ์ด์ (์ํํธ์จ์ด)์ด ์๋ก ํต์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
- ์ธํฐํ์ด์ค์ด๋ฏ๋ก ๋ด๋ถ ๊ตฌํ์ ์ ๋ถ ์ ํ์ ์์ด, ์ ํด์ง ๋ฐฉ๋ฒ(๋ฉ์๋, ์๋ํฌ์ธํธ ๋ฑ)๋ง ๋ฐ๋ฅด๋ฉด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
์๋น์์ ์์์ ์ฃผ๋ฌธํ ๋๋ฅผ ๋ ์ฌ๋ ค๋ณด์.
- ๋ฉ๋ดํ(API ๋ฌธ์): ์๋(์ฌ์ฉ์)์ ๋ฉ๋ดํ์ ๋ณด๊ณ ์ฃผ๋ฌธํ ์ ์๋ ์์ ๋ชฉ๋ก์ ํ์ธํ๋ค.(๊ฐ๋ฅํ ๊ธฐ๋ฅ)
- ์ฃผ๋ฌธ ์์ฒญ(์์ฒญ Request): ์๋์ ์จ์ดํฐ(API)๋ฅผ ํตํด "์คํ ์ดํฌ ํ๋ ์ฃผ์ธ์!"๋ผ๊ณ ์ฃผ๋ฌธํ๋ค.
- ์ฃผ๋ฐฉ ์ฒ๋ฆฌ(๋ด๋ถ ๊ตฌํ): ์จ์ดํฐ๋ ์ฃผ๋ฌธ์ ๋ฐ์ ์ฃผ๋ฐฉ(์๋ฒ)์ผ๋ก ํ ์ผ์ ์ ๋ฌํ์ง๋ง, ์๋์ ์ฃผ๋ฐฉ์์ ์๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๋ง๋๋์ง ์ ํ์๊ฐ ์๋ค.
- ์์ ์ ๊ณต(์๋ต Response): ์๋ฆฌ๊ฐ ์์ฑ๋๋ฉด ์จ์ดํฐ(API)๊ฐ ์๋์๊ฒ ๊ฐ์ ธ๋ค์ค๋ค.
์ด์ฒ๋ผ ํด๋ผ์ด์ธํธ(์๋)๊ฐ ์์ฒญ(์ฃผ๋ฌธ)ํ ๋๋ก ๋ด๋ถ ๋์(์๋ฆฌ ๊ณผ์ )์ ๋๋ฌ๋์ง ์๊ณ , ์๋ต(์๋น)์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ด API์ด๋ค.
์น API?
์น API๋
- ์น ์์์ HTTP/HTTPS ํ๋กํ ์ฝ์ ํตํด ๋คํธ์ํฌ ์์์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋นํ๋ ๋ฐฉ์์ด๋ค.
- ํด๋ผ์ด์ธํธ(์น ๋ธ๋ผ์ฐ์ , ๋ชจ๋ฐ์ผ ์ฑ ๋ฑ)์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ธํฐํ์ด์ค์ด๋ค.
- โ๏ธ ํด๋ผ์ด์ธํธ์์ ํน์ URI(์๋ํฌ์ธํธ)๋ก HTTP ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ์์ ์ ํด์ง ๋ก์ง์ ์ํํ ํ JSON, XML ๋ฑ์ ์๋ต ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค.
๐ซง SOAP(Simple Object Access Protocol)
์น API๊ฐ ํ์ฐ๋จ์ ๋ฐ๋ผ, ์ ๋ณด ๊ตํ์ ํ์คํํ๊ธฐ ์ํด SOAP(Simple Object Access Protocol)๋ผ๋ ํ๋กํ ์ฝ ์ฌ์์ด ๊ฐ๋ฐ๋์๋ค.
SOAP์ ํน์ง
- ์๊ฒฉํ ํฌ๋งท: ์ ํด์ง ํ์์ด๋ ํ์ค์ ์ฒ ์ ํ๊ฒ ๋ฐ๋ผ์ผ ํ๋ฏ๋ก ๋ณด์๊ณผ ์ ๋ขฐ์ฑ์ด ๋๋ค.
- XML ๊ธฐ๋ฐ: SOAP์ ์์ฒญ๊ณผ ์๋ต ๋ฐ์ดํฐ์ ํฌ๋งท์ด XML ํ์์ผ๋ก ๊ณ ์ ๋์ด ์๋ค.
- โ XML์ ํ๋ซํผ ๋ ๋ฆฝ์ ์ด๋ผ, ์ด์ ์ฒด์ ๋ ์ธ์ด๊ฐ ๋ฌ๋ผ๋ ์์ ์์ด ์ฌ์ฉํ ์ ์๋ค.
- SOAP ๋ฉ์์ง๋ ๋ฐ๋์ Envelope(Header + Body) ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค.
- โ
WSDL (Web Services Description Language) ์ฌ์ฉ:
- SOAP API๊ฐ ์ด๋ค ์์ฒญ์ ๋ฐ์ ์ ์๊ณ , ์ด๋ค ์๋ต์ ๋ฐํํ๋์ง XML ๊ธฐ๋ฐ์ผ๋ก ๋ช ํํ ์ ์ํ๋ค.
- SOAP ํด๋ผ์ด์ธํธ๋ WSDL์ ์ฝ๊ณ ์๋์ผ๋ก API ํธ์ถ์ ๊ตฌ์ฑํ ์ ์๋ค.
- โ
๋ค์ํ ํ๋กํ ์ฝ ์ง์:
- SOAP์ HTTP, TCP, SMTP ๋ฑ ๋ค์ํ ์ ์ก ํ๋กํ ์ฝ๊ณผ ํจ๊ป ์๋ํ ์ ์๋ค.
- SOAP์ ๋คํธ์ํฌ ํ๊ฒฝ์ ๋ง์ถฐ ์ ์ฐํ๊ฒ ํ๋กํ ์ฝ์ ์ ํ ๊ฐ๋ฅํ๋ค.
- โ
๋ณด์ ๊ธฐ๋ฅ:
- WS-Security(์น ์๋น์ค ๋ณด์) ์ง์ → ์ธ์ฆ, ์ํธํ, ๋ฉ์์ง ๋ฌด๊ฒฐ์ฑ ๋ฑ์ ๋ณด์ฅํ๋ค.
- โ
์ํ ์ ์ง(Stateful ๊ฐ๋ฅ):
- ์ด์ ์์ฒญ๊ณผ ์ฐ๊ฒฐ๋ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ์์ ๋งค๋ฒ ๊ฐ์ ์ ๋ณด(ex ๋ก๊ทธ์ธ ์ธ์ ์ ๋ณด)๋ฅผ ๋ณด๋ผ ํ์ ์์ผ๋ฏ๋ก ์๋ฒ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค.
SOAP์์ REST๋ก์ ์ ํ
๊ทธ๋ฌ๋ SOAP์ ์ฅ์ ์๋ ๋จ์ ๋ ํจ๊ป ๋ฐ๋ผ์จ๋ค.
- โ ์ ์ฐํ์ง ๋ชปํจ: XML ํ์๋ง ๋ฐ๋ฅด๋ฏ๋ก ๋ฐ๋ผ์ผ ํ๊ณ , ๊ตฌํ ๋ฐ ์ค์ ์ด ๋ณต์กํ๊ณ ๋ฌด๊ฑฐ์์ง ์ ์๋ค.
- JSON ๋ฐ์ดํฐ๋ก๋
{ "name": "Alice" }
์ง๋ง, XML ํ์์ผ๋ก๋ ์๋์ฒ๋ผ ๊ธธ๊ฒ ๋ณด๋ด์ผ ํ๋ค.
- JSON ๋ฐ์ดํฐ๋ก๋
<Envelope>
<Body>
<User>
<Name>Alice</Name>
</User>
</Body>
</Envelope>
- โ ์ํ ์ ์ง์ ๋จ์ : ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ๊ฐ ํด๋ผ์ด์ธํธ์ ์ํ๋ฅผ ์ ์งํด์ผ ํ๋ฏ๋ก ์ด์ ์์ฒญ์ ๋ชจ๋ ๊ธฐ์ตํ๊ณ ์์ด ์ค๋ฒํค๋๊ฐ ์๊ธด๋ค.
- โ ์ฒ๋ฆฌ ์๋: REST ์ฌ์ฉ ์ ๋ณด๋ค ๋ ํฌ๊ณ ๋ณต์กํ ๋ฉ์์ง๋ก ์ ์ก ๋ฐ ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ๋ค.
- โ ํ์ฅ์ ์ด๋ ค์: ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ฒญ ๊ฐ์ ์ํ๋ฅผ ์ ์ฅํด์ผ ํ๋ฏ๋ก ๋์ญํญ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์๊ตฌ ์ฌํญ์ด ์ฆ๊ฐํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ๋น์ฉ์ด ๋ง์ด ๋ค๊ณ ํ์ฅํ๊ธฐ๊ฐ ์ด๋ ค์์ง๋ค.
XML๋ง ๊ณ ์งํ์ฌ ์ค๋ฒํค๋๊ฐ ์๊ธฐ๊ณ ๋ณต์ก๋๊ฐ ๋์์ ธ
๋ฌด๊ฑฐ์ด ๊ธฐ์
์์คํ
๊ฐ์ ๋ ๊ฑฐ์๊ฐ ์๋ ๊ฐ๋ฒผ์ด ์น ์๋น์ค์์๋ ๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅธ API ๋ฐฉ์์ด ์๊ตฌ๋๋ค.
์ด์ ๋ฐ๋ผ ๊ณผ๊ฑฐ์๋ SOAP์ด ๋ง์ด ์ฌ์ฉ๋์์ง๋ง, ์ ์ฐจ REST API๋ฅผ ์ฐ๋ ๊ฒ ํ์ค์ด ๋์๋ค.
SOAP vs REST
SOAP๊ณผ REST๋ ๋ ๋ค ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ๋ฐ์ดํฐ ์์ฒญ, ์๋ต ๋ฐฉ์์ ๋ํ ๊ท์ฝ์ด๋ผ๋ ์ ์์ ์ ์ฌํ๋ค.
๊ทธ๋ฌ๋ ๋ฐ์ดํฐ ์ง์ ํ์๊ณผ ์ ์ฐ, ํ์ฅ์ฑ์ ๋ถ๋ถ์์ ์ฐจ์ด๊ฐ ์๋ค.
SOAP๊ณผ ๋น๊ต๋๋ REST์ ์ฅ์
- โ
์ ์ฐํ๊ณ ๋ค์ํ ๋ฐ์ดํฐ ํ์ ์ง์
- SOAP์ ๋ฐ๋์ XML์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๊ฐ ํฌ๊ณ , ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ๋ค.
- REST๋ JSON, XML, Plain Text ๋ฑ ์ ์ฐํ ๋ฐ์ดํฐ ํฌ๋งท ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๊ธฐ๋ณธ ํํ์ธ JSON์ ๋งค์ฐ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ฒผ์ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๊ณ ์ฑ๋ฅ์ด ์ข๋ค.
- โ
์ ์ง๋ณด์์ฑ
- SOAP์ ์๋น์ค ์ค๋ช ์ WSDL์ ํ์๋ก ์์ฑํด์ผ ํ๊ณ , WSDL๋ฅผ ๊ธฐ๋ฐ์ผ๋ก API ์์ฒญ์ ๊ตฌ์ฑํด์ผ ํด์ ๊ฐ๋ฐ ๊ณผ์ ์ด ๋ณต์กํ๋ค.
- REST๋ URI๋ก ์์์ ์๋ณํ๊ณ , HTTP ๋ฉ์๋๋ก ์์ฒญ์ ์๋ฏธ๋ฅผ ๋จ์ํ๊ณ ์ง๊ด์ ์ผ๋ก ๋ํ๋ด์ด ์ค์ ๊ณผ ์ฌ์ฉ์ด ์ฝ๋ค.
- โ
ํ์ฅ์ฑ
- SOAP์์๋ ์ํ ์ ์ง๊ฐ ๊ฐ๋ฅํ๊ธฐ ์ํด ๊ฐ ์๋ฒ๊ฐ ์ธ์ ์ ๋ณด๋ฅผ ๊ณต์ ํด์ผ ํ๋ฏ๋ก ํ์ฅ์ฑ์ด ๋จ์ด์ง๋ค.
- REST์์๋ ์ํ๋ฅผ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก, ์ด์ ์ํ๋ฅผ ๊ธฐ์ตํ ํ์๊ฐ ์์ด ๋ถํ ๋ถ์ฐ์ด ์ฝ๋ค.
- โ
์น ๊ฐ๋ฐ์ ์ข์
- SOAP์ ๋ค์ํ ํ๋กํ ์ฝ์ ์ง์ํ์ง๋ง ๋๋ถ๋ถ์ ์น ์๋น์ค๊ฐ HTTP ๊ธฐ๋ฐ์ด๋ฏ๋ก ๋ถํ์ํ ๊ธฐ๋ฅ๊น์ง ํฌํจํ๊ฒ ๋์๋ค.
- REST๋ HTTP ๊ธฐ๋ณธ ์์น์ ๋ฐ๋ฅด๊ณ , ์บ์ฑ์ด ๊ฐ๋ฅํ์ฌ ์น ๊ฐ๋ฐ ์นํ์ ์ด๋ค.
ํ์ฌ๋ ๋๋ถ๋ถ์ ์น ์๋น์ค์์ REST๋ฅผ ํ์ค ๋ฐฉ์์ผ๋ก ์ฑํํ์ง๋ง,
๊ธฐ์
์์คํ
๊ฐ์ ๋ ๊ฑฐ์ ์ ํ๋ฆฌ์ผ์ด์
์ด๋ ๋ณด์์ด ์ค์ํ ๊ณณ์์๋ SOAP์ด ์ ์ ํ ์ ์์ผ๋ฏ๋ก ํ์์ ๋ฐ๋ผ ์ฌ์ฉํ๋ฉด ๋๋ค.
์ฐธ๊ณ ์๋ฃ
https://aws.amazon.com/ko/compare/the-difference-between-soap-rest/
https://aws.amazon.com/ko/what-is/api/
https://www.redhat.com/ko/topics/integration/whats-the-difference-between-soap-rest#%EC%9A%94%EC%95%BD
https://www.redhat.com/ko/topics/api/what-are-application-programming-interfaces#web-api-%EB%B0%8F-%EC%9B%90%EA%B2%A9-api
https://drg2524.tistory.com/138
'โ๏ธ ๊ธฐํ ๊ฐ๋ฐ ์๋ฃ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊นํ๋ธ] Codecov ์ ์ฉํ์ฌ PR์ ํ ์คํธ ์ปค๋ฒ๋ฆฌ ๋ฑ์ง ๋ฌ๊ธฐ (1) | 2025.04.25 |
---|---|
CI/CD ๊ฐ๋ ์ดํดํ๊ธฐ (1) | 2025.04.15 |
์น ์๋ฒ(Web Server) vs WAS(Web Application Server) ๊ฐ๋ ์ดํด์ ์ฐจ์ด ๋น๊ต feat. Tomcat (0) | 2025.02.17 |
ํ๋ ์์ํฌ vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ (0) | 2025.02.16 |
[Git] git fetch์ git pull์ ์ดํด (0) | 2025.02.12 |