03장 스프링 부트 3 구조 이해하기

올찬·2023년 9월 25일
0

💡 이 글은 골든래빗 《스프링 부트 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 객체가 담당함

스프링 부트 프로젝트 구성

  • src/main/resources
    • 이 경로에 application.yml 파일을 생성하여 내용을 작성하면 서버 작동 시 실행됨
    • 이 경로에 data.sql 파일을 생성하여 쿼리를 작성하면 서버 작동 시 실행됨

💡보충학습

스프링 MVC 구조⁽¹⁾

  1. 사용자의 요청을 DispatcherServlet이 접수, web.xml에 정의됨
  2. HandlerMapping 인터페이스를 통해 요청을 처리할 컨트롤러를 찾아 반환
    • @RequestMapping과 같은 어노테이션 기준으로 판단
  3. HandlerAdapter 인터페이스로 찾은 컨트롤러를 동작시킴
  4. 요청을 처리할 로직이 담긴 클래스, View로 전달할 데이터는 주로 Model 객체에 담아서 반환됨
  5. 컨트롤러가 반환한 결과를 어느 View가 처리할지 해석하는 인터페이스
    • servlet-context.xml에 정의되어 있으며, InternalResourceViewResolver 구현체가 일반적임
  6. 사용자 요청 처리 결과를 JSP 등을 이용해 생성
  7. 최종 처리 결과를 사용자에게 응답
  • 위와 같이 모든 요청이 DispatcherServlet을 통하도록 설계된 방식을 Front-Controller 패턴이라 함

1) 구멍가게코딩단, 코드로 배우는 스프링 웹 프로젝트(개정판), (남가람북스, 2021), PP.121-4

profile
묘공단 스터디 블로그

0개의 댓글