μƒˆμ†Œμ‹

Go

Go - 파일 ν˜ΈμŠ€νŒ… μ„œλ²„ ν”„λ‘œμ νŠΈ 기술 μ„€λͺ…μ„œ

  • -
였늘의 λͺ…μ–Έ

이 ν”„λ‘œμ νŠΈλŠ” 파일 ν˜ΈμŠ€νŒ…λ₯Ό μœ„ν•œ RESTful API μ„œλ²„μž…λ‹ˆλ‹€. Go μ–Έμ–΄λ‘œ μž‘μ„±λ˜μ—ˆμœΌλ©°, Dockerλ₯Ό μ΄μš©ν•΄ 배포할 수 μžˆλ„λ‘ κ΅¬μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. πŸš€ μ„œλ²„λŠ” μ‚¬μš©μžκ°€ 인증된 μƒνƒœμ—μ„œ νŒŒμΌμ„ μ—…λ‘œλ“œν•˜κ³  관리할 수 μžˆλ„λ‘ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.


μ•„λž˜λŠ” ν”„λ‘œμ νŠΈμ™€ κ΄€λ ¨λœ λ‹€μ–‘ν•œ 링크 μ •λ³΄μž…λ‹ˆλ‹€.


πŸ§‘β€πŸ’» μ£Όμš” κΈ°λŠ₯ πŸ§‘β€πŸ’»

  1. 파일 μ—…λ‘œλ“œ: 인증된 μ‚¬μš©μžλ§Œ νŒŒμΌμ„ μ—…λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€. νŒŒμΌμ€ μ‚¬μš©μžλ³„λ‘œ κ΅¬λΆ„λœ 폴더에 μ €μž₯λ©λ‹ˆλ‹€. πŸ“‚
  2. 파일 μˆ˜μ •: 인증된 μ‚¬μš©μžλŠ” μžμ‹ μ΄ μ—…λ‘œλ“œν•œ νŒŒμΌμ„ μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. (파일λͺ… 및 λ‚΄μš© μˆ˜μ • κ°€λŠ₯) ✏️
  3. 파일 λ‹€μš΄λ‘œλ“œ: λͺ¨λ“  μ‚¬μš©μžλŠ” 인증 없이 λͺ¨λ“  νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€. ⬇️
  4. 파일 μ‚­μ œ: 인증된 μ‚¬μš©μžλŠ” μžμ‹ μ΄ μ—…λ‘œλ“œν•œ νŒŒμΌμ„ μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€. πŸ—‘οΈ
  5. μ‚¬μš©μž 관리: κ΄€λ¦¬μžλŠ” μƒˆλ‘œμš΄ μ‚¬μš©μžλ₯Ό 등둝할 수 있으며, 각 μ‚¬μš©μžμ—κ²Œ μžλ™μœΌλ‘œ κ³ μœ ν•œ λΉ„λ°€λ²ˆν˜Έλ₯Ό μƒμ„±ν•˜μ—¬ ν•΄μ‹œκ°’μ„ μ €μž₯ν•©λ‹ˆλ‹€. πŸ”

  • Go: μ„œλ²„ μ‚¬μ΄λ“œ 둜직 κ΅¬ν˜„
  • Docker: μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ»¨ν…Œμ΄λ„ˆν™” (개발 및 ν”„λ‘œλ•μ…˜ ν™˜κ²½ 지원)
  • Gorilla Mux: HTTP λΌμš°νŒ…
  • bcrypt: μ•ˆμ „ν•œ λΉ„λ°€λ²ˆν˜Έ ν•΄μ‹±
  • JSON: 데이터 μ €μž₯ 및 응닡 ν˜•μ‹μœΌλ‘œ μ‚¬μš©

πŸ“ img-host-server β”‚ β”œβ”€β”€ /cmd/server/main.go : μ„œλ²„ μ΄ˆκΈ°ν™” 및 λΌμš°νŒ… μ„€μ • β”‚ β”œβ”€β”€ /internal β”‚ β”œβ”€β”€ handles β”‚ β”‚ β”œβ”€β”€ file_handler.go : 파일 μ—…λ‘œλ“œ, μˆ˜μ •, μ‚­μ œ, λ‹€μš΄λ‘œλ“œ 처리 β”‚ β”‚ └── user_handler.go : μ‚¬μš©μž 등둝 및 관리 처리 β”‚ β”œβ”€β”€ utils β”‚ β”‚ β”œβ”€β”€ auth.go : μ‚¬μš©μž 인증 κ΄€λ ¨ ν•¨μˆ˜ (λΉ„λ°€λ²ˆν˜Έ 검증, μ‚¬μš©μž 정보 λ‘œλ”©) β”‚ β”‚ β”œβ”€β”€ response.go : JSON ν˜•μ‹μ˜ 응닡을 μ²˜λ¦¬ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° β”‚ β”‚ β”œβ”€β”€ file.go : 파일 μ—…λ‘œλ“œ 및 μ €μž₯ κ΄€λ ¨ ν•¨μˆ˜ β”‚ β”‚ └── sanitize.go : 파일λͺ… μœ νš¨μ„± 검사 β”‚ └── db β”‚ └── users.json : μ‚¬μš©μž 정보 μ €μž₯ β”‚ β”œβ”€β”€ .air.toml : 개발 ν™˜κ²½ hotswap 라이브러리 μ„€μ • 파일(air 라이브러리) β”œβ”€β”€ .env : ν™˜κ²½λ³€μˆ˜ 관리(κ΄€λ¦¬μž λΉ„λ°€λ²ˆν˜Έ) β”œβ”€β”€ /docker-compose.yml : Docker μ„€μ • 파일 β”œβ”€β”€ /Dockerfile.prod : ν”„λ‘œλ•μ…˜ ν™˜κ²½μ„ μœ„ν•œ Dockerfile β”œβ”€β”€ /Dockerfile.dev : 개발 ν™˜κ²½μ„ μœ„ν•œ Dockerfile β”œβ”€β”€ /go.mod : Go λͺ¨λ“ˆ μ„€μ • 파일 └── /go.sum : Go μ˜μ‘΄μ„± 정보 파일

  • POST /files: 파일 μ—…λ‘œλ“œ
  • PUT /files/{filename}: 파일 μˆ˜μ •
  • GET /files/{username}/{filename}: 파일 λ‹€μš΄λ‘œλ“œ
  • DELETE /files/{filename}: 파일 μ‚­μ œ
  • POST /users: μ‚¬μš©μž 등둝

GitHubμ—μ„œ 이 ν”„λ‘œμ νŠΈλ₯Ό Cloneν•œ ν›„, λ‘œμ»¬μ—μ„œ μ‹€ν–‰ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. πŸ”½

git clone https://github.com/Aleph-Kim/img-host-server cd img-host-server

.env νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ κ΄€λ¦¬μž λΉ„λ°€λ²ˆν˜Έλ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Dockerλ₯Ό μ΄μš©ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. docker-compose.yml νŒŒμΌμ„ μ‚¬μš©ν•˜μ—¬ 개발 ν™˜κ²½κ³Ό ν”„λ‘œλ•μ…˜ ν™˜κ²½μ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 개발 ν™˜κ²½ μ‹€ν–‰:
  • docker-compose up dev
  • ν”„λ‘œλ•μ…˜ ν™˜κ²½ μ‹€ν–‰:
  • docker-compose up prod

μ„œλ²„λŠ” 기본적으둜 3000 ν¬νŠΈμ—μ„œ μ‹€ν–‰λ©λ‹ˆλ‹€. μ„œλ²„κ°€ μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰λ˜λ©΄, λΈŒλΌμš°μ €λ‚˜ Postman 등을 톡해 APIλ₯Ό ν…ŒμŠ€νŠΈν•  수 μžˆμŠ΅λ‹ˆλ‹€.


  • Dockerfile.prod: ν”„λ‘œλ•μ…˜ ν™˜κ²½μš© Dockerfile둜, μ‹€μ œ 배포용 섀정이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • Dockerfile.dev: 개발 ν™˜κ²½μš© Dockerfile둜, μ†ŒμŠ€ μ½”λ“œ λ³€κ²½ μ‹œ μžλ™ λ°˜μ˜λ˜λ„λ‘ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • docker-compose.yml: 개발 및 ν”„λ‘œλ•μ…˜ ν™˜κ²½μ„ λ™μ‹œμ— μ§€μ›ν•˜λŠ” μ„€μ • 파일둜, ν•„μš”ν•œ μ„œλΉ„μŠ€λ₯Ό μžλ™μœΌλ‘œ κ΅¬μ„±ν•΄μ€λ‹ˆλ‹€.

  • .env νŒŒμΌμ— κ΄€λ¦¬μžμ˜ λΉ„λ°€λ²ˆν˜Έκ°€ μ„€μ •λ˜μ–΄μ•Ό ν•˜λ©°, κ΄€λ¦¬μž 인증을 톡해 μ‚¬μš©μžλ₯Ό 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 파일 μ—…λ‘œλ“œ/μˆ˜μ •/μ‚­μ œ μ‹œ μ‚¬μš©μž 인증을 μœ„ν•΄ X-Usernameκ³Ό X-Secret 헀더λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

이 ν”„λ‘œμ νŠΈλŠ” 파일 μ—…λ‘œλ“œμ™€ 관리, μ‚¬μš©μž 인증을 κ°„νŽΈν•˜κ³  μ•ˆμ „ν•˜κ²Œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 좔가적인 κΈ°λŠ₯이 ν•„μš”ν•˜λ©΄ μ–Έμ œλ“ μ§€ μš”κ΅¬ 사항을 λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 😊

λ°˜μ‘ν˜•

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.