본문 바로가기

전체 글

(88)
JPA Unknown entity 해결방법 에러원인 JPA 구현체인 하이버네이트 사용시 @Entity 를 선언해줬음에도 아래와 같이 에러가 발생하는 경우가 있습니다. java.lang.IllegalArgumentException: Unknown entity: package.class @Entity public class Member { @Id @GeneratedValue private Long id; private String name; // setter, getter ... } 이는 Gradle 로 실행하였을때 자주 발생하는 에러입니다. 해당 에러의 원인은 @Entity 어노테이션은 persistence.xml 의 파일 위치와 클래스파일 위치가 동등한 디렉토리에 위치하여야 동작하게 됩니다. 하지만 Gradle 로 빌드 시 아래와 같은 결과를 얻..
JPA 구현체 하이버네이트 사용방법 프로젝트 환경 및 라이브러리 세팅 - 자바 8 이상(권장) - H2 데이터베이스 - Maven - 하이버네이트 (JPA 구현체) 라이브러리 추가 - pom.xml org.hibernate hibernate-entitymanager 5.6.15.Final com.h2database h2 2.2.222 JPA 설정하기 resources 폴더 하위에 /META-INF/persistence.xml 생성 persistence.xml // 이부분은 나중에 EntityManageFactory 만들때 사용 데이터베이스 방언 JPA 는 특정 데이터베이스에 종속 되어 있지 않습니다. 따라서 각각의 데이터베이스가 제공하는 SQL 문법에 따라 SQL을 매핑합니다. ex) 가변문자의 경우 MySQL 은 VARCHAR 를 사용하..
JPA 란? JPA 는Java Persistence API 로 자바 진영에서 ORM (Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스 모음이다. ORM 이란? ORM은 "Object-Relational Mapping"의 약자로, 객체와 관계형 데이터베이스 간의 매핑을 의미합니다. 객체 지향 프로그래밍에서는 객체를 사용하여 데이터를 모델링하고, 관계형 데이터베이스는 테이블을 사용하여 데이터를 저장합니다. ORM은 이 두 세계 간의 불일치를 해결하기 위해 도움을 주는 기술입니다. JPA의 구현체로는 하이버네이트, EclipseLink, DataNucleus 가 있다. JPA 의 장점 1. SQL 중심적인 개발에서 벗어나 객체 중심적인 개발 2. 생산성 함수를 불러오는 것만으로 SQL 가..
[Spring] variable not initialized in the default constructor 에러 스프링이나 스프링부트 프로젝트를 진행하면서 Lombok 을 유용하게 사용하고 있습니다. 오늘도 어김없이 @RequiredArgsConstructor 를 사용하였습니다. 해당 어노테이션은 final 키워드가 붙은 필드를 생성자를 통해 주입시켜줍니다. 이때 Bean 으로 등록한 클래스가 하나이면 해당 클래스를 주입받을 수 있는데, 저는 WebClient 를 Bean 으로 등록해둔 상태로 @RequiredArgsConstructor 통해서 WebClient 를 주입받으려고 했는데 해당 에러가 발생하였습니다. @Configuration public class WebClientConfig { @Bean // Bean 으로 WebClient 등록 public WebClient webClient() { return ..
[Java] Reactive Streams 란? 1. reactive streams 란? reactive streams 는 non-bloacking, backPressure 를 사용하여 비동기식 스트림 처리에 대한 표준을 제공하기 위한 라이브러리 입니다. 참조 https://www.reactive-streams.org/ https://www.reactive-streams.org/ Reactive Streams Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaSc..
Spring Webflux 간단하게 알아보기 Webflux 란? WebFlux는 스프링 5에서 소개된 리액티브 프로그래밍을 지원하는 모듈입니다. 리액티브 프로그래밍은 비동기 및 이벤트 기반 애플리케이션을 개발하기 위한 패러다임으로, 주로 높은 확장성과 성능을 위해 사용됩니다. Spring Webflux는 Single-Thread와 Non-Blocking 방식을 사용합니다. 주요특징 webflux 의 주요 특징중 하나는 리액티브 프로그래밍입니다. WebFlux는 리액티브 프로그래밍 모델을 채택하고 있습니다. 이 모델은 비동기적이며 이벤트 기반으로 동작하여 높은 확장성과 성능을 제공합니다. 기존의 Blocking 형식의 리퀘스트는 서버에 리퀘스트가 전송될 때 마다, 서블릿 스레드가 생성되고, 워커(worker) 스레드에 작업을 위임한다. 워커 스레드가..
크론 표현식 / Cron Expressio 크론 표현식은 스케줄러를 컨트롤 할때 특정시간대를 지정하기에 유용한 표현식 입니다. 크론 표현식은 총 7개의 필드로 구성되어 있으며 공백으로 구분 됩니다. Cron 표현식 필드 [초] [분] [시간] [일] [월] [요일] [년] 필드 허용되는 값 허용되는 특수문자 초 0-59 , - * / R 분 0-59 , - * / R 시간 0-23 , - * / R 일 1-31 , - * / ? L W 월 1-12 또는 JAN-DEC , - */ 요일 0-6 또는 SUN-SAT , - / ? L # 년 1970-2099 , - * / 특수문자 쉼표 (,) 쉼표는 목록 항목을 구분합니다. ex) "MON,WED,FRI" 월요일, 수요일, 금요일을 뜻함 하이픈 (-) 범위를 정의합니다. ex) 2013-2023 20..
Spring Boot + Spring Security 로 JWT 로그인 방식 구현 목차 1. 개요 2. 개발환경 3. 전체 구조 4. 라이브러리 및 properties 설정 5. 코드 구현 6. 테스트 개요 사이드 프로젝트를 Rest API 로 설계하게 되어 로그인 방식을 고민하던 중 토큰 인증 방식을 알게 되었고, JWT 를 이용하여 프론트엔드와 백엔드 사이 인증을 구현해 보았습니다. 여기에서는 JWT에 관한 내용은 다루지 않고, 오직 구현에만 집중적으로 다룰 것입니다. 전체적인 흐름은 아래와 같습니다. 1. 회원가입 2. 로그인 -> 토큰 발행 3. 토큰을 이용하여 권한 확인 개발환경 언어 : JDK 17 프레임워크 : Spring Boot 3.1.3 빌드툴 : Gradle 인증/인가 : Spring Security 6.1.3 데이터베이스 : Postgresql & JPA API ..