inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링과 JPA 기반 웹 애플리케이션 개발

스터디 참여 및 탈퇴

비즈니스 로직의 처리 방식의 차이점 문의

205

Santiago

작성한 질문수 1

1

안녕하세요, 먼저 강의 잘 듣고 있습니다.

금일 진행중에...
뭔가 좀 정리가 안되는 부분이 있어서 한번 문의드립니다.

멤버가 가입하는 저장 처리를 할 경우,
강사님이 구현하신 코드는 서비스에서 도메인객체에서 처리하게끔 구현하셨는데...

- StudyService.java
public void addMember(Study study, Account account) {
    study.addMember(account);
}

- Study.java
public void addMember(Account account) {  
    this.getMembers().add(account);
}

저 같은 경우에는 StudyService 에서 바로 처리하도록 했는데...
public void join(Account account, Study study) { 
    Optional<Account> byId = accountRepository .findById(account.getId());
    byId.ifPresent(a -> study.getMembers().add(a)); 
}

의문 1) Account는 detach이기때문에 persistence상태로의 조회로 한번 더 안해도 되는건가요?

2) 심플하게 간다면 Service 코드에서 직접 study.getMembers().add(account); 로 해도 될텐데, 왜 도메인 객체로 넘겨서 가입(저장) 처리를 하셨는지가 궁금합니다.

3) 2번과 같은 연장선상의 질문이긴 합니다만 서비스에서 직접 처리한 (예: study.setPath(newPath);)와의 차이가 있는것인가요?

디자인 패턴의 이슈인지, 아님 다른 효율성 들을 위한 고려인지...궁금해서 문의드립니다.

java thymeleaf spring spring-boot JPA

답변 1

0

백기선

안녕하세요.

1) 컨트롤러로 코드가 들어오기 전부터 OSIV 필터 때문에 열려있던 영속성 컨텍스트에 컨트롤러에서 조회했던 study가 이미 persistent 상태로 들어가 있었고, 그걸 서비스쪽에서 그대로 전달 받았으니 여전히 study는 이미 Persistent 상태입니다. 그 상태에서 서비스에 걸려있는 트랜잭션 내부에서 study 객체에 변경이 있었으니 트랜잭션이 끝나면서 변경 사항을 DB에 반영해주고 끝납니다. 그래서 insert 쿼리도 볼 수 있는 것이죠.

2, 3) 이건 취향입니다만, 가능하면 캡슐화를 하고 메시지 체인을 길게 가져가지 않도록 노력한것이지 기능상 차이는 없습니다.

Study 개설하는 로직에 대해서 궁금점이 있습니다.

0

56

1

앱 재시작 후 회원가입

0

105

1

app.host 관련 질문이 있습니다

0

99

1

강의 버전 정보

0

129

1

event, study 참조

0

224

2

비밀번호 변경 로직 질문있습니다.

0

136

1

프로필 수정 처리 merge 질문입니다.

0

109

1

회원가입 성공 후 redirect이동시 권한 질문

0

498

3

HtmlEmailService 개발하다 생긴 의문입니다

0

254

2

postgreSql 연결하여 JPA 를 통해 테이블 생성시 ZONE 테이블 생성에서 에러가 납니다

0

433

2

수업질문 [긴급] 로그인안되는 문제 말씀해주시는 부분 반영해서 최종 질문드립니다

0

265

2

[긴급-재업로드]수업질문 로그인 안 되는 문제

0

239

1

[긴급] 로그인해도 네비게이션 바가 안 바뀌고 있습니다!! 로그인이 안 됩니다 도와주세요

0

278

1

cropper 오류 문제로 질문드립니다..

0

289

2

authentication관련 질문...

0

499

2

모임참가 취소 할때 로직 질문

0

352

3

안녕하세요 기선님 질문이있습니다..

0

232

1

HTML코드 및 강의 중간자료들

0

682

3

springSecurity

0

526

2

버전 질문입니다.

0

305

1

부트스트랩, css

0

358

2

영속성 컨텍스트 질문

0

253

2

다시 강의를 보니 드는생각..

0

356

2

5:50에 나오는 HTML코드는 어디서 찾을 수 있나여?

0

318

1