1. ํ”„๋กœ๊ทธ๋žจ๊ณผ ์ปดํŒŒ์ผ โ€‹

ํ”„๋กœ๊ทธ๋žจ (Program)๐Ÿ“’

: ์—ฐ์‚ฐ ์žฅ์น˜๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•œ ์ผ์ข…์˜ ๋ฌธ์„œ์ด๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์„ ์—ฐ์‚ฐ ์žฅ์น˜์— ์ „๋‹ฌํ•˜๋ฉด, CPU๋Š” ์ ํ˜€์žˆ๋Š” ๋ช…๋ น๋“ค์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์˜๋„ํ•œ

๋™์ž‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

* ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ํ•ด์„ํ•˜์—ฌ ๋ช…๋ น์–ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ ์žฅ์น˜๋ฅผ programmableํ•˜๋‹ค๊ณ 

ํ•œ๋‹ค. ํ˜„๋Œ€์˜ ์ปดํ“จํ„ฐ๊ฐ€ ๋Œ€ํ‘œ์ ์ธ programmable ์—ฐ์‚ฐ ์žฅ์น˜, ์ผ๋ฐ˜ ๊ณ„์‚ฐ๊ธฐ ๋Œ€ํ‘œ์ ์ธ non-programmable ์—ฐ์‚ฐ์žฅ์น˜

โ€‹

· ๊ณผ๊ฑฐ์—๋Š” ๋‚ด๋ถ€ ์ €์žฅ ์žฅ์น˜์— ์ €์žฅํ•  ์ˆ˜ ์—†์–ด์„œ ์‚ฌ๋žŒ์ด ์ „์„ ์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์ปดํ“จํ„ฐ์— ์ „๋‹ฌํ•จ - ์• ๋‹ˆ์•…(ENIAC)

--> ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋ฉฐ, ํฌ๊ธฐ๊ฐ€ ํฐ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ์–ด๋ ค์› ๋‹ค.

โ–ถ ์ด๋Ÿฌํ•œ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•œ Stored-Program Computer๊ฐ€ 1950๋…„์— ์ตœ์ดˆ๋กœ ์ƒ์šฉํ™”๋˜์—ˆ๋‹ค.

→ ๊ธฐ์กด์˜ ์ปดํ“จํ„ฐ๋“ค๋ณด๋‹ค ์›”๋“ฑํžˆ ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ €์žฅ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ„ํŽธํ–ˆ๋‹ค.

→ ์ด์ œ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ๊ฐ€ Stored-Program Computer ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœ๋œ๋‹ค.

โ€‹

· Stored-Program Computer์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ €์žฅ์žฅ์น˜์— ์ด์ง„(Binary) ํ˜•ํƒœ๋กœ ์ €์žฅ๋œ๋‹ค.

→ ์—”์ง€๋‹ˆ์–ด๋“ค์ด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ(Binary)๋ผ๊ณ  ๋ถ€๋ฅด๊ณค ํ•œ๋‹ค.

โ€‹

โ€‹

โ€‹

โ€‹

์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (Programming Language)

: ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด

- C, C++, Go, Rust์™€ ๊ฐ™์€ ๊ณ ๊ธ‰์–ธ์–ด๋“ค๊ณผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด, ๊ธฐ๊ณ„์–ด ๋“ฑ์˜ ์ €๊ธ‰ ์–ธ์–ด๋“ค์ด ์žˆ๋‹ค.

โ€‹

์†Œ์Šค ์ฝ”๋“œ (Source Code)

: CPU๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋ช…๋ น๋“ค์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ

โ€‹

์ปดํŒŒ์ผ (Compile)

: ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด์˜ ํ˜•์‹์œผ๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ

โ€‹

์ปดํŒŒ์ผ๋Ÿฌ (Compiler)

: ์ปดํŒŒ์ผ์„ ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ex) GCC, Clang, MSVC

โ€‹

* Python, Javascript ๋“ฑ์˜ ์–ธ์–ด๋Š” ์ปดํŒŒ์ผ์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

- ์ด ์–ธ์–ด๋“ค์€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ทธ๋•Œ ๊ทธ๋•Œ ๋ฒˆ์—ญํ•˜์—ฌ CPU์— ์ „๋‹ฌํ•จ

-> ์ด ๋™์ž‘์ด ํ†ต์—ญ๊ณผ ๋น„์Šทํ•˜์—ฌ ์ธํ„ฐํ”„๋ฆฌํŒ… (Interpreting) ์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ณ ,

์ด๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ธํ„ฐํ”„๋ฆฌํ„ฐ (Interpreter) ๋ผ๊ณ  ํ•œ๋‹ค.

โ€‹

โ€‹

โ€‹

โ€‹

์ปดํŒŒ์ผ ๊ณผ์ •

- C์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์ฒ˜๋ฆฌ(Preprocess), ์ปดํŒŒ์ผ(Compile), ์–ด์…ˆ๋ธ”(Assemble), ๋งํฌ(Link)์˜ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋ฐ”์ด๋„ˆ๋ผ๊ณ  ๋ฒˆ์—ญ๋œ๋‹ค.

โ€‹

โ€ป ์ปดํŒŒ์ผ ๊ณผ์ • ์† ์ปดํŒŒ์ผ

์ปดํŒŒ์ผ(Compile)์˜ ์ •ํ™•ํ•œ ์˜๋ฏธ๋Š” ์–ด๋–ค ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ(Source Code)๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋ชฉ์  ์ฝ”๋“œ(Object Code)๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ ๋ชจ๋‘ ์ปดํŒŒ์ผ์ด๋‹ค.

โ€‹

โ€‹

โ€‹

โ€‹

์ „์ฒ˜๋ฆฌ (Preprocessing)

: ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์ปดํŒŒ์ผ ํ•˜๊ธฐ ์ „์—, ํ•„์š”ํ•œ ํ˜•์‹์œผ๋กœ ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •

โ€‹

์ „์ฒ˜๋ฆฌ ๊ณผ์ •

โ‘  ์ฃผ์„ ์ œ๊ฑฐ

: ์ฃผ์„์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘๊ณผ ์ƒ๊ด€์ด ์—†์œผ๋ฏ€๋กœ ์ „์น˜๋ฆฌ ๊ณผ์ •์—์„œ ๋ชจ๋‘ ์ œ๊ฑฐ๋จ

โ‘ก ๋งคํฌ๋กœ ์น˜ํ™˜

: ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๋งคํฌ๋กœ(#define)์˜ ์ด๋ฆ„์€ ๊ฐ’์œผ๋กœ ์น˜ํ™˜๋œ๋‹ค.

โ‘ข ํŒŒ์ผ ๋ณ‘ํ•ฉ

: ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†Œ์Šค์™€ ํ—ค๋” ํŒŒ์ผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. -> ๋”ฐ๋กœ ์ปดํŒŒ์ผํ•ด์„œ ํ•ฉ์น˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ํŒŒ์ผ์„ ํ•ฉ์น˜๊ณ  ์ปดํŒŒ์ผํ•˜๊ธฐ๋„ ํ•จ

 
// Name: add.c
#include "add.h"
#define HI 3
int add(int a, int b) { return a + b + HI; }  // return a+b
// Name: add.h
int add(int a, int b);

gcc์—์„œ๋Š” -E์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ์˜ ์ „์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์†Œ์Šค ์ฝ”๋“œ์˜ ์ฃผ์„์ธ // return a+b๊ฐ€ ์‚ฌ๋ผ์กŒ๊ณ , HI๊ฐ€ 3์œผ๋กœ ์น˜ํ™˜๋˜์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  add.h์˜ ๋‚ด์šฉ์ด #include๋กœ ์ธํ•ด ๋ณ‘ํ•ฉ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€‹

โ€‹

โ€‹

โ€‹

โ€‹

์ปดํŒŒ์ผ

// Name: opt.c
// Compile: gcc -o opt opt.c -O2
#include <stdio.h>
int main() {
  int x = 0;
  for (int i = 0; i < 100; i++) x += i; // x์— 0๋ถ€ํ„ฐ 99๊นŒ์ง€์˜ ๊ฐ’ ๋”ํ•˜๊ธฐ
  printf("%d", x);
}
์ปดํŒŒ์ผ ํ›„ ๋””๋ฒ„๊น…
disassemble main

 

์œ„์™€ ๊ฐ™์ด -02 ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ opt.c๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ์ปดํŒŒ์ผํ•˜๋ฉด, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์˜ฏ๊ธฐ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ฐ˜๋ณต๋ฌธ์˜ ๊ฒฐ๊ณผ๋กœ x๊ฐ€ ๊ฐ€์งˆ ๊ฐ’์„ ์ง์ ‘ ๊ณ„์‚ฐํ•˜์—ฌ, ์ด๋ฅผ ๋Œ€์ž…ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

์ตœ์ ํ™”๋ฅผ ํ•˜๊ฒŒ๋˜๋ฉด ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์•˜์„ ๋•Œ๋ณด๋‹ค ๋” ์งง๊ณ , ์‹คํ–‰ ์‹œ๊ฐ„๋„ ๋” ๋‹จ์ถ•๋˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

โ€‹

์œ„์™€ ๊ฐ™์ด "-S" ์˜ต์…˜์„ ์ด์šฉํ•˜๋ฉด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€‹

โ€‹

โ€‹

โ€‹

โ€‹

์–ด์…ˆ๋ธ” (Assemble)

: ์ปดํŒŒ์ผ๋กœ ์ƒ์„ฑ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์ฝ”๋“œ๋ฅผ ELFํ˜•์‹์˜ ๋ชฉ์  ํŒŒ์ผ(Object file)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

๋ชฉ์ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜๋˜๊ณ  ๋‚˜๋ฉด ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜๋ฏ€๋กœ ๋”์ด์ƒ ์‚ฌ๋žŒ์ด ํ•ด์„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

โ€‹

* ELF : ๋ฆฌ๋ˆ…์Šค์˜ ์‹คํ–‰ํŒŒ์ผ ํ˜•์‹

์œˆ๋„์šฐ์—์„œ ์–ด์…ˆ๋ธ”ํ•˜๋ฉด ๋ชฉ์ ํŒŒ์ผ์€ PEํ˜•์‹

์ผ๋ถ€ ์บก์ณ

์œ„ ์‚ฌ์ง„์€ gcc์˜ "-c" ์˜ต์…˜์„ ํ†ตํ•ด add.S๋ฅผ ๋ชฉ์  ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ ํŒŒ์ผ์„ hexdump ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅํ•œ ๊ฒƒ์ด๋‹ค. ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด ์ค‘ ์ฝ”๋“œ๋กœ ๋ณด์ด๋Š” ๊ฒƒ์€ ์—†๋‹ค.

โ€‹

โ€‹

โ€‹

โ€‹

๋งํฌ (Link)

: ์—ฌ๋Ÿฌ ๋ชฉ์  ํŒŒ์ผ๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‹ค.

// Name: hello-world.c
// Compile: gcc -o hello-world hello-world.c
#include <stdio.h>
int main() { printf("Hello, world!"); }

๋‹ค์Œ ์ฝ”๋“œ์—์„œ printf ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€๋งŒ, printfํ•จ์ˆ˜์˜ ์ •์˜๋Š” hello-world.c์— ์—†์œผ๋ฉฐ, libc๋ผ๋Š” ๊ณต์œ 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์กด์žฌํ•œ๋‹ค. libc๋Š” gcc์˜ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ์— ์žˆ๋Š”๋ฐ, ๋ง์ปค๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ printf๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด libc์˜ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๊ฒฐํ•ด์ค€๋‹ค. ๋งํฌ๋ฅผ ๊ฑฐ์น˜๊ณ  ๋‚˜๋ฉด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์™„์„ฑ๋œ๋‹ค.

โ€‹

 

๋‹ค์Œ์€ add.o๋ฅผ ๋งํฌํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

๋งํฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ง์ปค๋Š” mainํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š”๋ฐ, add์˜ ์†Œ์Šค์ฝ”๋“œ์—๋Š” mainํ•จ์ˆ˜์˜ ์ •์˜๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด --unresolved-stmbols๋ฅผ ์ปดํŒŒ์ผ ์˜ต์…˜์— ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

โ€‹

โ€‹

2. ๋””์Šค์–ด์…ˆ๋ธ”๊ณผ ๋””์ปดํŒŒ์ผ

๋””์Šค์–ด์…ˆ๋ธ” (Disassemble)

: ๊ธฐ๊ณ„์–ด๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์žฌ๋ฒˆ์—ญํ•™์ž ํ•˜๋Š” ๊ณผ์ • -> ์–ด์…ˆ๋ธ”์˜ ์—ญ๊ณผ์ •์ด๋ฏ€๋กœ ๋””์Šค์–ด์…ˆ๋ธ”์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

โ€‹

์ผ๋ถ€ ์บก์ณ

์œ„์˜ ๋ช…๋ น์–ด๋กœ ๋””์Šค์–ด์…ˆ๋ธ”๋œ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

โ€‹

โ€‹

โ€‹

โ€‹

๋””์ปดํŒŒ์ผ

: ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •

โ€‹

* ๋””์ปดํŒŒ์ผ๋Ÿฌ (Decompiler)

-> ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ณด๋‹ค ๊ณ ๊ธ‰์–ธ์–ด๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ฒˆ์—ญํ•จ

๋””์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์†Œ์Šค ์ฝ”๋“œ์™€ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋Š” ๋ชปํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ์ด ์˜ค์ฐจ๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ๋™์ž‘์„ ์™œ๊ณกํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ, ๋””์Šค์–ด์…ˆ๋ธ”๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์••๋„์ ์œผ๋กœ ๋ถ„์„ ํšจ์œจ์„ ๋†’์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋””์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค.

๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!