<aside>

</aside>

μ•ˆλ…•ν•˜μ„Έμš”! λ°μ΄ν„°λ² μ΄μŠ€ 연동 5λΆ€μ˜ 두 번째 μ‹œκ°„, 21κ°•μž…λ‹ˆλ‹€! πŸš€

μ§€λ‚œ 20κ°•μ—μ„œλŠ” μ™œ λ°μ΄ν„°λ² μ΄μŠ€κ°€ ν•„μš”ν•˜κ³ , ORM(특히 SQLAlchemy)이 μ–΄λ–€ 역할을 ν•˜λŠ”μ§€μ— λŒ€ν•œ 큰 그림을 κ·Έλ ΈμŠ΅λ‹ˆλ‹€. 이제 이둠은 μΆ©λΆ„νžˆ μ•Œμ•˜μœΌλ‹ˆ, 직접 μ½”λ“œλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ˜ '섀계도'λ₯Ό κ·Έλ €λ³Ό μ‹œκ°„μž…λ‹ˆλ‹€!

이번 μ‹œκ°„μ—λŠ” SQLAlchemy ORM λͺ¨λΈμ„ μ •μ˜ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€. ORM λͺ¨λΈμ€ λ°μ΄ν„°λ² μ΄μŠ€ **ν…Œμ΄λΈ”(Table)**의 ꡬ쑰λ₯Ό 파이썬 클래슀(Class) ν˜•νƒœλ‘œ ν‘œν˜„ν•œ κ²ƒμž…λ‹ˆλ‹€. 이 클래슀λ₯Ό μ •μ˜ν•¨μœΌλ‘œμ¨ SQLAlchemyμ—κ²Œ μš°λ¦¬κ°€ μ–΄λ–€ ν…Œμ΄λΈ”μ„ λ§Œλ“€κ³  μ‹Άκ³ , κ·Έ ν…Œμ΄λΈ” μ•ˆμ— μ–΄λ–€ 컬럼(Column)듀을 μ–΄λ–€ νƒ€μž…κ³Ό μ œμ•½ 쑰건으둜 λ§Œλ“€κ³  싢은지 μ•Œλ €μ€„ 수 μžˆμŠ΅λ‹ˆλ‹€.

16κ°•μ—μ„œ Pydantic λͺ¨λΈλ‘œ API 데이터 ꡬ쑰λ₯Ό μ„€κ³„ν–ˆλ˜ κ²ƒμ²˜λŸΌ, μ΄λ²ˆμ—λŠ” SQLAlchemy λͺ¨λΈλ‘œ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” ꡬ쑰λ₯Ό μ„€κ³„ν•œλ‹€κ³  μƒκ°ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€. 자, 파이썬 μ½”λ“œλ‘œ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ„ λ§Œλ“€μ–΄ λ³ΌκΉŒμš”? 🧱🐍


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

이번 21κ°•μ—μ„œλŠ” SQLAlchemy ORM을 μ‚¬μš©ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ **ν…Œμ΄λΈ”μ— 맀핑될 파이썬 클래슀(λͺ¨λΈ)**λ₯Ό μ •μ˜ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€. ORM의 핡심은 객체와 관계(ν…Œμ΄λΈ”)λ₯Ό μ—°κ²°ν•˜λŠ” 것이며, 이 λͺ¨λΈ 클래슀 μ •μ˜κ°€ λ°”λ‘œ κ·Έ μ—°κ²°μ˜ μ‹œμž‘μž…λ‹ˆλ‹€.

λ¨Όμ €, λͺ¨λ“  ORM λͺ¨λΈμ˜ 기반이 될 **선언적 베이슀(Declarative Base)**λ₯Ό μ„€μ •ν•˜λŠ” 방법을 μ•Œμ•„λ΄…λ‹ˆλ‹€. 그리고 이 베이슀λ₯Ό 상속받아 우리의 Task λͺ¨λΈ 클래슀λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 클래슀 λ‚΄μ—μ„œ __tablename__ 속성을 μ‚¬μš©ν•˜μ—¬ μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ˜ 이름을 μ§€μ •ν•˜κ³ , 각 ν…Œμ΄λΈ” 컬럼(Column)에 ν•΄λ‹Ήν•˜λŠ” 클래슀 속성을 μ •μ˜ν•©λ‹ˆλ‹€.

μ»¬λŸΌμ„ μ •μ˜ν•  λ•ŒλŠ” SQLAlchemyκ°€ μ œκ³΅ν•˜λŠ” 컬럼 νƒ€μž…(Integer, String, Boolean λ“±)을 μ‚¬μš©ν•˜κ³ , μ œμ•½ 쑰건(primary_key, index, nullable, default λ“±)을 μ„€μ •ν•˜μ—¬ ν…Œμ΄λΈ” ꡬ쑰λ₯Ό μƒμ„Έν•˜κ²Œ λͺ…μ‹œν•˜λŠ” 방법을 μ‹€μŠ΅ν•©λ‹ˆλ‹€. 특히, μ΅œμ‹  SQLAlchemy 2.0 μŠ€νƒ€μΌμ˜ νƒ€μž… 힌트 μΉœν™”μ μΈ Mapped와 mapped_column을 μ‚¬μš©ν•˜μ—¬ λͺ¨λΈμ„ μ •μ˜ν•˜λŠ” 방법을 μ€‘μ μ μœΌλ‘œ λ‹€λ£Ήλ‹ˆλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ, API 데이터 ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” Pydantic λͺ¨λΈκ³Ό λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” ꡬ쑰λ₯Ό μ •μ˜ν•˜λŠ” SQLAlchemy λͺ¨λΈμ˜ μ—­ν•  차이λ₯Ό λͺ…ν™•νžˆ κ΅¬λΆ„ν•©λ‹ˆλ‹€.


🎯 챕터 λͺ©ν‘œ

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

  1. SQLAlchemy ORM λͺ¨λΈμ΄ 파이썬 클래슀λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” ꡬ쑰λ₯Ό μ •μ˜ν•œλ‹€λŠ” 것을 μ΄ν•΄ν•©λ‹ˆλ‹€.
  2. **선언적 베이슀(declarative_base)**λ₯Ό μ„€μ •ν•˜κ³  이λ₯Ό 상속받아 λͺ¨λΈ 클래슀λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. __tablename__ 속성을 μ‚¬μš©ν•˜μ—¬ λͺ¨λΈ ν΄λž˜μŠ€μ™€ λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ” 이름을 λ§€ν•‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. SQLAlchemy의 컬럼 νƒ€μž…(Integer, String, Boolean λ“±)을 μ‚¬μš©ν•˜μ—¬ ν…Œμ΄λΈ” 컬럼의 데이터 νƒ€μž…μ„ μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (μ΅œμ‹  Mapped/mapped_column μŠ€νƒ€μΌ ν™œμš©)
  5. primary_key, index, nullable, default λ“± 컬럼 μ œμ•½ 쑰건을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  6. Pydantic λͺ¨λΈ(API 데이터 μŠ€ν‚€λ§ˆ)κ³Ό SQLAlchemy λͺ¨λΈ(DB ν…Œμ΄λΈ” μŠ€ν‚€λ§ˆ)의 μ—­ν• κ³Ό 차이점을 λͺ…ν™•νžˆ ꡬ뢄할 수 μžˆμŠ΅λ‹ˆλ‹€.