
7๋จ์์ ๋ง์ปค๋ฅผ ๊ณต๋ถํ๊ธฐ ์ ์ 1๋จ์์์ ์ดํด๋ดค๋ ์ ๊ทธ๋ฆผ์์ ๋ณด์ฌ์ง๋ ์ปดํ์ผ ์์คํ
์ ๋จผ์ ์ดํด๋ณด์.
์ฐ๋ฆฌ๊ฐ ์์ฑํ๋ hello.c๋ผ๋ ํ๋ก๊ทธ๋จ์
์ ์ฒ๋ฆฌ๊ธฐ โก๏ธ ์ปดํ์ผ๋ฌ โก๏ธ ์ด์
๋ธ๋ฌ โก๏ธ ๋ง์ปค ๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ ์์คํ
์ ์ํด ์คํ๋ ์ ์๋ค.
์ด๋ฒ ํฌ์คํ ์์๋ ์ ๋จ๊ณ ์ค ๋ง์ปค ๋จ๊ณ์ ๋ํด ์์๋ณด๋ ค๊ณ ํ๋ค.
์ฌ๋ฌ ๊ฐ์ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ์์ ์ฐ๊ฒฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ์๊ณ ์คํ๋ ์ ์๋ ํ ๊ฐ์ ํ์ผ๋ก ๋ง๋๋ ์์
๋งํน์ ์ํฉ์ ๋ฐ๋ผ ํ๋ก๊ทธ๋จ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅธ ์์ ์์ ์ํํ ์ ์๋ค.
1.Compile Time(์ปดํ์ผ์) : ์ ํต์ ์ธ ์ ์ ๋งํฌ
2.Load Time(๋ก๋์) : ํ๋ก๊ทธ๋จ ์คํ ์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋ฉ
3.Run Time(์คํ์) : ํ๋ฌ๊ทธ์ธ, .so ๋ฑ ์คํ ์ค ๋ก๋ฉ
์์์ ๋งํ๋ ๊ฒ์ฒ๋ผ ๋งํน ๊ณผ์ ์ ๋๊ฒ ๋ง์ปค์ ์ํด ์ฒ๋ฆฌ๋๋ฉฐ,
๊ท๋ชจ๊ฐ ์์ ํ๋ก๊ทธ๋จ ์์ฑ์์๋ ๊ทธ๋ค์ง ์ค์ํ ์ฃผ์ ๋ ์๋๋ค.
โ๏ธ ๊ทธ๋ ๋ค๋ฉด ์ ๋ฐฐ์ฐ๋๊ฐ?
๐ฌ ์ด๋ฌํ ๋งํน์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ์ดํดํ๊ธฐ ์ํด์๋, ์ด ๊ณผ์ ์ ๋๊ฐ ์ด๋ค ์์๋ก ์คํํ๋์ง๋ ์์์ผ ํ๋ฉฐ
๊ทธ ์ญํ ์ ๋ด๋นํ๋ ๊ฒ์ด ๋ฐ๋ก ์ปดํ์ผ๋ฌ ๋๋ผ์ด๋ฒ์ด๋ค.
๋๋ถ๋ถ์ ์ปดํ์ผ ์์คํ
์ ํ๋ก๊ทธ๋จ์ ์คํ์ ์ํด ์ฌ์ฉ์๋ฅผ ๋์ ํด์
์ธ์ด ์ ์ฒ๋ฆฌ๊ธฐ, ์ปดํ์ผ๋ฌ, ์ด์
๋ธ๋ฌ, ๋ง์ปค๋ฅผ ํ์์ ๋ฐ๋ผ ํธ์ถํ๋ ์ฃผ์ฒด๋ฅผ ์ ๊ณตํ๋๋ฐ
์ด๋ฅผ ์ปดํ์ผ๋ฌ ๋๋ผ์ด๋ฒ๋ผ๊ณ ํ๋ฉฐ ์๋ฅผ ๋ค๋ฉด GNU ์ปดํ์ผ ์์คํ
์ GCC ๋๋ผ์ด๋ฒ๊ฐ ์๋ค.
cpp [other arguments] main.c /tmp/main.icpp-D, ์ธํด๋ฃจ๋ ๊ฒฝ๋ก -I ๋ฑ)main.c: ์ ์ฒ๋ฆฌํ C ์์ค ํ์ผ/tmp/main.i: ์ ์ฒ๋ฆฌ๋ C ์ฝ๋ ์ถ๋ ฅ ๊ฒฝ๋ก (.i ํ์ฅ์)๐ ์์ฝ: main.c๋ฅผ ์ฝ์ด ๋งคํฌ๋ก/ํค๋ ํฌํจ์ ๋ชจ๋ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ /tmp/main.i์ ์ ์ฅ
cc1 /tmp/main.i -Og [other arguments] -o /tmp/main.scc1/tmp/main.i: ์ ์ฒ๋ฆฌ๋ ์
๋ ฅ C ํ์ผ-Og: ๋๋ฒ๊น
์นํ์ ์ต์ ํ ์์ค (์ผ๋ถ ์ต์ ํ ์ ์ฉ, ๋๋ฒ๊ทธ ์ ๋ณด ์ ์ง)-o /tmp/main.s: ์ด์
๋ธ๋ฆฌ ์ฝ๋ ์ถ๋ ฅ ๊ฒฝ๋ก ์ง์ (.s ํ์ฅ์)๐ ์์ฝ: ์ ์ฒ๋ฆฌ๋ C ์ฝ๋(/tmp/main.i)๋ฅผ ์ด์
๋ธ๋ฆฌ(/tmp/main.s)๋ก ๋ณํ
as [other arguments] -o /tmp/main.o /tmp/main.sas-o /tmp/main.o: ์ถ๋ ฅ ๋ชฉ์ ํ์ผ ๊ฒฝ๋ก (.o ํ์ฅ์)/tmp/main.s: ์
๋ ฅ ์ด์
๋ธ๋ฆฌ ํ์ผ๐ ์์ฝ: ์ด์
๋ธ๋ฆฌ(/tmp/main.s)๋ฅผ ๊ธฐ๊ณ์ด ๋ชฉ์ ํ์ผ(/tmp/main.o)๋ก ๋ณํ
ld -o prog [system object files and args] /tmp/main.o /tmp/sum.old-o prog: ์ถ๋ ฅ ์คํ ํ์ผ ์ด๋ฆ์ prog๋ก ์ง์ [system object files and args]:_start ์ ์)์ ๊ด๋ จ๋ ์์คํ
๋ชฉ์ ํ์ผ๋ค/usr/lib/crt1.o, /usr/lib/libc.so ๋งํฌ ์ต์
๋ฑ)/tmp/main.o /tmp/sum.o: ๋งํฌํ ์ฌ์ฉ์ ๋ชฉ์ ํ์ผ ๋ชฉ๋ก๐ ์์ฝ: main.o, sum.o์ ์์คํ
๋ชฉ์ ํ์ผยท๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฐํฉํด ์คํ ํ์ผ prog ์์ฑ
linux> ./prog.i.s๐ฌ ์ฆ, ์ปดํ์ผ๋ฌ ๋๋ผ์ด๋ฒ๋ ๋งํน๊น์ง ํฌํจํ ์ ์ฒด ๋น๋ ๊ณผ์ ์ ์๋์ผ๋ก ์ํํ๋ค.
์ด์ ์ด ์ค์์๋ ์ฐ๋ฆฌ๊ฐ ์ง์คํ ์ ์ ๋งํฌ ๊ณผ์ ์ ๊ตฌ์ฒด์ ์ธ ๋์์ ์ดํด๋ณด๋ ค๊ณ ํ๋ค.
์ ์ ๋งํฌ๋ค์ ์ฌ๋ฐฐ์น ๊ฐ๋ฅํ ๋ชฉ์ ํ์ผ๋ค๊ณผ ๋งํฌ ๋ช ๋ น ์ธ์(๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ต์ ๋ฑ) ๋ค์ ์ ๋ ฅ์ผ๋ก ๋ฐ์๋ค์ฌ์ ๋ก๋, ์คํ๋ ์ ์๋ ์์ ํ ๋งํฌ๋ ์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ์ถ๋ ฅ์ผ๋ก ์์ฑํ๋ค.
โก๏ธ ์ด๋ ๊ฒ ์คํ ํ์ผ์ ๋ง๋ค๊ธฐ ์ํด์ ๋ง์ปค๋ ๋๊ฐ์ง ์ฃผ์ ์์ ์ ์ํํด์ผ ํ๋ค.
์ฌ๋ฌ ๊ฐ์ ์ค๋ธ์ ํธ ํ์ผ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฐํฉํ๋ ๊ณผ์ ์์,
๊ฐ ์ฌ๋ณผ(ํจ์, ์ ์ญ ๋ณ์, ์ ์ ๋ณ์ ๋ฑ)์ ์ฐธ์กฐ๋ฅผ ํด๋น ์ฌ๋ณผ์ด ์ ์๋ ์์น์ ์ฐ๊ฒฐํ๋ค.
์ด ๋จ๊ณ์์ ์ฌ๋ณผ ์ด๋ฆ โ ์ฌ๋ณผ ์ ์(์น์
, ์คํ์
) ๋งคํ์ด ์ด๋ฃจ์ด์ง๋ค.
์ปดํ์ผ๋ฌ์ ์ด์
๋ธ๋ฌ๊ฐ ์์ฑํ ๋ชฉ์ ํ์ผ์ ๊ฐ ์น์
์ด ์ฃผ์ 0๋ถํฐ ์์ํ๋ค๊ณ ๊ฐ์ ํ๋ค.
์ฌ๋ฐฐ์น ์ํธ๋ฆฌ(relocation entry) ์ ๊ธฐ๋ก๋ ์ง์์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก,
๋ง์ปค๋ ๊ฐ ์ฌ๋ณผ ์ ์์ ์ฐธ์กฐ์ ์ฃผ์๋ฅผ ์ค์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ์์ ํ๋ค.
์ฆ, ์ฝ๋์ ๋ฐ์ดํฐ ์น์
์ ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ์ฌ๋ฐ๋ฅธ ์์น์ ๋ฐฐ์นํ๊ณ ,
ํด๋น ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ชจ๋ ์ฐธ์กฐ๋ฅผ ์ ์ฃผ์๋ก ๊ฐฑ์ ํ๋ค.
๐ฌ ์ ์ ๋งํฌ๋ฅผ ์ ๋๋ก ์ดํดํ๋ ค๋ฉด, ๋งํฌ์ ์
๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์ด๋ค ํ์์ ํ์ผ์ธ์ง๋ถํฐ ์์์ผ ํ๋ฉฐ,
์ด๋ฅผ ์ํด ๋ชฉ์ ํ์ผ(Object File)์ ์ข
๋ฅ๋ฅผ ๋จผ์ ์ดํด๋ณด๋ ค๊ณ ํ๋ค.
์ปดํ์ผ๋ฌ์ ์ด์ ๋ธ๋ฌ๋ ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์, ๋ง์ปค๋ ์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ์์ฑํ๋ค.
cf) ๋ชฉ์ ํ์ผ๋ค์ ํน์ ๋ชฉ์ ํ์ผ ํ์์ ๋ฐ๋ผ ๊ตฌ์ฑ๋๋ฉฐ, ์ด๋ค์ ์์คํ ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.

์์ ๊ทธ๋ฆผ์ ์ ํ์ ์ธ ELF ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ํฌ๋งท์ ๋ณด์ฌ์ค๋ค
( ELF : ๋ฆฌ๋
์ค๋ ์ ๋์ค ๊ณ์ด ์์คํ
์์ ์คํ ํ์ผ, ๋ชฉ์ ํ์ผ(.o), ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(.so), ์ฝ์ด ๋คํ๋ฅผ ์ ์ฅํ๋ ํ์ค ํ์ผ ํฌ๋งท )
์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ํฌ๊ฒ ์ธ ๋ถ๋ถ์ผ๋ก ๋๋ ์ ์๋ค.
ํ์ผ ๋งจ ์์ ์์นํ๋ฉฐ, ๋ง์ปค๊ฐ ๋ชฉ์ ํ์ผ์ ๊ตฌ๋ฌธ ๋ถ์์ ํ๊ณ ํด์ํ๋๋ก ํ๋ ๋ฉํ๋ฐ์ดํฐ๋ค์ด ํฌํจ๋์ด ์๋ค.
๊ฐ ์น์ ์๋ ์ฝ๋, ๋ฐ์ดํฐ, ์ฌ๋ณผ ์ ๋ณด, ์ฌ๋ฐฐ์น ์ ๋ณด ๋ฑ์ด ๋ค์ด๊ฐ๋ค.
| ์น์ ์ด๋ฆ | ๋ด์ฉ |
|---|---|
| .text | ์ปดํ์ผ๋ ์ด์ ๋ธ๋ฆฌ์ด ์ฝ๋(ํจ์ ๋ณธ๋ฌธ) |
| .rodata | ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ (๋ฌธ์์ด ๋ฆฌํฐ๋ด, const ์์ ๋ฑ) |
| .data | ์ด๊ธฐํ๋ ์ ์ญยท์ ์ ๋ณ์ |
| .bss | ์ด๊ธฐ๊ฐ์ด ์๋ ์ ์ญยท์ ์ ๋ณ์ (ํ์ผ์ ๋ฐ์ดํฐ๋ ์์, ํฌ๊ธฐ ์ ๋ณด๋ง) |
| .symtab | ์ฌ๋ณผ ํ ์ด๋ธ (ํจ์ยท๋ณ์ยท์น์ ์ด๋ฆ๊ณผ ์์ฑ, ์ฃผ์ ๋ฑ) |
| .rel.text / .rela.text | .text ์น์
๋ด ์ฌ๋ฐฐ์น ์ ๋ณด (์ธ๋ถ ์ฌ๋ณผ ์ฐธ์กฐ ์์น, ์์ ๋ฐฉ๋ฒ) |
| .rel.data / .rela.data | .data ์น์
๋ด ์ฌ๋ฐฐ์น ์ ๋ณด |
| .debug | ๋๋ฒ๊ทธ ์ ๋ณด(DWARF ๋ฑ) |
| .line | ์์ค ์ฝ๋ ๋ผ์ธ ๋งคํ ์ ๋ณด |
| .strtab | ๋ฌธ์์ด ํ ์ด๋ธ(์ฌ๋ณผ ์ด๋ฆ ์ ์ฅ) |
ํ์ผ ๋๋ถ๋ถ์ ์์นํ๋ฉฐ, ๋ชจ๋ ์น์
์ ์ด๋ฆ, ํ์
, ํฌ๊ธฐ, ํ์ผ ์คํ์
, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ฑ์ ๊ธฐ๋กํ๋ ์น์
์ด๋ค.
๋ง์ปคยท๋๋ฒ๊ฑฐ๊ฐ ํ์ผ์ ์ฝ์ ๋, ์ด ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๊ฐ ์น์
์ ์ฐพ์๊ฐ๋ค.
| ๊ตฌ๋ถ | .data | .bss |
|---|---|---|
| ์ฉ๋ | ์ด๊ธฐ๊ฐ์ด ์๋ ์ ์ญ/์ ์ ๋ณ์ ์ ์ฅ | ์ด๊ธฐ๊ฐ์ด ์๊ฑฐ๋ 0์ผ๋ก ์ด๊ธฐํ๋ ์ ์ญ/์ ์ ๋ณ์ ์ ์ฅ |
| ํ์ผ ํฌ๊ธฐ ๋ฐ์ | ์ค์ ์ด๊ธฐ๊ฐ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋๋ฏ๋ก ํ์ผ ํฌ๊ธฐ์ ๋ฐ์๋จ | ๋ฐ์ดํฐ ์์ด ํฌ๊ธฐ ์ ๋ณด๋ง ๊ธฐ๋ก๋๋ฏ๋ก ํ์ผ ํฌ๊ธฐ์ ๋ฐ์๋์ง ์์ |
| ์์ ์ฝ๋ | int count = 5; | int total; (์๋์ผ๋ก 0์ผ๋ก ์ด๊ธฐํ) |
| ๋ฉ๋ชจ๋ฆฌ ๋ก๋ฉ ์ ๋์ | ํ์ผ์ ์ ์ฅ๋ ์ด๊ธฐ๊ฐ์ ๋ก๋ฉ | OS๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น ํ 0์ผ๋ก ์ด๊ธฐํ |
๐ฌ ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ํต์ฌ์๋ ์ฌ๋ณผ๊ณผ ์ฌ๋ณผ ํ
์ด๋ธ์ด ์๋ค.
๊ฒฐ๊ตญ ์ด ์ ๋ณด๊ฐ ์์ด์ผ ๋ง์ปค๊ฐ ์ฌ๋ณผ์ ์ฐธ์กฐ์ ์ ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐํ ์ ์๋ค.
๊ฐ ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ๋ชจ๋(relocatable object module) m์
m์์ ์ ์๋๊ฑฐ๋ ์ฐธ์กฐ๋๋ ์ฌ๋ณผ์ ๋ํ ์ ๋ณด๋ฅผ ๋ด์ ์ฌ๋ณผ
ํ
์ด๋ธ์ ๊ฐ์ง๋ค.
๋ง์ปค ๊ด์ ์์ ์ฌ๋ณผ์ 3๊ฐ์ง ์ข ๋ฅ๋ก ๋๋๋ค.
m์์ ์ ์๋๊ณ , ๋ค๋ฅธ ๋ชจ๋์์๋ ์ฐธ์กฐ ๊ฐ๋ฅnonstatic C ํจ์, ์ ์ญ ๋ณ์m์์ ์ฐธ์กฐํ์ง๋ง, ๋ค๋ฅธ ๋ชจ๋์์ ์ ์๋จnonstatic C ํจ์, ์ ์ญ ๋ณ์ (๋ค๋ฅธ ๋ชจ๋์ ์ ์)m์์๋ง ์ ์ ๋ฐ ์ฐธ์กฐstatic ํจ์, static ์ ์ญ ๋ณ์.symtab ์ฌ๋ณผ ํ
์ด๋ธ์๋ ์ง์ญ(nonstatic) ๋ณ์๋ ํฌํจ๋์ง ์์static ์ง์ญ ๋ณ์๋ ์์ธ์ ์ผ๋ก .data ๋๋ .bss์ ์ ์ฅ๋๊ณ ,| ํ๋ | ์ค๋ช |
|---|---|
| name | ๋ฌธ์์ด ํ
์ด๋ธ(.strtab) ๋ด ์ด๋ฆ์ ์คํ์
๊ฐ |
| value | ์ฌ๋ณผ์ ์ฃผ์ - ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ํ์ผ: ์น์ ์์์ผ๋ก๋ถํฐ์ ์คํ์ - ์คํ ํ์ผ: ์ ๋ ๋ฐํ์ ์ฃผ์ |
| size | ๊ฐ์ฒด ํฌ๊ธฐ(๋ฐ์ดํธ) |
| type | ๋ฐ์ดํฐ(data) ๋๋ ํจ์(function) |
| binding | ๋ก์ปฌ(local) ๋๋ ๊ธ๋ก๋ฒ(global) |
| section | ์ฌ๋ณผ์ด ์ํ ์น์
์ ํค๋ ์ธ๋ฑ์ค (ํน์ ๊ฐ: ABS = ์ ๋ ์ฃผ์, UNDEF = ์ธ๋ถ ์ ์, COMMON = ๋ฏธํ ๋น ์ ์ญ ๋ณ์) |
๐ COMMON vs .bss
| ๊ตฌ๋ถ | ์๋ฏธ |
|---|---|
| COMMON | ์ด๊ธฐํ๋์ง ์์ ์ ์ญ ๋ณ์ |
| .bss | ์ด๊ธฐํ๋์ง ์์ static ๋ณ์, 0์ผ๋ก ์ด๊ธฐํ๋ ์ ์ญยท์ ์ ๋ณ์ |
์ด๋ฒ ๊ธ์์๋ ์ปดํ์ผ ์์คํ
์์์ ๋ง์ปค๊ฐ ์ด๋ค ์์น์ ์๊ณ , ๋งํน์ ๊ฐ๋
๊ณผ ํ์์ฑ, ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ์ค์ ๋ก ์คํํ๋ ์ปดํ์ผ๋ฌ ๋๋ผ์ด๋ฒ์ ์ญํ ์ ์ดํด๋ณด์๋ค.
๋ํ, ์ ์ ๋งํฌ ๊ณผ์ ์ ํฐ ํ๋ฆ๊ณผ ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํ ์ ์ ์ง์์ผ๋ก์ ๋ชฉ์ ํ์ผ์ ์ข
๋ฅ์ ๊ตฌ์กฐ, ELF ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ๊ตฌ์ฑ, ๊ทธ๋ฆฌ๊ณ ์ฌ๋ณผ๊ณผ ์ฌ๋ณผ ํ
์ด๋ธ์ ๊ธฐ๋ณธ ๊ฐ๋
์ ๋ํด์ ์ดํด๋ณด์๋ค.
์ฆ, ํ๋ก๊ทธ๋จ์ด ์คํ ํ์ผ๋ก ์์ฑ๋๊ธฐ ์ , ๋ง์ปค๊ฐ ๋ค๋ฃจ๋ โ์ฌ๋ฃโ์ ๊ทธ โ์ฌ๋ฃ์ ์ ๋ณดโ๋ฅผ ํ์ธํ ์ ์ด๋ค.
๋ค์ ๊ธ์์๋ ์ด ์ฌ๋ฃ๋ค์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๊ณ ๋ฐฐ์น๋๋์ง์ ์ด์ ์ ๋ง์ถ๋ค.
๊ตฌ์ฒด์ ์ผ๋ก, ์ฌ๋ณผ ํด์(Symbol Resolution) ๊ณผ์ ์์ ๋ง์ปค๊ฐ ์ฐธ์กฐ์ ์ ์๋ฅผ ์ด๋ป๊ฒ ์ฐ๊ฒฐํ๋์ง,
์ฌ๋ฐฐ์น(Relocation)๋ฅผ ํตํด ์ฃผ์๋ฅผ ์ด๋ป๊ฒ ์์ ํ๋์ง,
๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก ์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ด ์์ฑ๋๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ์ดํด๋ณผ ์์ ์ด๋ค.
LGTM :)