์ ๊ฐ ์ต์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ง ๋ฐฐ์ธ ๋๋ ์์กด์ฑ์ ๋ชจ๋ฅด๊ณ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ์์ ์ด์์ต๋๋ค. ๊ทธ๋ ๊ฒ ์๊ฐ์ด ํ๋ฅด๊ณ ์ ๊ฐ ์๊ฐํ๋ ํํ๋ก ํ๋ก๊ทธ๋จ๋ค์ ์ ์ํ ์ ์๋ ๋จ๊ณ๊น์ง ์์ต๋๋ค. ๋ช๊ฐ์ง ํ ์คํธ๋ฅผ ๋๋ด๊ณ ์น๊ตฌ๋ค ๋๋ ๊ทธ๋ฃน์๊ฒ ์ ๊ฐ ๋ง๋ ์ฝ๋๋ฅผ ๋ฐฐํฌํ์ต๋๋ค. ๋น์ฐํ ์ ์คํ๋๋ ๊ณณ๋ ์์์ง๋ง, ์คํ์ด ๋์ง ์๊ฑฐ๋ ๋๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ ๋ ๋ฌด์์ ์๊ฐํ์ง ๋ชปํ๊ณ ํ๋ก๊ทธ๋๋ฐ ํ๊ฑธ๊น์? ์ด ๋ฌธ์ ๋ฅผ ์ค์ค๋ก ์๊ธฐ๊น์ง๋ ๋ง์ ์๊ฐ์ด ํ์ํ์ต๋๋ค. ์ด ๋ฌธ์ ์ ์ฎ์ฌ์๋ ๋ฌธ์ ์ ์ ๋ง๊ฒ ์ง๋ง ์ด ์ฑ ์ ๊ทธ์ค์์๋ ์์กด์ฑ์ ๋ํด์ ๋ค๋ฃน๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์กด์ฑ์ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ ๊ฐ ์ ํํ๋ Go ์ธ์ด ์ด์ผ๊ธฐ๋ ์ ๊น ๋ค๋ฃจ๊ฒ ๋ฉ๋๋ค.
ํ๋ก๊ทธ๋จ์ด ์๋๋๊ธฐ ์ํด ํ์ํ ์กฐ๊ฑด์ ๋๋ค.
- ์ฐ๊ฒฐ๋ ์ํํธ์จ์ด : DB, ๊ธฐํ ์์ฉํ๋ก๊ทธ๋จ
- ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ํจํค์ง
- ํ๊ฒฝ๋ณ์
- ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์ ํน์ฑ
- ์ฌ๋ด ์ํํธ์จ์ด๋ผ๋ฉด ์กฐ์ง์ ํน์ฑ ๋ฐ ์ ํ ํน์ด์ฌํญ
์ ์ฌํญ์ด ์ํํธ์จ์ด์ ์ผ๋ง๋ ๋ฐ์๋๊ณ ์ฐ๊ฒฐ๋์ด ์๋๊ฐ? ์ ๋ํ ํน์ฑ์ ๋๋ค. ํนํ๋ ๋ฆฌ๋ ์ค, ์ ๋์ค๊ณ์ด์ OS์ ์ฌ์ฉ๋๋ ๋ง์ ํจํค์ง๋ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์์กด์ฑ์ ๋ง์ด ๊ฐ์ง๊ณ ์์ต๋๋ค.
ํ๋ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ ๊ฐ๋ฐ ๋ถ์ผ๋ณ๋ก ์ ๋ฌด์ ํน์ฑ์ ์์กด์ฑ ์๋ฒฝํ๊ฒ ํผํ๊ธฐ๋ ํ๋ญ๋๋ค. ํ๋ก๊ทธ๋๋จธ ์ค์ค๋ก๊ฐ ์์ ์ ์ฝ๋์ ์ผ๋ง๋ ๋ง์ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์๋์ง ๋ถ์ํ๊ณ ์ด ์์กด์ฑ์ ์ค์ด๋ ค๊ณ ๋ ธ๋ ฅํ๋ค๋ฉด ๋ณด๋ค ์ข์ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค ์ ์์๊ฒ์ ๋๋ค.
- ์ํํธ์จ์ด์ ์๋ช ์ ๋๋ฆด ์ ์์ต๋๋ค.
- OS ๋๋ ์ฃผ๋ณํ๊ฒฝ์ด ์ ๊ทธ๋ ์ด๋๋์ด๋ ์์ ์ ํ๋ก๊ทธ๋จ์ ๋ฏธ์น๋ ์ํฅ์ด ์ ์ต๋๋ค.
- ๋ฒ๊ทธ์ ๋ฒ์๊ฐ ์ค์ด๋ค๊ณ , ์์ธกํ๊ธฐ ์ฝ์ต๋๋ค.
- ๋ค๋ฅธ ๊ฐ๋ฐ์์ ์ฌ์ฉ๋ฅ ์ด ์ฌ๋ผ๊ฐ๋๋ค.
์ฌ๋ฌ๋ถ์ด ํ์ด์ฌ์ ์ด์ฉํด์ ์คํ๊ท๋ชจ์ ์ํํธ์จ์ด๋ฅผ ์ ์ํ๋ค๊ณ ๊ฐ์ ํ๊ฒ ์ต๋๋ค. ๋ช๊ฐ์ง ์ง๋ฌธ์ ๋์ง๊ฒ ์ต๋๋ค. ์๋ ์ง๋ฌธ์ค์ ์ผ๋ถ๋ ์์กด์ฑ๊ณผ๋ ์ฐ๊ด์ด ์์ต๋๋ค.
- ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ Windows, Linux(์ข ๋ฅ์ ์๊ด์์ด), macOS์์ ์ ์๋ํฉ๋๊น?
- ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ ํ์ฌ๋ด๋ถ์ ํ ์คํธ ํ๊ฒฝ์์๋ ์ ์๋ํฉ๋๋ค. ์ธ๋ถ ํ๊ฒฝ์์๋ ์ ์๋๋ฉ๋๊น?
- ์ฌ์ฉ์์ ์ปดํจํฐ์ ํ์ด์ฌ ๋๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์ด ์์ง ์์๋ ์๋์ ์ํด์ ์ด๋ป๊ฒ ๋ฐฐํฌํฉ๋๊น?
- ๋ฐฐํฌ์ ๊ท๋ชจ๋ฅผ ์ ์ ์์ ๋ ๊ณ์ ํ์ด์ฌ ๋๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด๋ฌ๋ผ๊ณ ํด์ผํ ๊น์?
- ์ฌ๋ฌ๋ถ์ด ๊ฐ๋ฐํ ํ์ด์ฌ ๋ฒ์ ๊ณผ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ํ์ด์ฌ ๋ฒ์ ์ด ๋ค๋ฅด๋ค๋ฉด ์ด๋ค ์ค๋ฅ๊ฐ ์๊ธธ์ง ์์ธกํ ์ ์์ต๋๊น?
- ํ์ด์ฌ์ ๋ค์ด๋๋ฏน ๋ ๊ท์ง ์ ๋๋ค. ์ธ์ด์ ํน์ง์ผ๋ก ์ธํด์ ๋ฒ๊ทธ๋ฅผ ๊ฐ์ง ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ง์ ๊น์ง๋ ์ค์ ์ฝ๋์ ๋ฌธ๋ฒ ์๋ฌ๊ฐ ์กด์ฌํ๋ค๋ ๊ฒ์ ์์์ฐจ๋ฆฌ๊ธฐ ํ๋ญ๋๋ค. ์ด๋ฐ๊ฒฝ์ฐ ์ด๋ป๊ฒ ์ฌ๋ฌ๋ถ์ ์ฝ๋๋ฅผ ํ ์คํธํ๊ฒ ์ต๋๊น?
- ์ ์๋ฆฌ์์ ์ฝ๋๋ฅผ ํ ์คํธํ ๋๋ ์๋ฌ๊ฐ ์์์ต๋๋ค. ํ์ง๋ง ๋ค๋ฅธ ์ฌ์ฉ์ ์ธก์์๋ ํ๊ฒฝ ๋ฐ ๋ค๋ฅธ ์ ํ ์ด ๊ผฌ์ฌ์์ด์ ์๋ฌ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ ๋๊ตฌ์ ๋ฌธ์ ์ผ๊น์? ์ด๋ป๊ฒ ์ด ๋ฌธ์ ๋ฅผ ๊ฐ์ ํ๊ฒ ์ต๋๊น?
๋ง์ ๊ธฐ์ ๋ค์ด ํด๋ผ์ฐ๋๋ฅผ ์ค๋นํฉ๋๋ค. ์๋ง์ ์ปดํจํฐ๊ฐ ํ์์ ์์ฑ ๋ฐ ์ ํ ๋ฉ๋๋ค. ์ค์น๋ ์ํํธ์จ์ด๋ค์ด ์ฌ๋นจ๋ฆฌ ์ค์น๋๊ณ ์ ์๋ํด์ผํ๋ฉฐ, ๋น์ฉ์ ์ด์๋ก ์ฌ์ฉ์ด ๋๋ ๋จธ์ ์ ์ ๊ฑฐ๋์ด์ผ ํฉ๋๋ค. ์ด๋ฐ ํ๊ฒฝ์ ์์กด์ฑ์ ํ ์คํธํ๊ธฐ์ ์ฌ์ค์ ๊ต์ฅํ ์ข์ ํ๊ฒฝ์ ๋๋ค.
ํด๋ผ์ฐ๋์์๋ ๋งค๋ฒ ์๋ ์ ์ฐจ์ ์ํด์ ์ํํธ์จ์ด๊ฐ ์คํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. (๋ฐฐํฌ๋ฅผ ์ํ CIํด์์ ๋น์ทํ ์ ์ฐจ๋ฅผ ๊ฐ์ง๋๋ค.)
- ๊ฐ์ ์ธ์คํด์ค ์์ฑ
- ์ํํธ์จ์ด ์๋์ ์ํ ํ๋ก๊ทธ๋จ์ค์น
- ํ๊ฒฝ๋ณ์ ์ ํ
- ํ๋ก๊ทธ๋จ ์คํ
- ์ธ์คํด์ค ์ ๊ฑฐ
์์กด์ฑ์ ์๊ฐํ๋ฉฐ ์ํํธ์จ์ด๋ฅผ ์ ์ํ๋ค๋ฉด ํด๋ผ์ฐ๋ํ๊ฒฝ์์๋ ํ๋ก๊ทธ๋จ์ ์ ์๋ํ ์ ๋ฐ์ ์์ต๋๋ค.
์ปดํ์ผ๋ฌ๋ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ง์ปค๋ ์ปดํ์ผ๋ฌ๊ฐ ๋ง๋ ๊ฒฐ๊ณผ๋ฌผ์ ์๋ก ์ฐ๊ฒฐ์ํค๋ ์ญํ ์ ํฉ๋๋ค. ๊ตฌ์ฒด์ ์ผ๋ก ์ด์ผ๊ธฐํ๋ฉด ๋ง์ปค๋ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์ฝ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.
์๋ ์๋ ์ปดํ์ผ๋ฌ์ ๋ง์ปค๊ฐ ์๋ก ์ญํ ์ ๋๋์ด์ ์ปดํ์ผ ์์ ์งํ์ ํ์ง๋ง, ํ๋ ์ปดํ์ผ๋ฌ๋ ์ปดํ์ผ๋ฌ์ ๋ง์ปค์ ์ญํ ์ ๊ฐ์ด ํ๊ณ ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ค์์ ์์กด์ฑ๊ณผ ๊ด๋ จ๋์ด ์ฐ๋ฆฌ๊ฐ ์ํํธ์จ์ด๋ฅผ ์ค์นํ๊ณ ๋ฐฐํฌ์ ์ฐ๋ฆฌ๋ฅผ ๊ดด๋กญํ๋๊ฒ์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฌ๋ฆฌ ๋ผ๊ณ ๋ถ๋ฆฌ๋ ํ์ผ์ ๋๋ค.
์๋์ฐ์ฆ์์๋ dll, ๋ฆฌ๋ ์ค์์๋ so, ๋งฅ์์๋ dylib ํ์ฅ์๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์์ฃผ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งค ์ํํธ์จ์ด๋ง๋ค ๋ฃ์ผ๋ฉด ์ํํธ์จ์ด์ ์ฉ๋๋ ์ปค์ง๊ณ ๊ด๋ฆฌ์ ๋นํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฐํํ๋ฅผ ๋๊ฒ ๋์์ต๋๋ค. ๋ถ๋ช ์ด๊ตฌ์กฐ๋ ํจ์จ์ ์ด์ง๋ง ์ด ํน์ง๋๋ฌธ์ ๋ง์ ์์กด์ฑ๋ฌธ์ ๋ฅผ ๋ฐ์์ํต๋๋ค. ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์ํํธ์จ์ด๋ฅผ ์ฐ๋ฆฌ๊ฐ ์ ์ํ๋ ์ฝ๋์ ๋ฃ๊ฒ ๋๋ฉด ์ฝ๋ ๊ทธ ์์ฒด๋ก๋ ์คํ๋์ง ์์ต๋๋ค. OS์ ์กด์ฌํ๋ ๋ง์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฌผ๋ ค์ ์คํ๋๊ฒ ๋ฉ๋๋ค. OS์์ ํด๋น ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ฑฐ๋ ๋ฒ์ ์ด ๋๋ฌด ํฌ๊ฒ ๋ค๋ฅด๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์คํํ์ผ์ ์คํ๋ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋ฆฌ๋
์ค์์ ์์ฃผ ์ฌ์ฉํ๋ ํ์ผ์ค ํ๋์ธ echo ๋ช
๋ น์ด๋ ํฐ๋ฏธ๋์์ ์
๋ ฅ๋ฐ์ ์ธ์๋ฅผ ์ถ๋ ฅํ๋ ๋ช
๋ น์ด ์
๋๋ค.
์ด ๋ช
๋ น์ด๊ฐ ์ฌ์ฉํ๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒดํฌํด๋ณด๊ฒ ์ต๋๋ค.
๋ฆฌ๋ ์ค์๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒดํฌํ๊ธฐ ์ํด์ ldd ๋ผ๋ ๋ช ๋ น์ด๊ฐ ์กด์ฌํฉ๋๋ค. /bin/echo ๋ช ๋ น์ด๋ฅผ ํ๋ฒ ldd๋ก ์ฒดํฌํด๋ณด๊ฒ ์ต๋๋ค.
$ ldd /usr/bin/echo์ถ๋ ฅ์ ์๋๊ณผ ๊ฐ์ต๋๋ค.
linux-vdso.so.1 => (0x00007ffd7b3c8000)
libc.so.6 => /lib64/libc.so.6 (0x00007fadbdb9a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fadbdf67000)
๋๋ฒ์งธ์ ๋ณด์ด๋ libc.so.6 ํ์ผ์ ๋ค์ ldd ์ฒดํฌํ๊ฒ ์ต๋๋ค.
$ ldd /lib64/libc.so.6๋ค์ ์ถ๋ ฅ์ ์๋์ ๊ฐ์ต๋๋ค.
/lib64/ld-linux-x86-64.so.2 (0x00007f0b0573e000)
linux-vdso.so.1 => (0x00007ffe356a9000)
๋ค์ ld-linux-x86-64.so.2๋ฅผ ldd ์ฒดํฌํฉ๋๋ค.
statically linked
echo๋ช ๋ น์ด๋ฅผ ์คํํ๊ธฐ ์ํด์ ldd๋ฅผ ์ฒดํฌํด๋ณด๋ฉด ์๋ง์ .soํ์ผ์ด ํ์ํฉ๋๋ค. ์ด ํ์ผ์ด ์๋ค๋ฉด echo๋ ์คํ๋ ์ ์์ต๋๋ค.
๋๋ถ๋ถ ์ฃผ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ OS๊ฐ ์ค์น๋ ๋ ๋๋ถ๋ถ ์๋์ค์น๋ฉ๋๋ค๋ง, ๋งํฌ๋ ํน์ง์ ์ ํ์๋ ์์ต๋๋ค. ์๋ง ๊ณ์ ํ์ดํํ๋ฉด ์ธ์ ๊ฐ๋ ์ฌ์ฉ๋๋ ๋ชจ๋ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์๋ผ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ฅ์ ๋จ์ํ๊ฒ ์๊ฐํ๋ echo ๋ช ๋ น์ด๊ฐ ์ด์ ๋ ๋จ์ํด๋ณด์ด์ง ์์ต๋๋ค.
otool์ด ๋ฆฌ๋ ์ค์ ldd์ ๊ฐ์ ์ญํ ์ ํฉ๋๋ค.
$ otool -L /bin/echo
-
๋ง์ฝ ์๋์ฐ์ฆ์์๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฒดํฌํ๊ณ ์ถ๋ค๋ฉด, Cygwin์ ์ค์นํ๋ฉด ldd๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
DependencyWalker๋ผ๋ ์ํํธ์จ์ด๋ฅผ ์ด์ฉํ์ฌ ์์กด์ฑ์ ์ฒดํฌํ ์ ์์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ ์์ฑํ ๋ ์์ ์ด ์ํ๋ ๊ธฐ์ ์ด ์์ฉํ๋ก๊ทธ๋จ๊ณผ ์คํ์์ค ์๋ฃจ์ ์ค ๋๋ค ์กด์ฌํ๋ค๋ฉด ๋๊ฐ์ ํ๋ก๊ทธ๋จ์ ์ ๋ถ ํ ์คํธํด๋ณด์ธ์. ๊ฒฐ๊ณผ์ ์ฐจ์ด๊ฐ ํฌ๊ฒ ๋์ง ์๊ณ , ์์ฉํด์ ์คํ์์ค ๋๊ฐ์ค ์ ํํด์ ์์กด์ฑ์ ๊ฐ์ ธ๊ฐ์ผ ํ๋ค๋ฉด ๊ฐ์ธ์ ์ผ๋ก ์ฑ์ํ ์คํ์์ค์ ์์กด์ฑ์ ๊ฐ์ง๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
์์กด์ฑ์ ์๊ฐํ๋ฉฐ ํ๋ก๊ทธ๋๋ฐํ๋๊ฒ์ ๊ฒฐ์ฝ ์ฝ์ง ์์์ผ ์ ๋๋ค. ํ์ง๋ง ์ด๋ฐ ํน์ฑ๋ค์ ๊ณ ๋ฏผํ๊ณ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฉํ๋ค๋ฉด ๋ถ๋ช ๋ฏธ๋์ ํฐ ๊ฐ์น๋ก ์ฌ๋ฌ๋ถ์๊ฒ ๋์์ฌ ๊ฒ ์ ๋๋ค.