π νλ‘μ νΈ κΈ°μ μ€λͺ
μ π
μ΄ νλ‘μ νΈλ νμΌ νΈμ€ν
λ₯Ό μν RESTful API μλ²μ
λλ€. Go μΈμ΄λ‘ μμ±λμμΌλ©°, Dockerλ₯Ό μ΄μ©ν΄ λ°°ν¬ν μ μλλ‘ κ΅¬μ±λμμ΅λλ€. π μλ²λ μ¬μ©μκ° μΈμ¦λ μνμμ νμΌμ μ
λ‘λνκ³ κ΄λ¦¬ν μ μλλ‘ κΈ°λ₯μ μ 곡ν©λλ€.
κ΄λ ¨ λ§ν¬ π
μλλ νλ‘μ νΈμ κ΄λ ¨λ λ€μν λ§ν¬ μ 보μ
λλ€.
π§βπ» μ£Όμ κΈ°λ₯ π§βπ»
- νμΌ μ
λ‘λ: μΈμ¦λ μ¬μ©μλ§ νμΌμ μ
λ‘λν μ μμ΅λλ€. νμΌμ μ¬μ©μλ³λ‘ ꡬλΆλ ν΄λμ μ μ₯λ©λλ€. π
- νμΌ μμ : μΈμ¦λ μ¬μ©μλ μμ μ΄ μ
λ‘λν νμΌμ μμ ν μ μμ΅λλ€. (νμΌλͺ
λ° λ΄μ© μμ κ°λ₯) βοΈ
- νμΌ λ€μ΄λ‘λ: λͺ¨λ μ¬μ©μλ μΈμ¦ μμ΄ λͺ¨λ νμΌμ λ€μ΄λ‘λν μ μμ΅λλ€. β¬οΈ
- νμΌ μμ : μΈμ¦λ μ¬μ©μλ μμ μ΄ μ
λ‘λν νμΌμ μμ ν μ μμ΅λλ€. ποΈ
- μ¬μ©μ κ΄λ¦¬: κ΄λ¦¬μλ μλ‘μ΄ μ¬μ©μλ₯Ό λ±λ‘ν μ μμΌλ©°, κ° μ¬μ©μμκ² μλμΌλ‘ κ³ μ ν λΉλ°λ²νΈλ₯Ό μμ±νμ¬ ν΄μκ°μ μ μ₯ν©λλ€. π
π οΈ κΈ°μ μ€ν π οΈ
- Go: μλ² μ¬μ΄λ λ‘μ§ κ΅¬ν
- Docker: μ ν리μΌμ΄μ
컨ν
μ΄λν (κ°λ° λ° νλ‘λμ
νκ²½ μ§μ)
- Gorilla Mux: HTTP λΌμ°ν
- bcrypt: μμ ν λΉλ°λ²νΈ ν΄μ±
- JSON: λ°μ΄ν° μ μ₯ λ° μλ΅ νμμΌλ‘ μ¬μ©
π νλ‘μ νΈ κ΅¬μ‘° π
π» API μλν¬μΈνΈ π»
- POST
/files
: νμΌ μ
λ‘λ
- PUT
/files/{filename}
: νμΌ μμ
- GET
/files/{username}/{filename}
: νμΌ λ€μ΄λ‘λ
- DELETE
/files/{filename}
: νμΌ μμ
- POST
/users
: μ¬μ©μ λ±λ‘
π νλ‘μ νΈ μ€ν λ°©λ² π
GitHubμμ μ΄ νλ‘μ νΈλ₯Ό Cloneν ν, λ‘컬μμ μ€ννλ λ°©λ²μ λ€μκ³Ό κ°μ΅λλ€. π½
1οΈβ£ GitHubμμ νλ‘μ νΈ Clone
2οΈβ£ κ΄λ¦¬μ λΉλ°λ²νΈ μ€μ
.env
νμΌμ μ¬μ©νμ¬ κ΄λ¦¬μ λΉλ°λ²νΈλ₯Ό μ€μ ν μ μμ΅λλ€.
3οΈβ£ Docker νκ²½ μ€μ
Dockerλ₯Ό μ΄μ©νμ¬ μ ν리μΌμ΄μ
μ μ€νν μ μμ΅λλ€. docker-compose.yml
νμΌμ μ¬μ©νμ¬ κ°λ° νκ²½κ³Ό νλ‘λμ
νκ²½μ μ€μ ν μ μμ΅λλ€.
- κ°λ° νκ²½ μ€ν:
docker-compose up dev
- νλ‘λμ
νκ²½ μ€ν:
docker-compose up prod
4οΈβ£ μλ² μ€ν
μλ²λ κΈ°λ³Έμ μΌλ‘ 3000
ν¬νΈμμ μ€νλ©λλ€. μλ²κ° μ±κ³΅μ μΌλ‘ μ€νλλ©΄, λΈλΌμ°μ λ Postman λ±μ ν΅ν΄ APIλ₯Ό ν
μ€νΈν μ μμ΅λλ€.
π¦ Docker κ΅¬μ± μ€λͺ
π¦
Dockerfile.prod
: νλ‘λμ
νκ²½μ© Dockerfileλ‘, μ€μ λ°°ν¬μ© μ€μ μ΄ ν¬ν¨λμ΄ μμ΅λλ€.
Dockerfile.dev
: κ°λ° νκ²½μ© Dockerfileλ‘, μμ€ μ½λ λ³κ²½ μ μλ λ°μλλλ‘ μ€μ λμ΄ μμ΅λλ€.
docker-compose.yml
: κ°λ° λ° νλ‘λμ
νκ²½μ λμμ μ§μνλ μ€μ νμΌλ‘, νμν μλΉμ€λ₯Ό μλμΌλ‘ ꡬμ±ν΄μ€λλ€.
π¨ μ£Όμ μ¬ν π¨
.env
νμΌμ κ΄λ¦¬μμ λΉλ°λ²νΈκ° μ€μ λμ΄μΌ νλ©°, κ΄λ¦¬μ μΈμ¦μ ν΅ν΄ μ¬μ©μλ₯Ό λ±λ‘ν μ μμ΅λλ€.
- νμΌ μ
λ‘λ/μμ /μμ μ μ¬μ©μ μΈμ¦μ μν΄ X-Usernameκ³Ό X-Secret ν€λλ₯Ό μ¬μ©ν©λλ€.
μ΄ νλ‘μ νΈλ νμΌ μ
λ‘λμ κ΄λ¦¬, μ¬μ©μ μΈμ¦μ κ°νΈνκ³ μμ νκ² μ²λ¦¬ν μ μλλ‘ μ€κ³λμμ΅λλ€. μΆκ°μ μΈ κΈ°λ₯μ΄ νμνλ©΄ μΈμ λ μ§ μꡬ μ¬νμ λ°μν μ μμ΅λλ€. π