inflearn logo
강의

講義

知識共有

ジュジュで一日で始まるバックエンド - スプリング、ドッカー、AWS

4-4 [グルメ] グルメ修正・削除APIの開発

맛집 수정 API 질문입니다

解決済みの質問

485

profit069

投稿した質問数 12

2

editRestaurant() 메서드에서요,
RestaurantEntity restaurant = restaurantRepository.findById(restaurantId).orElseThrow(()->new RuntimeException("없는 레스토랑입니다")); restaurant.changeNameAndAddress(request.getName(), request.getAddress()); //restaurantRepository.save(restaurant);
여기서 save는 안해도 될 것같습니다.
영속성컨테이너에 이미 있는 엔티티라 수정을 하면 save를 안해도 반영이 되는것으로 알고 있습니다.

spring git docker spring-boot jpa github

回答 1

3

jyujyu

안녕하세요 지식공유자 쥬쥬입니다!

 

말씀하신대로 JPA에서는 영속성컨텍스트에 있는 Entity의 더티체킹을 통해 update 쿼리를 날려주므로 save() 메소드를 호출하지 않아도 데이터베이스에 반영됩니다! 좋은 말씀이신 것 같습니다!

 

하지만 이것은 JPA Native한 기능(spring-data-jpa가 가지고 있는 특징이란 뜻입니다!)으로, @Repositorysave() 메소드를 명시적으로 호출해주는 것이 특정 상황에서는 좋을 수 있습니다.

 

예를 들어, 다음과 같은 요구사항이 생겼다고 가정해볼게요!

  • JPA로 선언한 Entity를 다른 spring-data 라이브러리로 교체할 경우 (mongo db나 r2dbc와 같은)
    이 때 JPA를 사용할 때에는 동작했던 코드들이 단순히 spring data 구현체를 교체함으로써 동작이 안하는 상황이 발생할 수 있습니다!

 

사실 위같은 상황은 많이 발생하지는 않습니다. 저 같은 경우에는 메모리에 있는 객체의 상태가 변경되었다면 저장소(Repository)에 다시 저장(save)해주는 코드가 명시적으로 있는 것이 조금 더 "자연"스럽다고 느껴지는데요. 이것은 제 느낌일 뿐 개개인이 모두 다르게 느낄 수 있다고 생각합니다.

인프넌님이 위같은 견해들을 함께 생각해보시고, 더 낫다고 판단되는 방향으로 개발하시는 것이 가장 좋다고 생각합니다!

 

Appendix.

JPA의 더티체킹 기능은 마틴파울러의 저서 엔터프라이즈 애플리케이션 아키텍처 패턴 (P of EAA)의 작업 단위(Unit of Work) 패턴을 읽어보시면 이해하기가 더욱 좋으실거에요!

1

profit069

실무에서는 또 그런 경우가 생길 수 있군요 오늘도 배워갑니다. 상세한 답변 정말 감사합니다 !

0

jyujyu

인프넌님 도움이 되셨다니 다행입니다 ! 시간 되실 때 수강평 작성두 부탁드려용 강의 좋으셨다면 주변에 홍보도 많이 해주세요 :-) 감사합니다 ☺️🤍

lombok 설정에서 오류가 발생해요

0

176

2

2 -1 lombok 설정에서 오류가 발생해요

0

224

3

서비스 메소드 작성 시 질문!

0

346

2

RestaurantApi 컨트롤러 개발 질문

0

275

2

@Transactional 질문 있습니다!

0

275

2

변경데이터 저장 방법 질문 있습니다!

0

342

2

dto 관련 질문입니다.

0

388

2

이너 클래스 vs 클래스 별도 생성의 차이?

0

376

2

TestEntityApi중 createTestEntity에서 질문있습니다

0

228

2

ResponseBody 강의에서 클래스 생성 관련 질문드립니다.

0

225

2

2-3 진행 중 에러 발생

0

356

2

ReviewDto 객체 사용 이유

0

313

2

2-2 h2 console connect 관련 질문 드립니다.

0

296

1

소스작성중에서요 queryFactory중에?

0

415

3

docker에 관하여 질문 드립니다.

1

297

1

DTO, Request, Response 차이점

1

1274

1

TestRepositoryImpl 질문이요

3

317

1

pk, fk 연결

1

512

2

.gitignore 에 포함할 파일

0

1007

1

Spring Initializr 스프링 버전

0

262

1

2-4 수정중 오류

0

327

1

1-6 생성자 오류

1

265

2

2-3 진행중 에러

0

275

1

IP주소:8080/h2-console 을 했을때 404 에러가 발생합니다.

2

2599

1