코드 리팩토링 Serializer, DTO, CodeConvention
·
카테고리 없음
코드를 작성하는데 확인해보니 package entitiesimport ( "time")type Spot struct { Id uint `json:"id" gorm:"primaryKey"` UserId uint `json:"user_id"` User User `gorm:"foreignKey:UserId;constraint:OnDelete:CASCADE;"` CategoryId *int `gorm:"default:null" json:"category_id"` // CategoryId가 null일 수가 있음 // sqlite에서 SET NULL, mysql, postgresql에서는 SetNull // 배포시 아래 주석 // sqlite 설정 Category Category `..
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:..
코드 리펙토링
·
카테고리 없음
이 문서에서는 AuthService와 User Service의 통합 필요성에 대해 알아보고, 중복 코드 문제를 해결해보겠다. 현재 두 서비스가 각각의 역할을 수행하고 있지만, 특정 기능에서 중복이 발생하고 있어 이를 통합함으로써 코드의 효율성을 높이고 유지보수성을 개선할 수 있을 것 같다.1. 문제점 분석현재 AuthService는 인증 관련 기능을, UserService는 사용자 관련 기능을 담당하고 있는데 다음과 같은 중복 코드가 발생하고 있다:getFindByEmail()getUserById()이러한 함수들은 두 서비스 모두에서 필요하게 되어, 각 서비스에 중복으로 구현되고 있는데 이는 코드의 가독성을 떨어뜨리고, 유지보수 시 불필요한 작업을 증가시킨다.2. 통합의 필요성서비스 통합을 통해 얻을 수..
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 ..
helm template 수정
·
devops/minikube
지금까지 Helm으로 배포할 때는 환경변수를 고려하게 세팅되어 있지 않았다. 환경변수를 쿠버네티스의 secret형태로 넣어서 DB 정보를 추가하여 camping-backend가 aws rds와 통신하는 것을 목표로 하겠다. 그럴려며 우선 Helm 차트를 가져와야 하겠다.$ helm repo add ggocamping https://chart.ggocamping.com/devopscharts/$ helm repo updateHang tight while we grab the latest from your chart repositories......Successfully got an update from the "ggocamping" chart repositoryUpdate Complete. ⎈Happy H..
k8s와 aws rds 그리고 fiber와 연결
·
devops/minikube
kubernetes는 현재 public subnet에 존재하고, Database는 Private Subnet에 존재한다. 같은 VPC에 존재하긴 하지만 이 Database에 연결학 위해서는 public subnet에 있는 인스턴스(proxy 역할)를 통해 연결하거나, 새로운 proxy server를 만들어서 DB에 접근해야한다. 물론 NAT Gateway를 이용하는 방법도 있다. 나는 비용을 최소화 해야 하기 때문에.. 역시 기존에 올린 Teleport Proxy를 이용해서 Private Subnet에 있는 DB와 연결했다.  먼저 teleport로 로그인하자.tsl은 없는 명령어이고 편의상 만든 함수이다. 이 함수에 대한 설명은 이전 포스팅을 참고하면된다. 간단히 설명하면tsh 로 내가 만든 proxy..
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) - 헤더하고 페이로드를 비밀번호 같은 걸로 암호화한거다. 이걸로 서..