service와 controller의 역할에 대한 질문이 있습니다.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
service와 controller의 역할에 대한 질문이 있습니다.
Answer 5
3
안녕하세요. kevin님
2주 전에 답변을 하셨는데 저희가 질문을 놓셨습니다.
(인프런에서 가끔 메일이 오지 않아서 질문을 놓치는 경우가 있습니다. ㅠㅠ)
1. 적절한 방법이 뭘까요?
코드를 보니 충분히 잘 개선하셨습니다.
2. 복잡하고 큰 규모의 서버 코드를 보고싶은데 좋은 예시를 어디서 찾을수 있을까요?
복잡하고 큰 규모의 코드는 사실 실무에서 일하지 않는 이상 확인하기 어려운 것 같아요. 이번에 공부하신 예제가 그나마 학습용으로는 어느정도 복잡한 예제입니다.
관련해서 도메인 주도 설계에 대해서 공부해보시면 많은 인사이트를 얻으실 수 있을거에요.
만들면서 배우는 클린 아키텍처라는 책도 괜찮습니다.
3. 제가 해결방법으로 여러 service를 주입받아서 사용만하는 service를 만들어서 컨트롤러에 있던 코드를 거기로 옮겨서 컨트롤러에 비즈니스 로직이 생기는걸 없에고 순환참조, 코드 중복 등을 제거 해봤는데 이게 맞는건가요?
서비스에서 서비스를 주입 받아도 됩니다. 순환 참조가 걱정되면 서비스를 쪼개서 순환 참조가 되지 않도록 개선하면 됩니다.
4. MSA와 상관있는 문제일까요?
네 MSA와는 관계 없습니다.
감사합니다.
0
//서비스를 주입받는 서비스
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class BookComplexService {
private final BookInfoService bookInfoService;
private final BookService bookService;
private final ClubBookUserService cbuService;
private final UserService userService;
private final PostService postService;
@Transactional
public Long createBookAndRelated(CreateBookDto createBookDto, Long userId) {
BookInfo bookInfo = BookInfo.builder()
.name(createBookDto.getName())
.isbn(createBookDto.getIsbn())
.build();
bookInfo = bookInfoService.createOrFindBookInfo(bookInfo);
Book newBook = Book.builder()
.category(createBookDto.getCategory())
.bookInfo(bookInfo)
.build();
Long bookId = bookService.createBookWithValidation(newBook, bookInfo.getIsbn(), userId);
User user = userService.findById(userId);
ClubBookUser cbu = ClubBookUser.builder()
.book(newBook)
.user(user)
.build();
cbuService.createClubBookUser(cbu);
return bookId;
}
0
//수정한코드
@PostMapping
public ResponseEntity<CreateBookDto> createBook(@SessionAttribute(name = SessionConst.LOGIN_USER, required = false) User loginUser,
@RequestBody CreateBookDto createBookDto, UriComponentsBuilder b) {
Long bookId = bookComplexService.createBookAndRelated(createBookDto, loginUser.getId());
UriComponents uriComponents = b.path("/books/{bookId}").buildAndExpand(bookId);
return ResponseEntity.created(uriComponents.toUri()).body(createBookDto);
}
0
//기존 코드
@PostMapping
public ResponseEntity<CreateBookDto> createBook(@SessionAttribute(name = SessionConst.LOGIN_USER, required = false) User loginUser,
@RequestBody CreateBookDto createBookDto, UriComponentsBuilder b){
BookInfo bookInfo = BookInfo.builder()
.name(createBookDto.getName())
.isbn(createBookDto.getIsbn())
.build();
try {
bookInfoService.createBookInfo(bookInfo);
}catch (IllegalStateException e){
log.info("bookInfoService = {}",e.toString());
BookInfo byIsbn = bookInfoService.findByIsbn(bookInfo.getIsbn());
bookInfo = byIsbn;
}
Book newBook = Book.builder()
.category(createBookDto.getCategory())
.bookInfo(bookInfo)
.build();
Long bookId = bookService.createBook(newBook);
ClubBookUser cbu = ClubBookUser.builder()
.book(newBook)
.user(loginUser)
.build();
cbuService.createClubBookUser(cbu);
UriComponents uriComponents =
b.path("/books/{bookId}").buildAndExpand(bookId);
// return ResponseEntity.noContent().build().created(uriComponents.toUri()).build();
return ResponseEntity.created(uriComponents.toUri()).body(createBookDto);
}
sdk 설정 오류
0
49
2
오탈자 - @Transactional
0
55
1
src/test/resources 테스트 경로 문제
0
50
1
상품 등록후 H2 db 출력 순서 바꿀 수 있나요?
0
64
1
MemberRepositoryTest 실행오류
0
81
1
boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)
1
183
2
강의 마지막 QueryDSL 사용 부분 질문있습니다
1
137
2
클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.
0
51
1
도메인 모델 패턴 vs 트랜잭션 스크립트 패턴
0
71
1
기본 생성자
0
60
1
h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.
0
100
1
멤버서비스테스트 부분에서 막힙니다.
0
164
4
실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?
0
116
1
초반에 h2 다운로드 과정 꼭 필요한가요?
0
118
2
자신 필드에도 get으로 접근하는 이유가 있을까요?
0
113
1
24분 27초 연관관계 편의 메서드 위치
0
113
1
단건 주문만 가능하게 한건 의도한 부분이신가요?
0
108
2
빌드 툴, Gradle
0
59
1
h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다
0
76
2
Repository에서 EntityManager 주입 방식 차이
0
88
1
롬복과 사용자 정의 setter 메서드
0
71
1
주문 목록 조회 fetch join 질문드립니다
0
81
1
dirty checking 질문드립니다.
0
81
1
동시성 관련 질문입니다
0
74
1

