etc_index

ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค(Clustering Index)

ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋Š” ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค(PK) ๊ฐ’์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์ €์žฅ๋˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

  • ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์—” ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์œ„์น˜๋„ ๋ณ€๊ฒฝ

  • ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ์ž์ฒด๋Š” ์ผ๋ฐ˜ B-Tree์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค์˜ ๋ฆฌํ”„๋…ธ๋“œ์— ๋ ˆ์ฝ”๋“œ์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ์ด ์ €์žฅ

InnoDB ํ…Œ์ด๋ธ”์€ ๋ฐ˜๋“œ์‹œ ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์•„๋ž˜์˜ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ๋ง ํ‚ค๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

  1. ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋œ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค(Primary Key)

  2. ์ฒซ ๋ฒˆ์งธ NOT NULL + ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค(Unique Index).

  3. ๋‚ด๋ถ€์ ์œผ๋กœ 6๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ์ˆจ๊ฒจ์ง„ ROW_ID ์ปฌ๋Ÿผ ์ƒ์„ฑ

๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ PK๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ตฌ์กฐ

InnoDB์˜ ๋ชจ๋“  ๋ณด์กฐ ์ธ๋ฑ์Šค๋Š” ๋ฆฌํ”„ ๋…ธ๋“œ์— ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ ๋Œ€์‹  ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์„ ์ €์žฅํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ  ๋•Œ๋ฌธ์ด๋‹ค.

  1. ๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ ์‹ค์ œ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง

  2. ์‹ค์ œ ๋ ˆ์ฝ”๋“œ ์ฃผ์†Œ์˜ PK ๋ณ€๊ฒฝ ์‹œ ๋ ˆ์ฝ”๋“œ์˜ ์ฃผ์†Œ๊ฐ€ ๋ณ€๊ฒฝ ํ•„์š”(ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋œ ์ƒํƒœ์—ฌ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ)

  3. ๊ทธ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ๋ณ€๊ฒฝ ์ž‘์—… ์ˆ˜ํ–‰ ํ•„์š”

  4. ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ

PK๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

PK๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋ง ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์ฝ๊ธฐ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•จ์ด๊ณ , ๊ทธ ์žฅ๋‹จ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์žฅ์ 

    • ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ธฐ๋ฐ˜์˜ ๋ฒ”์œ„ ๊ฒ€์ƒ‰(Range Scan) ์‹œ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ธ์ ‘ํ•ด ์žˆ์–ด ๋น ๋ฅธ I/O ์„ฑ๋Šฅ ์ œ๊ณต

    • ๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค ๊ฐ’์„ ํฌํ•จํ•˜๋ฏ€๋กœ, ์ฟผ๋ฆฌ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ปฌ๋Ÿผ์ด ๋ณด์กฐ ์ธ๋ฑ์Šค์™€ ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค์— ์žˆ๋‹ค๋ฉด ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • ๋‹จ์ 

    • ๋ชจ๋“  ๋ณด์กฐ ์ธ๋ฑ์Šค๊ฐ€ PK ๊ฐ’์„ ํฌํ•จํ•˜๋ฏ€๋กœ, PK์˜ ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉด ๋ณด์กฐ ์ธ๋ฑ์Šค์˜ ์ „์ฒด ํฌ๊ธฐ๋„ ์ƒ์Šน

    • ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ์‹œ PK ๊ฐ’์— ๋”ฐ๋ผ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋˜๋ฏ€๋กœ, ์ˆœ์ฐจ์ ์ด์ง€ ์•Š์€ PK ๊ฐ’(์˜ˆ: UUID)์„ ์‚ฌ์šฉํ•˜๋ฉด ํŽ˜์ด์ง€ ๋ถ„ํ• (Page Split)์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์—ฌ ์“ฐ๊ธฐ ์„ฑ๋Šฅ์ด ์ €ํ•˜ ๋ฐœ์ƒ

    • ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ์กฐํšŒ๋Š” PK๋ฅผ ์ด์šฉํ•œ 2์ฐจ ์กฐํšŒ๋กœ ์ถ”๊ฐ€์ ์ธ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ

์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค(Unique Index)

์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ํŠน์ • ์ปฌ๋Ÿผ ๋˜๋Š” ์ปฌ๋Ÿผ ์กฐํ•ฉ์— ๋Œ€ํ•ด ์ค‘๋ณต๋œ ๊ฐ’์ด ์ €์žฅ๋  ์ˆ˜ ์—†๋„๋ก ๋ณด์žฅํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ด์ž ์ธ๋ฑ์Šค๋กœ, PK์™€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

  • ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅ

  • NULL ๊ฐ’ ํ—ˆ์šฉ

  • ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ํด๋Ÿฌ์Šคํ„ฐํ˜• ์ธ๋ฑ์Šค๊ฐ€ ์•„๋‹Œ, ๋น„ํด๋Ÿฌ์Šคํ„ฐํ˜•(๋ณด์กฐ) ์ธ๋ฑ์Šค๋กœ ์ƒ์„ฑ

์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ์ผ๋ฐ˜ ์ธ๋ฑ์Šค์™€ ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์— ์žˆ์–ด์„œ๋Š” ์ผ๋ฐ˜ ์ธ๋ฑ์Šค์™€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์กด์žฌํ•œ๋‹ค.

  • ์ฝ๊ธฐ: ์กฐํšŒํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ ๊ฑด์ˆ˜๊ฐ€ ๋ช…ํ™•ํ•  ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์ธ ๋ณด์กฐ ์ธ๋ฑ์Šค์™€ ์„ฑ๋Šฅ์ƒ ํฐ ์ฐจ์ด ์—†์Œ

  • ์“ฐ๊ธฐ: ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ์œ ์ผ์„ฑ(Uniqueness)์„ ๊ฒ€์ฆ ๊ณผ์ • ํ•„์š”

    • ์ด ์ค‘๋ณต ์ฒดํฌ ๊ณผ์ •์€ ์ถ”๊ฐ€์ ์ธ ๋””์Šคํฌ ์ฝ๊ธฐ๋ฅผ ์œ ๋ฐœํ•˜์—ฌ ์ผ๋ฐ˜ ๋ณด์กฐ ์ธ๋ฑ์Šค๋ณด๋‹ค ์“ฐ๊ธฐ ์„ฑ๋Šฅ ์ €ํ•˜

    • ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค๋Š” ์ค‘๋ณต ์—ฌ๋ถ€๋ฅผ ์ฆ‰์‹œ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์“ฐ๊ธฐ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ์ฒด์ธ์ง€ ๋ฒ„ํผ(Change Buffer) ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ

    • ์ค‘๋ณต ์ฒดํฌ๋ฅผ ์œ„ํ•œ ์ฝ๊ธฐ ์ž ๊ธˆ๊ณผ ์‹ค์ œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์„ ์œ„ํ•œ ์“ฐ๊ธฐ ์ž ๊ธˆ์ด ๊ฒฝํ•ฉํ•˜์—ฌ ๋ฐ๋“œ๋ฝ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ

์™ธ๋ž˜ํ‚ค(Foreign Key)

์™ธ๋ž˜ ํ‚ค๋Š” ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ, ์ฐธ์กฐํ•˜๋Š” ์ปฌ๋Ÿผ์— ์ž๋™์œผ๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

์™ธ๋ž˜ํ‚ค์™€ ์ž ๊ธˆ

InnoDB์—์„œ ์™ธ๋ž˜ ํ‚ค๋Š” ์ž ๊ธˆ(Lock)๊ณผ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ํŠน์ง•์ด ์žˆ๋‹ค.

  • ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ(์“ฐ๊ธฐ ์ž ๊ธˆ)์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž ๊ธˆ ๋Œ€๊ธฐ ๋ฐœ์ƒ

  • ์™ธ๋ž˜ํ‚ค์™€ ์—ฐ๊ด€๋˜์ง€ ์•Š์€ ์ปฌ๋Ÿผ์˜ ๋ณ€๊ฒฝ์€ ์ตœ๋Œ€ํ•œ ์ž ๊ธˆ ๋Œ€๊ธฐ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์Œ

-- ์ƒ˜ํ”Œ ํ…Œ์ด๋ธ” ๋ฐ ๋ฐ์ดํ„ฐ
CREATE TABLE tb_parent
(
    id INT          NOT NULL,
    fd VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE tb_child
(
    id  INT NOT NULL,
    pid INT          DEFAULT NULL, # parent id
    fd  VARCHAR(100) DEFAULT NULL,
    PRIMARY KEY (id),
    KEY ix_parentid (pid),
    CONSTRAINT child_ibfk_1 FOREIGN KEY (pid) REFERENCES tb_parent (id) ON DELETE CASCADE
);

INSERT INTO tb_parent
VALUES (1, 'parent-1'),
       (2, 'parent-2');
INSERT INTO tb_child
VALUES (100, 1, 'child-1');

์ž์‹ ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ ๋Œ€๊ธฐ

์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค ์ปฌ๋Ÿผ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ๋•Œ, ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๊ฐ’์ด ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์— ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ถ€๋ชจ ํ…Œ์ด๋ธ” ํ™•์ธ ๊ณผ์ •์—์„œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ์— ๊ณต์œ  ์ž ๊ธˆ(S-Lock) ํ•„์š”

  • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ๋ถ€๋ชจ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝ ์ค‘(X-Lock ๋ณด์œ )์ด๋ผ๋ฉด ๋Œ€๊ธฐ ๋ฐœ์ƒ

์ปค๋„ฅ์…˜ 1
์ปค๋„ฅ์…˜ 2

BEGIN;

UPDATE tb_parent SET fd='changed-2' WHERE id=2;

BEGIN;

UPDATE tb_child SET pid=2 WHERE id=100;

ROLLBACK;

์ปค๋„ฅ์…˜ 1 ๋Œ€๊ธฐ

COMMIT;

  1. 1๋ฒˆ ์ปค๋„ฅ์…˜์—์„œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ” id 2์ธ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์“ฐ๊ธฐ ์ž ๊ธˆ ํš๋“

  2. 2๋ฒˆ ์ปค๋„ฅ์…˜์—์„œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ํ‚ค ์ปฌ๋Ÿผ(pid)์„ pid 2๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰

  3. ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ 2๋ฒˆ ์ปค๋„ฅ์…˜์€ ๋Œ€๊ธฐ

๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ ๋Œ€๊ธฐ

๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ ํ‚ค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ญ์ œํ•  ๋•Œ, ํ•ด๋‹น ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ถ€๋ชจ ํ…Œ์ด๋ธ” ๋ณ€๊ฒฝ ์‹œ ์ž์‹ ํ…Œ์ด๋ธ”์˜ ์—ฐ๊ด€ ๋ ˆ์ฝ”๋“œ์— ์ž ๊ธˆ์„ ์„ค์ •

  • ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ž์‹ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝ ์ค‘์ด๋ผ๋ฉด ๋Œ€๊ธฐ ๋ฐœ์ƒ

์ปค๋„ฅ์…˜ 1
์ปค๋„ฅ์…˜ 2

BEGIN;

UPDATE tb_child SET fd='changed-100' WHERE id=100; ๋ถ€๋ชจ id 1์„ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ์— ์ ‘๊ทผ

BEGIN;

DELETE FROM tb_parent WHERE id=1;

ROLLBACK;

์ปค๋„ฅ์…˜ 1 ๋Œ€๊ธฐ

COMMIT;

  1. 1๋ฒˆ ์ปค๋„ฅ์…˜์—์„œ ๋ถ€๋ชจํ‚ค 1์„ ์ฐธ์กฐํ•˜๋Š” ์ž์‹ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•ด ์“ฐ๊ธฐ ์ž ๊ธˆ ํš๋“

  2. 2๋ฒˆ ์ปค๋„ฅ์…˜์—์„œ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ id 1์— ๋Œ€ํ•ด ์‚ญ์ œํ•˜๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰

  3. ์ž์‹ ํ…Œ์ด๋ธ”์˜ ๋ณ€๊ฒฝ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ 2๋ฒˆ ์ปค๋„ฅ์…˜์€ ๋Œ€๊ธฐ

๊ทธ ์™ธ

  • ์ „๋ฌธ ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค(Full-Text Index): ์ผ๋ฐ˜์ ์ธ B-Tree ์ธ๋ฑ์Šค๋กœ๋Š” ๊ฒ€์ƒ‰์ด ์–ด๋ ค์šด ์žฅ๋ฌธ ํ…์ŠคํŠธ(๊ธฐ์‚ฌ ๋ณธ๋ฌธ ๋“ฑ) ๋‚ด์˜ ๋‹จ์–ด๋‚˜ ๊ตฌ๋ฌธ์„ ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์ธ๋ฑ์Šค

  • ๊ณต๊ฐ„ ์ธ๋ฑ์Šค(Spatial Index): ์œ„์น˜ ์ •๋ณด๋‚˜ ์ง€๋„ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ 2์ฐจ์› ๊ณต๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธ๋ฑ์Šค(R-Tree ๊ธฐ๋ฐ˜)

  • ๋‹ค์ค‘๊ฐ’ ์ธ๋ฑ์Šค(Multi-Valued Index): ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ๋ ˆ์ฝ”๋“œ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š” JSON ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์ธ๋ฑ์Šค

  • ํ•จ์ˆ˜ ๊ธฐ๋ฐ˜ ์ธ๋ฑ์Šค(Function-Based Index): ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํŠน์ • ํ•จ์ˆ˜๋‚˜ ํ‘œํ˜„์‹์„ ์ ์šฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๋ฐฉ์‹

์ฐธ๊ณ ์ž๋ฃŒ

Last updated

Was this helpful?