인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

handrake님의 프로필 이미지

작성한 질문수

견고한 결제 시스템 구축

가상의 Checkout 기능 구현

가상의 Checkout 기능 구현 중 질문

작성

·

69

·

수정됨

0

가상의 Checkout 기능 구현 문의 질문드립니다. (13:40~)

R2DBC 를 사용해본 적이 없어서

실습환경 제약으로 강의 흐름따라 코드만 보다가 궁금한게 있는데요.

 

1) save 인터페이스가 JDBC 처럼 반환값 Intger(or Long 등 Number) 가 기본일까요?

 

2) func save 반환값으로 Mono<Void> 반환하는데, JPA Repository 인터페이스의 save 처럼 save 된 객체( JPA의 Entity 에 해당 )에 대해 updated 값이 반영되게 되나요?

 

강의에선 따로 domain 과 DB dto(or entity) 구분을 안해서

가령, updated_at 이나 created_at 컬럼 값을 갖는 경우, DB default timestamp 로 부여될 건데, call by value 로 DB 로 전달된 객체의 필드 값이 자동 갱신처리되기 때문에

Mono<Void> 반환이 CRUD 의 일반적인 패턴인건지 궁금합니다.

답변 1

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. handrake님, 질문 감사드립니다!

강의에서 R2DBC를 사용하여 가상의 Checkout 기능을 구현하는 과정에서의 몇 가지 의문점을 해결하는 데 도움이 될 수 있는 정보를 제공하겠습니다.

  1. save 인터페이스의 기본 반환값: R2DBC에서는 비동기 프로그래밍 방식으로 Mono<T> 또는 Flux<T> 형태로 값을 반환합니다. 이는 JDBC와 달리 블로킹 방식이 아니기 때문에 IntgerLong 등의 직접적인 반환값을 사용하지 않습니다. JDBC와의 차이점은 R2DBC가 reactive streams API를 사용해 비동기적으로 작업을 처리한다는 점입니다.

  2. Mono<Void> 반환 및 객체갱신: R2DBC에서 save 메서드가 Mono<Void>를 반영하는 경우, 이는 보통 저장 작업이 완료된 후 별도로 반환할 값이 없음을 나타냅니다. 일반적으로 R2DBC에서는 JPA처럼 자동으로 저장 후의 엔티티를 반환하지 않으며, 갱신된 객체를 보고 싶다면 별도로 select를 사용하여 데이터를 다시 읽어와야 합니다. Mono<Void>는 특정 조건 하에서 데이터 변경에 관심이 없거나 성공 여부만 확인하고 싶을 때 사용됩니다.

또한, updated_at이나 created_at 컬럼이 DB에 부여되는 경우, 보통 DB 자체적으로 timestamp를 업데이트합니다. R2DBC에서는 이러한 변화가 자동으로 객체에 반영되지 않으므로, 변화를 반영하고 싶다면 별도로 호출하여 데이터를 갱신해야 합니다.

관련된 강의 게시판 질문과 답변을 참조하면 도움이 될 것 같습니다. 아래에 관련 답변 링크를 공유드립니다:
- 강의를 듣고 문득 궁금한 점이 생겼습니다. - 해당 답변에서는 Webflux 사용 이유와 함께 비동기 처리에 대한 설명이 나와있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

handrake님의 프로필 이미지

작성한 질문수

질문하기