SQL๊ณผ ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ฐจ์ด๋?
SQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฉ ์ธ์ด์ด๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ์ ๋ฉํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฌธ๋ฒ๋ง ๊ฐ์ง๊ณ ์๋ค.
SQL์ ์ฌ์ฉ์๊ฐ ์ฒ๋ฆฌ๋ฅผ ์ํ๋ ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ธ์ง๋ง ์ ์ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผ ํ๋์ง๋ฅผ ์ธ๊ธํ ํ์๊ฐ ์์ด
๋น์ ์ฐจ์ ๋ฐ์ดํฐ ์ธ์ด์ ํน์ง์ ๋ค๋ค๊ณ ํ ์ ์๋ค.
C์ธ์ด ๊ฐ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฒ์ฉ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก,
์์คํ ํ๋ก๊ทธ๋๋ฐ, ์์ฉ ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ, ๊ฒ์ ๊ฐ๋ฐ ๋ฑ ๋ค์ํ ๋ถ์ผ์์ ์ฌ์ฉ๋๋ค.
์ด์ฒ๋ผ SQL๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ชฉ์ ์์ ์ฐจ์ด๊ฐ ์๋ค.
SQL์ ์คํ ๊ณผ์
SQL์ด ์คํ๋๋ ๊ณผ์ ์ ํฌ๊ฒ ํ์ฑ, ์ต์ ํ, ์คํ ์ธ ๋จ๊ณ๋ก ๋๋ ์ ์๋ค.
1. ํ์ฑ
- SQL๋ฌธ์ฅ์ ํ ํฐ ๋จ์๋ก ๋๋ ์ ๋ฌธ์ฅ์ ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๊ณ , ๋ฌธ๋ฒ์ ์ธ ์ค๋ฅ๋ฅผ ์ฐพ์๋ธ๋ค.
- ํ ํฐ์ SQL ๋ฌธ๋ฒ์์์ ๊ธฐ๋ณธ ๋จ์๋ก, ์๋ฅผ ๋ค๋ฉด ํค์๋, ์๋ณ์, ์ฐ์ฐ์ ๋ฑ์ด ๋ ์ ์๋ค.
2. ์ต์ ํ:
- ์ฟผ๋ฆฌ ์ตํฐ๋ง์ด์ ๋ ํ์ฑ๋ SQL ๋ฌธ์ฅ์ ๋ถ์ํ๊ณ ๋ค์ํ ์คํ ๊ณํ์ ๊ณ ๋ คํ๋ค.
- ์ด ์ค์์ ์ต์ ๋น์ฉ์ ๊ฐ๋ ์ต์ ์ ์คํ ๊ณํ์ ์ ํํ๊ณ , ์ด๋ฅผ ์คํ ๊ณํ ํธ๋ฆฌ๋ก ๋ณํํ๋ค.
3. ์คํ:
- ์์ ์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ค.
์ต์ ํ ๋จ๊ณ์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ด ํจ์จ์ ์ธ ์คํ ๊ณํ์ ์ ํํ๊ธฐ ์ํด ์ธ๋ฑ์ค ์ฌ์ฉ, ์กฐ์ธ ์์ ๋ณ๊ฒฝ ๋ฑ์ ๋ค์ํ ์ต์ ํ ๊ธฐ๋ฒ์ ์ ์ฉํ๋ค.
SQL ๊ธฐ๋ฅ
DML(Data Manipulation Language) - ๋ฐ์ดํฐ ์กฐ์์ด
ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์, ์ฝ์ , ์์ , ์ญ์ ํ๋๋ฐ ์ฌ์ฉํ๋ฉฐ SELECT, INSERT, DELETE, UPDATE ๋ฌธ ๋ฑ์ด ์๋ค.
DDL(Data Definition Language) - ๋ฐ์ดํฐ ์ ์์ด
ํ ์ด๋ธ์ด๋ ๊ด๊ณ์ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉํ๋ฉฐ CREATE, ALTER, DROP ๋ฌธ๋ฑ์ด ์๋ค.
DCL(Data Control Language) - ๋ฐ์ดํฐ ์ ์ด์ด
๋ฐ์ดํฐ์ ์ฌ์ฉ ๊ถํ์ ๊ด๋ฆฌํ๋๋ฐ ์ฌ์ฉํ๋ฉฐ GRANT, REVOKE ๋ฌธ ๋ฑ์ด ์๋ค.
์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ
์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ๊ด๋ จ ์๋ ํ ์ด๋ธ ๊ฐ์ ์ผ๊ด์ฑ์ ๋งํ๋ค.
ํ ์ด๋ธ๊ฐ์ ๊ด๊ณ๋ ๊ธฐ๋ณธํค์ ์ธ๋ํค๋ก ํํ๋๊ธฐ ๋๋ฌธ์ ์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์งํค๊ธฐ ์ํด์๋
์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด(=์ธ๋ํค ์ ์ฝ์กฐ๊ฑด)์ ๋ฐ๋ผ์ผ ํ๋ค.
์ธ๋ํค์ ์ ์ฝ์กฐ๊ฑด
1. ๋ถ๋ชจ ๋ฆด๋ ์ด์ (์ฐธ์กฐ๋๋ ๋ฆด๋ ์ด์ )์ ๊ธฐ๋ณธํค์ ์์ ๋ฆด๋ ์ด์ (์ฐธ์กฐํ๋ ๋ฆด๋ ์ด์ )์ ์ธ๋ํค๋ ๋๋ฉ์ธ์ด ๋์ผํด์ผ ํ๋ค.
2. ์ธ๋ํค๋ ๋ถ๋ชจ ๋ฆด๋ ์ด์ ์ ๊ธฐ๋ณธํค์ ์กด์ฌํ๋ ๊ฐ์ด์ด์ผ ํ๋ค. (๋ค๋ง NULL๊ฐ์ ์ฌ์ฉ์ด ํ์ฉ๋ ์ ์๋ค.)
3. ์์ ๋ฆด๋ ์ด์ ์์ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์ ๋ถ๋ชจ ๋ฆด๋ ์ด์ ์์ ์ฝ์ , ์ญ์ , ์์ ํ๊ธฐ ์ํด์๋ ์ ์ฝ์กฐ๊ฑด ์ต์ ์ ๋ฐ๋ผ์ผ ํ๋ค.
์ฝ์
์์ ๋ฆด๋ ์ด์ ์ ์๋ก์ด ํฌํ์ ์ฝ์ ํ ๋์๋
1. ๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์กฐ๊ฑด์ ํ์ธ
2. ๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ ์๋ฐฐ๋๋ ๊ฐ์ด ์๋์ง ํ์ธ
3. ์ธ๋ํค ๊ฐ์ด ๋ถ๋ชจ ๋ฆด๋ ์ด์ ์ ๊ธฐ๋ณธ๊ธฐ์ ์กด์ฌํ๋์ง ํ์ธํ๋ค
4. ๋ชจ๋ ์ ์ฝ์กฐ๊ฑด์ ์๋ฐฐ๋์ง ์๋๋ค๋ฉด ์ฝ์ (NULL๊ฐ์ ํ์ฉํ๋ค๋ฉด ์ธ๋ํค๊ฐ์ด ์์ด๋ ๊ฐ๋ฅ)
์ญ์
๋ช ๋ น์ด | ์๋ฏธ |
---|---|
RESTRICTED | ์์ ๋ฆด๋ ์ด์ ์์ ์ฐธ์กฐํ๊ณ ์์ ๊ฒฝ์ฐ ๋ถ๋ชจ ๋ฆด๋ ์ด์ ์ ์ญ์ ์์ ๊ฑฐ๋ถ |
CASCADE | ์์ ๋ฆด๋ ์ด์ ์ ๊ด๋ จ ํฌํ์ ๊ฐ์ด ์ญ์ |
DEFAULT | ์์ ๋ฆด๋ ์ด์ ์ ์ธ๋ํค๋ฅผ ๋ํดํธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ |
NULL | ์์ ๋ฆด๋ ์ด์ ์ ์ธ๋ํค๋ฅผ NULL๊ฐ์ผ๋ก ๋ณ๊ฒฝ |
์์
์์ ์ ์ญ์ ์ ์ฝ์ ๋ช ๋ น์ด ์ฐ์ํด์ ์ํ๋๋ค๊ณ ๋ณด๋ฉด ๋๋ค
๋ถ๋ชจ ๋ฆด๋ ์ด์ ์ ์์ ์ด ์ผ์ด๋ ๊ฒฝ์ฐ ์ญ์ ์ต์ ์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋ ํ ๋ฌธ์ ๊ฐ ์์ผ๋ฉด ๋ค์ ์ฝ์ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ฒ๋ฆฌ๋๋ค.
ON DELETE CASCADE
- ๋ถ๋ชจ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ๊ฒฝ์ฐ ์ฐ๊ฒฐ๋ ์์ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ํจ๊ป ์ญ์ ๋๋ค.
ON UPDATE CASCADE
- ๋ถ๋ชจ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๊ฐ ์์ ๋ ๊ฒฝ์ฐ ์ฐ๊ฒฐ๋ ์์ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ํจ๊ป ์์ ๋๋ค.
VIEW
DB์ ์กด์ฌํ๋ ๊ฐ์ ํ ์ด๋ธ์ด๋ค.
์ค์ ํ ์ด๋ธ์ฒ๋ผ ํ๊ณผ ์ด์ ๊ฐ์ง๊ณ ์์ง๋ง ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์์ง๋ ์๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์ญํ ๋ง ์ํํ๋ค.
SQL๋ก ์์ฑํ ๋ฐ์ดํฐ๋ฅผ ๋ทฐ๋ฅผ ํตํด ๊ฐ์ ํ ์ด๋ธ์ ๋ง๋ค์ด ํธ๋ฆฌํ๊ณ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ ์กฐํ ๊ฐ๋ฅํ๋ค.
VIEW ์ฅ์
- ๋ฏธ๋ฆฌ ์ ์ ๋ ๋ทฐ๋ฅผ ์ผ๋ฐ ํ ์ด๋ธ์ฒ๋ผ ์ฌ์ฉํ ์ ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํด์ ํธ๋ฆฌํ๋ค.
- ํน์ ์ ๋ณด๋ง ์ ๊ณตํ ์ ์์ด ๋ณด์์ฑ์ด ๋๋ค.
VIEW ๋จ์
- ํ๋ฒ ์ ์๋ ๋ทฐ๋ ๋ณ๊ฒฝํ ์ ์๋ค.
- ๋ ๋ฆฝ์ ์ธ ์ธ๋ฑ์ค๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๋ทฐ๋ก ๊ตฌ์ฑ๋ ๋ด์ฉ์ ๋ํ ์ฝ์ , ์ญ์ , ์์ ์ ์ ์ฝ์ด ๋ฐ๋ฅธ๋ค.
SQL ์ง์ ์ฒ๋ฆฌ ์์
FROM and JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT
SELECT FOR UPDATE
ํน์ ํ์ ์ ํํ ํ, ํด๋น ํ์ ๋ํ ์ ๊ธ(lock)์ ์ค์ ํ๋ SQL ๊ตฌ๋ฌธ
๋์์ฑ ์ ์ด๋ฅผ ์ํด ์ฌ์ฉํ๋ค.
์ฌ๋ฌ ํธ๋์ญ์ ๊ฐ์ ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ , ๋์์ ์ฌ๋ฌ ํธ๋์ญ์ ์ด ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ค๊ณ ํ ๋ ์ถฉ๋์ ๋ฐฉ์งํ ์ ์๋ค.
GROUP BY
์ง์ ๋ ์ด์์ ๋์ผํ ๊ฐ์ ๊ฐ์ง ํ์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ด์ฃผ๋๋ฐ ์ฌ์ฉํ๋ SQL ๋ช ๋ น์ด
COUNT(), MAX(), MIN(), SUM(), AVG() ๋ฑ ์ง๊ณ ํจ์์ ํจ๊ป ์ฌ์ฉ๋๋ค.
GROUP BY์์ SELECT ํ ์ ์๋ ์นผ๋ผ์ GROUP BY์ ๋์ด๋ ์นผ๋ผ ํน์ ์ง๊ณํจ์์ด๋ค.
ORDER BY
ORDER BY ์ ์ SQL ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์ ๋ ฌ์ ์ฃผ๋ก ํน์ ์ด์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์(ASC)์ด๋ ๋ด๋ฆผ์ฐจ์(DESC)์ผ๋ก ์ํ๋ฉ๋๋ค.
ASC๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์ ์ฉ๋๋ค.
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC],...;
HAVING
HAVING์ ์ GROUP BY ์ ์ ๊ฒฐ๊ณผ ๋ํ๋๋ ๊ทธ๋ฃน์ ์ ํํ๋ ์ญํ ์ ํ๋ค.
์ฌ๋ฌ ๊ฐ์ง JOIN
INNER JOIN: ๋ ํ ์ด๋ธ ๊ฐ์ ์ผ์นํ๋ ํ๋ง์ ๋ฐํ
SELECT *
FROM table1
INNER JOIN table2 ON table1.column = table2.column;
OUTER JOIN: ์ผ์นํ์ง ์๋ ํ๋ ๊ฒฐ๊ณผ์ ํฌํจ
LEFT OUTER JOIN: ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ํฌํจํ๊ณ , ์ค๋ฅธ์ชฝ ํ ์ด๋ธ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ํ์ ํฌํจ
RIGHT OUTER JOIN: ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ํฌํจํ๊ณ , ์ผ์ชฝ ํ ์ด๋ธ๊ณผ ์ผ์นํ๋ ๊ฒฝ์ฐ์๋ ํด๋น ํ์ ํฌํจ
CROSS JOIN์ ๋ ํ ์ด๋ธ ๊ฐ์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ๋ฐํ
๊ฒฐ๊ณผ๋ ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ๊ฐ ํ๊ณผ ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ๊ฒฐํฉ
์๋ธ์ฟผ๋ฆฌ
์๋ธ์ฟผ๋ฆฌ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ ์์ ํฌํจ๋ ์ฟผ๋ฆฌ๋ก, ์ธ๋ถ ์ฟผ๋ฆฌ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋๋ค.
์๋ธ์ฟผ๋ฆฌ๋ SELECT, FROM, WHERE, HAVING, ๋ฑ ์ฌ๋ฌ ๋ถ๋ถ์์ ์ฌ์ฉ๋๋ค.
SELECT column1
FROM table1
WHERE column2 = (SELECT column3 FROM table2 WHERE condition);
DROP
ํ ์ด๋ธ ์์ฒด๋ฅผ ์ญ์ ํ๋ค.
ํ ์ด๋ธ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ ์ฃผ์ํด์ผ ํ๋ค.
DROP TABLE table_name; TRUNCATE:
TRUNCATE
ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ์ญ์ ํ์ง๋ง ํ ์ด๋ธ ๊ตฌ์กฐ๋ ์ ์งํ๋ค.
๋กค๋ฐฑ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋น ๋ฅด๊ฒ ์ํ๋๋ค.
TRUNCATE TABLE table_name;
DELETE
ํ ์ด๋ธ์ ํ์ ์ญ์ ํ๋ค.
๋กค๋ฐฑ์ด ๊ฐ๋ฅํ๋ฉฐ ์กฐ๊ฑด์ ๋ฐ๋ผ ํน์ ํ์ ์ญ์ ํ ์ ์๋ค.
DELETE column1
FROM table_name
WHERE condition;
DISTINCT
DISTINCT๋ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ์ฌ ๊ฒฐ๊ณผ ์งํฉ์์ ๊ณ ์ ํ ๊ฐ์ ๋ฐํํ๋ค.
SELECT DISTINCT column1, column2, ...
FROM table_name;
SQL Injection
SQL Injection์ ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ํ๋์ SQL ์ฝ๋๋ฅผ ์ฝ์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ณต๊ฒฉํ๋ ๊ฒ์ด๋ค.
์๋ฐฉํ๊ธฐ ์ํด ์ ๋ ฅ ๊ฐ์ ๊ฒ์ฆํ๊ณ , ํ๋ผ๋ฏธํฐํ๋ ์ฟผ๋ฆฌ ๋๋ ํ๋ฆฌํ์ด๋ ์คํ ์ดํธ๋จผํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.
SQL ์ํฐํจํด
SELECT * : ๋ชจ๋ ์ด์ ์ ํํ๋ ๊ฒ์ ๋ถํ์ํ ๋ฐ์ดํฐ ์ ์ก์ ์ ๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์
ํ์ํ ์ด๋ง ์ ํํ๋ ๊ฒ์ด ์ข๋ค.
Non-SARGable WHERE์ :
SARGable(Search ARGument Able)์ด ์๋ WHERE ์ ์ ์ธ๋ฑ์ค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ์ง ๋ชปํ๊ฒ ํ ์ ์๋ค.
ํ์ด์ง๋ค์ด์ ์ ๊ตฌํํ ๋์ ์ฟผ๋ฆฌ
ํ์ด์ง๋ค์ด์ ์ ๊ตฌํํ ๋๋ LIMIT ๋ฐ OFFSET์ ์ฌ์ฉํ์ฌ ํน์ ๋ฒ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์จ๋ค.
์๋ฅผ ๋ค์ด, 10๊ฐ์ฉ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ:
SELECT column1, column2, ...
FROM table_name LIMIT 10 OFFSET 0; -- ์ฒซ ๋ฒ์งธ ํ์ด์ง
SELECT column1, column2, ...
FROM table_name LIMIT 10 OFFSET 10; -- ๋ ๋ฒ์งธ ํ์ด์ง
MySQL์์ ํ์ด์ง๋ค์ด์ ์ ๊ตฌํํ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ LIMIT ๋ฐ OFFSET์ ์ฌ์ฉํ๋ ๊ฒ์ด์ง๋ง,
๋๊ท๋ชจ ํ ์ด๋ธ์์๋ OFFSET์ ์ฌ์ฉํ ๋ ์ฑ๋ฅ ์ด์๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ ํจ์จ์ ์ธ ํ์ด์ง๋ค์ด์ ์ ์ํด OFFSET์ ํผํ๊ณ , LIMIT๊ณผ OFFSET ๋์ ์ WHERE ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ํ์ด์ง ๋ฒ์๋ฅผ ์ง์ ํ ์ ์๋ค.
SELECT *
FROM users
WHERE user_id > 0 -- ์ ์ ํ ๊ธฐ์ค ๊ฐ์ผ๋ก ๋ณ๊ฒฝ
ORDER BY user_id
LIMIT @PageSize;
'๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DB์คํฐ๋ ํ๊ณ (0) | 2024.02.13 |
---|---|
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํฐ๋ 4์ฃผ์ฐจ (0) | 2024.01.29 |
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํฐ๋ 3์ฃผ์ฐจ (0) | 2024.01.25 |
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํฐ๋ 1์ฃผ์ฐจ (1) | 2024.01.10 |