0. 개요 전역 예외처리에 관한 핸들러를 만들어서 관리하는 기능을 코틀린 베이스로 만들려 한다.이전 RestControllerAdvice, ControllerAdvice 포스팅하면서 말했던 내용을 베이스로 하기 때문에 조금 더 상세한 내용은 아래 링크 참고 바란다. * 이전 포스팅2023.07.12 - [DEV/Spring] - [Spring] Exception Handler (with. Spring Data Rest) 1. 구현구현하고자 하는 코드 구성은 아래와 같다.Class (or File)DescriptionErrorCode에러 정의를 담은 Enum 클래스.DomainException예외 클래스, RuntimeException 상속.GlobalRestExceptionHandler예외를 클래스 별..
Spring 에서 외부 API를 요청할 때, 사용하는 라이브러리들은 RestTemplate, WebClient, OpenFeign 이 있다. 이번에는 비동기 방식을 지원하는 WebClient에 대해 알아보자. 1. WebClient 란? WebClient는 Spring WebFlux에 포함되어 있는 HTTP 요청 라이브러리로, Reactor 기반의 API 를 가지고있다. 반응형 라이브러리를 참조하면 스레드나 동시성을 처리할 필요 없이 비동기 로직의 선언적 구성을 가능하게 하고 완전한 논 블로킹으로 구현되어있다. 물론 동기 방식으로도 사용이 가능하기에 사용자의 구현에 따라 동기/비동기 선택이 가능하다. 2. 구성 WebClient를 생성하는 방법은, WebClient.create() WebClient.bu..
이번에 갠플 진행하면서, 매번 만들던 Controller, Service, Repository 가 아닌 다른 형태로 진행해보기로 하였다. Spring Data Rest를 이용한 방법인데, 설정과 어노테이션을 이용해서 Entity와 Repository 만으로 API 를 구성하며 추가적인 Http Request Path 설정과 반환 데이터 구조를 만들지 않아도 간단하게 사용이 가능하다. 1. Data Rest ? Spring.io 에서는 Spring Data Rest 를 다음과 같이 정의하고 있다. REST 웹 서비스는 웹에서 애플리케이션 통합을 위한 최고의 수단이 되었습니다. 핵심에서 REST는 클라이언트가 상호 작용하는 리소스로 구성된 시스템을 정의합니다. 이러한 리소스는 하이퍼미디어 기반 방식으로 구현..
이번에 공부 겸 테스트 데이터베이스를 매번 설치하는게 번거로워서 가볍게 사용할 DB로 H2 Database 를 설치하기로 하였다. H2 ? H2는 Java로 작성된 관계형 데이터베이스 관리시스템이다. 자바 애플리케이션에 임베드하거나 클라이언트-서버 모드에서 구동할 수 있다. SQL 표준의 일부가 지원되고, 주 프로그래밍 APi는 SQL과 JDBC이지만 데이터베이스 또한 PostgreSQL 서버처럼 동작하기 위해 PostrgreSQL ODBC를 사용하여 지원한다. 인메모리 테이블과 디스크 기반 테이블을 둘 다 생성할 수 있다. Download 아래 있는 H2 사이트에서 다운로드가 가능하다. 나는 맥북을 사용하고 있어서 'Platform-Independent.Zip'을 설치하였다. H2 Download Li..
JPA 사용 중 복합키를 사용할 일이 있어서 @IdClass에 사용할 PK클래스를 만들고 엔티티에 @EqualsAndHashCode 롬복 어노테이션을 적용하였다. 테스트 코드 실행 시, 아래와 같은 warning 메세지가 나왔다. warning: Generating equals/hashCode implementation but without a call to superclass, even though this class does not extend java.lang.Object. If this is intentional, add '@EqualsAndHashCode(callSuper=false)' to your type. 대강 해석하자면 'equals/hashCode 를 만드는데 부모클래스를 call 하지..
개발 도중 Slf4j 로깅을 적용하는 도중 에러가 발생하였다. 캡쳐한 부분의 로그를 보면 아래와 같다. ERROR LOG Caused by: java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.helpers.NOPLoggerFactory loaded from file:/Users/mk1/.gradle/caches/modules-2/files-2.1/org.slf4j/slf4j-api/1.7.25/da76ca59f6a57ee3102..
Why?JPA Repository 를 만들때 자료를 찾아보면 사용되는 인터페이스가 JpaRepository, CRUDRepository 이 두개가 가장 많이 나와 어떤 차이점이 있는지 알아보았다. 아래 캡쳐된 프로젝트Spring boot 3.0.4 What?ChatGpt 에게 물어봤을 때 다음과 같이 답변해주었다.JpaRepositoryJpaRepository는 CRUDRepository를 상속하며, 다양한 데이터 액세스 기능을 제공하는 인터페이스입니다. JpaRepository는 단순한 CRUD 연산뿐만 아니라, 페이징, 정렬, Native 쿼리, 벌크 연산 등을 지원합니다. JpaRepository를 사용하면 더욱 복잡한 데이터 조작을 할 수 있으며, 다양한 데이터 액세스 기능을 제공하여 기능 확장..
Framwork 란? 위키 백과에는 프레임워크를 '컴퓨터 프로그래밍에서 소프트웨어 프레임워크(Software framework)는 복잡한 문제를 해결하거나 서술하는 데 사용되는 기본 개념 구조이다.' 라고 정의 되어 있습니다. 제 나름대로 정의 해보자면 '현대 사회에 법이라는 큰 틀 안에 살아가고 있고 최소한 지켜야하는 규칙 또는 규약을 가지고 각자 원하는 삶을 살아간다' 라는 관점에서 보면 법 또한 프레임워크에 해당합니다. 이처럼 큰 틀 안에 규칙을 정해두고 그 안에서 주어진 기능들을 활용해 원하는 것을 만든다고 생각하면 됩니다. (API의 url path는 여기다 작성해! 하지만 다른 path와 겹치면 안돼! 라는 것처럼) 라이브러리(Library)와 혼동하기 쉬울 수 있는데, 흔히 라이브러리를 도구..
데이터베이스 설계 시, 단일로 들어가야하는 조건을 넣어야 하는 경우 유니크 제약조건을 넣는다.예를 들어 회원의 아이디 또는 이메일과 같이 로그인 시 중복되지 않아야하는 경우를 말한다. JPA 코드 상에서 단일 조건의 경우@Entity@Table(name = "UNIQUE_ENTITY")@NoArgsConstructorpublic class UniqueEntity { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) private Long id; @Column(name = "unique_one", unique = true) private Long uniqueOne; @Column(name = "unique_two") pr..