일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- storybook
- JPA
- Chakra
- backend
- RTK
- 오블완
- hook
- 웹애플리케이션서버
- Spring
- golang
- frontend
- test
- java
- typescript
- react-hook-form
- designpatterns
- Redux
- component
- tanstackquery
- satisfiles
- go
- Gin
- springboot
- javascript
- React
- css
- 티스토리챌린지
- ReactHooks
- JavaSpring
- Today
- Total
목록2024/09 (10)
bkdragon's log
@Transactional 은 굉장히 선언적으로 사용할 수 있다. 여기서 선언적이라는 말은 사용자가 정확한 원리를 알 필요 없이 추상화 되어있고 내부적으로 처리된다는 뜻이다.아래는 유저를 추가하고 로그를 남기는 메서드이다. @Transactional public void createUserAndLog(String userName) { // 유저 생성 User user = new User(); user.setName(userName); userRepository.save(user); // User 저장 (DB에 INSERT 실행됨) // 로그 기록 Log log = new Log(); log.setMessage(..
리액트의 기본 개념들을 하나씩 정리해보려고 한다. 어렴풋이 혹은 잘 몰랐던 부분들이 명확해졌으면 좋곘다. 렌더링React가 화면을 그리기 위해서는 렌더링 과정이 필요하다. 이는 흔히 브라우저 렌더링과 같다고 생각할 수 있지만 아니다. React의 렌더링과 브라우저 렌더링은 다르다. React의 렌더링은 React가 컴포넌트(함수형)를 호출하는 것을 말한다. 좀 더 정확히는 컴포넌트를 호출하여 반환된 React Element로 VDOM을 재조정하는 것이다. 즉, VDOM 에서 이뤄지는 작업을 말한다.React가 렌더링을 하려면 트리거가 필요하다. 트리거는 두가지 경우가 있는데 초기 렌더링과 컴포넌트의 state(+ props) 혹은 파생된 상태가 변경되었을 경우이다.초기 렌더링에 경우 React는 루트 컴..
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[..
데이터베이스에 접근하는 respository layer,비지니스 로직을 수행하는 service layer,요청을 해석하는 controller layer로 계층을 분리할 것이다.우선 가장 기본 CRUD 만 있는 인터페이스를 만들고 구현체를 만든다.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}DataBase 구조체를 만들어서 IRepository 인터페이스를 구현한다...
Spring Boot의 Data Access layer에 대해 알아보자.JDBC자바 애플리케이션이 관계형 데이터베이스와 상호작용할 수 있도록 해주는 표준 API이다.JDBC는 3가지 기능을 표준 인터페이스로 정의하여 제공한다.java.sql.Connection - 연결java.sql.Statement, PreparedStatement - SQL을 담은 내용java.sql.ResultSet - SQL 요청 응답JDBC 드라이버는 특정 데이터베이스에 맞게 JDBC API 의 인터페이스를 구현한 구현체이다. JDBC 드라이버 덕분에 개발 과정에선 JDBC 표준만으로 코드를 작성할 수 있다.JDBC의 동작 흐름은 다음과 같다. JDBC 드라이버 로딩 : 사용하고자 하는 JDBC 드라이버를 로딩한다. JDBC 드..
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 { ..