728x90
Spring JPA, @Modifying 어노테이션clearAutomatically, flushAutomatically JPA를 사용하여 개발하다보면 DB의 데이터를 수정 또는 삭제하기 위해 벌크 연산을 사용해야하는 상황이 종종 발생한다.이때 여러분들은 @Modifying 어노테이션을 붙여주어야 한다는 이야기를 들어봤을 것이다. 벌크연산이란?하나의 데이터가 아닌 여러 데이터를 한번에 수정하거나 삭제하는 연산 위 사진과 같이 JpaRepository를 상속받은 Repository 인터페이스의 메서드 중,벌크연산을 수행하는 메서드의 상단에@Modifying 어노테이션을 붙여주어야 한다. 실제로 Update 또는 Delete 쿼리에 해당 어노테이션이 붙어있지 않는다면QueryExecutionReque..
스프링부트에서 Response 시, JSON의 한글이 깨지는 오류 해결 문제 상황 ⛔️ 스프링을 통해 RestAPI 서버 개발 도중, 한글로 작성한 Response Body의 값이 "??? ???." 등과 같이 출력되는 현상을 마주했다. 아무래도 response의 Content-Type이 utf8이 아니기 때문에 발생하는 것이 아닐까 의심을 했고,정답이었다. 때문에 response 응답에 Content-Type 헤더를 추가해주어야 했다. 해결 방법 💭 해결 방법은 Controller의 RequestMapping 어노테이션 단에, @RequestMapping(value = "/competition", produces = "application/json; charset=UTF8")위와 같이 produ..
✔ JPA에서 가장 중요한 2가지1. 객체와 관계형 데이터베이스 매핑하기DB와 객체를 어떻게 설계해서 어떻게 매핑되도록 할 것인가(설계와 관련된 부분) 2. JPA의 동작원리영속성 컨텍스트 ⚙ 엔티티 매니저 팩토리와 엔티티 매니저클라이언트의 요청이 올때마다 EntityManagerFactory에서 EntityManager를 생성해서 제공한다.EntityManager는 내부적으로 DB Connection을 사용해서 DB를 사용하여 데이터를 제공함. 📦 영속성 컨텍스트JPA를 이해하는데 가장 중요한 용어직역하자면 “엔티티를 영구 저장하는 환경”이라는 뜻EntityManger.persist(entity) 시에 DB에 저장한다는 뜻이 아닌 영속성 컨텍스트를 통해 엔티티를 영속화 한다는 뜻→ DB저장이 아닌, ..
스프링부트로 서버 개발 시에, 프론트 단이 React인 경우서버에 Request를 보냈을 시에 CORS 에러가 발생한다. 그렇다면 CORS란 무엇일까? CORS (Cross-Origin-Resource-Sharing) 란? 🤷♂️교차 출처 리소스 공유를 뜻하는 CORS는, '서로 다른 출처에서 리소스를 공유하는 것'을 뜻한다. 여기서 말하는 출처란 다음과 같다. URL은 https://www.domain.com:3000/user?query=name&page=1 과 같은 형태로 이루어져 있다. 이 중, 'Protocol, Host, Port' 를 합쳐 부르는 말이 Origin(출처)이다. 이제 이해가 갈 것이다. CORS 허용 설정을 하지 않았을 경우,서버와 다른 Origin을 가진 곳에서 서버의 O..
1. SQL 중심적인 개발의 문제점 🤦♂️ JPA를 사용하기 전, 데이터 등록 조회 삭제 등의 상황마다 INSERT, UPDATE, SELECT 등 CRUD의 무한 반복! 만약 위와 같은 Member 클래스를 생성했다면 DB에 아래와 같은 SQL문을 입력해주어야함. 이후 Member 클래스에 tel이라는 맴버 변수가 추가되면 UPDATE 쿼리로 DB 테이블 구조를 변경해주어야함. 😢 하지만 SQL에 의존적인 개발을 피하기는 어렵다.개발자가 객체를 SQL로 변환하여 관계형 데이터 베이스에 넣는 과정이다.이 과정은 자바를 DB 연동하여 함께 사용할 때, 어쩔 수 없이 거쳐야하는 과정이다. 그림에 있는 "객체 -> SQL 사이의 SQL 변환 과정" 에서 개발자가 SQL 매퍼의 역할을 하고 있었다..!🤦..
스프링부트에서 테스트 코드를 작성하던 중갑자기 이전엔 발새하지 않던 Command line is too long. 라는 에러가 발생했다. 원인 This error occurs when the classpath gets too long or have many VM arguments. Most operating system has a limited number of characters for command line. 에러와 직면한 이후, 문제 해결을 위한 래퍼런스 탐색 도중 baeldung에서 에러의 원인을 발견할 수 있었다. baeldung에서 확인한 내용을 해석해보자면"이 에러는 classpath가 너무 길거나 가상머신 인수가 많을 때 발생하며, 대부분의 운영 체제는 커맨드 라인 글자의 글자수 제한을..