π 첫 λ°±μλ νλ‘μ νΈ λ§λ€κΈ°: Expense Tracker API
Source: Dev.to
Project Overview
Expense Tracker APIλ μ¬μ©μκ° λ€μμ ν μ μλ RESTful λ°±μλ μλΉμ€μ λλ€:
- λΉμ© μΉ΄ν κ³ λ¦¬ μμ± λ° κ΄λ¦¬
- λΉμ© μΆκ° λ° μΆμ
- μΉ΄ν κ³ λ¦¬λ³ λΉμ© μ 리
- API μλν¬μΈνΈλ₯Ό ν΅ν CRUD μμ μν
λͺ¨λ°μΌ μ±, μΉ λμ보λ λλ μ¬λ¬΄ κ΄λ¦¬ μμ€ν μ λ°±μλ μμ§μΌλ‘ νμ©λ μ μμ΅λλ€.
Tech Stack
- Node.js β λ°νμ νκ²½
- Express.js β API ꡬμΆμ μν μΉ νλ μμν¬
- PostgreSQL β κ΄κ³ν λ°μ΄ν°λ² μ΄μ€
- Sequelize ORM β λ°μ΄ν°λ² μ΄μ€ λͺ¨λΈλ§ λ° λ§μ΄κ·Έλ μ΄μ
- Docker β 컨ν μ΄λνλ κ°λ° νκ²½
- TablePlus β λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬
μ΄ λꡬλ€μ νλ λ°±μλ μμ€ν μ΄ μ΄λ»κ² ꡬ쑰νλκ³ λ°°ν¬λλμ§λ₯Ό 보μ¬μ£Όλ λ° λμμ΄ λ©λλ€.
Database Design
APIλ λ κ°μ μ£Όμ μν°ν°λ₯Ό μ€μ¬μΌλ‘ ꡬμΆλ©λλ€:
Categories
μΉ΄ν κ³ λ¦¬λ λΉμ©μ λ€μκ³Ό κ°μ κ·Έλ£ΉμΌλ‘ μ‘°μ§νλ λ° μ¬μ©λ©λλ€:
- Food
- Transportation
- Utilities
- Entertainment
κ° μΉ΄ν κ³ λ¦¬λ λ€μμ ν¬ν¨ν©λλ€:
idnamecreatedAtupdatedAt
Expenses
Expensesλ κ°λ³ μ¬λ¬΄ κΈ°λ‘μ λνλ λλ€. κ° expenseλ λ€μμ ν¬ν¨ν©λλ€:
idtitleamountcategoryId(foreign key)createdAtupdatedAt
categoryIdλ κ° expenseλ₯Ό μΉ΄ν
κ³ λ¦¬μ μ°κ²°νμ¬ μ μ ν λΆλ₯λ₯Ό 보μ₯ν©λλ€.
API Endpoints
νμ€ REST μλν¬μΈνΈκ° μ 곡λ©λλ€.
Categories
POST /categoriesGET /categoriesGET /categories/:idPUT /categories/:idDELETE /categories/:id
Expenses
POST /expensesGET /expensesGET /expenses/:idPUT /expenses/:idDELETE /expenses/:id
μ΄ μλν¬μΈνΈλ€μ ν΅ν΄ μ¬λ¬΄ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλ μ 체 CRUD κΈ°λ₯μ μ¬μ©ν μ μμ΅λλ€.
Key Things I Learned
μ΄ νλ‘μ νΈλ₯Ό μ§ννλ©΄μ μ¬λ¬ λ°±μλ κ°λ μ λν μ΄ν΄κ° κΉμ΄μ‘μ΅λλ€.
Database Migrations
Sequelize λ§μ΄κ·Έλ μ΄μ μ μ¬μ©νλ©΄ μ€ν€λ§ λ³κ²½μ λ²μ κ΄λ¦¬ν μ μμ΄ μλμΌλ‘ ν μ΄λΈμ μμ±ν νμκ° μμ΄μ‘μ΅λλ€.
Model Relationships
μΈλν€λ₯Ό ν΅ν΄ expenseλ₯Ό μΉ΄ν κ³ λ¦¬μ μ°κ²°ν¨μΌλ‘μ¨ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€κ° λ°μ΄ν° 무결μ±μ μ΄λ»κ² κ°μ νλμ§ λͺ νν μ μ μμμ΅λλ€.
API Architecture
νλ‘μ νΈλ₯Ό λ€μκ³Ό κ°μ΄ ꡬμ±νμ΅λλ€:
- Routes
- Controllers
- Models
- Migrations
μ΄λ¬ν λΆλ¦¬ ꡬ쑰λ μ½λλ² μ΄μ€λ₯Ό κΉλνκ³ μ μ§λ³΄μνκΈ° μ½κ² λ§λ€μ΄ μ€λλ€.
Error Handling
μ£Όλ‘ λ§μ£ΌμΉ λ¬Έμ λ λ€μκ³Ό κ°μ΅λλ€:
- λ§μ΄κ·Έλ μ΄μ μμ μ€λ₯
- λ°μ΄ν°λ² μ΄μ€ μ°κ²° λ¬Έμ
- μλͺ»λ λͺ¨λΈ μ°Έμ‘°
μ΄λ¬ν λλ²κΉ κ³Όμ μ ν΅ν΄ λ°±μλ λμμ λν μ΄ν΄κ° ν₯μλμμ΅λλ€.
Using Docker for Development
Dockerλ κ°λ° νκ²½μ νμ€ννμ¬ λ°νμ, μμ‘΄μ± λ° μ€μ μ ν¨κ» ν¨ν€μ§ν¨μΌλ‘μ¨ μ ν리μΌμ΄μ μ΄ λ€μν μμ€ν μμ μΌκ΄λκ² μ€νλλλ‘ ν©λλ€.
Future Improvements
μμ λ κ°μ μ¬ν:
- User authentication (JWT) β μ΄λ―Έ ꡬνλ¨
- λ μ§λ³ expense νν°λ§
- λμ©λ λ°μ΄ν°μ μ μν νμ΄μ§λ€μ΄μ
- expense λΆμ μλν¬μΈνΈ
- Swaggerλ₯Ό μ΄μ©ν API λ¬Έμν