BackEnd/Spring

BackEnd/Spring

[JPA] @Modifying 어노테이션 - clearAutomatically, flushAutomatically란?

Spring JPA, @Modifying 어노테이션 clearAutomatically, flushAutomatically JPA를 사용하여 개발하다보면 DB의 데이터를 수정 또는 삭제하기 위해 벌크 연산을 사용해야하는 상황이 종종 발생한다. 이때 여러분들은 @Modifying 어노테이션을 붙여주어야 한다는 이야기를 들어봤을 것이다. 벌크연산이란? 하나의 데이터가 아닌 여러 데이터를 한번에 수정하거나 삭제하는 연산 위 사진과 같이 JpaRepository를 상속받은 Repository 인터페이스의 메서드 중, 벌크연산을 수행하는 메서드의 상단에 @Modifying 어노테이션을 붙여주어야 한다. 실제로 Update 또는 Delete 쿼리에 해당 어노테이션이 붙어있지 않는다면 QueryExecutionRequ..

BackEnd/Spring

[트러블슈팅] [스프링부트] 자바 Collection 객체, @RequestBody로 받기 (feat. Jackson-databind)

문제상황 ⛔️ public class CompetitionAttendRequestDto { private Long cmptId; private Long orgId; private List cmptEventIds; 위와 같이 컬렉션 타입의 변수 List cmptEventIds 를 가진 dto를 @RequestBody를 통해 json으로 데이터를 전달받아 dto클래스로 매핑하는 상황에서 컬렉션 타입 변수에 의해 매핑 관련 오류가 발생 List 타입의 컬렉션 객체를 json으로 받아 매핑할 때, 위처럼 대괄호로 묶어주면 된다고 알고 있었지만 실패 실패한 직후 오류 로그 기본 생성자와 같은 생성자가 존재하지 않는다는 등의 문구가 보여 넣어봤지만 여전히 같은 결과.. 해결 ✅ 몇분동안 삽질하다가 jackson-d..

BackEnd/Spring

[트러블슈팅] [JPA] 변경 감지(Dirty Checking)가 작동하지 않는 경우 해결법 (feat. @Transactional)

JPA Dirty Checking jpa는 변경감지(dirty checking) 라는 기능을 가지고 있다. 이는 영속성 컨텍스트에 올라가있는 엔티티에 대해, 값을 수정하였을 때 해당 트랜잭션이 끝날 때, 변경된 값을 확인하여 DB에 변경 사항을 자동으로 반영해주는 아주 간편한 기능이다. 본인또한 이 기능을 사용하여 Entity의 값을 update 해주려고 하였지만, 왜인지 작동하지 않았다. 그리고 운좋게도 구글링을 통해 그 이유를 알 수 있었다. 문제 상황 위와 같은 데이터의 값을 변경감지를 통해 변경하도록 구현한 코드에서 변경감지가 작동하지 않았던 상황이다. 최리더라는 값을 김리더로 변경하여 update에 보내주면 함께 보낸 PK로 Entity를 조회하고, 조회한 Entity의 orgLeaderName..

BackEnd/Spring

[SpringBoot] [트러블슈팅] 스프링 Response 시, 한글 깨지는 오류 해결

스프링부트 Response 시, 한글 깨지는 오류 해결 문제 상황 ⛔️ 스프링을 통해 RestAPI 서버 개발 도중, 한글로 작성한 Response Body의 값이 "??? ???." 등과 같이 출력되는 현상을 마주했다. 아무래도 response의 Content-Type이 utf8이 아니기 때문에 발생하는 것이 아닐까 의심을 했고, 정답이었다. 때문에 response 응답에 Content-Type 헤더를 추가해주어야 했다. 해결 방법 💭 해결 방법은 Controller의 RequestMapping 어노테이션 단에, @RequestMapping(value = "/competition", produces = "application/json; charset=UTF8") 위와 같이 produces 프로퍼티를 추..

BackEnd/Spring

[JPA] 영속성 관리 - 내부 동작 방식

✔ JPA에서 가장 중요한 2가지1. 객체와 관계형 데이터베이스 매핑하기 DB와 객체를 어떻게 설계해서 어떻게 매핑되도록 할 것인가(설계와 관련된 부분) 2. JPA의 동작원리 영속성 컨텍스트 ⚙ 엔티티 매니저 팩토리와 엔티티 매니저클라이언트의 요청이 올때마다 EntityManagerFactory에서 EntityManager를 생성해서 제공한다.EntityManager는 내부적으로 DB Connection을 사용해서 DB를 사용하여 데이터를 제공함. 📦 영속성 컨텍스트JPA를 이해하는데 가장 중요한 용어직역하자면 “엔티티를 영구 저장하는 환경”이라는 뜻EntityManger.persist(entity) 시에 DB에 저장한다는 뜻이 아닌 영속성 컨텍스트를 통해 엔티티를 영속화 한다는 뜻→ DB저장이 아닌,..

BackEnd/Spring

[SpringBoot] [트러블슈팅] 리액트 스프링부트 CORS 에러 해결

스프링부트로 서버 개발 시에, 프론트 단이 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을 가진 곳에서 서버의 ..

BackEnd/Spring

[JPA] JPA 기초

1. SQL 중심적인 개발의 문제점 🤦‍♂️ JPA를 사용하기 전, 데이터 등록 조회 삭제 등의 상황마다 INSERT, UPDATE, SELECT 등 CRUD의 무한 반복! 만약 위와 같은 Member 클래스를 생성했다면 DB에 아래와 같은 SQL문을 입력해주어야함. 이후 Member 클래스에 tel이라는 맴버 변수가 추가되면 UPDATE 쿼리로 DB 테이블 구조를 변경해주어야함. 😢 하지만 SQL에 의존적인 개발을 피하기는 어렵다. 개발자가 객체를 SQL로 변환하여 관계형 데이터 베이스에 넣는 과정이다. 이 과정은 자바를 DB 연동하여 함께 사용할 때, 어쩔 수 없이 거쳐야하는 과정이다. 그림에 있는 "객체 -> SQL 사이의 SQL 변환 과정" 에서 개발자가 SQL 매퍼의 역할을 하고 있었다..!🤦‍..

BackEnd/Spring

[Spring] [SpringBoot] 스프링 Bean 등록에 대해 잘못 알고 있던 것

팀 단위로 프로젝트를 진행하면서 팀원분 덕분에 잘못된 기초 개념을 바로잡을 수 있었다. 관련된 부분은 스프링 빈 등록인데 나는 여지껏 AppConfig를 만들고 @Bean 어노테이션을 사용하여 스프링 컨테이너에 스프링 빈을 등록하고서 @Service, @Repostiroy 등의 어노테이션으로 또 스프링 빈을 등록을 하는 멍청한 실수를 하고 있었다. @Service, @Repository 등 어노테이션을 사용하면 Main Method의 @SpringBootApplication 에 포함된 @ComponentScan 어노테이션이 해당 어노테이션을 가진 클래스들을 찾아 "얘는 Service고, 얘는 Repository네~" 라고 알아서 판단하여 알맞은 빈으로 등록을 해준다. (Service와 Repository..

PgmJUN
'BackEnd/Spring' 카테고리의 글 목록 (2 Page)