์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„(25.12.01~)

์ŠคํŒŒ๋ฅดํƒ€ ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„_๋ณธ์บ ํ”„_data11๊ธฐ ๊น€์„ ์˜_TIL_Day 7

0๏ธโƒฃ 2026. 1. 1. 22:43


<์˜ค๋Š˜์˜ ํ•™์Šต>

  • SQL ๋ผ์ด๋ธŒ ์„ธ์…˜ 6ํšŒ์ฐจ
  • SQL ๋ฐ์ผ๋ฆฌ ํ€˜์ŠคํŠธ
  • SQL ์ฝ”๋“œ์นดํƒ€ / ๋ ˆ๋ฒจ1 / 1๋ฒˆ~10๋ฒˆ

https://tjsdud7032.tistory.com/36

 

[SQL ์ฝ”๋“œ์นดํƒ€] ๋ ˆ๋ฒจ 1 / 1~10

1. ์ด๋ฆ„ ์žˆ๋Š” ๋™๋ฌผ์˜ ID๋ฌธ์ œ ๋งํฌ:๋ฌธ์ œ ๋งํฌhttps://school.programmers.co.kr/learn/courses/30/lessons/59407์ •๋‹ต ์ฝ”๋“œSELECT ANIMAL_IDFROM ANIMAL_INSWHERE NAME is not nullORDER BY ANIMAL_ID;2. ์—ญ์ˆœ ์ •๋ ฌํ•˜๊ธฐ๋ฌธ์ œ ๋งํฌhttps://school.pr

tjsdud7032.tistory.com

  • ์•„ํ‹ฐํด; ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๊ฐ€ ๊ฐ–์ถฐ์•ผ ํ•  9๊ฐ€์ง€ ์—ญ๋Ÿ‰

https://tjsdud7032.tistory.com/35

 

[์•„ํ‹ฐํด] ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๊ฐ€ ๊ฐ–์ถฐ์•ผ ํ•  9๊ฐ€์ง€ ์—ญ๋Ÿ‰

https://yozm.wishket.com/magazine/detail/2070/ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€๊ฐ€ ๊ฐ–์ถฐ์•ผ ํ•  9๊ฐ€์ง€ ์—ญ๋Ÿ‰ | ์š”์ฆ˜IT์ตœ๊ทผ ๋…ธ์ฝ”๋“œ ํˆด, ๋ฐ์ดํ„ฐ ํ”Œ๋žซํผ, ChatGPT ๋“ฑ์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€์—๊ฒŒ ์š”๊ตฌ๋˜๋Š” ์—ญ๋Ÿ‰๋„ ๋ณ€ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ

tjsdud7032.tistory.com


<ํ•™์Šต๋‚ด์šฉ ์ •๋ฆฌ>

# SQL ๋ผ์ด๋ธŒ ์„ธ์…˜ 6ํšŒ์ฐจ

1. IFNULL (expr1, expr2)

: expr1์ด NULL์ด๋ฉด expr2๋ฅผ ๋ฐ˜ํ™˜

  expr1์ด NULL์ด ์•„๋‹ˆ๋ฉด expr1 ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜

2. COALESCE(val1, val2, val3, ...)

: val์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์Šค์บ”ํ•˜๊ณ , NULL์ด ์•„๋‹Œ ๋งจ ์ฒ˜์Œ ๊ฐ’์„ ๋ฐ˜ํ™˜

 

๐Ÿ’ก IFNULL vs COALESCE
- 2๊ฐœ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ณ ๋ฅด๋ฉด: **COALESCE ์ถ”์ฒœ(ํ‘œ์ค€ + ์—ฌ๋Ÿฌ ํ›„๋ณด ๊ฐ€๋Šฅ)
- ๋”ฑ “NULL์ด๋ฉด ์ด๊ฒƒ”๋งŒ ํ•„์š”ํ•˜๋ฉด: **IFNULL๋„ ๊น”๋”ํ•จ

 

โ“๋ฏธ๋‹ˆ์‹ค์Šต 0)

๋ฌธ์ œ: students์—์„œ  `region`์ด NULL์ด๋ฉด `'UNKNOWN'`์œผ๋กœ ๋ณด์ด๊ฒŒ ํ•ด๋ณด์„ธ์š”.
์ถœ๋ ฅ: `student_id, student_name, region_clean`

-- ifnull ํ™œ์šฉ
SELECT student_id
       , student_name
	   , ifnull(region, 'UNKNOWN') as region_clean
FROM basic.students;

-- coalesce ํ™œ์šฉ
SELECT student_id
       , student_name
       , coalesce(region, 'UNKNOWN') as region_clean
FROM basic.students;

 

<์œˆ๋„์šฐ ํ•จ์ˆ˜>

  • MySQL์—์„œ๋Š” ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” SELECT ๋ฆฌ์ŠคํŠธ/ORDER BY์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    = WHERE, GROUP BY, HAVING์—์„œ๋Š” ์ง์ ‘ ๋ชป ์”€
  • from์— ์žˆ๋Š” ์›๋ณธ ํ…Œ์ด๋ธ”(ํ–‰)์„ ์œ ์ง€ํ•˜๊ณ , partition by ๊ธฐ์ค€์œผ๋กœ ์ง‘๊ณ„ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปฌ๋Ÿผ ๋ถ™์ด๊ธฐ

๐Ÿ’ก์œˆ๋„์šฐ ํ•จ์ˆ˜ vs Group by 

  • ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” ํ–‰์ด ์ค„์–ด๋“ค์ง€ ์•Š์Œ.
  • ์ง‘๊ณ„๊ฐ€ ๋ชฉ์ ์ด๋ฉด GROUP BY, ์›๋ณธ ํ–‰ + ๋งฅ๋ฝ(์ง‘๊ณ„๊ฐ’) ์œ ์ง€๊ฐ€ ๋ชฉ์ ์ด๋ฉด WINDOW๊ฐ€ ์ด๋“
ํ•จ์ˆ˜(...) OVER (
	PARTITION BY ...
	ORDER BY ...)

3.  COUNT / SUM / AVG + ์œˆ๋„์šฐ ํ•จ์ˆ˜

โ“ ๋ฏธ๋‹ˆ์‹ค์Šต 1)

๋ฌธ์ œ: enrollments์—์„œ ๊ฐ ํ–‰๋งˆ๋‹ค
- `enrollment_id`
- `student_id`
- `course_id`
- `student_enroll_cnt` (ํ•™์ƒ ๊ธฐ์ค€ ์‹ ์ฒญ ๊ฑด์ˆ˜)
- `course_enroll_cnt` (๊ฐ•์ขŒ ๊ธฐ์ค€ ์‹ ์ฒญ ๊ฑด์ˆ˜)
๋ฅผ ๊ฐ™์ด ๋ถ™์ด์„ธ์š”.

SELECT enrollment_id
       , student_id 
       , course_id
       , COUNT(enrollment_id) over(PARTITION BY student_id) AS student_enroll_cnt
       , COUNT(enrollment_id) OVER(PARTITION BY course_id) AS course_enroll_cnt
FROM basic.enrollments;

4.  ๊ทธ๋ฃน๋ณ„ ์ˆœ๋ฒˆ/์ˆœ์œ„ (ROW_NUMBER / RANK / DENSE_RANK)

4-1) ROW_NUMBER ()
๋ฌด์กฐ๊ฑด 1, 2, 3... / ๋™์ ๋„ ์ •๋ ฌ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์ง

  • ORDER BY๊ฐ€ ์—†์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๋น„๊ฒฐ์ •์ (๋งค๋ฒˆ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ)
  • ํ•™์ƒ๋ณ„ ์‹ ์ฒญ์„ ๋‚ ์งœ์ˆœ์œผ๋กœ “๋ช‡ ๋ฒˆ์งธ ์‹ ์ฒญ์ธ์ง€"

4-2) RANK()
๋‹ค์Œ ์ˆœ์œ„ ๊ฑด๋„ˆ๋œ€ / ๋™์  ์ฒ˜๋ฆฌ

4-3) DENSE_RANK()
๋‹ค์Œ ์ˆœ์œ„ ์•ˆ ๊ฑด๋„ˆ๋œ€ / ๋™์  ์ฒ˜๋ฆฌ

 

โ“ ๋ฏธ๋‹ˆ์‹ค์Šต 2)

-- ๐Ÿ“Œ์˜ค๋‹ต
WITH ranked AS (
	SELECT course_id, enrollment_id
	       , ROW_NUMBER() OVER(
				PARTITION BY course_id
				ORDER BY final_price DESC) AS rn
	FROM basic.enrollments e
	)
SELECT course_id, enrollment_id, student_id, final_price -- CTE ์•ˆ์—์„œ ์ถœ๋ ฅ๋˜์ง€ ์•Š์€ select ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐ– ์ฟผ๋ฆฌ์—์„œ๋„ ๋ถˆ๋Ÿฌ์™€์ง€์ง€ ์•Š๋Š”๋‹ค.!
FROM ranked
WHERE rn IN (1, 2);

-- ๐Ÿ’กํ•ด์„ค
WITH ranked AS (
	SELECT course_id
	       , final_price
	       , enrollment_id
	       , student_id
	       , ROW_NUMBER() OVER(
				PARTITION BY course_id
				ORDER BY final_price DESC) AS rn
	FROM basic.enrollments e
	)
SELECT course_id, enrollment_id, student_id, final_price
FROM ranked
WHERE rn IN (1, 2);
<์˜ค๋‹ต๋…ธํŠธ>
CTE ์•ˆ์— ์žˆ๋Š” SELECT ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์—†๋Š” ์ปฌ๋Ÿผ์€,
๋ฐ”๊นฅ ์ฟผ๋ฆฌ์—์„œ๋„ ๋ถˆ๋Ÿฌ์™€์ง€์ง€ ์•Š๋Š”๋‹ค.

 

5 . “๋ˆ„์ ํ•ฉ/๋น„์œจ/์ตœ๊ทผ N๊ฐœ ํ‰๊ท ” (SUM/AVG OVER + ORDER BY + Frame)

5-1) ๋ˆ„์ ํ•ฉ

  • ๋ˆ„์ ํ•ฉ์€ ROWS ํ”„๋ ˆ์ž„์„ ๋ช…์‹œํ•ด๋ผ
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    = “๊ทธ๋ฃน์˜ ์ฒซ ํ–‰ ~ ํ˜„์žฌ ํ–‰๊นŒ์ง€ ๋ˆ„์ ”

โ“๋ฏธ๋‹ˆ์‹ค์Šต 3)

-- ์ •๋‹ต
SELECT payment_id
      , paid_at
      , amount
      , SUM(amount) OVER(
        	ORDER BY paid_at
        	ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
        	) AS cum_amount
FROM basic.payments
WHERE payment_status='paid'

5-2) ๋น„์œจ

Q. ์ด ์‹ ์ฒญ ๊ธˆ์•ก์ด ํ•™์ƒ ์ด ์ง€์ถœ์˜ ๋ช‡ %์ธ๊ฐ€?
SELECT
  enrollment_id,
  student_id,
  final_price,
  SUM(final_price) OVER (PARTITION BY student_id) AS student_total,
  ROUND(final_price / SUM(final_price) OVER (PARTITION BY student_id) * 100,1
        ) AS pct_of_student_total
FROM basic.enrollments
ORDER BY student_id, enrollment_id;

 

6. “์ด์ „/๋‹ค์Œ ํ–‰ ๋น„๊ต” (LAG / LEAD) + NULL ์ฒ˜๋ฆฌ(IFNULL/COALESCE)

  • `N` ๊ธฐ๋ณธ๊ฐ’ = `1` (ํ•œ ์นธ ์ „/ํ›„)
  • `default` ์—†์„ ๋•Œ ๋Œ€์ฒ˜ ๊ฐ’(๊ธฐ๋ณธ๊ฐ’ = `NULL`)
  • `ORDER BY`๋Š” ์‚ฌ์‹ค์ƒ ํ•„์ˆ˜(“์ „/ํ›„” ๊ธฐ์ค€์ด ํ•„์š”)
LAG(expr, N, default) OVER (PARTITION BY ... ORDER BY ...)
LEAD(expr, N, default) OVER (PARTITION BY ... ORDER BY ...)

 

Q. ํ•™์ƒ๋ณ„ “์ด์ „ ์‹ ์ฒญ ๊ธˆ์•ก” + “์ฐจ์ด”
(1) ์ด์ „ ๊ฐ’(prev_price)๋งŒ ๋จผ์ € ๋ถ™์ด๊ธฐ
(2) “์ฐจ์ด(diff)”๊นŒ์ง€ ๋งŒ๋“ค๊ธฐ (NULL ์ฒ˜๋ฆฌ ํฌํ•จ)
WITH w AS (
  SELECT
    enrollment_id,
    student_id,
    enroll_date,
    final_price,
    LAG(final_price) OVER (
      PARTITION BY student_id
      ORDER BY enroll_date, enrollment_id
    ) AS prev_price
  FROM basic.enrollments
)
SELECT
  enrollment_id,
  student_id,
  enroll_date,
  final_price,
  prev_price,
  final_price - COALESCE(prev_price, final_price) AS diff_from_prev
FROM w
ORDER BY student_id, enroll_date, enrollment_id;
  • ์—ฌ๋Ÿฌ ๊ฐœ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
SELECT
  enrollment_id,
  student_id,
  enroll_date,
  final_price,

  LAG(final_price, 1, final_price) OVER (
    PARTITION BY student_id
    ORDER BY enroll_date, enrollment_id
  ) AS prev_price,

  final_price
  - LAG(final_price, 1, final_price) OVER (
      PARTITION BY student_id
      ORDER BY enroll_date, enrollment_id
    ) AS diff_from_prev
FROM basic.enrollments
ORDER BY student_id, enroll_date, enrollment_id;
  • ์œˆ๋„์šฐ ํ•จ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์œผ๋ฉด ๋ณด๊ธฐ ๋ณต์žก!
    ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์œˆ๋„์šฐ ํ•จ์ˆ˜์˜ ์กฐ๊ฑด์ด ๊ฐ™์œผ๋ฉด window ์กฐ๊ฑด์ด๋ฆ„ as () ๋กœ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
SELECT
  enrollment_id,
  student_id,
  enroll_date,
  final_price,
  LAG(final_price, 1, final_price)  OVER w AS prev_price,
  LEAD(final_price, 1, final_price) OVER w AS next_price
FROM basic.enrollments
WINDOW w AS (
  PARTITION BY student_id
  ORDER BY enroll_date, enrollment_id
)
ORDER BY student_id, enroll_date, enrollment_id;

 

โ“ ๋ฏธ๋‹ˆ์‹ค์Šต 4)

๋”๋ณด๊ธฐ

๋ฌธ์ œ

`basic.enrollments`์—์„œ **ํ•™์ƒ๋ณ„(student_id)**๋กœ ์‹ ์ฒญ์„ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ์ •๋ ฌํ–ˆ์„ ๋•Œ, ๊ฐ ์‹ ์ฒญ ํ–‰์— ์•„๋ž˜ ์ปฌ๋Ÿผ์„ ๋งŒ๋“ค์–ด ์ถœ๋ ฅํ•˜์„ธ์š”.

์ •๋ ฌ ๊ธฐ์ค€(์ค„ ์„ธ์šฐ๊ธฐ ๊ธฐ์ค€):
- `enroll_date` ์˜ค๋ฆ„์ฐจ์ˆœ
- ๊ฐ™์€ ๋‚ ์งœ๋ฉด `enrollment_id` ์˜ค๋ฆ„์ฐจ์ˆœ

์ถœ๋ ฅ ์ปฌ๋Ÿผ:
- `enrollment_id, student_id, enroll_date, final_price`
- `prev_price` : ๋ฐ”๋กœ **์ด์ „ ์‹ ์ฒญ**์˜ `final_price`
    - ์ด์ „ ์‹ ์ฒญ์ด ์—†์œผ๋ฉด(์ฒซ ํ–‰) → **ํ˜„์žฌ๊ฐ’(final_price)** ์œผ๋กœ ๋Œ€์ฒด
- `next_price` : ๋ฐ”๋กœ **๋‹ค์Œ ์‹ ์ฒญ**์˜ `final_price`
    - ๋‹ค์Œ ์‹ ์ฒญ์ด ์—†์œผ๋ฉด(๋งˆ์ง€๋ง‰ ํ–‰) → **ํ˜„์žฌ๊ฐ’(final_price)** ์œผ๋กœ ๋Œ€์ฒด
- `diff_from_prev` : `final_price - prev_price` (์ฒซ ํ–‰์€ 0์ด ๋˜๊ฒŒ)
- `diff_to_next` : `next_price - final_price` (๋งˆ์ง€๋ง‰ ํ–‰์€ 0์ด ๋˜๊ฒŒ)

ํžŒํŠธ:
- `LAG(final_price)` / `LEAD(final_price)`๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ “ํ•œ ์นธ ์ „/ํ›„”๋ฅผ ๋ณด๋ฉฐ, ๊ฐ’์ด ์—†์œผ๋ฉด NULL์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.
- NULL์€ `COALESCE(x, final_price)`๋กœ ํ˜„์žฌ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ์„ธ์š”.

-- ๋‚˜์˜ ๋‹ต
SELECT enrollment_id
	 , student_id
	 , enroll_date
	 , final_price
	 , LAG(final_price,1, final_price) OVER (
	 		PARTITION BY student_id
	 		ORDER BY enroll_date
	 		) AS prev_price
	 , LEAD(final_price, 1, final_price) OVER (
	 		PARTITION BY student_id
	 		ORDER BY enroll_date
	 		) AS next_price
	 , final_price
	    	- LAG(final_price,1, final_price) OVER (
	 		PARTITION BY student_id
	 		ORDER BY enroll_date
	 		) AS diff_from_prev
	 , LEAD(final_price, 1, final_price) OVER (
	 		PARTITION BY student_id
	 		ORDER BY enroll_date
	 		) - final_price AS diff_to_next
FROM basic.enrollments
ORDER BY student_id, enroll_date, enrollment_id
-- WINDOW ๋ณ„์นญ ์‚ฌ์šฉ
SELECT enrollment_id
	 , student_id
	 , enroll_date
	 , final_price
	 , LAG(final_price,1, final_price) OVER w AS prev_price
	 , LEAD(final_price, 1, final_price) OVER w AS next_price
	 , final_price
	    	- LAG(final_price,1, final_price) OVER w AS diff_from_prev
	 , LEAD(final_price, 1, final_price) OVER w - final_price AS diff_to_next
FROM basic.enrollments
-- WINDOW ์กฐ๊ฑด
		WINDOW w AS (
			PARTITION BY student_id
			ORDER BY enroll_date
			)
ORDER BY student_id, enroll_date, enrollment_id;
-- CTE ํ™œ์šฉ
WITH win AS (
	SELECT enrollment_id
	      , student_id
	      , enroll_date
	      , final_price
		  , LAG(final_price, 1, final_price) OVER(
				PARTITION BY student_id
				ORDER BY enroll_date)
				AS prev_price
		  , LEAD(final_price, 1, final_price) OVER(
		  		PARTITION BY student_id
		  		ORDER BY enroll_date)
		  		AS next_price
	FROM basic.enrollments
	ORDER BY student_id
	)
SELECT enrollment_id
	   , student_id
	   , enroll_date
	   , final_price
	   , prev_price
	   , next_price
	   , final_price - prev_price AS diff_from_prev
	   , next_price - final_price AS diff_to_next
FROM win
ORDER BY student_id, enroll_date, enrollment_id;

# SQL ๋ฐ์ผ๋ฆฌ ํ€˜์ŠคํŠธ

# ๊ณผ์ œ

๊ณผ์ œ1)

๋”๋ณด๊ธฐ

์ƒํ™ฉ
์šด์˜ํŒ€์ด ์‹ ์ฒญ ๋‚ด์—ญ์„ ๋ณผ ๋•Œ,
- ํ•™์ƒ `region`์ด ๋น„์–ด์žˆ์œผ๋ฉด `"UNKNOWN"`์œผ๋กœ ๋ณด์ด๊ณ 
- `coupon_code`๊ฐ€ ๋น„์–ด์žˆ์œผ๋ฉด `"no_coupon"`์œผ๋กœ ๋ณด์ด๊ธธ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉํ‘œ
`enrollment_status IN ('active','completed')`์ธ ์‹ ์ฒญ๋งŒ ๋Œ€์ƒ์œผ๋กœ ์•„๋ž˜๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”.

์ถœ๋ ฅ ์ปฌ๋Ÿผ
- `enrollment_id`
- `student_id`
- `student_name`
- `region_clean` : `COALESCE(s.region, 'UNKNOWN')`
- `coupon_label` : `IFNULL(e.coupon_code, 'no_coupon')`

์ •๋ ฌ
- `enrollment_id` ์˜ค๋ฆ„์ฐจ์ˆœ

SELECT e.enrollment_id 
       , e.student_id
       , s.student_name
       , COALESCE(s.region,'UNKNOWN') AS region_clean
       , IFNULL(e.coupon_code, 'no_coupon') AS coupon_label
FROM basic.enrollments e
	LEFT JOIN basic.students s 
	ON e.student_id=s.student_id
WHERE e.enrollment_status IN ('active','completed')
ORDER BY enrollment_id;

 

๊ณผ์ œ2)

๋”๋ณด๊ธฐ

์ƒํ™ฉ
๋ถ„์„ํŒ€์ด enrollments(์‹ ์ฒญ 1๊ฑด=1ํ–‰)๋ฅผ ์œ ์ง€ํ•œ ์ฑ„๋กœ, ํ•™์ƒ๋ณ„ ํ†ต๊ณ„๋ฅผ “์˜†์— ๋ถ™์—ฌ์„œ” ๋ณด๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค.

๋ชฉํ‘œ
enrollments์—์„œ ๊ฐ ํ–‰๋งˆ๋‹ค ์•„๋ž˜ ์ปฌ๋Ÿผ์„ ๋ถ™์—ฌ ์ถœ๋ ฅํ•˜์„ธ์š”.

์ถœ๋ ฅ ์ปฌ๋Ÿผ
- `enrollment_id`
- `student_id`
- `final_price`
- `student_enroll_cnt` : ํ•™์ƒ ๊ธฐ์ค€ ์‹ ์ฒญ ๊ฑด์ˆ˜
- `student_total_spend` : ํ•™์ƒ ๊ธฐ์ค€ ์ด ๊ฒฐ์ œ(์‹ ์ฒญ๊ธˆ์•ก ํ•ฉ)
- `student_avg_price` : ํ•™์ƒ ๊ธฐ์ค€ ํ‰๊ท  ์‹ ์ฒญ๊ธˆ์•ก

์ •๋ ฌ
- `student_id`, `enrollment_id` ์˜ค๋ฆ„์ฐจ์ˆœ

SELECT enrollment_id 
       , student_id
       , final_price
       , COUNT(*) OVER(PARTITION BY student_id) AS student_enroll_cnt
       , SUM(final_price) OVER(PARTITION BY student_id) AS student_total_spend
       , AVG(final_price) OVER(PARTITION BY student_id) AS student_avg_price
FROM basic.enrollments
ORDER BY student_id, enrollment_id;

 

๊ณผ์ œ3)

๋”๋ณด๊ธฐ

์ƒํ™ฉ
๋งˆ์ผ€ํŒ…ํŒ€์ด ํ•™์ƒ๋ณ„๋กœ “๊ฐ€์žฅ ๊ณ ๊ฐ€ ๊ฐ•์ขŒ ์‹ ์ฒญ 1๊ฑด”๋งŒ ๋ฝ‘์•„ VIP ์•ˆ๋‚ด๋ฅผ ๋ณด๋‚ด๋ ค ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉํ‘œ
`enrollment_status IN ('active','completed')`๋งŒ ๋Œ€์ƒ์œผ๋กœ,
ํ•™์ƒ๋ณ„๋กœ `final_price`๊ฐ€ ๊ฐ€์žฅ ํฐ ์‹ ์ฒญ 1๊ฑด๋งŒ ๋‚จ๊ธฐ์„ธ์š”.
> ๋™์ ์ด๋ฉด enrollment_id๊ฐ€ ๋” ์ž‘์€ ๊ฒƒ์„ 1๊ฑด์œผ๋กœ ์„ ํƒํ•˜์„ธ์š”.

์ถœ๋ ฅ ์ปฌ๋Ÿผ
- `student_id`
- `enrollment_id`
- `final_price`

์ •๋ ฌ
- `student_id` ์˜ค๋ฆ„์ฐจ์ˆœ

WITH ranked AS (
	SELECT student_id
	      , enrollment_id
	      , final_price
	      , ROW_NUMBER() OVER(
	      		PARTITION BY student_id
	      		ORDER BY final_price desc
	      		) AS rnk
	FROM basic.enrollments
	WHERE enrollment_status IN ('active','completed')
	)
SELECT student_id
       , enrollment_id
       , final_price
FROM ranked
WHERE rnk=1
ORDER BY student_id;

 

๊ณผ์ œ4)

๋”๋ณด๊ธฐ

์ƒํ™ฉ
์žฌ๋ฌดํŒ€์ด paid ๊ฒฐ์ œ ๋กœ๊ทธ๋ฅผ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ๋ณด๋ฉด์„œ,
- ๋ฐ”๋กœ ์ด์ „ ๊ฒฐ์ œ ๊ธˆ์•ก
- ์ด์ „ ๋Œ€๋น„ ์ฆ๊ฐ
- ์ง€๊ธˆ๊นŒ์ง€ ๋ˆ„์  ๊ฒฐ์ œ์•ก
์„ ํ•œ ๋ฒˆ์— ๋ณด๊ณ  ์‹ถ์–ดํ•ฉ๋‹ˆ๋‹ค.

๋ชฉํ‘œ
`payment_status='paid'`์ธ ๊ฒฐ์ œ๋งŒ ๋Œ€์ƒ์œผ๋กœ ์•„๋ž˜๋ฅผ ์ถœ๋ ฅํ•˜์„ธ์š”.

์ถœ๋ ฅ ์ปฌ๋Ÿผ
- `payment_id`
- `paid_at`
- `amount`
- `prev_amount` : ์ด์ „ ๊ฒฐ์ œ์˜ amount (์—†์œผ๋ฉด 0)
- `diff_from_prev` : `amount - prev_amount`
- `cum_amount` : ์‹œ๊ฐ„์ˆœ ๋ˆ„์  ๊ฒฐ์ œ์•ก

 

์ •๋ ฌ
- `paid_at`, `payment_id` ์˜ค๋ฆ„์ฐจ์ˆœ

SELECT payment_id
       , paid_at 
       , amount
       , LAG(amount, 1, 0) OVER(
       		ORDER BY paid_at
       		) AS prev_amount
       , amount
       	- LAG(amount, 1, 0) OVER(
       		ORDER BY paid_at
       		) AS diff_from_prev
       , SUM(amount) OVER(
       		ORDER BY paid_at, payment_id -- paid_at์€ ์ค‘๋ณต์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Œ. ์ •๋ ฌ๊ธฐ์ค€ id๋กœ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€.
            ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -- ๋ˆ„์ ํ•ฉ์—๋Š” ์ด ์กฐ๊ฑด์„ ๊ผญ ์ ๊ธฐ
            ) AS cum_amount
FROM basic.payments
WHERE payment_status='paid'
ORDER BY paid_at, payment_id;

# ํ€ด์ฆˆ

Q1. MySQL์—์„œ ์œˆ๋„์šฐ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์œ„์น˜๋กœ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์€?
A. WHERE ์ ˆ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
B. GROUP BY ์ ˆ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
C. SELECT ๋ฆฌ์ŠคํŠธ์™€ ORDER BY ์ ˆ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค
D. JOIN ON ์ ˆ์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค

Q2. `LAG(expr, N, default)`์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์€?
A. N์˜ ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋‹ค
B. ์ด์ „ ํ–‰์ด ์—†์œผ๋ฉด default๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค
C. default์˜ ๊ธฐ๋ณธ๊ฐ’์€ 0์ด๋‹ค
D. ORDER BY ์—†์ด๋„ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ณด์žฅ๋œ๋‹ค

Q3. `COALESCE(a, b, c)`์— ๋Œ€ํ•œ ์„ค๋ช…์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์€?
A. ์„ธ ๊ฐ’์ด ๋ชจ๋‘ NULL์ด๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค
B. ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋งŒ ๊ฒ€์‚ฌํ•˜๊ณ  NULL์ด๋ฉด ํ•ญ์ƒ b๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค
C. ์™ผ์ชฝ๋ถ€ํ„ฐ ๋ณด๋ฉด์„œ **์ฒ˜์Œ์œผ๋กœ NULL์ด ์•„๋‹Œ ๊ฐ’**์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค
D. NULL์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์—†๋Š” ํ•จ์ˆ˜๋‹ค

 

Q4. `ROW_NUMBER()`์™€ `RANK()`์˜ ์ฐจ์ด๋กœ ๊ฐ€์žฅ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์€?
A. ๋‘˜ ๋‹ค ๋™์ ์ด๋ฉด ๊ฐ™์€ ์ˆœ์œ„๋ฅผ ์ค€๋‹ค
B. ROW_NUMBER๋Š” ๋™์ ์ด์–ด๋„ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒˆํ˜ธ๋ฅผ ์ค€๋‹ค
C. RANK๋Š” ORDER BY ์—†์ด๋„ ํ•ญ์ƒ ์•ˆ์ •์ ์ด๋‹ค
D. ROW_NUMBER๋Š” GROUP BY๊ฐ€ ์žˆ์–ด์•ผ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค

Q5. ์•„๋ž˜ ๋ˆ„์ ํ•ฉ ๋ฌธ๋ฒ•์—์„œ `ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW`์˜ ์˜๋ฏธ๋กœ ๊ฐ€์žฅ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์€?
A. ํ˜„์žฌ ํ–‰ ํ•œ ์ค„๋งŒ ํ•ฉ์‚ฐํ•œ๋‹ค
B. ํŒŒํ‹ฐ์…˜์˜ ๋งˆ์ง€๋ง‰ ํ–‰๋ถ€ํ„ฐ ํ˜„์žฌ ํ–‰๊นŒ์ง€ ํ•ฉ์‚ฐํ•œ๋‹ค
C. ํŒŒํ‹ฐ์…˜์˜ ์ฒซ ํ–‰๋ถ€ํ„ฐ ํ˜„์žฌ ํ–‰๊นŒ์ง€ ๋ˆ„์  ํ•ฉ์‚ฐํ•œ๋‹ค
D. ํŒŒํ‹ฐ์…˜ ์ „์ฒด(๋ชจ๋“  ํ–‰)๋ฅผ ํ•ญ์ƒ ํ•ฉ์‚ฐํ•œ๋‹ค

 

# ์ž๊ธฐ์ฃผ๋„ํ•™์Šต์„ ์œ„ํ•œ AIํ™œ์šฉ๋ฒ• 2ํšŒ์ฐจ

# AI ํ™œ์šฉํ•˜์—ฌ ํŒŒ์ด์ฌ ํ•™์Šต์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ

- ๋ณธ๋ฌธ ๋‚ด์šฉ์€, ๋‚˜๋ณด๋‹ค ๋” ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ์—๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์„ ์ •๋„๋กœ ์ˆ™์ง€ํ•ด์•ผ ํ•œ๋‹ค.
- ์ถ”๊ฐ€ํ•˜๋ฉด ์ข‹์„ ๋งํฌ, ์ด๋ฏธ์ง€ ๋“ฑ์„ ์ฒจ๋ถ€, ์ƒ์„ฑ๋œ ๋ชจ๋“  ์˜ˆ์ œ, ๋ฌธ์ œ์˜ ์‹ค์Šต ํ™”๋ฉด์„ ์บก์ณํ•ด์„œ ์ฒจ๋ถ€ํ•œ๋‹ค.
- ์ฑ•ํ„ฐ๋ณ„๋กœ ๊ฐ๊ฐ ์ƒ์„ฑํ•œ ๋งํฌ๋ฅผ ์ „์ฒด ๋ชฉ๋ก ๊ธ€์— ๋งํฌ ์ฒจ๋ถ€ํ•œ๋‹ค.
  • ์ดˆ๊ธฐ ํ”„๋กฌํ”„ํŠธ (ํ•™์Šต์ž๋ฃŒ ์ „์ฒด ๋ชฉ์ฐจ ์ƒ์„ฑ)
    - AI์˜ ์—ญํ• ๊ณผ ๋‚˜์˜ ์—ญํ• ์„ ์ •๋ฆฝ
    - ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์˜ ๋ชฉํ‘œ
    - ํ•™์Šต์ž๋ฃŒ์˜ ์ปค๋ฆฌํ˜๋Ÿผ: ์ฑ… ๋งํฌ์™€ ๋ชฉ์ฐจ ๋„ฃ๊ธฐ
๋”๋ณด๊ธฐ

๋„ˆ๋Š” ์ค‘๊ณ ๋“ฑํ•™์ƒ์—๊ฒŒ ์ฝ”๋”ฉ ๊ต์œก์„ ์‰ฝ๊ฒŒ ์ž˜ํ•˜๋Š” ์ผํƒ€ ๊ฐ•์‚ฌ์•ผ.
๋‚˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝํ—˜์ด ์ „ํ˜€ ์—†๋Š” ํ•™์Šต์ž์•ผ. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๋ผ์ด๋ธŒ์ปค๋จธ์Šค PD๋กœ ์ผ ํ•œ ์ ์ด ์žˆ์—ˆ์–ด.

ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ด€๋ จ ๊ฐ•์ขŒ๋ฅผ ๋ธ”๋กœ๊ทธ์— ์‹œ๋ฆฌ์ฆˆ๋กœ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์–ด.
๋‚œ์ด๋„๋Š” ์ค‘ํ•™๊ต 3ํ•™๋…„ ์ •๋„๋„ ์ดํ•ดํ•˜๊ณ  ์‹ค์Šต ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์ด์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์–ด.
๋ฐ์ดํ„ฐ ๋ถ„์„ ๊ด€์ ์—์„œ ์ค‘์š”ํ•œ ๋‚ด์šฉ์„ ๋” ๊ฐ•์กฐํ•ด์ค˜.

์ด ๊ฐ•์˜์•ˆ์„ ๋‹ค ํ•™์Šตํ•˜๊ณ  ๋‚˜๋ฉด ํ†ต๊ณ„ํ•™์ด๋‚˜ ๋จธ์‹ ๋Ÿฌ๋‹ ์ˆœ์œผ๋กœ ํ•™์Šต์„ ์ด์–ด์„œ ํ•  ๊ฑฐ๋ผ ๊ทธ ๋‚ด์šฉ์„ ๋นผ๋„ ๋จ.
์•„๋ž˜ ํฌํ•จํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์„ ์ •๋ฆฌํ–ˆ๋Š”๋ฐ ์ด 21๊ฐœ ์ฑ•ํ„ฐ๋กœ ์ •๋ฆฌํ•ด์ค˜.
๊ฐ ์ฑ•ํ„ฐ ์ œ๋ชฉ ๋ฐ ํ•™์Šต ๋ชฉํ‘œ ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋‚ด์šฉ์„ ๊ฐ„๋žตํ•˜๊ฒŒ ์š”์•ฝํ•ด์ค˜.
๊ฐœ๋ฐœํ™˜๊ฒฝ์€ google colab์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์–ด.

https://www.yes24.com/product/goods/102485981
Chapter 01 ํŒŒ์ด์ฌ ๋น„๊ธด์ฆˆ
01 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ž€?
02 ํŒŒ์ด์ฌ์ด๋ž€?
03 ํŒŒ์ด์ฌ ์„ค์น˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ
04 ํŒŒ์ด์ฌ IDLE ํ™œ์šฉํ•˜๊ธฐ

Chapter 02 ๋ณ€์ˆ˜
01 ๋ณ€์ˆ˜๋ž€?
02 ๋ณ€์ˆ˜ ์ด๋ฆ„ ์ง“๊ธฐ
03 ๊ฐ’์„ ์ž…๋ ฅ๋ฐ›๋Š” input() ํ•จ์ˆ˜
[์‹ค์ „ ์˜ˆ์ œ] ๊ฑฐ๋ถ์ด๊ฐ€ ๋‚˜์˜ค๋Š” ํ”„๋กœ๊ทธ๋žจ

Chapter 03 ์—ฐ์‚ฐ์ž
01 ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž
02 ๋Œ€์ž… ์—ฐ์‚ฐ์ž
03 ๋น„๊ต ์—ฐ์‚ฐ์ž์™€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž
04 ์—ฐ์‚ฐ์ž์˜ ์šฐ์„ ์ˆœ์œ„
[์‹ค์ „ ์˜ˆ์ œ] ๊ฑฐ๋ถ์ด๋ฅผ ๊ทธ๋ฆฌ๋Š” ํŽœ์˜ ๋ณ€ํ™”
[์‹ค์ „ ์˜ˆ์ œ] ์ž…๋ ฅํ•œ ๊ฐ’๋งŒํผ ๊ฑฐ๋ถ์ด ์›€์ง์ด๊ธฐ

Chapter 04 ๋ฐ์ดํ„ฐํ˜•๊ณผ ๋ฌธ์ž์—ด
01 ๋ฐ์ดํ„ฐํ˜•์ด๋ž€?
02 ๋ฐ์ดํ„ฐํ˜•์˜ ์ข…๋ฅ˜
03 ๋ฌธ์ž์—ด ์•Œ์•„๋ณด๊ธฐ
[์‹ค์ „ ์˜ˆ์ œ] ๋ชจํ—˜์„ ๋– ๋‚˜๋Š” ๊ฑฐ๋ถ์ด

Chapter 05 ์กฐ๊ฑด๋ฌธ
01 ์กฐ๊ฑด๋ฌธ์˜ ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ
02 ์กฐ๊ฑด๋ฌธ ์•Œ์•„๋ณด๊ธฐ
[์‹ค์ „ ์˜ˆ์ œ] ์‚ฌ์ถ˜๊ธฐ ๊ฑฐ๋ถ์ด๋ฅผ ์ง€๋„ํ•˜๊ธฐ

Chapter 06 ๋ฐ˜๋ณต๋ฌธ
01 for๋ฌธ ๊ธฐ์ดˆ ๋‹ค์ง€๊ธฐ
02 for๋ฌธ ํ™œ์šฉํ•˜๊ธฐ
03 while๋ฌธ์ด๋ž€?
[์‹ค์ „ ์˜ˆ์ œ] ๊ฑฐ๋ถ์ด ๋ฌด๋Šฌ์˜ ๋ฒฝ์ง€ ๋งŒ๋“ค๊ธฐ

Chapter07 ๋ฆฌ์ŠคํŠธ, ํŠœํ”Œ, ๋”•์…”๋„ˆ๋ฆฌ
01 ๋ฆฌ์ŠคํŠธ ๊ธฐ์ดˆ
02 ๋ฆฌ์ŠคํŠธ ํ™œ์šฉํ•˜๊ธฐ
03 ํŠœํ”Œ
04 ๋”•์…”๋„ˆ๋ฆฌ
[์‹ค์ „ ์˜ˆ์ œ] 100๋งˆ๋ฆฌ์˜ ๊ฑฐ๋ถ์ด ์‡ผ

Chapter 08 ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
01 ํ•จ์ˆ˜ ์ดํ•ดํ•˜๊ธฐ
02 ํ•จ์ˆ˜์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ๊ฐ’ ๋ฐ˜ํ™˜ํ•˜๊ธฐ
03 ์ง€์—ญ๋ณ€์ˆ˜์™€ ์ „์—ญ๋ณ€์ˆ˜
[์‹ค์ „ ์˜ˆ์ œ] ํ›ˆ๋ฏผ์ •์Œ ๊ทธ๋ž˜ํ”ฝ ๋””์ž์ธ

Chapter09 ํŒŒ์ผ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ
01 ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
02 ํŒŒ์ผ ์ฝ๊ธฐ
03 ํŒŒ์ผ ์“ฐ๊ธฐ
[์‹ค์ „ ์˜ˆ์ œ] ๊ฐ”๋˜ ๊ธธ์„ ๋ณต์Šตํ•˜๋Š” ๊ฑฐ๋ถ์ด

Chapter 10 ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
01 ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดํ•ดํ•˜๊ธฐ
02 ํด๋ž˜์Šค์™€ ๊ฐ์ฒด
03 ์ƒ์„ฑ์ž์™€ ํŠน๋ณ„ํ•œ ๋ฉ”์†Œ๋“œ
04 ํด๋ž˜์Šค์˜ ์ƒ์†
[์‹ค์ „ ์˜ˆ์ œ] GPS๋ฅผ ๋‹จ ํ† ๋ผ


https://www.yes24.com/product/goods/116253011
Chapter 01 ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์‹œ์ž‘ํ•˜๋ฉฐ
01-1 ๋ฐ์ดํ„ฐ ๋ถ„์„์ด๋ž€
__๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ๋ฐ์ดํ„ฐ ๊ณผํ•™
__๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€
__๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•œ ๋„๊ตฌ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ] ๋ฐ์ดํ„ฐ ๋งˆ์ด๋‹๊ณผ ๋จธ์‹ ๋Ÿฌ๋‹
[3๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ•™์Šต์— ๊ผญ ํ•„์š”ํ•œ ํ•ต์‹ฌ ํŒจํ‚ค์ง€]
[ํ™•์ธ ๋ฌธ์ œ]

01-2 ๊ตฌ๊ธ€ ์ฝ”๋žฉ๊ณผ ์ฃผํ”ผํ„ฐ ๋…ธํŠธ๋ถ
__๊ตฌ๊ธ€ ์ฝ”๋žฉ
__๋…ธํŠธ๋ถ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ] ๋งˆํฌ๋‹ค์šด ์„œ์‹
[5๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ…์ŠคํŠธ ์…€ ํˆด๋ฐ”]
[ํ™•์ธ ๋ฌธ์ œ]

01-3 ์ด ๋„์„œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ธ๊ธฐ๊ฐ€ ์ข‹์„๊นŒ์š”?
__๋„์„œ ๋ฐ์ดํ„ฐ ์ฐพ๊ธฐ
__์ฝ”๋žฉ์—์„œ ๋ฐ์ดํ„ฐ ํ™•์ธํ•˜๊ธฐ
__ํŒŒ์ด์ฌ์œผ๋กœ CSV ํŒŒ์ผ ์ถœ๋ ฅํ•˜๊ธฐ
__๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ๋‹ค๋ฃจ๊ธฐ: ํŒ๋‹ค์Šค
__[๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •] ์ ์ ˆํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„์„œ ์—…๋กœ๋“œํ•˜๊ณ  ์ฝ๊ธฐ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ] ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ ์„ธํŠธ ๋Œ€ํ‘œ ์‚ฌ์ดํŠธ์™€ ์œ ๋ช… ํฌ๋Ÿผ
[5๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

Chapter 02 ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ํ•˜๊ธฐ
02-1 API ์‚ฌ์šฉํ•˜๊ธฐ
__API๋ž€
__ํŒŒ์ด์ฌ์—์„œ JSON ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ
__ํŒŒ์ด์ฌ์—์„œ XML ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ
__API๋กœ 20๋Œ€๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๋„์„œ ์ฐพ๊ธฐ
__[๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •] ๊ณต๊ฐœ API๋กœ ์›น์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
[4๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

02-2 ์›น ์Šคํฌ๋ž˜ํ•‘ ์‚ฌ์šฉํ•˜๊ธฐ
__๋„์„œ ์ชฝ์ˆ˜๋ฅผ ์ฐพ์•„์„œ
__๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ
__HTML์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœํ•˜๊ธฐ: ๋ทฐํ‹ฐํ”Œ์ˆ˜ํ”„
__์ „์ฒด ๋„์„œ์˜ ์ชฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ
__์›น ์Šคํฌ๋ž˜ํ•‘ํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 
__[๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •] ์›น ์Šคํฌ๋ž˜ํ•‘์œผ๋กœ HTML ์ˆ˜์ง‘ํ•˜๊ธฐ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ] merge() ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜
[2๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

Chapter 03 ๋ฐ์ดํ„ฐ ์ •์ œํ•˜๊ธฐ
03-1 ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ
__์—ด ์‚ญ์ œํ•˜๊ธฐ
__ํ–‰ ์‚ญ์ œํ•˜๊ธฐ
__์ค‘๋ณต๋œ ํ–‰ ์ฐพ๊ธฐ
__๊ทธ๋ฃน๋ณ„๋กœ ๋ชจ์œผ๊ธฐ
__์›๋ณธ ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ
__[๋ฌธ์ œํ•ด๊ฒฐ ๊ณผ์ •] ์ผ๊ด„ ์ฒ˜๋ฆฌ ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ
[6๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

03-2 ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ ์ˆ˜์ •ํ•˜๊ธฐ
__๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ ์ •๋ณด ์š”์•ฝ ํ™•์ธํ•˜๊ธฐ
__๋ˆ„๋ฝ๋œ ๊ฐ’ ์ฒ˜๋ฆฌํ•˜๊ธฐ
__์ •๊ทœ ํ‘œํ˜„์‹
__์ž˜๋ชป๋œ ๊ฐ’ ๋ฐ”๊พธ๊ธฐ
__๋ˆ„๋ฝ๋œ ์ •๋ณด ์ฑ„์šฐ๊ธฐ
__[๋ฌธ์ œํ•ด๊ฒฐ ๊ณผ์ •] ๋ฐ์ดํ„ฐ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ •์ œํ•˜๊ธฐ
[2๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

Chapter 04 ๋ฐ์ดํ„ฐ ์š”์•ฝํ•˜๊ธฐ
04-1 ํ†ต๊ณ„๋กœ ์š”์•ฝํ•˜๊ธฐ
__๊ธฐ์ˆ ํ†ต๊ณ„ ๊ตฌํ•˜๊ธฐ
__ํ‰๊ท  ๊ตฌํ•˜๊ธฐ
__์ค‘์•™๊ฐ’ ๊ตฌํ•˜๊ธฐ
__์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’ ๊ตฌํ•˜๊ธฐ
__๋ถ„์œ„์ˆ˜ ๊ตฌํ•˜๊ธฐ
__๋ถ„์‚ฐ ๊ตฌํ•˜๊ธฐ
__ํ‘œ์ค€ํŽธ์ฐจ ๊ตฌํ•˜๊ธฐ
__์ตœ๋นˆ๊ฐ’ ๊ตฌํ•˜๊ธฐ
__[๋ฌธ์ œํ•ด๊ฒฐ ๊ณผ์ •] ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์—์„œ ๊ธฐ์ˆ ํ†ต๊ณ„ ๊ตฌํ•˜๊ธฐ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ] ๋„˜ํŒŒ์ด์˜ ๊ธฐ์ˆ ํ†ต๊ณ„ ํ•จ์ˆ˜
[6๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

04-2 ๋ถ„ํฌ ์š”์•ฝํ•˜๊ธฐ
__์‚ฐ์ ๋„ ๊ทธ๋ฆฌ๊ธฐ
__ํžˆ์Šคํ† ๊ทธ๋žจ ๊ทธ๋ฆฌ๊ธฐ
__์ƒ์ž ์ˆ˜์—ผ ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
__[๋ฌธ์ œํ•ด๊ฒฐ ๊ณผ์ •] ํ†ต๊ณ„๋Ÿ‰์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ] ํŒ๋‹ค์Šค์˜ ๊ทธ๋ž˜ํ”„ ํ•จ์ˆ˜
[6๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

Chapter 05 ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™”ํ•˜๊ธฐ
05-1 ๋งทํ”Œ๋กฏ๋ฆฝ ๊ธฐ๋ณธ ์š”์†Œ ์•Œ์•„๋ณด๊ธฐ
__Figure ๊ฐ์ฒด
__rcParams ๊ฐ์ฒด
__์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„œ๋ธŒํ”Œ๋กฏ ์ถœ๋ ฅํ•˜๊ธฐ
[5๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

05-2 ์„  ๊ทธ๋ž˜ํ”„์™€ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
__์—ฐ๋„๋ณ„ ๋ฐœํ–‰ ๋„์„œ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
__์ฃผ์ œ๋ณ„ ๋„์„œ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
__์„  ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
__๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
__[๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •] ๋งทํ”Œ๋กฏ๋ฆฝ์œผ๋กœ ์„  ๊ทธ๋ž˜ํ”„์™€ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ(1)] ์ด๋ฏธ์ง€ ์ถœ๋ ฅํ•˜๊ณ  ์ €์žฅํ•˜๊ธฐ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ(2)] ๊ทธ๋ž˜ํ”„๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ €์žฅํ•˜๊ธฐ
[2๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

Chapter 06 ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ํ‘œํ˜„ํ•˜๊ธฐ
06-1 ๊ฐ์ฒด์ง€ํ–ฅ API๋กœ ๊ทธ๋ž˜ํ”„ ๊พธ๋ฏธ๊ธฐ
__pyplot ๋ฐฉ์‹๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ API ๋ฐฉ์‹
__๊ทธ๋ž˜ํ”„์— ํ•œ๊ธ€ ์ถœ๋ ฅํ•˜๊ธฐ
__์ถœํŒ์‚ฌ๋ณ„ ๋ฐœํ–‰ ๋„์„œ ์‚ฐ์ ๋„ ๊ทธ๋ฆฌ๊ธฐ
__[๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •] ๋งทํ”Œ๋กฏ๋ฆฝ์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„ ๊ฐœ์„ ํ•˜๊ธฐ
[3๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

06-2 ๋งทํ”Œ๋กฏ๋ฆฝ์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ๋ฐฐ์šฐ๊ธฐ
__์‹ค์Šต ์ค€๋น„ํ•˜๊ธฐ
__ํ•˜๋‚˜์˜ ํ”ผ๊ฒจ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์„  ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
__ํ•˜๋‚˜์˜ ํ”ผ๊ฒจ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ง‰๋Œ€ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
__์› ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
__์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋Š” ์„œ๋ธŒํ”Œ๋กฏ ๊ทธ๋ฆฌ๊ธฐ
__[๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •] ๋งทํ”Œ๋กฏ๋ฆฝ์œผ๋กœ ๋ณต์žกํ•œ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
[์ข€ ๋” ์•Œ์•„๋ณด๊ธฐ] ํŒ๋‹ค์Šค๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ
[5๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ]
[ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜์™€ ๋ฉ”์„œ๋“œ]
[ํ™•์ธ ๋ฌธ์ œ]

  • ํ•™์Šต์ž๋ฃŒ ์ „์ฒด ์ธ๋„ค์ผ, ์ œ๋ชฉ, ํƒœ๊ทธ ์ •ํ•˜๊ธฐ
    - ํ”„๋กฌํ”„ํŠธ: ์œ„ ๋‚ด์šฉ์— ๋Œ€ํ•œ ๋ธ”๋กœ๊ทธ ์ œ๋ชฉ๊ณผ ํƒœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์ธ๋„ค์ผ ์ œ์ž‘ ๊ฐ€์ด๋“œ๋ฅผ ์ •๋ฆฌํ•ด์ค˜.
  • ๊ณตํ†ต ํ”„๋กฌํ”„ํŠธ(๋ชจ๋“  ์ฑ•ํ„ฐ ์ƒ์„ฑ ์‹œ ์‚ฌ์šฉ)
    - AI๋Š” ์ด์ „ ๋‚ด์šฉ์ด ๊ธธ๋ฉด ์ฒ˜์Œ์˜ ๋ช…๋ น์„ ์žŠ์„ ์ˆ˜ ์žˆ์Œ. ์ค‘์š”ํ•œ ๋‚ด์šฉ์€ ๊ณ„์† ๋ช…๋ นํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ.
๋”๋ณด๊ธฐ

- ๋„ˆ๋Š” ์ค‘๊ณ ๋“ฑํ•™์ƒ์—๊ฒŒ ์ฝ”๋”ฉ ๊ต์œก์„ ์‰ฝ๊ฒŒ ์ž˜ํ•˜๋Š” ์ผํƒ€ ๊ฐ•์‚ฌ์•ผ.
- ๋‚˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฒฝํ—˜์ด ์ „ํ˜€ ์—†๋Š” ํ•™์Šต์ž์•ผ. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๋ผ์ด๋ธŒ์ปค๋จธ์Šค PD๋กœ ์ผ ํ•œ ์ ์ด ์žˆ์—ˆ์–ด.

- ๊ฐœ๋ฐœํ™˜๊ฒฝ์€ google colab์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์–ด.
- ์•„๋ž˜ ๋‚ด์šฉ์— ๋Œ€ํ•œ ์„ธ๋ถ€ ๊ฐ•์ขŒ๋ฅผ ๋งŒ๋“ค์–ด์ค˜.
- ์‹ค์Šตํ˜• ๊ฐ•์ขŒ(์ด๋ก 40% ์‹ค์Šต 60%)
- ๋ชจ๋“  ๋‚ด์šฉ์€ ์‰ฝ๊ณ , ๊ตฌ์ฒด์ ์ด๊ณ , ๋‹จ๊ณ„๋ณ„๋กœ ์ดˆ๋ณด์ž๋„ ๋”ฐ๋ผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž‘์„ฑํ•ด์ค˜.
 - ๊ฐ ๊ฐ•์˜ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์ตœ๋Œ€ํ•œ ์˜ˆ์ œ๋ฅผ ๋งŽ์ด ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ , ์˜ˆ์ œ์— ๋Œ€ํ•œ ์„ค๋ช…๋„ ์ถ”๊ฐ€ํ•ด์ค˜.
- ๋ชจ๋“  ์˜ˆ์ œ๋Š” ์ˆ˜๋„์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์„ค๋ช…, ์‹ค์ œ์ฝ”๋“œ ์ž‘์„ฑ ์„ค๋ช…, ์‹ค์ œ๋กœ ์–ด๋– ํ•œ ์ˆœ์„œ(Line by Line)๋กœ ์‹คํ–‰๋˜๋Š”์ง€ ์„ค๋ช…ํ•ด์ค˜.
- ์ƒ์†Œํ•œ ์–ธ์–ด(ํŠนํžˆ ์˜์–ด) ๋•Œ๋ฌธ์— ์–ด๋ ต์ง€ ์•Š๋„๋ก ํ•™์Šต ์ดˆ๋ฐ˜์— ํ•„์š”ํ•œ ๋‹จ์–ด ์ •๋ฆฌ๋ฅผ ํฌํ•จํ•ด์ค˜.
- ์ด์ „์— ๋ฐฐ์šด ๋‚ด์šฉ ์ค‘ ๋ฆฌ๋งˆ์ธ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋„ ์ดˆ๋ฐ˜์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•ด์ค˜.
- ๊ฐ•์ขŒ ๋์—๋Š” ํ•™์Šต ๋‚ด์šฉ ์ข…ํ•ฉ ์‹ค์Šต ๊ฐ€๋Šฅํ•œ ์‹ค๋ฌดํ˜• ๊ณผ์ œ๋ฅผ ์ถœ์ œํ•ด์ค˜.
--------
Chapter 01. ์ฝ”๋”ฉ๊ณผ ํŒŒ์ด์ฌ, ๊ทธ๋ฆฌ๊ณ  ๋ฐ์ดํ„ฐ ๋ถ„์„
ํ•™์Šต ๋ชฉํ‘œ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ฌด์—‡์ธ์ง€ ๊ฐ์œผ๋กœ ์ดํ•ดํ•œ๋‹ค
์™œ ๋ฐ์ดํ„ฐ ๋ถ„์„์— ํŒŒ์ด์ฌ์„ ์“ฐ๋Š”์ง€ ์•Œ๊ฒŒ ๋œ๋‹ค

์š”์•ฝ
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ž€ “์ปดํ“จํ„ฐ์—๊ฒŒ ์ผ์„ ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•”
ํŒŒ์ด์ฌ์ด ์‰ฌ์šด ์ด์œ  (์ฝ๊ธฐ ์‰ฌ์šด ๋ฌธ๋ฒ•, ๋ฐ์ดํ„ฐ ๋ถ„์„์— ๊ฐ•ํ•จ)
๋ฐ์ดํ„ฐ ๋ถ„์„์€ “๊ฐ์ด ์•„๋‹ˆ๋ผ ๊ทผ๊ฑฐ๋กœ ๋งํ•˜๋Š” ๊ฒƒ”
๋ผ์ด๋ธŒ์ปค๋จธ์Šค ์˜ˆ์‹œ:
๐Ÿ‘‰ “์˜ค๋Š˜ ๋ฐฉ์†ก์ด ์ž˜ ๋๋Š”์ง€”๋ฅผ ์ˆซ์ž๋กœ ์„ค๋ช…ํ•˜๋Š” ๋Šฅ๋ ฅ
--------
- ์ด ์œ„ ๋‚ด์šฉ์œผ๋กœ ํฌ๋ฉ€ํ•œ ์Šคํƒ€์ผ ๋ธ”๋กœ๊ทธ ๋ณธ๋ฌธ, ์ œ๋ชฉ, ํƒœ๊ทธ, ์ธ๋„ค์ผ ์ œ์ž‘ ๊ฐ€์ด๋“œ ์ž‘์„ฑํ•ด์ค˜.
- ์ธ๋„ค์ผ ์ œ์ž‘ ๊ฐ€์ด๋“œ๋Š” ๋‚ด๊ฐ€ ์˜ต์…˜์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก, ๋ชจ๋“  ๊ณ ๋ ค ์‚ฌํ•ญ์ด ๋“ค์–ด๊ฐ„ ์˜ต์…˜๋“ค์„ 5๊ฐœ ๋งŒ๋“ค์–ด์ค˜.

 


<์•Œ๊ฒŒ๋œ ๊ฒƒ>

  • ํ•จ์ˆ˜ ๋‚ด "expr" : expression(ํ‘œํ˜„)