본문 바로가기

전체 글56

[JPA] 기본키 생성 전략 0. 이 글을 쓰게 된 이유 jpa의 id 생성 전략을 다양하게 활용해보고자 이 글을 쓰게되었다. 1. GenerationType GenerationType이란 기본 키 생성 전략을 정의하는 역할을 하는 enum이다. 사용법은 다음과 같다. @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; GenerationType에 어떤 전략이 살펴보자. 2. GenerationType.IDENTITY IDENTITY은 기본키 생성을 데이터베이스의 열의 식별 속성으로 위임한다. 즉, 데이터베이스 자체에서 기본키 생성을 관리한다. 대표적으로 MySql의 auto increment, PostgreSQL의 serial을 활용한다. 2.1 장점 .. 2023. 7. 7.
[JPA] 영속성 전이와 고아 객체 0. 이 글을 쓰게 된 이유 프로젝트에 앞서 JPA 복습을 하면서 영속성 전이와 고아 객체 부분이 명확하지 않다는 느낌이 들어 정리를 하게 되었다. 1. 영속성 전이(CASCADE) 다음과 같은 엔티티 연관 관계가 있다고 가정하자 @Entity @Getter @Setter public class Parent { @Id private Long id; @OneToMany(mappedBy = "parent") private List children = new ArrayList(); } ======================================================== @Entity @Getter @Setter public class Child { @Id private Long id; @Man.. 2023. 6. 29.
[Network] 프로토콜 스택이 서버와 통신하는 방법 훑어보기 0. 이 글을 쓰게 된 이유 지난 글에서는 브라우저가 요청을 주고 받을 때, 어떻게 동작하는지에 대해 알아보았다. 지금까지는 TCP/IP 계층 구조에서 어플리케이션 계층에 해당하는 내용을 알아봤다고 생각하면 된다. 지난번에 말했듯이 브라우저는 네트워크 기능을 가지고 있지않아서, OS의 프로토콜 스택에게 네트워킹을 의뢰한다. 오늘은 OS의 프로토콜 스택이 어떻게 네트워킹을 하는지 내부 동작에 대해서 순서대로 알아보자. TCP/IP 계층으로 따지면 Transport, Network 기능이다. 들어가기 전에 일단 프로토콜 스택의 내부 구성에 대해서 알아보자. 출처 : https://github.com/Road-of-CODEr/one-percent-network/blob/master/20201014/Chapte.. 2023. 5. 28.
[Network] 브라우저는 어떻게 웹 서버로 요청을 보내는걸까? 0. 이 글을 쓰게 된 이유 아주 예전부터 기술 부채에 "요청 버튼을 누르면 구체적으로 어떤 방식으로 요청이 서버에 닿을까"가 있었다. 만약 면접에서 이 질문이 들어오면 대답할 자신이 없었기 때문에 언젠간 해야지 하다가 드디어 브라우저부터 찔끔 정리해보려고 한다. 1%의 네트워크 원리를 토대로 정리를 하는 것이라서 거의 비슷한 순서로 글을 작성한다. 브라우저는 여러 개의 클라이언트 기능을 제공하는 복합적인 클라이언트 소프트웨어이다. 브라우저가 어떤 기능을 제공하고, 어떤 과정을 통해 웹서버로 요청을 보내는지 알아보자. 1. HTTP Request 메시지 작성 일단 요청을 보내려면 요청 메시지를 작성해야한다. HTTP 말고도 다양한 프로토콜이 있지만 주제가 웹 서버로 요청을 하는 것이니 HTTP를 기준으로.. 2023. 5. 17.
[Spring] RequestBodyAdvice로 @RequestBody 커스텀하기 1. RequestBodyAdvice란? @RequestBody가 붙은 파라미터 객체를 커스텀하고 싶다고 가정하자. 우리는 자연스럽게 ArgumentResolver를 통해 커스텀 하려고 할 것이다. 하지만 ArgumentResolver는 1개의 파라미터 객체에 1개의 ArgumentResolver만을 허락한다. 우선 순위를 커스텀하지 않는 이상 @RequestBody가 우선순위를 갖고, 우리가 설정한 ArgumentResolver는 동작하지 않을 것이다. 그렇다면 @RequestBody를 커스텀할 방법은 없을까? 당연히 아니다. 이미 스프링은 이런 요구를 반영해서 RequestBodyAdvice를 만들어놨다. RequestBodyAdvice는 RequestBody를 커스텀 할 수 있는 기능을 제공한다. .. 2023. 5. 8.
[Spring] ViewResolver 코드 파보기 0. 이 글을 쓰게 된 이유 최근 Dispatcher Servlet에 대해 공부하면서 ViewResolver에 대해서 궁금증이 생겨 이 글을 쓰게 되었다. 1. ViewResolver란? ViewResolver는 요청이 들어오면 DispatcherServlet이 핸들러를 찾아서 해당 핸들러가 ModelAndView 객체를 반환한다. DispatcherServlet은 ViewResolver를 List로 가지고있는데, ModelAndView에 있는 View의 name을 활용해서 적절한 View를 찾아서 반환한다. 즉, ViewResolver는 적절한 View를 찾는 역할을 한다. 2. ViewResolver 동작 원리 2.1 ModelAndView 객체 찾아와서 실행한다. protected void doDi.. 2023. 5. 4.