• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

OSIV false로 설정할 때

23.03.09 22:36 작성 조회수 354

0

궁금증이 생겨 한가지 질문할게요.

만약 Service 계층에서 validate(), update()라는 메소드가 있을 때 두 메소드 모두 로직 시작부분에 엔티티를 조회한다고 하면 두 메소드에서 모두 select 쿼리가 나갑니다.

OSIV 설정을 true로 하면 Controller 영역까지 트랜잭션이 유지 되기 때문에 컨트롤러 안에

xxxService.validate();

xxxService.update();

이렇게 해도 같은 트랜잭션 안에 있었기 때문에 select 쿼리는 한번만 나갑니다.

 

하지만 OSIV 설정을 false로 하면 Controller 영역까지 트랜잭션이 유지 되지 않기 때문에 위와 같이 작성하면 select 쿼리가 두번 나갑니다.

이를 해결하기 위해 두가지 메소드를 하나로 합쳐

Controller 영역에서 사용할 수 있습니다.

xxxService.updateSet();

하지만 이때는 입력 받아야 하는 인자 수가 많을 경우 3, 4개 넘게 받는 경우가 생겨 질문드립니다...

쿼리 성능으로는 합치는게 맞지만 구조적으로 이러한 설계가 맞는지 궁금합니다. 감사합니다~!

답변 1

답변을 작성해보세요.

1

codesweaver님의 프로필

codesweaver

2023.03.11

안녕하세요, yhwjd 님! 공식 서포터즈 codesweaver 입니다.

OSIV는 false 인것이 안전하다고 생각합니다.

false 인 상태에서 질문하신 문제를 해결하려면 말씀하신 것처럼 valid, update 두 메서드를 하나로 합쳐야 합니다.

또 그게 합리적이라고 생각합니다. 상태가 유효한지 확인(valid)하고 업데이트 하는 건 하나의 프로세스로 볼 수 있기 때문입니다.

 

그리고 파라미터가 많아지는 문제는, 파라미터를 객체로 바꾸는 방법을 사용할 수 있습니다.

보통 파라미터 3개 까지는 파라미터 갯수를 늘리나 4개부터는 이를 객체로 바꾸는 방법을 고려할 때 입니다.

파라미터를 하나로 추상화 할 수 있는 이름으로 DTO객체를 만든다면 코드 읽기가 더 수월하겠지요.

감사합니다.

yhwjd님의 프로필

yhwjd

질문자

2023.03.12

감사합니다~