<aside>

</aside>

μ•ˆλ…•ν•˜μ„Έμš”! λ“œλ””μ–΄ 5λΆ€μ˜ λ§ˆμ§€λ§‰ 주제, λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ„ λ‹€λ£° μ‹œκ°„μž…λ‹ˆλ‹€! 24강에 μ˜€μ‹  것을 ν™˜μ˜ν•©λ‹ˆλ‹€. πŸ˜„

μ†Œν”„νŠΈμ›¨μ–΄λŠ” μ‚΄μ•„μžˆλŠ” μœ κΈ°μ²΄μ™€ κ°™μ•„μ„œ, μ‹œκ°„μ΄ μ§€λ‚˜λ©΄μ„œ λ³€ν™”ν•˜κΈ° λ§ˆλ ¨μž…λ‹ˆλ‹€. μƒˆλ‘œμš΄ κΈ°λŠ₯이 μΆ”κ°€λ˜κ±°λ‚˜ κΈ°μ‘΄ κΈ°λŠ₯이 λ³€κ²½λ˜λ©΄μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰, 즉 **μŠ€ν‚€λ§ˆ(Schema)**도 ν•¨κ»˜ λ³€κ²½ν•΄μ•Ό ν•  λ•Œκ°€ μ˜΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Task λͺ¨λΈμ— '마감일(due_date)' ν•„λ“œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜, 'μ‚¬μš©μž(User)' ν…Œμ΄λΈ”μ„ μƒˆλ‘œ λ§Œλ“€μ–΄μ•Ό ν•  μˆ˜λ„ 있죠.

이럴 λ•Œ μ–΄λ–»κ²Œ ν•΄μ•Ό ν• κΉŒμš”? 21κ°•μ—μ„œ 배운 Base.metadata.create_all()은 이미 μ‘΄μž¬ν•˜λŠ” ν…Œμ΄λΈ”μ€ μˆ˜μ •ν•΄μ£Όμ§€ λͺ»ν•˜κ³ , 직접 λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘μ†ν•΄μ„œ ALTER TABLE 같은 SQL λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰ν•˜λŠ” 것은 μ‹€μˆ˜ν•˜κΈ° 쉽고 λ³€κ²½ 이λ ₯을 κ΄€λ¦¬ν•˜κΈ°λ„ μ–΄λ ΅μŠ΅λ‹ˆλ‹€. πŸ˜₯

이번 μ‹œκ°„μ—λŠ” μ΄λ ‡κ²Œ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆκ°€ 변경될 λ•Œ, 이λ₯Ό μ•ˆμ „ν•˜κ³  μ²΄κ³„μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” 방법인 **λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜(Database Migration)**의 κ°œλ…μ„ μ†Œκ°œν•˜κ³ , SQLAlchemy와 ν™˜μƒμ˜ ꢁ합을 μžλž‘ν•˜λŠ” λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 도ꡬ인 Alembic을 우리 ν”„λ‘œμ νŠΈμ— λ„μž…ν•˜λŠ” μ²«κ±ΈμŒμ„ λ‚΄λ”›κ² μŠ΅λ‹ˆλ‹€! λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆμ˜ 버전 관리, μ‹œμž‘ν•΄λ³ΌκΉŒμš”? πŸ“œπŸ”„


πŸ“š 챕터 μ†Œκ°œ

이번 24κ°•μ—μ„œλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ 변경을 κ΄€λ¦¬ν•˜λŠ” 것이 μ™œ μ€‘μš”ν•˜λ©°, 이것이 μ™œ μ–΄λ €μš΄ λ¬Έμ œμΈμ§€ μ•Œμ•„λ΄…λ‹ˆλ‹€. λ‹¨μˆœνžˆ SQLAlchemy λͺ¨λΈ μ½”λ“œλ§Œ μˆ˜μ •ν•œλ‹€κ³  ν•΄μ„œ μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” ꡬ쑰가 μžλ™μœΌλ‘œ λ°”λ€Œμ§€ μ•ŠμœΌλ©°, Base.metadata.create_all()의 ν•œκ³„μ™€ μˆ˜λ™ μŠ€ν‚€λ§ˆ λ³€κ²½μ˜ μœ„ν—˜μ„±μ„ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ˜ κ°œλ…μ„ μ†Œκ°œν•©λ‹ˆλ‹€. λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μ€ λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ λ³€κ²½ 사항을 λ²„μ „λ³„λ‘œ κ΄€λ¦¬λ˜λŠ” 슀크립트둜 λ§Œλ“€κ³ , 이λ₯Ό 순차적으둜 μ μš©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ›ν•˜λŠ” μƒνƒœλ‘œ μ•ˆμ „ν•˜κ²Œ μ—…λ°μ΄νŠΈν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€. 마치 μ½”λ“œ λ³€κ²½ 사항을 κ΄€λ¦¬ν•˜λŠ” Gitκ³Ό μœ μ‚¬ν•˜κ²Œ, λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆμ˜ λ³€κ²½ 이λ ₯을 κ΄€λ¦¬ν•˜λŠ” 것이라고 생각할 수 μžˆμŠ΅λ‹ˆλ‹€.

그리고 Python SQLAlchemy μƒνƒœκ³„μ—μ„œ ν‘œμ€€μ²˜λŸΌ μ‚¬μš©λ˜λŠ” κ°•λ ₯ν•œ λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 도ꡬ인 Alembic을 μ†Œκ°œν•©λ‹ˆλ‹€. Alembic이 SQLAlchemy λͺ¨λΈκ³Ό μ–΄λ–»κ²Œ μ—°λ™λ˜μ–΄ μŠ€ν‚€λ§ˆ 변경을 κ°μ§€ν•˜κ³  λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 슀크립트λ₯Ό μƒμ„±ν•˜λŠ” 데 도움을 μ£ΌλŠ”μ§€ μ•Œμ•„λ΄…λ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, 우리 ν”„λ‘œμ νŠΈμ— Alembic을 μ„€μΉ˜ν•˜κ³  alembic init λͺ…령을 μ‚¬μš©ν•˜μ—¬ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν™˜κ²½μ„ 초기 μ„€μ •ν•˜λŠ” 방법을 μ‹€μŠ΅ν•˜λ©°, μƒμ„±λ˜λŠ” μ£Όμš” 파일(alembic.ini, env.py)κ³Ό 디렉토리(versions/)의 역할에 λŒ€ν•΄ κ°„λž΅νžˆ μ‚΄νŽ΄λ΄…λ‹ˆλ‹€.


🎯 챕터 λͺ©ν‘œ

이 κ°•μ˜λ₯Ό 마치면 μ—¬λŸ¬λΆ„μ€ λ‹€μŒμ„ ν•  수 있게 λ©λ‹ˆλ‹€:

  1. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 개발 쀑 λ°œμƒν•˜λŠ” λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆ λ³€κ²½ κ΄€λ¦¬μ˜ ν•„μš”μ„±κ³Ό 어렀움을 μ΄ν•΄ν•©λ‹ˆλ‹€.
  2. λ°μ΄ν„°λ² μ΄μŠ€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜κ³Ό 버전 κ΄€λ¦¬μ˜ κΈ°λ³Έ κ°œλ…μ„ μ„€λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. SQLAlchemyλ₯Ό μœ„ν•œ λŒ€ν‘œμ μΈ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 도ꡬ인 Alembic의 μ—­ν• κ³Ό ν•„μš”μ„±μ„ μ΄ν•΄ν•©λ‹ˆλ‹€.
  4. pipλ₯Ό μ‚¬μš©ν•˜μ—¬ Alembic을 μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. alembic init λͺ…령을 μ‚¬μš©ν•˜μ—¬ ν”„λ‘œμ νŠΈμ— Alembic λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ ν™˜κ²½μ„ μ΄ˆκΈ°ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  6. Alembic μ΄ˆκΈ°ν™” μ‹œ μƒμ„±λ˜λŠ” μ£Όμš” μ„€μ • 파일(alembic.ini, env.py)κ³Ό 버전 슀크립트 디렉토리(versions/)의 기본적인 역할을 μ΄ν•΄ν•©λ‹ˆλ‹€.