swagger 수정
·
devops/go
이제 swagger서 로그인을 한 후 이 토큰을 받아서 ChangePassword에 넣으면 된다. 그런데 기존에 우리가 구현한 화면에서는 토큰 값을 넣는 곳이 없으므로 swagger에 이 부분을 추가해줘야 한다.  일단 swagger부터 교환해야 하겠다. 기존에 사용하던것은 middleware에서 swagger를 이용하는 것인데 이렇게 하다보니까 cache때문에 즉각적으로 교환이 되지 않는 문제가 있었다. 그래서 router를 만들어서 추가하는 방법으로 변경하겠다. routes/swagger.gopackage routesimport ( "github.com/gofiber/fiber/v2" "github.com/gofiber/swagger")func SwaggerRouter(app fiber.R..
Change Password 및 JWT middle ware
·
devops/go
Route를 수정한다.package routesimport ( "camping-backend-with-go/pkg/user" "github.com/gofiber/fiber/v2")func UserRouter(app fiber.Router, service user.Service) { app.Patch("/user/:id/changepw", handlers.ChangePassword(service)) app.Post("/user/:id/changepw", handlers.ChangePassword(service))}  Handler를 수정한다.package handlersimport ( "camping-backend-with-go/api/presenter" "camping-backend-with-go/pkg..
DB 우회
·
devops/go
Teleport를 사용해서 DB를 연결하려 했더니 ECS를 사용하게 되면서 비용이 너무 많이 나오게 되었다. 그래서 Teleport를 사용하지 않고 리눅스 포트포워딩을 통해 이문제를 해결하려고한다. 일단 기본적으로 pem파일이 필요한데... 이파일을 잘 보관하자...그리고 나서 vi ~/.ssh/configHost ggocamping HostName ec2-13-125-77-126.ap-northeast-2.compute.amazonaws.com User ubuntu IdentityFile ~/.ssh/ggorockee-key.pem  # ssh -L :: ggocamping -N$ ssh -L 3036:ggocamping-db-v1.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx:..
swagger가 뭔가 좀 이상하다.
·
devops/go
swagger로 post 요청을 날리려고 봤는데 Register User의 Input Schema에 id가 들어가 있는 것이다.물론 여기에 id를 쓰지 않고 요청을 날려도 그대로 성공하지만 이 것은 매우 맘에 안드는 일이다. 하 정말로 버그가 끝이 없다... 그대로 어쩌겠는가 이거부터 손보고 다음 스텝으로 넘어가야겠다..일단 문제는 Swagger에서 사용하는 Input Schema와 Gorm에서 사용하는 스키마가 동일하여 나타나는 현상인거 같아Input Schema를 따로 만들어주기로 했다. type CreateUserSchema struct { Email string `json:"email"` Password string `json:"password"` Username string `json:"u..
go fiber에 swagger를 붙여보자.
·
devops/go
Swagger는 API 문서화 도구로, API의 구조와 사용 방법을 사용자에게 시각적으로 보여주어 API 테스트 및 통합을 쉽게하게 해준다. 이 번 포스팅에서는 간단하게 Go Fiber와 Swagger를 어떻게 통합하여 API 문서를 자동으로 생성하고 제공하는지 알아보자. 코드는 https://github.com/ggorockee/camping-backend-with-go.git   여기에 있다. GitHub - ggorockee/camping-backend-with-goContribute to ggorockee/camping-backend-with-go development by creating an account on GitHub.github.com 당연한 얘기겠지만 설치부터 시작해야 한다.$ go ..
Json Web Token
·
devops/go
이번엔 JWT, 그러니까 JSON Web Token에 대해 이야기해보려고한다. 이거 좀 중요한 거기도 하고 backend에서 많이 사용하는 방식이니까 알아두면 좋다. JWT가 뭐야?JWT는 로그인하면 서버가 주는 그런 신분증 같은 거라고 보면된다. 세가지분으로 나뉘어가지고     1. 헤더(Header) 이건 어떻게 JWT를 만들었는지 설명한다. 예를들어{ "alg": "HS256", "typ": "JWT"}     2. 페이로드(Payload) 여기에는 로그인하는사람의 정보가 들어간다. 예를 들면{ "sub": "너의 아이디", "name": "너의 이름", "iat": "토큰 발급 시간"}    3. 서명(signature) - 헤더하고 페이로드를 비밀번호 같은 걸로 암호화한거다. 이걸로 서..
Clean Architecture with go (Feat. fiber)
·
devops/go
개발 시간을 줄이고 특히 새로운 기술 프로젝트에 너혹 싶다면, 클린 아키텍처(Clean Architecture)를 생각해보자. 근데 Go에서는 생각보다 직관적이지가 않다. Go는 OOP 도구가 부족해서 좀 변행해서 구현해야 한다. 이번엔는 기본적인 것만 써서 간단히 백엔드 서비스만 만들도록 하겠다. 먼저 폴더 구조를 알아야 한다.    Go에는 클래스가 없고 대신 구조체와 receiver 함수가 있다. 이걸 클래스 매서드 처럼 사용하면된다. 또한 Go 구조체는 생성자가 없어서 ㅠㅠ 사용자 인스턴스를 만들 때 생성자 함수도 직접 만들어야 한다. 그리고 구조체 메서드를 정의 하면 되겠다.  pkg > entities> spot: 여기에는 도메인을 포함한 모델이 들어간다. 이는 비즈니스 규칙을 표현한다.pkg..
API(Get List)
·
devops/go
1. Route 생성api/routes/spot.gopackage routesimport ( "camping-backend-with-go/api/handlers" "camping-backend-with-go/pkg/spot" "github.com/gofiber/fiber/v2")func SpotRouter(app fiber.Router, service spot.Service) { app.Get("/spots", handlers.GetSpots(service)) app.Post("/spots", handlers.AddSpot(service))} 2.  handler 생성api/presenter/spot.go...func GetSpots(service spot.Service) fiber.Handler { r..
clean-architecture 구성
·
devops/go
go로 api를 구성하는데 최소버전으로 clean-architecture를 구성하도록 하겠다. DB는 aws rds에서 최소버전으로 발급받았다.teleport와 db를 연결한 후에 $ tsh proxy db ggocamping-db-v1 --port 3036 --db-user ggorockeehandlers: fiber에서 api를 호출하면 실제로 실행되는 부분routes:  routing에 따른 handlers를 처리presenter: api reposne 부분으로 구분하여 폴더트리를 만들고 그 안에 각각에 맞게 개발을 진행하도록 한다.DB에 저장되는 entities부터 정의하자. pkg/entities/spot.gopackage entitiesimport ( "gorm.io/gorm" "time")t..
go fiber를 배워보자.
·
devops/go
fiberdocs: https://docs.gofiber.io/dev blog: https://dev.to/koddr/go-fiber-by-examples-how-can-the-fiber-web-framework-be-useful-487afiber는 nodejs의 Express에 영감을 받아 가장 상위에 golang의 fasthttp(go에서 가장 빠른 http engine)을 탑재한 웹 프레임워크이다. fiber는 zero memory allocation과 performance를 염두해 빠른 개발을 위해 디자인되었다.설치 방법먼저 go 1.16 버전 이상을 사용하는 것을 전제로 한다.$ go get github.com/gofiber/fiber/v2go: added github.com/andybalhol..