0102 ~ 0108


# 0102 ~ 0108

# 0103 - Preparedstatement ์‚ฌ์šฉ ์ด์œ 

# [ ์„ฑ๋Šฅ ์ธก๋ฉด ]

image

SQL ์„œ๋ฒ„ ์—”์ง„์ด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋งˆ๋‹ค ๋‹ค์Œ์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์ •๊ทœํ™” ๋‹จ๊ณ„ : ์ฟผ๋ฆฌ ๋ฌธ๋ฒ•์ด ์ œ๋Œ€๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํ•ด๋‹น ํ…Œ์ด๋ธ”๊ณผ ์ปฌ๋Ÿผ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
  2. ์ปดํŒŒ์ผ ๋‹จ๊ณ„ : ์ฟผ๋ฆฌ๋ฅผ ์ปดํŒŒ์ผํ•œ๋‹ค.
  3. ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๊ณ„ํš : ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜์™€ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฐ ๋ฐฉ๋ฒ•์˜ ๋น„์šฉ์„ ์•Œ์•„๋‚ด ์ตœ์ ์˜ ๊ณ„ํš์„ ์„ ํƒํ•œ๋‹ค.
  4. ์บ์‹œ : ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๊ณ„ํš์—์„œ ์„ ํƒ๋œ ๊ณ„ํš์€ ์บ์‹œ์— ์ €์žฅ๋˜๋ฏ€๋กœ ๋™์ผํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋“ค์–ด์˜ฌ๋•Œ๋งˆ๋‹ค 1, 2, 3 ๋‹จ๊ณ„๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ๋‹ค์Œ์— ๋™์ผํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด Cache๋ฅผ ์ฐพ์•„ ์‹คํ–‰ํ•œ๋‹ค.
  5. ์‹คํ–‰ ๋‹จ๊ณ„ : ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ResultSet ๊ฐ์ฒด๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜๋œ๋‹ค.

Statement๋Š” ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค 1~5๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

PreparedStatement๋Š” ์™„์ „ํ•œ SQL ์ฟผ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ณ  SQL ์ฟผ๋ฆฌ์˜ ํ‹€์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด ๋†“๊ณ  ๋ฌผ์Œํ‘œ๋ฅผ ๋Œ€์ฒดํ•  ๊ฐ’์„ ๋‚˜์ค‘์— ์ง€์ •ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ PreparedStatement๊ฐ€ ์ฒ˜์Œ ์‹คํ–‰๋  ๋•Œ ์œ„์˜ 1~3๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ ํ›„ ์‚ฌ์ „ ์ปดํŒŒ์ผ ๋˜์–ด ์บ์‹œ์— ์ €์žฅ๋œ๋‹ค. ์ดํ›„์— Placeholder Replacement๋ผ๋Š” ์ถ”๊ฐ€ ๋‹จ๊ณ„๊ฐ€ ์žˆ์œผ๋ฉฐ ๋Ÿฐํƒ€์ž„์‹œ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋กœ set๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ?๋ฅผ ๋Œ€์ฒดํ•œ๋‹ค.

image

?๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋ฐ”๋€ ํ›„์—๋Š” ์ตœ์ข… ์ฟผ๋ฆฌ๊ฐ€ ๋‹ค์‹œ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๋Š”๋‹ค.

# [ ๋ณด์•ˆ ์ธก๋ฉด ]

PreparedStatement๋Š” SQL Injection ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ ์ธก๋ฉด์—์„œ๋„ ์ข‹๋‹ค.

PreparedStatement์—์„œ๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ฟผ๋ฆฌ๊ฐ€ ์ปดํŒŒ์ผ ๋˜์–ด ์บ์‹œ๋œ ์ดํ›„์— Placeholder Replacement๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋กœ ๋Œ€์ฒด๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฏธ ์ปดํŒŒ์ผ๋œ ์ตœ์ข… ์ฟผ๋ฆฌ๋Š” ๋‹ค์‹œ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ๊ฐ„๋‹จํ•œ ๋ฌธ์ž์—ด์ด์—ฌ์•ผ ํ•˜๋ฉฐ ์ฟผ๋ฆฌ์˜ ์›๋ž˜ ๋…ผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ PreparedStatement๋ฅผ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ๋Š” SQL ์ฃผ์ž… ๊ณต๊ฒฉ์— ๋Œ€ํ•œ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.


# 0104 - ์ฟผ๋ฆฌ ์บ์‹œ

  • ์ฟผ๋ฆฌ ์บ์‹œ๋ž€, SELECT ์ฟผ๋ฆฌ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์กฐํšŒํ•œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ๊ฐ™์€ ์ฟผ๋ฆฌ ๋ฌธ์„ ์š”์ฒญํ•˜์˜€์„ ๋•Œ ๋ฏธ๋ฆฌ ์บ์‹ฑ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” DBMS ๊ธฐ๋Šฅ์ด๋‹ค.
  • ์ผ๋ฐ˜์ ์ธ ์›น์‚ฌ์ดํŠธ์™€ ๊ฐ™์ด ์“ฐ๊ธฐ(wirte)๋ณด๋‹ค๋Š” ์ฝ๋Š”(read) ํšŸ์ˆ˜๊ฐ€ ๋งŽ์€ ํ™˜๊ฒฝ์—์„œ ์œ ์šฉํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ, ๋ฉ€ํ‹ฐ ์ฝ”์–ด ์‹œ์Šคํ…œ ๋ฐ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋†’์€ ํ™˜๊ฒฝ์—์„œ๋Š” ํ™•์žฅ์„ฑ์ด ์ข‹์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •๋œ๋‹ค.

# [ ์ฟผ๋ฆฌ ์บ์‹œ ๊ธฐ๋Šฅ ์‚ฌ์šฉ ]

  • ์ฟผ๋ฆฌ ์บ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด, ๊ธฐ๋ณธ์ ์œผ๋กœ have_query_cache ์„ค์ •์ด ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์„ค์ •์ด ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ ๋ฌธ์„ ์ž…๋ ฅํ•œ๋‹ค.
SHOW VARIABLES LIKE 'HAVE_QUERY_CACHE'
1
  • ์กฐํšŒ ๊ฒฐ๊ณผ YES๋กœ ๋‚˜์˜จ๋‹ค๋ฉด, ์ฟผ๋ฆฌ ์บ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋”ฐ๋Š” ๋œป์ด๋‹ค.
SHOW VARIABLES LIKE 'QUERY_CACHE_TYPE'
1
  • ํ˜„์žฌ ์‹œ์Šคํ…œ์—์„œ ์ฟผ๋ฆฌ ์บ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์กฐํšŒํ•œ๋‹ค.

# [ ์ฟผ๋ฆฌ ์บ์‹œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ]

์•„๋ž˜์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฟผ๋ฆฌ๊ฐ€ ์บ์‹ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.

BENCHMARK()
CONNECTION_ID()
CONVERT_TZ()
CURDATE()
CURRENT_DATE()
CURRENT_TIME()
CURRENT_TIMESTAMP()
CURTIME()
DATABASE()
ENCRYPT() (one parameter)
FOUND_ROWS()
GET_LOCK()
LAST_INSERT_ID()
LOAD_FILE()
MASTER_POS_WAIT()
NOW()
RAND()
RELEASE_LOCK()
SLEEP()
SYSDATE()
UNIX_TIMESTAMP()
(no parameters)
USER()
UUID()
UUID_SHORT()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
  • ๋˜ํ•œ ์ฟผ๋ฆฌ์— ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ๋ฌธ์ด ์žˆ์„ ๊ฒฝ์šฐ ์ฟผ๋ฆฌ๊ฐ€ ์บ์‹ฑ๋˜์ง€ ์•Š๋Š”๋‹ค.
SELECT SQL_NO_CACHE ...
SELECT ... INTO OUTFILE ...
SELECT ... INTO DUMPFILE ...
SELECT ... FOR UPDATE
SELECT * FROM ... WHERE autoincrement_column IS NULL
SELECT ... LOCK IN SHARE MODE
1
2
3
4
5
6

# [ ์ฟผ๋ฆฌ ์บ์‹œ ํฌ๊ธฐ ์ œํ•œ ]

image

SHOW VARIABLES LIKE 'query_cache_size';
1
  • ์ฟผ๋ฆฌ ์บ์‹œ ํฌ๊ธฐ ์„ค์ • ํ™•์ธ
SET GLOBAL query_cache_size = 800000;
1
  • query_cache_size๊ฐ’ ์„ค์ •
  • ์ฟผ๋ฆฌ์˜ ๋นˆ๋„์ˆ˜๊ฐ€ ์ ๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์ด ์กฐํšŒ๋˜๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์บ์‹ฑ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ query_cache_limit ์˜ต์…˜์œผ๋กœ ํฌ๊ธฐ๋ฅผ ์„ค์ •ํ•ด์„œ ํŠน์ • ๊ฒฐ๊ณผ๊ฐ’์˜ ์šฉ๋Ÿ‰์ด ์„ค์ •ํ•ด๋†“์€ ๊ฐ’์ด ๋„˜์œผ๋ฉด ์บ์‹ฑํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

# [ ์บ์‹œ ์„ค์ • ๋ฐ ์˜๋ฏธ ]

SHOW STATUS LIKE 'Qcache%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| Qcache_free_blocks      | 1158     |
| Qcache_free_memory      | 3760784  |
| Qcache_hits             | 31943398 |
| Qcache_inserts          | 42998029 |
| Qcache_lowmem_prunes    | 34695322 |
| Qcache_not_cached       | 652482   |
| Qcache_queries_in_cache | 4628     |
| Qcache_total_blocks     | 11123    |
+-------------------------+----------+
1
2
3
4
5
6
7
8
9
10
11
12
13
  • Qcache_inserts : ํ˜„์žฌ, ์บ์‹ฑ๋œ ์ฟผ๋ฆฌ์˜ ๊ฐ’์„ ์˜๋ฏธ
  • Qcache_hits : ์ฟผ๋ฆฌ๋ฅผ ์บ์‹ฑํ•˜์—ฌ, ์บ์‹ฑ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์„ ์˜๋ฏธ
  • Qcache_lowmem_prunes : ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์ด ๋ถ€์กฑํ•˜์—ฌ, ์บ์‹œ์—์„œ ์ด์ „์— ์žˆ๋–ค ๊ฐ’์„ ์ œ๊ฑฐํ•œ ๊ฐ’
    • ํ•ด๋‹น ๊ฐ’์„ ์ค„์ด๋ ค๋ฉด query_cache_limit ๊ฐ’์„ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•œ๋‹ค.

# [ ๊ฒฐ๋ก  ]

  • ๊ทธ ๋ฐ–์—๋„, query_cache_wlock_invalidate ์˜ต์…˜์„ ๋„๋ฉด, WRITE ๋ฝ์ด ๊ฑธ๋ฆฌ๋”๋ผ๋„, ์บ์‹ฑ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ํ•˜์—ฌ, ๊ฒฝํ•ฉ ์ƒํƒœ์—์„œ๋„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๊ฐ’์„ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์บ๋ฆฌ๋œ ์ฟผ๋ฆฌ๋ฅผ ์ž˜ ์ด์šฉํ•˜๋ฉด, ์„ฑ๋Šฅ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์‹ค์ œ SQL์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์ง€๋งŒ, ์บ์‹ฑ๋œ ์ฟผ๋ฆฌ ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๊นŒ์ง€ ๊ฐ™์•„์•ผ ํ•œ๋‹ค.
  • ์ฟผ๋ฆฌ ์บ์‹œ ๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒŒ ๋Š˜๋ฆฌ๋ฉด, ์ฝ๊ธฐ ์†๋„๋Š” ๋นจ๋ผ์ง€์ง€๋งŒ ๋ฝ ๊ฒฝํ•ฉ ๋•Œ๋ฌธ์— ์“ฐ๊ธฐ ์†๋„๋Š” ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ๋‹ค.

# 0108 - ์„ฑ๋Šฅ ๊ด€์ ์—์„œ์˜ ์„œ๋ธŒ์ฟผ๋ฆฌ(Subquery)

# [ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ž€? ]

์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” SQL ๋‚ด๋ถ€์—์„œ ์ž‘์„ฑ๋˜๋Š” ์ผ์‹œ์ ์ธ ํ…Œ์ด๋ธ”์ด๋‹ค. ์—ฌ๊ธฐ์„œ '์ผ์‹œ์ ์ธ ํ…Œ์ด๋ธ”'์ด๋ผ๋Š” ๋ถ€๋ถ„์ด ์„ฑ๋Šฅ์ ์ธ ์ฐจ์ด๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. SQL ๊ตฌ๋ฌธ ์ž‘์„ฑ ์‹œ ํ™œ์šฉํ•˜๋Š” ํ…Œ์ด๋ธ”(Table), ๋ทฐ(View), ์„œ๋ธŒ์ฟผ๋ฆฌ(Subquery)์— ๋Œ€ํ•ด์„œ ์„ค๋ช…์„ ํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํ…Œ์ด๋ธ”(Table) : DB์— ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ(์˜์†์ )
select * from recipts
1

DB์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ณ  ํฐ ๋น„์šฉ์—†์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ทฐ(View) : ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”, ์ ‘๊ทผํ•  ๋•Œ ๋งˆ๋‹ค SELECT ๊ตฌ๋ฌธ์ด ์‹คํ–‰๋จ(์˜์†์ , ๋ฌผ๋ฆฌ์  ์ €์žฅ X)
create view vw_receipts 
as 
select * 
from receipts
where cust_id = 'B';

select * from vw_receipts;
1
2
3
4
5
6
7

์žฅ์  : ํ…Œ์ด๋ธ” ์ค‘ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”๋กœ ์ €์žฅํ•˜์—ฌ ์ฒ˜๋ฆฌํ•จ์œผ๋กœ์จ ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜๊ณ  SQL๋ฌธ์ด ๊ฐ„๋‹จํ•ด์ง„๋‹ค.
๋‹จ์  : ๋…๋ฆฝ์ ์ธ ์ธ๋ฑ์Šค(index)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค SELECT ๋ฌธ์— ๊ตฌ๋ฌธ์ด ์‹คํ–‰๋˜์–ด ์„ฑ๋Šฅ์ƒ์˜ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • ์„œ๋ธŒ์ฟผ๋ฆฌ(Subquery) : ๊ฐ€์ƒ์˜ ํ…Œ์ด๋ธ”, SQL ๊ตฌ๋ฌธ ์‹คํ–‰ ์ค‘์—๋งŒ ์กด์žฌ(์˜์†์ , ๋ฌผ๋ฆฌ์  ์ €์žฅ X)
select *
from (select * from receipts where cust_id = 'B') a;
1
2

์žฅ์  : SQL ๊ตฌ๋ฌธ ์•ˆ์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ๋˜ ๋‹ค๋ฅธ SQL๋ฌธ์„ ๋งŒ๋“ค์–ด ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋กœ์ธํ•ด ์ฝ”๋”ฉ ์‹œ ํŽธ๋ฆฌํ•จ์„ ์ค€๋‹ค.
๋‹จ์  : ์—ฐ์‚ฐ ๋น„์šฉ์ด ์ถ”๊ฐ€๋œ๋‹ค, ์ตœ์ ํ™”๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค, ์ฟผ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค.

# [ ์š”์•ฝ ]

  1. ์„œ๋ธŒ์ฟผ๋ฆฌ๋Š” SQL ๊ตฌ๋ฌธ ์ž‘์„ฑ ์‹œ ๋‹ค์–‘ํ•˜๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํŽธ๋ฆฌํ•œ ๋„๊ตฌ.
  2. ๊ฐ„ํŽธํ•˜๊ณ  ์œ ์—ฐํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ์„ฑ๋Šฅ์ ์ธ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๊ฐ€ '์ผ์‹œ์ ์ธ ํ…Œ์ด๋ธ”'์ด๋ผ๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  3. ์„ฑ๋Šฅ์ ์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•˜์ž.
    • ๋ถˆํ•„์š”ํ•œ Join ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”์ง€
    • Join ์‹œ ๋ถˆํ•„์š”ํ•œ ํ…Œ์ด๋ธ” ์ ‘๊ทผ์„ ํ•˜์ง€ ์•Š๋Š”์ง€
  4. ์œ„ ๋‘๊ฐ€์ง€ ๊ณ ๋ ค์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜ ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•˜๋ฉด ๋”์šฑ ์ข‹๋‹ค.
    • Join ์‹œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒฐํ•ฉ ๋ ˆ์ฝ”๋“œ ์ˆ˜๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ์  ํšจ์œจ์„ฑ์„ ๋†’ํžŒ๋‹ค.
Last update: January 8, 2023 19:57
Contributors: jaesungahn91