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

https://github.com/lee-lou2/go-openapi

[Golang] Open API
https://github.com/lee-lou2/go-openapi

Last synced: 2 months ago
JSON representation

[Golang] Open API

Awesome Lists containing this project

README

        

# Golang Open API πŸš€

## ν”„λ‘œμ νŠΈ μ†Œκ°œ
Golang 자체 net/http λ₯Ό μ΄μš©ν•˜μ—¬ Open API λ₯Ό κ°œλ°œν•˜λŠ” 개인 ν”„λ‘œμ νŠΈ

## 도전 및 자체 과제
- ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šκ³  net/http λ₯Ό μ΄μš©ν•΄ REST API κ΅¬ν˜„
- 미듀웨어 및 인증, κΆŒν•œ 등을 자체 κ΅¬ν˜„
- 각 κΈ°λŠ₯별 ν…ŒμŠ€νŠΈ μ§„ν–‰(ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€ μž‘μ„± ν•„μš”)

## μ„œλΉ„μŠ€ 및 ꡬ성
- **μ‚¬μš©μž**: μ‚¬μš©μž 생성 및 κ΄€λ ¨ κΈ°λŠ₯
- **인증**: OAuth2.0 기반으둜 개발자 등둝(Bearer JWT), API(Client Credentials) κ΅¬ν˜„
- **κΆŒν•œ 및 μ œν•œ**: scopes, user level 을 ν†΅ν•œ κΆŒν•œ λΆ€μ—¬ 및 λΆ„λ‹Ή Call Count 관리(λ“±κΈ‰μ œ 운영)
- **μ‚¬μš©μž νŽ˜μ΄μ§€**: νšŒμ› κ°€μž…, 둜그인, νŒ¨μŠ€μ›Œλ“œ μž¬μ„€μ • 및 ν΄λΌμ΄μ–ΈνŠΈ 관리
- **λ³΄μ•ˆ**: 개인 정보(email) μ•”ν˜Έν™”, λ³΄μ•ˆ μœ„ν˜‘ μš”μ†Œ 차단
- **미듀웨어**: static, cors, recover, request_id λ“±
- **기타**: AWS νŒŒλΌλ―Έν„° μŠ€ν† μ–΄λ₯Ό μ΄μš©ν•œ ν™˜κ²½ λ³€μˆ˜ 관리

## 기술 μŠ€νƒ
- **μ–Έμ–΄**: Golang
- **인증**: Bearer(JWT), OAuth2.0(Client Credentials)
- **λ°μ΄ν„°λ² μ΄μŠ€**: Sqlite3(Local), Postgresql(DEV, QA, Prod)

## ν…ŒμŠ€νŠΈ
- httptest λ₯Ό μ΄μš©ν•œ ν•Έλ“€λŸ¬ 검증(test νŒ¨ν‚€μ§€)
- 각 κΈ°λŠ₯별 μœ λ‹›ν…ŒμŠ€νŠΈ

## 폴더 ꡬ쑰
```
/go-openapi
β”œβ”€β”€ api
β”‚ β”œβ”€β”€ handler
β”‚ β”‚ β”œβ”€β”€ auth
β”‚ β”‚ β”‚ β”œβ”€β”€ client.go
β”‚ β”‚ β”‚ β”œβ”€β”€ login.go
β”‚ β”‚ β”‚ └── token.go
β”‚ β”‚ β”œβ”€β”€ client
β”‚ β”‚ β”‚ └── me.go
β”‚ β”‚ └── user
β”‚ β”‚ β”œβ”€β”€ password.go
β”‚ β”‚ β”œβ”€β”€ user.go
β”‚ β”‚ └── verify.go
β”‚ β”œβ”€β”€ middleware
β”‚ β”‚ β”œβ”€β”€ auth.go
β”‚ β”‚ β”œβ”€β”€ chain.go
β”‚ β”‚ β”œβ”€β”€ cors.go
β”‚ β”‚ β”œβ”€β”€ limit.go
β”‚ β”‚ β”œβ”€β”€ logger.go
β”‚ β”‚ β”œβ”€β”€ permission.go
β”‚ β”‚ β”œβ”€β”€ recover.go
β”‚ β”‚ └── request_id.go
β”‚ β”œβ”€β”€ parser
β”‚ β”‚ └── json.go
β”‚ β”œβ”€β”€ render
β”‚ β”‚ └── json.go
β”‚ β”œβ”€β”€ router
β”‚ β”‚ β”œβ”€β”€ base.go
β”‚ β”‚ β”œβ”€β”€ template.go
β”‚ β”‚ └── v1.go
β”‚ └── validation
β”‚ β”œβ”€β”€ oauth2.go
β”‚ β”œβ”€β”€ user.go
β”‚ └── verify.go
β”œβ”€β”€ cmd
β”‚ └── api
β”‚ └── server.go
β”œβ”€β”€ configs
β”‚ β”œβ”€β”€ cache.go
β”‚ β”œβ”€β”€ db.go
β”‚ β”œβ”€β”€ env.go
β”‚ └── test.go
β”œβ”€β”€ internal
β”‚ β”œβ”€β”€ auth
β”‚ β”‚ β”œβ”€β”€ client.go
β”‚ β”‚ β”œβ”€β”€ login.go
β”‚ β”‚ └── token.go
β”‚ └── user
β”‚ β”œβ”€β”€ password.go
β”‚ β”œβ”€β”€ user.go
β”‚ └── verify.go
β”œβ”€β”€ model
β”‚ β”œβ”€β”€ client
β”‚ β”‚ β”œβ”€β”€ client.go
β”‚ β”‚ β”œβ”€β”€ const.go
β”‚ β”‚ └── enum.go
β”‚ └── user
β”‚ └── user.go
β”œβ”€β”€ pkg
β”‚ β”œβ”€β”€ auth
β”‚ β”‚ β”œβ”€β”€ client.go
β”‚ β”‚ β”œβ”€β”€ token_test.go
β”‚ β”‚ └── token.go
β”‚ β”œβ”€β”€ notify
β”‚ β”‚ └── email.go
β”‚ β”œβ”€β”€ user
β”‚ β”‚ └── verify.go
β”‚ └── utils
β”‚ β”œβ”€β”€ base64_test.go
β”‚ β”œβ”€β”€ base64.go
β”‚ β”œβ”€β”€ encrypt_test.go
β”‚ β”œβ”€β”€ encrypt.go
β”‚ β”œβ”€β”€ hash_test.go
β”‚ β”œβ”€β”€ hash.go
β”‚ β”œβ”€β”€ password_test.go
β”‚ β”œβ”€β”€ password.go
β”‚ β”œβ”€β”€ string_test.go
β”‚ └── string.go
β”œβ”€β”€ test
β”‚ β”œβ”€β”€ .env
β”‚ β”œβ”€β”€ handler_auth_test.go
β”‚ β”œβ”€β”€ handler_user_test.go
β”‚ └── server_test.go
β”œβ”€β”€ views
β”‚ β”œβ”€β”€ accounts
β”‚ β”‚ β”œβ”€β”€ login
β”‚ β”‚ β”‚ └── index.html
β”‚ β”‚ β”œβ”€β”€ password
β”‚ β”‚ β”‚ └── index.html
β”‚ β”‚ └── signup
β”‚ β”‚ └── index.html
β”‚ β”œβ”€β”€ user
β”‚ β”‚ β”œβ”€β”€ password
β”‚ β”‚ β”‚ └── index.html
β”‚ β”‚ └── verify
β”‚ β”‚ └── index.html
β”‚ β”œβ”€β”€ error
β”‚ β”‚ └── index.html
β”‚ └── index.html
β”œβ”€β”€ .env
β”œβ”€β”€ .gitignore
β”œβ”€β”€ go.mod
β”œβ”€β”€ go.sum
β”œβ”€β”€ deploy.sh
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ main.go
└── README.md
```

## μ‹€ν–‰ 방법
### 사전 μ€€λΉ„
- Go μ„€μΉ˜ (>= 1.22)
- Docker μ„€μΉ˜
- ν™˜κ²½ λ³€μˆ˜ μ„€μ • (AWS νŒŒλΌλ―Έν„° μŠ€ν† μ–΄ μ‚¬μš©)

### μ‹€ν–‰ 단계
1. μ €μž₯μ†Œ 클둠
```sh
git clone https://github.com/lee-lou2/go-openapi
cd go-openapi
```

2. 쒅속성 μ„€μΉ˜
```sh
go mod tidy
```

3. 개발 μ„œλ²„ μ‹€ν–‰
```sh
go run .
```

### ν™˜κ²½ λ³€μˆ˜
- 둜컬 μ‹€ν–‰ μ‹œ `.env` 파일 ν•„μš”
```sh
SERVER_ENV=
# νŒŒλΌλ―Έν„° μŠ€ν† μ–΄ μ‚¬μš©μ‹œ
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_REGION=ap-northeast-2
# νŒŒλΌλ―Έν„° μŠ€ν† μ–΄ μ‚¬μš©ν•˜μ§€ μ•Šμ„μ‹œ
SERVER_HOST=
SERVER_PORT=
EMAIL_SMTP_HOST=
EMAIL_SMTP_PORT=
EMAIL_USERNAME=
EMAIL_PASSWORD=
JWT_SECRET=
COOKIE_ENCRYPT_KEY=
SHA256_SALT=
DB_HOST=
DB_PORT=
DB_USER=
DB_PASSWORD=
DB_NAME=
AES256_KEY=
```