일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Redux
- springboot
- Spring
- css
- test
- tanstackquery
- JPA
- satisfiles
- Gin
- Chakra
- hook
- frontend
- golang
- react-hook-form
- java
- 웹애플리케이션서버
- component
- backend
- ReactHooks
- React
- javascript
- 티스토리챌린지
- 오블완
- designpatterns
- RTK
- storybook
- JavaSpring
- go
- typescript
- Today
- Total
목록golang (6)
bkdragon's log
paging 이 추가된 API를 만들어보려고 한다. gin Clean Architecture 에서 사용하는 기본 CRUD repository 처럼 Paging respository 를 만들고 필요한 도메인에 임베드(상속)로 추가할 수 있게 만들 것이다.우선 인터페이스를 정의해준다.type IRepository[M any, ID any] interface { List() ([]*M, error) Retrieve(id ID) (*M, error) Save(entity *M) (*M, error) Update(id ID, updates map[string]interface{}) (*M, error) Delete(id ID) error}type IPagingRepository[..
gorm 에는 다형성 관계라고 하는 아주 막강한 기능을 제공한다.공지사항과 게시글이 있다. 공지사항과 게시글에는 댓글을 달 수 있다. 이럴 때 보통 4개의 테이블을 만들게 된다.NoticeBoardNotice_CommentBoard_Commentgorm 에선 다형성 관계를 통해 하나의 Comment 테이블로 해결할 수 있다!type Comment struct { gorm.Model Content string WriterID uint Writer User OwnerID int // 연관된 모델 ID OwnerType string // 연괸된 모델의 테이블 명이 들어간다.}Comment 모델에 OwnerID 와 OwnerType을 추가하자. Owner 라는 이름은 그냥 ..
net/http를 활용한 golang 서버에서 요청을 받아서 처리하는 순서를 간단하게(디테일 X) 살펴보려고 한다.http 패키지의 HandleFunc로 request handler를 등록하고 ListenAndServe로 실행하면 요청에 맞는 handler가 실행된다.http.HandleFunc("/helloworld", helloWorldHandler)http.ListenAndServe(fmt.Sprintf(":%v", port), nil)ListenAndServe 함수는 다음과 같다.func ListenAndServe(addr string, handler Handler) error { server := &Server{Addr: addr, Handler: handler} return serv..
gin Context 에 있는 JSON 메서드는 json 응답을 빼주는 데 사용한다. 내부 구현을 살펴보자. func (c *Context) JSON(code int, obj any) { c.Render(code, render.JSON{Data: obj})}JSON 은 Render라는 메서드를 호출하는데, 상태 코드와 render.JSON을 구조체를 인자로 받는다. c.Render를 먼저 살펴보면func (c *Context) Render(code int, r render.Render) { c.Status(code) if !bodyAllowedForStatus(code) { r.WriteContentType(c.Writer) c.Writer.WriteHeaderN..
gin 의 Context 에 있는 ShouldBindJSON 메서드는 JSON 데이터를 구조체로 바꿔주는 역할을 한다. 아마 요청을 읽고 Unmarshal 하는 과정이 있지 않을까 싶은데 실제 구현이 궁금해서 코드를 좀 찾아보았다.func (c *Context) ShouldBindJSON(obj any) error { return c.ShouldBindWith(obj, binding.JSON)}func (c *Context) ShouldBindWith(obj any, b binding.Binding) error { return b.Bind(c.Request, obj)}ShouldBindJSON 는 ShouldBindWith 를 호출한다. ShouldBindWith 는 Binding 구조체와 o..
최근 golang 을 공부 중이다. 개인적인 관심도 있었고 업무에 사용할 일이 생겼기 떄문이다.io 란golang의 io 패키지는 표준 패키지로서 http 요청과 응답 , 파일, 메모리 버퍼, 네트워크 소켓 등의 입출력을 처리한다.io 패키지의 주요 인터페이스io.Reader데이터를 읽어오는 인터페이스. 데이터를 연속적인 스트림으로 처리할 수 있다. http의 request body가 io.Reader 이다.type Reader interface { Read(p []byte) (n int, err error)}Read라는 메서드를 가지고 있다. Read는 byte 슬라이스에 데이터를 읽어오고 다 읽으먄 EOF(end of file) 에러를 던진다.스트림 데이터를 이렇게 처리할 수 있다.for { ..