목록전체 글 (103)
정글에서 온 개발자

계약 정보 조회를 하는 기능이 있었는데, 검색 조건으로 계약에 해당하는 상품과, 계약과 관련된 멤버를 통해 조회할 수 있는 기능을 추가했다. 그런데 기존에 다른 join을 했을 때는 빨랐던 조회가 눈에 띄게 느려진게 느껴졌다. 확인해보니 server reponse 시간이 거의 5초가 되어가고 있었다.나중에 최적화할 수도 있었겠지만, 프론트에서 개발하는데 속도가 너무 걸리는 것 같아서 간단하게라도 성능을 개선해보고자 했다.내가 쓰는 dbms는 mariadb10.6.4다.문제 파악기존의 쿼리는 크게 두 단계로 되어있었다.검색 조건을 바탕으로 테이블을 한 번 만드는 서브 쿼리 (페이지네이션까지 처리)페이지네이션된 테이블을 바탕으로 다시 한번 추가 join을 하는 쿼리이번에 추가한 상품과 멤버를 검색조건으로 거..

Go 에서는 swaggo라는 패키지를 이용해서 swagger 문서화를 지원한다.그런데, 곤란하게도 swaggo에서도 자체적으로 fiber용으로 패키지를 만들고, fiber에서도 자체적으로 swagger를 위한 middleware를 만들었다.사진의 위에 있는 게 fiber에서 만든 것, 세번째에 있는게 swaggo에서 만든 것이다.(중간에 v2를 제공하는 스파이가 있는 것 같지만, 공식이 더 좋을 것 같아 패스)GPT에 물어봤을 때는 fiberSwagger가 더 좋다고 하지만, 실제 써봤을 때는 달랐다. 커스텀이 swagger가 더 좋다고 느껴졌다.그래서 pkg.go.dev 에 들어가 검색해본 결과, import 부터 gofiber의 swagger가 높았다.둘다 github의 readme가 친절하지 않..
Context엔드포인트 내부에서 클라이언트 통신 단절이나 타임아웃 등을 context.Context만 알 수 있다.중단 처리를 감지하지 못하면, 요청이 타임아웃 됐지만 처리를 계속 하거나, 서버를 정지하고자 중단 처리를 실행해도 요청 처리가 중돤되지 않아 서버 프로세스가 종료되는 순간까지 처리를 계속하게 된다.net/http 패키지의 *http.RequestContext 메서드에서 얻는 context.Context 타입값을 사용한다. fiber에는 *fiber.Ctx 의 .Context() 메서드를 이용해 가져올 수 있다.gorm에서는 다음처럼 시작하면 된다.tx := db.WithContext(ctx).Begin()이를 위해서 호출하는 메서드의 맨 앞에 ctx를 넘겨주는 패턴을 쓰는 것이 좋다.주의할 ..