💡 이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 03장 써머리입니다.
프레젠테이션 계층: HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전송하는 역할, @Controller 객체가 담당
@RequestMapping(value = "/api/articles")
@RestController
@RequiredArgsConstructor
public class ArticleController {
private final ArticleService articleService;
@GetMapping(value = "/{slug}")
public ResponseEntity<ArticleResponseDto> get(@PathVariable final String slug,
@AuthenticationPrincipal final LoginUser loginUser) {
ArticleResponseDto articleResponseDto;
if (loginUser == null) articleResponseDto = articleService.get(slug, null);
else articleResponseDto = articleService.get(slug, loginUser.getUser().getId());
return ResponseEntity.status(HttpStatus.CREATED).body(articleResponseDto);
}
}
비즈니스 계층: 서비스를 제공하기 위한 로직이 작동하는 계층, 컨트롤러에 의해 선택된 @Service 객체가 사용자 요청을 처리하는 역할
@Service
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ArticleServiceImpl implements ArticleService {
private final ArticleRepository articleRepository;
@Override
public ArticleListResponseDto list(final String tag, final String author, final String favorited, final Long loginId, int limit, int offset) {
List<Article> foundArticles = articleRepository.list(tag, author, favorited, limit, offset);
if (foundArticles.isEmpty()) return new ArticleListResponseDto(0);
List<ArticleListItemResponseDto> articles = foundArticles.stream()
.map(article -> getArticleListItemResponseDto(loginId, article))
.collect(Collectors.toList());
return new ArticleListResponseDto(articles);
}
}
퍼시스턴스 계층: 데이터베이스 관련 로직을 처리, @Repository 객체가 담당함
💡보충학습
1) 구멍가게코딩단, 코드로 배우는 스프링 웹 프로젝트(개정판), (남가람북스, 2021), PP.121-4