1. 개요기본적인 CRUD 만 구현하기에는 JPA 만한 것이 없다. 하지만 특정 날짜를 기준으로 이전 날짜 게시물만 조회하는 일이 필요할 때에는 JPA 만 사용하기에는 버겁다. 그렇다면 모든 데이터를 가져온 후 골라낼 것인가? 당연히 아니다.2. JPQL@Query("SELECT r FROM Reservation r" + "WHERE r.reservatedAt findPastReservation();원하는 조건의 데이터를 조회하기 위해서는 필연적으로 JPQL 을 필요로하게 된다. 하지만 복잡한 로직의 경우 쿼리 문자열이 매우 길어질 수 있고, 오타 등의 문법적인 오류가 발생하더라도 런타임 에러로 잡아낼 수 있다.하드코딩되어있는 부분을 제거하고, 동적 쿼리 및 재사용성을 높일 수 있는 것이 Que..
전체 글
행복한띠용이의 코딩 블로그입니다.1. 개요 통합 테스트 코드에서는 실제 데이터베이스를 연결해서 작업하였다. 하지만 User Id 를 통한 List 조회 시에 테스트를 위해 사용한 데이터뿐만 아니라 실제 데이터베이스에 들어가있던 데이터들도 함께 조회되면서 테스트 검증에 어려움을 겪었다. 이를 해결하기 위해 테스트 데이터베이스를 분리하였지만 데이터베이스가 비어있어 연관관계 매핑에 문제가 발생하였다. 2. Test Code@Entity@Builder@AllArgsConstructor@NoArgsConstructor@Getterpublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String n..
1. 개요 개발 중 ENUM 값을 데이터베이스에 저장하니 ENUM 값의 순서, 인덱스가 저장되었다. 나는 상태코드를 기대하면서 저장했는데 숫자가 나와 당황했다. 그런고로 ENUM 의 데이터베이스 저장 및 처리에 대해서 알아보도록 하자.2. ENUM 값 저장@Entity@Builder@RequiredArgsConstructorpublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; private UserStatus status;}public enum UserStatus { ACTIVE,..
1. 개요 Spring 프로젝트를 진행하면서 결제 구현이 필요했다. 실제 PG 사와 카드사를 거쳐 구현하기에는 까다로운 요소들이 많았고, 이를 간단하게 구현할 수 있는 PortOne API 를 사용하기로 하였다.해당 게시물은 Spring Boot 만을 사용하였다.2. 코드(1) Front카드 결제카카오페이 결제결제는 클라이언트가 직접 portone 에 결제 요청하면서 시작된다. 타임리프로 구성된 페이지를 자세히 살펴보면 총 3가지 단계로 구성되어있다.포트원 라이브러리를 추가하고 객체를 초기화한다.서버에서 실제 결제 건을 조회한다.결제 금액이 일치한다면 Order 객체를 서버에 저장한다.클라이언트 측에서 라이브러리를 다운받기만 하더라도 다음과 같은 결제창을 얻을 수 있다.(2) Controller@Rest..
1. 개요 에서는 WebSocket 으로 간단한 채팅 서버를 구현했다. 이것을 STOMP 를 사용해서 구현해보도록 하겠다. Spring 에서 Websockt 의존성을 받아오면 Spring Messaging 이라는 의존성도 함께 추가된다. 이를 이해하기 위해서는 STOMP 를 이해해야한다. 2. STOMPSimple Text Oriented Messaging ProtocolSTOPM 는 메세지 브로커를 활용해 쉽게 메세지를 주고받을 수 있는 프로토콜이다.pub-sub 이라는 발행-구독 형태를 사용해 메세지를 주고받을 수 있다.웹 소켓 위에 얹어 함께 사용할 수 있는 하위(서브) 프로토콜이다!(1) 데이터 형식WebSocket 을 사용할 때는 메세지를 주고받는 형식은 따로 정해져있지 않다. 반면 STOM..