Spring

Spring Batch 코드 작성 후 실행 시 Table doesn't exist 에러 해결 1. 기존 코드 매일 새벽마다 외부 Open API와 통신해 DB값을 업데이트해야 하는 배치 프로세스를 추가했다. 코드를 전부 작성하고 실행하니 아래와 같이 테이블이 존재하지 않는다는 에러 메시지가 출력됐다. 2. 문제 분석 1. Spring Batch 사용할 때 Batch용 테이블이 필요한 이유 Spring Batch를 사용할 때 Batch 관련 테이블이 중요한 역할을 하는 이유는 상태 관리, 실패한 작업의 재시도, 성능 모니터링, 일괄 처리 통계와 같은 기능들을 제공하기 때문이다. 이러한 테이블들은 Batch Job의 실행에 대한 로깅, 실행 이력, 성공/실패 상태, 현재 진행 중인 Step 정보 등을 저장한..
스프링 부트 의존성 버전문제로 인한 오류 해결 스프링 부트에서 프로젝트를 실행하는데 잘되던 의존성 주입이 갑자기 안 되는 문제가 발생했다. 1. 기존 코드 기존에 Elasticsearch와 통신하기 위해 추가한 의존성이다. plugins { id 'java' id 'org.springframework.boot' version '2.7.9' } dependencies { ... implementation 'org.springframework.data:spring-data-elasticsearch:4.4.0.RELEASE' } 2. 에러 메시지 3. 문제 해결 Spring Boot는 의존성 버전 관리를 자동으로 해주기 때문에 아래처럼 코드를 수정하면 자동으로 버전을 관리한다. //elasticsearch i..
RequestDTO로 Controller에서 요청받을 때 @RequestBody 어노테이션 작성해야 하는 경우와 작성하지 않아야 하는 경우 @RequestBody 어노테이션을 작성해야 하는 경우 JSON/XML 요청 처리: 클라이언트가 'application/json' 또는 'application/xml' 형식으로 복잡한 데이터 구조를 전송할 때, Spring은 이를 RequestDTO 객체로 매핑하기 위해 @RequestBody를 사용한다. 복잡한 데이터 구조: HTTP 요청의 본문이 복잡한 객체 구조를 가지고 있을 때, @RequestBody를 사용하여 이러한 복잡한 구조를 자동으로 Java 객체로 변환한다. @RequestBody 어노테이션을 작성하지 않아야 하는 경우 폼 데이터 처리: 클라이언트가..
ResponseDTO에 기본 생성자가 있어야 하는 이유 ResponseDTO에 기본 생성자가 필요한 이유는 JPA의 동작 방식과 DTO의 역할에 기반을 둔다. JPA는 엔티티 객체를 관리하기 위해 내부적으로 프록시 객체를 생성한다. 이 프록시 객체는 실제 객체의 상태가 필요할 때까지 데이터베이스 로드를 지연시키는 데 사용된다. 프록시 객체를 만들기 위해서는 대상 엔티티에 기본 생성자가 필요하다. 왜냐하면 JPA는 리플렉션을 통해 객체를 만들고, 리플렉션 메커니즘은 기본 생성자를 호출하여 객체의 인스턴스를 생성하기 때문이다. ResponseDTO는 일반적으로 데이터를 전송하는 데 사용되며, 이는 엔티티와는 분리된 존재다. 그럼에도 불구하고 ResponseDTO에 기본 생성자가 필요한 이유는 Spring 프..
이해하기 쉬운 CORS 및 API 개발 안내서 (Access-Control-Allow-Headers) 웹 개발을 하다 보면 'CORS'라는 용어를 자주 접하게 된다. CORS 관련 에러도 자주 마주치다 보니 한번 제대로 이해해 보는 시간을 가져보자! CORS는 Cross-Origin Resource Sharing의 약자로, 한 출처에서 불러온 웹 페이지가 다른 출처의 리소스와 상호 작용할 수 있게 하는 보안 메커니즘이다. 이 글에서는 CORS가 왜 중요한지, 어떻게 작동하는지, 그리고 실제 API 개발에 어떻게 적용되는지를 알아보자! 1. 출처(Origin)란 무엇인가? 웹에서 "출처"는 리소스가 어디에서 왔는지를 식별하는 중요한 개념이다. 출처는 URL의 세 가지 주요 구성 요소인 프로토콜(예: ht..
native query에서 @rank := 0, @rownum 처럼 사용자 정의 변수 사용할때 에러 발생 Spring data JPA에서 native query를 사용할 때 @rank 함수를 적용해서 SQL문을 작성하려고 할 때 실행이 안되고 에러가 터졌다. 원인 코드 @rank := IF(@current_category = category_sn, @rank + 1, 1) AS rank 에러 원인 @rank := 0는 MySQL에서 사용되는 사용자 정의 변수(user-defined variable)다. 이것은 SQL 쿼리 내에서 값을 임시로 저장하고 참조할 수 있는 변수를 선언하게 해주는데 Hibernate나 JPA에서는 이와 같은 문법을 지원하지 않기 때문에, 쿼리를 실행할 때 위와 같은 에러가 발생한..
JPA(native query)에서 MariaDB WITH RECURSIVE 작동 안되는 오류 게시글 상세조회에서 댓글의 대댓글까지 가져오는 쿼리를 JPA로 작성해야 했다. 일단 DB console에서 쿼리를 작성하고 정상 작동되는 걸 확인하고, native query로 옮겨와서 실행시켰는데 아예 실행조차 안되고 Bean 등록조차 안 되는 에러가 발생했다. 원인 코드 아래는 WITH RECURSIVE 사용한 일반 SQL 쿼리문 WITH RECURSIVE COMMENT_LEVEL AS ( SELECT paper_comment_sn, comments, class, odr, parent_sn, reg_id, reg_dt, concat(convert(paper_comment_sn, char), '-', '0')..
JPQL에서 limit 1 작성했을때 실행 안되는 오류 JPA를 사용하면서 repository에서 named query로 limit 1을 사용했을 때 아예 프로젝트 실행조차 안 되는 오류가 났다. 원인 코드 가장 최근에 등록된 회원을 가져오고 싶어서 limit 1을 작성했다. @Query("SELECT u from User u where u.userSn = :userSn order by u.regDt desc limit 1") 이때 아래와 같은 오류 메세지를 출력하면서 프로젝트 실행이 안 됐다. Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ..
평양냉면7
'Spring' 카테고리의 글 목록 (8 Page)