An open API service indexing awesome lists of open source software.

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๐š˜๐š๐šž๐š•๐šŽ๐šœ ๐Ÿ“š

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 ./...
```