https://github.com/hongjungwan/http-handler-modules
H๐๐๐ H๐๐๐๐๐๐ M๐๐๐๐๐๐ ๐
https://github.com/hongjungwan/http-handler-modules
docker github-action go golang http jwt redis testing
Last synced: about 2 months ago
JSON representation
H๐๐๐ H๐๐๐๐๐๐ M๐๐๐๐๐๐ ๐
- Host: GitHub
- URL: https://github.com/hongjungwan/http-handler-modules
- Owner: HongJungWan
- License: mit
- Created: 2024-07-13T07:31:16.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-08-02T09:46:21.000Z (10 months ago)
- Last Synced: 2025-02-01T18:43:56.548Z (4 months ago)
- Topics: docker, github-action, go, golang, http, jwt, redis, testing
- Language: Go
- Homepage:
- Size: 59.6 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# http-handler-modules
## ํ๋ก์ ํธ ๋ชฉํ
* context ํจํค์ง๋ database/sql ํจํค์ง ๋ฑ์ ํ์ ํจํค์ง ์ฌ์ฉ๋ฒ
* testing ํจํค์ง ์ธ์ ํ์ค ํจํค์ง๋ฅผ ์ฌ์ฉํ ํ ์คํธ ๊ธฐ๋ฒ
* ์ ๊ณ ํ์ค์ด ๋ ์ธ๋ถ ์คํ์์ค
* ๋๊ตฌ๋ ํ ๋ฒ์ฏค์ ์ฝ๋ ๋ฆฌ๋ทฐ์์ ์ง์ ๋นํ ์ ์ด ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌํํ ๋ ๋ฐ์ํ ์ ์๋ ์ค์/์คํจ
์์ ๊ฐ์ ๋ด์ฉ์ ํ์ตํ๋ค.
## ์ค์ต ๋ด์ฉ
| Title | Details |
| --- |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTTP ์๋ฒ ๋ง๋ค๊ธฐ | ๋ฆฌํฉํฐ๋ง ํ ์คํธ ์ฝ๋
- ์ฝ์ง ์์ ํ ์คํธ
- run ํจ์๋ฅผ ์ฒ๋ฆฌ ๋ถ๋ฆฌํ๊ธฐ
- ํ ์คํธ๊ฐ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ
ํฌํธ ๋ฒํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ง๋ค๊ธฐ
- ๋์ ์ผ๋ก ํฌํธ ๋ฒํธ ์ค์ ํ๊ธฐ
|
| | |
| HTTP ์๋ฒ๋ฅผ ์ฝํ ๊ฒฐํฉ ๊ตฌ์กฐ๋ก ๋ณ๊ฒฝํ๊ธฐ | ํ๊ฒฝ ๋ณ์๋ก๋ถํฐ ์ค์ ๋ถ๋ฌ์ค๊ธฐ
- Config ํจํค์ง ๊ตฌํํ๊ธฐ
- ํ๊ฒฝ ๋ณ์๋ฅผ ์ฌ์ฉํด์ ์คํํ๊ธฐ
์๊ทธ๋ ์ฒ๋ฆฌํ๊ธฐ
- signal.NotifyContext๋ฅผ ์ฌ์ฉํด ์๊ทธ๋ ๊ธฐ๋ค๋ฆฌ๊ธฐ
Server ๊ตฌ์กฐ์ฒด ์ ์ํ๊ธฐ
๋ผ์ฐํ ์ ์๋ฅผ ๋ถํ ํ NewMux ์ ์ํ๊ธฐ
- httptest ํจํค์ง๋ฅผ ์ฌ์ฉํ ํ ์คํธ
run ํจ์๋ฅผ ๋ค์ ๋ฆฌํฉํฐ๋งํ๊ธฐ
|
| | |
| ์๋ํฌ์ธํธ ์ถ๊ฐํ๊ธฐ | entity.Task ํ์ ์ ์์ ์๊ตฌ ์ ์ฅ ๋ฐฉ๋ฒ์ ์์ ๊ตฌํ
- entity.Task์ ์๊ตฌ ์ ์ฅ ๋ฐฉ๋ฒ ์์ ๊ตฌํ
ํฌํผ ํจ์๋ฅผ ๊ตฌํํ๊ธฐ
- ํ ์คํธ์ฉ ํฌํผ ํจ์ ๊ตฌํํ๊ธฐ
ํ์คํฌ๋ฅผ ๋ฑ๋กํ๋ ์๋ํฌ์ธํธ ๊ตฌํ
- ์์ฒญ ๋ฐ๋ ๊ฒ์ฆ
ํ ์ด๋ธ ์ฃผ๋ ํ ์คํธ์ ๊ณจ๋ ํ ์คํธ๋ฅผ ์กฐํฉํ ํ ์คํธ ์ฝ๋
ํ์คํฌ ๋ชฉ๋ก์ ๋ฐํํ๋ ์๋ํฌ์ธํธ ๊ตฌํ
HTTP ํธ๋ค๋ฌ๋ฅผ ๋ผ์ฐํ ์ผ๋ก ์ค์ ํ๊ธฐ
- github.com/go-chi/chi๋ฅผ ์ฌ์ฉํ ์ ์ฐํ ๋ผ์ฐํ ์ค์ |
| | |
| RDBMS๋ฅผ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฒ๋ฆฌ ๊ตฌํํ๊ธฐ | ํ ์ด๋ธ ์ ์์ ๋ง์ด๊ทธ๋ ์ด์ ๋ฐฉ๋ฒ ๊ฒ์ฆ
- ๋ง์ด๊ทธ๋ ์ด์ ๋๊ตฌ
- ๊นํ๋ธ ์ก์ ์์ MySQL ์ปจํ ์ด๋ ์คํํ๊ธฐ
RDBMS ์ฒ๋ฆฌ ๊ตฌํ
- database/sql๊ณผ github.com/jmoiron/sqlx ํจํค์ง ์ฌ์ฉ
- ํ๊ฒฝ ๋ณ์์์ ์ ๋ณด ์ฝ๊ธฐ
- ์ธํฐํ์ด์ค์ Repository ํ์ ์ ์
- RDBMS ๊ด๋ จ ์ ๊ทผ์ ์ํ ํ ์คํธ ํ ํ๋ฆฟ ํจ์
RDBMS ๊ด๋ จ ์ ๊ทผ์ ์ํ ํ ์คํธ ์ฝ๋
- ์คํ ํ๊ฒฝ์ ๋ฐ๋ผ ์ ์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ ํ ์คํธ ํ ํ๋ฆฟ ํจ์
- ์ค์ RDBMS๋ฅผ ์ฌ์ฉํ ํ ์คํธํ๊ธฐ
- ๋ชฉ์ ์ฌ์ฉํ ํ ์คํธํ๊ธฐ
|
| | |
| ๊ธฐ๋ฅ๋ณ๋ก HTTP ํธ๋ค๋ฌ ๊ตฌํ ๋ถํ ํ๊ธฐ | HTTP ํธ๋ค๋ฌ ๊ธฐ๋ฅ ๋ถํ
go generate ๋ช ๋ น์ ์ฌ์ฉํ ๋ชฉ ์๋ ์์ฑ
- github.com/matryer/moq ํจํค์ง
๋ชฉ ์ฝ๋ ์๋ ์์ฑ
- handler.AddTaskService๋ฅผ ์ฌ์ฉํ handler.AddTask ๋ฆฌํฉํฐ๋ง
์ฌ์ฉ์ ๋ฑ๋ก ๊ธฐ๋ฅ ์์ฑ
- entity ํจํค์ง ๊ตฌํ
- handler ํจํค์ง ๊ตฌํ
- service ํจํค์ง ๊ตฌํ
- store ํจํค์ง ๊ตฌํ
- NewMux ํจ์์ ๋ก๊ทธ์ธ ์๋ํฌ์ธํธ ์ ์ํ๊ธฐ
|
| | |
| ๋ ๋์ค์ JWT๋ฅผ ์ฌ์ฉํ ์ธ์ฆ ๋ฐ ๊ถํ | ๋ ๋์ค ์ค๋น
- ๋ ๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์ค๋น
- KVS ํ์ ์ ์ํ ํ ์คํธ ์์ฑ
JWT์ ์๋ช ์ค๋น
- openssl ๋ช ๋ น ์ค๋น
- ๋น๋ฐํค์ ๊ณต๊ฐํค ์์ฑ
JWT๋ฅผ ์ฌ์ฉํ ์ก์ธ์ค ํ ํฐ ์์ฑ
- JWTer ๊ตฌ์กฐ์ฒด ์ ์ธ
- go:embed๋ฅผ ์ฌ์ฉํ ํ์ผ ์ฒจ๋ถํ๊ธฐ
- JWT๋ฅผ ๋ฐํํ๋ GenerationToken ๋ฉ์๋ ๊ตฌํ
- HTTP ์์ฒญ์์ JWT ๋ฐ๊ธฐ
- JWT ์ ๋ณด๋ฅผ context.Context ํ์ ๊ฐ์ ๋ฃ๊ธฐ
์ฌ์ฉ์ ๋ก๊ทธ์ธ ์๋ํฌ์ธํธ ๊ตฌํ
- handler ํจํค์ง ๊ตฌํ
- service ํจํค์ง ๊ตฌํ
- store ํจํค์ง ๊ตฌํ
- NewMux ํจ์์ ๋ก๊ทธ์ธ ์๋ํฌ์ธํธ ์ ์ํ๊ธฐ
๋ฏธ๋ค์จ์ด ํจํด์ ์ฌ์ฉํ ์ธ์ฆ ๊ธฐ๋ฅ
- http.Request์ context.Context ํ์ ๊ฐ์ ์ฌ์ฉ์ ID์ ๊ด๋ จ๋ ์ ๋ณด ๋ฃ๊ธฐ
- ์์ฒญ ์ ์ก ์ฌ์ฉ์ admin ๊ถํ์ธ์ง ๊ฒ์ฆํ๊ธฐ
์์ฒญ์ ํฌํจ๋ ์ธ์ฆ๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์๋ํฌ์ธํธ ๋ณดํธ
- ํ ์ด๋ธ ์ ์ ๋ง์ด๊ทธ๋ ์ด์ ์์ฑ
- entity.Task ๊ตฌ์กฐ์ฒด ์ ์ธ
- ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ํ์คํฌ ์ถ๊ฐํ๊ธฐ
- POST /tasks๋ก ์์ ์ด ๋ฑ๋กํ ํ์คํฌ๋ง ์ถ๊ฐ
- GET /tasks๋ก ์์ ์ด ๋ฑ๋กํ ํ์คํฌ๋ง ๋ณด์ด๋๋ก ๋ณ๊ฒฝํ๊ธฐ
- admin ๊ถํ ์ฌ์ฉ์๋ง ์ ๊ทผํ ์ ์๋ ์๋ํฌ์ธํธ ๋ง๋ค๊ธฐ |
## Test Code Run
```go
go test ./...or
go test -v ./...
```