Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- pinpoint
- 티스토리챌린지
- 개발 어렵당.ㅠ
- Armeria
- R2DBC Paging
- Ingress Controller Fake
- 월급루팡 일지
- fake jwt
- RedirectService
- nGinder
- 았
- Loki 로그
- OIDC
- formik
- save/update
- LPOS
- 논블록킹 성능
- 7879
- 노드간 통신
- 오블완
- reids
- 플루터
- UnsupportedOperationException
- ㅉ때
- jsonMarshaller
- 핀포인트
- hbase 저장공간 설정
- intellij
- pinpoint 2.5.3
- 애자일 싫타
Archives
- Today
- Total
대머리개발자
고랭(goLand) 작업하기 본문
생각보다 보일러 플레이트가 많으다.
반복적인 작업들을 공통으로 묶어 주는게 개발자의 몫이겠지..
context 에서 사용자의 id를 가져오는 로직을 만들라고 보니깐...하악하악.
기본적으로 Go는 상속은 없다고 한다.
결국 (is-a) 관계가 아니라 (has-a) 관계로 풀면 되것다.
base_handler.go
package handler
import (
"net/http"
"user-community/internal/middleware"
"github.com/gin-gonic/gin"
)
// BaseHandler : 모든 핸들러의 부모 역할 (껍데기 구조체)
type BaseHandler struct{}
func (h *BaseHandler) UserIDOrAbort(c *gin.Context) (string, bool) {
uid, exists := middleware.GetUserID(c)
if !exists || uid == "" {
// 공통 에러 응답 처리
c.JSON(http.StatusUnauthorized, gin.H{"error": "로그인이 필요합니다."})
c.Abort() // 더 이상 진행하지 않음
return "", false
}
return uid, true
}
필요한 핸들러에 BaseHandler를 가진다!
type BoardHandler struct {
BaseHandler
boardService *service.BoardService
historyService *service.HistoryService
}
func NewBoardHandler(s *service.BoardService, hs *service.HistoryService) *BoardHandler {
return &BoardHandler{
BaseHandler: BaseHandler{},
boardService: s,
historyService: hs,
}
}
그럼 이제...사용자 정보가 없는 경우 야무지게 재활용할 수 있다!.

아.. 트랜젝션... ㅅㅂ @Transactional ...그립다.
'개발이야기' 카테고리의 다른 글
| 고랭(goLand) - 게시판/댓글 신고하기 기능 설계 (0) | 2025.12.15 |
|---|---|
| 고랭(goLand) - 게시판 조회수 조지기 (0) | 2025.12.12 |
| 고랭(goLand) 프로젝트 셋팅 (0) | 2025.12.09 |
| solr9 스키마 추가에 대한 고민 (0) | 2025.12.08 |
| 데이터 설계.. 개똥 철학 (0) | 2025.10.27 |