정글에서 온 개발자

Spring 큰 그림 그려보기 본문

정리

Spring 큰 그림 그려보기

dev-diver 2024. 1. 5. 11:23

서블릿 엔진 → @RestController

  • 개발자는 Javax.servlet.http.HttpServlet을 상속받는 서브 클래스를 작성해야 한다.
  • 서블릿 컨테이너는 서블릿 서브 클래스를 실행시킨다.
  • @RestController 에는 이 서블릿 서브 클래스가 이미 구현되어있다.

MVC

흐름

  • contoller → model (service → repository) 데이터처리
  • 데이터 → service → controller → view

M(odel)

  • @Service - Model에서 비즈니스 로직을 담당함
  • @Repository - 서비스에서 호출되어 실제 데이터베이스와 연결, 데이터 조회, 저장 작업을 수행함
    • .findbyId 등 이용 가능extends JpaRepository<Entity, Id> 로 JPA 이용
    • @Query 로 쿼리도 이용 가능

V(iew)

  • Thymeleaf
  • React

C(ontroller)

  • @Controller - 클라이언트 요청 처리, 사용자 입력 받아 모델 업데이트, 특정 뷰 선택,
  • 어떤 로직을 수행할지 결정하고 결과를 뷰에 전달함
  • 위 어노테이션 모두 @Component가 달려있다.

레이어드 아키텍쳐, 클래스의 두 종류

  • 일을 하는 클래스
    • 컨트롤러
    • 서비스
    • 퍼시스턴스
  • 데이터를 담는 클래스
    • DTO(Data transfer Object) - client와 최종적으로 주고받는 데이터 형태
    • 모델 - 비즈니스 데이터를 담음
    • 엔티티 - 데이터베이스의 테이블, 스키마를 표현

구현을 위한 Annotation

의존성 주입 Annotation

  • main
    • @SpringBootApplication
    • @ComponentScan 이 있다. 컴포넌트 스캔을 한다.
      • @Component가 달린 클래스를 스캔한다.
      • @Autowired 로 의존성을 연결해준다.
  • configClass
    • @Configuration
      • @Bean으로 빈을 수동 등록한다.

REST Annotation

  • @RestController
  • @RequestMapping(””)
    • @GetMapping - method
      • @PathVariable
      • @RequestParam - 파라미터
      • @RequestBody
        • RequestBodyDTO 필요

DTO Annotation

  • @Builder
  • @NoArgsConstructor
  • @AllArgsConstructor
  • @Data

Entity Annotation

  • @Builder - Builder 디자인 패턴 구현
  • @NoArgsConstructor - 필요. 매개변수가 없는 생성자 구현
  • @AllArgsConstructor -모든 매개변수로 받는 생성자 구현.
  • @Data - Getter/Setter 메서드를 구현
  • @Entity
  • @ Table(name=”이름”)
    • @Id
    • @GeneratedValue(generator)
    • @GenericGenerator(name, strategy) - 나만의 전략으로 생성하고 싶을 때

템플릿

패키지 구성

  • controller
    • Controller - @Controller, Service 주입
    • DTO (ex. MemberForm)
  • service
    • ServiceClass - Repository 주입
  • domain
    • Model 비즈니스 객체 (ex. Member)
  • repository
    • RepositoryInterface - JpaRepository를 extends 하면 자동구현도 된다.
    • Entity

호출 흐름 예시

  • controller : service.join() → service : repository.save() → repository : JPA