์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
1. ๊ฐ์[ํธ์ง]
Application Programming Interface
์์ฉ ํ๋ก๊ทธ๋จ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค
ํ๋ก๊ทธ๋๋ฐ์์, ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํ ์ผ๋ จ์ ๋ถ ํ๋ก๊ทธ๋จ, ํ๋กํ ์ฝ ๋ฑ์ ์ ์ํ์ฌ ์ํธ ์์ฉ์ ํ๊ธฐ ์ํ ์ธํฐํ์ด์ค ์ฌ์์ ๋งํ๋ค. API๋ ์ํํธ์จ์ด ์ปดํฌ๋ํธ(Function, Method, Operation์ผ๋ก ๋ถ๋ฆฌ๋ ๊ทธ๊ฒ์ด๋ค)์ ๊ธฐ๋ฅ, ์ ๋ ฅ, ์ถ๋ ฅ, ๊ทธ๋ฆฌ๊ณ ์ด์ ์ฌ์ฉ๋๋ ์๋ฃํ์ผ๋ก ํํ๋๋ค. API ์์ฒด๋ ์ด๋๊น์ง๋ ์ฌ์(Specification)๋ง์ ์ ์ํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ(Implementation)๊ณผ๋ ๋ ๋ฆฝ์ ์ด๋ค. ์ ์ค๊ณ๋ API๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ๋ณด๋ค ์ฝ๊ฒ ํด์ค๋ค. API๋ ๋ค์ํ ํํ๋ก ์กด์ฌํ๋ฉฐ, ์ ๋์ค์ POSIX ํ์ค, ์๋์ฐ์ MFC๋ Win32, C++์ ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (STL), Java SE API ๋ฑ์ด ์ด์ ํด๋นํ๋ค.
์๋ฅผ ๋ค์ด ๊ทธ๋ํฝ ์นด๋๋ ๋์คํฌ ๋๋ผ์ด๋ธ ๋ฑ์ ํ๋์จ์ด ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ ๋, API๋ ์์ ์ ํธ๋ฆฌํ๊ฒ ํด์ค๋ค. ๋๊ฐ ์ค์ ๋ก๋ ๋ฐ๋ฐ๋ฅ์์ ๋งค์ฐ ์ ์์ค์ผ๋ก ์ด๋ฌํ ์์ ์ด ์ํ๋๋๋ฐ, API๋ ์ด๋ฌํ ์์ ๋ค์ ๋ํ ๊ธฐ๋ฅ์ ๋์์ด ๋๋ ์ธ์ด์ ๋ง๊ฒ ์ถ์ํํ๊ณ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๊ฒ ์ค๊ณํ ์ธํฐํ์ด์ค ์ฌ์์ด๋ค.
ํ๋ก๊ทธ๋จ์ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ค๊ณ๋ API๊ฐ ์ ์ฉ๋๋ฉด, ์ด๋ฏธ ์์ฑ๋์ด ์ปดํ์ผ๋๊ณ ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์์ ์์ด ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ, ํ์ด์ดํญ์ค, ํฌ๋กฌ๊ณผ ๊ฐ์ ์น ๋ธ๋ผ์ฐ์ ํ๋ก๊ทธ๋จ์ ํ๋ฌ๊ทธ์ธ, ์ ๋์จ๊ณผ ๊ฐ์ ๊ฒ์ด ๋ฐ๋ก ์ด๋ฌํ ํ์์ ํ๋ฌ๊ทธ์ธ API๋ฅผ ์ฌ์ฉํด ๊ตฌํ๋ ๊ฒ์ด๋ค.
API๊ฐ ์ค์ ๊ธฐ๋ฅ ๊ตฌํ์ฒด์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ ๊ณต๋๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ๋ฅผ SDK(Software Development Kit)๋ผ๊ณ ํ๋ค. SDK๋ ์ผ๋ฐ์ ์ผ๋ก API, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋๋ฐ ํ์ํ ์ฌ๋ฌ ๋ณด์กฐ ํ๋ก๊ทธ๋จ์ ํฌํจํ๋ค.
์๊ฒฉ์ ์ปดํจํฐ์ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋๋ก ํด์ฃผ๋ SOAP ๋๋ RESTful ์๋น์ค์์ API๋ ๊ทธ ์์ฒด๋ก ์๊ฒฉ ๊ธฐ๋ฅ์ ๋ํ ์ฌ์(Specification)์ด ๋๋ค.
์๋ฅผ ๋ค์ด ๋ช ๋ น์ด ์ฐฝ[1]์ "Hello, World!" ๋ผ๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ C์ธ์ด๋ก ์์ฑํ๋ค๊ณ ํ์. ๋น์ฐํ ํ ์คํธ๋ก ์ถ๋ ฅํ๋ printf API๋ฅผ ์ฌ์ฉํ์ฌ
ํ๋ง๋๋ก, API๋ ์์ค ์ฝ๋ ์์ค์์ ์ ์๋๋ ์ธํฐํ์ด์ค๋ค. ์ด์๋ ๋ฌ๋ฆฌ ๊ธฐ๊ณ์ด ์ด์ง ๋ฐ์ด๋๋ฆฌ ์์ค์์ ์ ์๋๋ ์ด๋ฌํ ์ธํฐํ์ด์ค๋ ABI(Application Binary Interface)๋ผ๊ณ ํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์ ๋ก ๋์ํ ์ ์๋ ๋จํธํ๋ ํ๋ก๊ทธ๋จ์ด๋ผ๋ ์ ์์ API์ ๋ค๋ฅด๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๋ API๊ฐ ์์ด ์กด์ฌํ ์ ์๊ณ , ์ด๋ฏธ ๊ตฌํ๋์ด ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ์ํด ์ฌ์ฉ๋ ์ ์๋ค. ์ด๋ฏธ ๊ตฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ก๊ทธ๋จ ์ฌ์ด์ ์ธํฐํ์ด์ค ์ฌ์ ๋ํ API์ด๋ค. API ์์ด ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๋ฐฐํฌ๋๋ ๋ํ์ ์ธ ๊ฒฝ์ฐ๋ก "Visual C++ Runtime Library", "DirectX Runtime"์ด ์๋ค.
์ ๋์ค๋ ์ ์ด์ C์ธ์ด๋ก ๊ฐ๋ฐ๋์๊ธฐ ๋๋ฌธ์, ๋น์ฐํ C์ธ์ด๋ฅผ ์ํ API๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ค. MS-DOS๋ ๊ทธ๋ ์ง ์์๊ธฐ ๋๋ฌธ์ ํน์ ์ธ์ด๋ฅผ ์ํ API ๊ฐ์ ๊ฒ์ ์์๊ณ , ๊ธฐ๊ณ์ด(๋๋ ์ด์ ๋ธ๋ฆฌ์ด) ์์ค์์ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ์ ๊ณตํ๋ค. MS-DOS์ ์ด๋ฌํ ๋ฐฉ์์ ์ง๊ธ์ ๊ด์ ์์ ๋ณด๋ฉด, ABI๋ฅผ ์ ์ํ ๊ฒ์ผ๋ก ๋ณผ ์ ์๋ค.
ํ๋ ์์ํฌ๋ ๋ช ํํ๊ฒ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ ์ ์์ API์ ๋น์ทํ๋ค. ํ์ง๋ง ์ผ๋ฐ์ ์ธ API๋ ์ ์ฒด ์ ์ด ๊ตฌ์กฐ๋ฅผ ํธ์ถํ๋ ์ชฝ์์ ์ํ๋๋๋ก ์งํํ ์ ์์ง๋ง, ํ๋ ์์ํฌ์์๋ ๊ทธ๋ด ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ์ ์ด ๋ค๋ฅด๋ค.
์์ฉ ํ๋ก๊ทธ๋จ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค
ํ๋ก๊ทธ๋๋ฐ์์, ํ๋ก๊ทธ๋จ์ ์์ฑํ๊ธฐ ์ํ ์ผ๋ จ์ ๋ถ ํ๋ก๊ทธ๋จ, ํ๋กํ ์ฝ ๋ฑ์ ์ ์ํ์ฌ ์ํธ ์์ฉ์ ํ๊ธฐ ์ํ ์ธํฐํ์ด์ค ์ฌ์์ ๋งํ๋ค. API๋ ์ํํธ์จ์ด ์ปดํฌ๋ํธ(Function, Method, Operation์ผ๋ก ๋ถ๋ฆฌ๋ ๊ทธ๊ฒ์ด๋ค)์ ๊ธฐ๋ฅ, ์ ๋ ฅ, ์ถ๋ ฅ, ๊ทธ๋ฆฌ๊ณ ์ด์ ์ฌ์ฉ๋๋ ์๋ฃํ์ผ๋ก ํํ๋๋ค. API ์์ฒด๋ ์ด๋๊น์ง๋ ์ฌ์(Specification)๋ง์ ์ ์ํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ(Implementation)๊ณผ๋ ๋ ๋ฆฝ์ ์ด๋ค. ์ ์ค๊ณ๋ API๋ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ๋ณด๋ค ์ฝ๊ฒ ํด์ค๋ค. API๋ ๋ค์ํ ํํ๋ก ์กด์ฌํ๋ฉฐ, ์ ๋์ค์ POSIX ํ์ค, ์๋์ฐ์ MFC๋ Win32, C++์ ํ์ค ํ ํ๋ฆฟ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (STL), Java SE API ๋ฑ์ด ์ด์ ํด๋นํ๋ค.
์๋ฅผ ๋ค์ด ๊ทธ๋ํฝ ์นด๋๋ ๋์คํฌ ๋๋ผ์ด๋ธ ๋ฑ์ ํ๋์จ์ด ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ์ํ ๋, API๋ ์์ ์ ํธ๋ฆฌํ๊ฒ ํด์ค๋ค. ๋๊ฐ ์ค์ ๋ก๋ ๋ฐ๋ฐ๋ฅ์์ ๋งค์ฐ ์ ์์ค์ผ๋ก ์ด๋ฌํ ์์ ์ด ์ํ๋๋๋ฐ, API๋ ์ด๋ฌํ ์์ ๋ค์ ๋ํ ๊ธฐ๋ฅ์ ๋์์ด ๋๋ ์ธ์ด์ ๋ง๊ฒ ์ถ์ํํ๊ณ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฌ์ฉํ๊ธฐ ํธ๋ฆฌํ๊ฒ ์ค๊ณํ ์ธํฐํ์ด์ค ์ฌ์์ด๋ค.
ํ๋ก๊ทธ๋จ์ ํ๋ฌ๊ทธ์ธ ํํ๋ก ์ค๊ณ๋ API๊ฐ ์ ์ฉ๋๋ฉด, ์ด๋ฏธ ์์ฑ๋์ด ์ปดํ์ผ๋๊ณ ์์ฑ๋ ํ๋ก๊ทธ๋จ์ ์์ ์์ด ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ, ํ์ด์ดํญ์ค, ํฌ๋กฌ๊ณผ ๊ฐ์ ์น ๋ธ๋ผ์ฐ์ ํ๋ก๊ทธ๋จ์ ํ๋ฌ๊ทธ์ธ, ์ ๋์จ๊ณผ ๊ฐ์ ๊ฒ์ด ๋ฐ๋ก ์ด๋ฌํ ํ์์ ํ๋ฌ๊ทธ์ธ API๋ฅผ ์ฌ์ฉํด ๊ตฌํ๋ ๊ฒ์ด๋ค.
API๊ฐ ์ค์ ๊ธฐ๋ฅ ๊ตฌํ์ฒด์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ ๊ณต๋๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ๋ฅผ SDK(Software Development Kit)๋ผ๊ณ ํ๋ค. SDK๋ ์ผ๋ฐ์ ์ผ๋ก API, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐํ๋๋ฐ ํ์ํ ์ฌ๋ฌ ๋ณด์กฐ ํ๋ก๊ทธ๋จ์ ํฌํจํ๋ค.
์๊ฒฉ์ ์ปดํจํฐ์ ๊ธฐ๋ฅ์ ์ํํ ์ ์๋๋ก ํด์ฃผ๋ SOAP ๋๋ RESTful ์๋น์ค์์ API๋ ๊ทธ ์์ฒด๋ก ์๊ฒฉ ๊ธฐ๋ฅ์ ๋ํ ์ฌ์(Specification)์ด ๋๋ค.
์๋ฅผ ๋ค์ด ๋ช ๋ น์ด ์ฐฝ[1]์ "Hello, World!" ๋ผ๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ C์ธ์ด๋ก ์์ฑํ๋ค๊ณ ํ์. ๋น์ฐํ ํ ์คํธ๋ก ์ถ๋ ฅํ๋ printf API๋ฅผ ์ฌ์ฉํ์ฌ
printf("Hello, World!\\n"); ๋ผ๊ณ ์์ฑํ๊ฒ ๋ ๊ฒ์ด๋ฉฐ, ์ด๋ ์๋์ฐ, ๋ฆฌ๋
์ค, ์ ๋์ค, OS X ๋ชจ๋์์ ๋์ผํ๊ฒ ๋์ํ๋๋ก C์ธ์ด API๊ฐ ๋ณด์ฅํด์ค๋ค. ํ๋ก๊ทธ๋๋จธ๋ ๋ณด๋ค ์ ์์ค์์ ์ด๋ ํ ์ผ์ด ์ผ์ด๋๋์ง ์์ง ๋ชปํด๋, ์ด๋ฏธ ์ ์๋ printf๋ฅผ ์ฌ์ฉํ๊ธฐ๋ง ํ๋ฉด ํธ๋ฆฌํ๊ฒ ํ
์คํธ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค. ์ฆ ์ ์ค๊ณ๋ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ๊ฒฝ(ํ๋ซํผ)์ด ๋ฌ๋ผ์ ธ๋ ๋์ผํ ์ฝ๋๊ฐ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ํํ๋ฉฐ, ๋ณด๋ค ํธ๋ฆฌํ๊ฒ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค. ํ๋ง๋๋ก, API๋ ์์ค ์ฝ๋ ์์ค์์ ์ ์๋๋ ์ธํฐํ์ด์ค๋ค. ์ด์๋ ๋ฌ๋ฆฌ ๊ธฐ๊ณ์ด ์ด์ง ๋ฐ์ด๋๋ฆฌ ์์ค์์ ์ ์๋๋ ์ด๋ฌํ ์ธํฐํ์ด์ค๋ ABI(Application Binary Interface)๋ผ๊ณ ํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ค์ ๋ก ๋์ํ ์ ์๋ ๋จํธํ๋ ํ๋ก๊ทธ๋จ์ด๋ผ๋ ์ ์์ API์ ๋ค๋ฅด๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๋ API๊ฐ ์์ด ์กด์ฌํ ์ ์๊ณ , ์ด๋ฏธ ๊ตฌํ๋์ด ๊ธฐ๊ณ์ด๋ก ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ์ํด ์ฌ์ฉ๋ ์ ์๋ค. ์ด๋ฏธ ๊ตฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ก๊ทธ๋จ ์ฌ์ด์ ์ธํฐํ์ด์ค ์ฌ์ ๋ํ API์ด๋ค. API ์์ด ํ๋ก๊ทธ๋จ์ ์คํํ๋๋ฐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ๋ฐฐํฌ๋๋ ๋ํ์ ์ธ ๊ฒฝ์ฐ๋ก "Visual C++ Runtime Library", "DirectX Runtime"์ด ์๋ค.
์ ๋์ค๋ ์ ์ด์ C์ธ์ด๋ก ๊ฐ๋ฐ๋์๊ธฐ ๋๋ฌธ์, ๋น์ฐํ C์ธ์ด๋ฅผ ์ํ API๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณต๋๋ค. MS-DOS๋ ๊ทธ๋ ์ง ์์๊ธฐ ๋๋ฌธ์ ํน์ ์ธ์ด๋ฅผ ์ํ API ๊ฐ์ ๊ฒ์ ์์๊ณ , ๊ธฐ๊ณ์ด(๋๋ ์ด์ ๋ธ๋ฆฌ์ด) ์์ค์์ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ์ ๊ณตํ๋ค. MS-DOS์ ์ด๋ฌํ ๋ฐฉ์์ ์ง๊ธ์ ๊ด์ ์์ ๋ณด๋ฉด, ABI๋ฅผ ์ ์ํ ๊ฒ์ผ๋ก ๋ณผ ์ ์๋ค.
ํ๋ ์์ํฌ๋ ๋ช ํํ๊ฒ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ ์ ์์ API์ ๋น์ทํ๋ค. ํ์ง๋ง ์ผ๋ฐ์ ์ธ API๋ ์ ์ฒด ์ ์ด ๊ตฌ์กฐ๋ฅผ ํธ์ถํ๋ ์ชฝ์์ ์ํ๋๋๋ก ์งํํ ์ ์์ง๋ง, ํ๋ ์์ํฌ์์๋ ๊ทธ๋ด ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ์ ์ด ๋ค๋ฅด๋ค.
2. ๊ด๋ จ ๋ฌธ์[ํธ์ง]
[1] MS-DOS ์
ธ, ์๋์ฐ์ cmd.exe, ๋๋ ์ ๋์ค/๋ฆฌ๋
์ค์ *Term ํฐ๋ฏธ๋ ํ๋ก๊ทธ๋จ, OS X์ Terminal