Spring 설계 구조

춤인형의 개발일지·2024년 12월 22일

Spring

목록 보기
2/8

24/12/17(화)

Controller

책임

  • 클라이언트(고객)의 요청 처리 (endpoint 정의)
  • 요청 시 필드 데이터 검증
  • 클라이언트에게 응답하기 (응답 코드, 데이터)

🧐 컨트롤러는 여러개가 있을 수 있다.
상품 controller , 댓글 컨트롤러, ~~~
의심을 들면 더블체킹을 해야한다. 그 필요를 없애기 위해서 컨트롤러에서 검사해주는 역할, 즉 데이터가 잘못전달되면 에러를 반환한다.

⚡️만드는 법

  1. 클래스를 하나 만든다
    관습적 이름: XxxRestController
    클래스 이름 위에 annotation을 하나 붙인다: @RestController
  2. 메서드(함수)들을 만든다
    관습적 이름: create(), findOne(), findAll(), deleteOne(), …
    1. 메서드 이름 위에 annotation을 하나 붙인다: @XxxMapping() (HTTP method 결정)
    2. @XxxMapping() 소괄호 안에 url path를 (String으로) 지정한다

Service

역할

  • 자바 프로그래밍할 때의 핵심 로직(비지니스 로직) 처리
  • repository를 활용해서 함수 만들어 일시키기
    만들어 놓으면 @Controller(컨트롤러)에서 @Depedency Injection (DI, 의존성 주입) 받음

의존성 주입

한 오브젝트가 다른 오브젝트에 의존할 때 (다른 오브젝트를 필요로 할 때)
❌ 필요한 오브젝트를 직접 만들지 않고
✅ 이미 만들어진 오브젝트를 주입(전달)받는 것

🤖생성자 주입 방식
의존성주입 방식에서 내가 사용할 것은 생성자 주입방식이다.
이 방식을 사용하면 테스트 코드 작성하기도 편하기 때문에 이 방식으로 사용한다.

@RestController
public class ProductRestController {

    private ProductService productService;

    public ProductRestController(ProductService productService) { // @Autowired 생략됨
        this.productService = productService;
    }
}

Repository

역할

  • DB에 데이터를 저장, 조회 등
  • 매서드를 활용하기 위한 파일

⚡️만드는 법

public interface XXXXRepository extends JpaRepository<클래스이름, 클래스 id 데이터타입>

save, findAll, findById 등 자주 사용되는 repository 메서드들을 구현해 놓았음

엔티티

역할

  • 도메인 모델링
    • 사업 도메인을 어떻게 클래스로 구현해야 데이터를 잘 관리할 수 있을까?
      (API 신경 안 씀)
  • DB 테이블 정의

⚡️만드는 법

  1. 클래스를 하나 만든다
    관습적 이름 : 아무것도 안붙이고, 만들 이름만 적는다.
  2. id추가
    private Long id;
  3. @entity, @id추가
    @entity 이게 있어야 진짜 entity가됨
    @id id가 없으면 말이안됨. id값을 찾을 수 없다는 건데 이러면 특정 데이터를 수정, 삭제, 읽기 등등이 다 안됨. 즉, 이게 없으면 데이터를 식별할 수가 없게 됨
  4. @GenerateValued(strategy=Genertation Type)
    id 자동생성 (id를 내가 직접 1,2,3 값을 넣어주지 않아도 알아서 데이터가 들어오는대로 쌓이게 됨.)

DTO

역할

  • 데이터를 전달하는 것
    • Request(요청)
      클라이언트 → 서버
    • Response(응답)
      서버 → 클라이언트 (서버 ↔ 클라이언트 주고받는 데이터는 JSON 형식)
  • 검증(validation) 기준

📌 3가지의 동작

사용자가 데이터 입력
-> Request로 데이터 들어옴 (사용자의 요청) 이때 작성하는 코드가 디티오(레코드)
-> 여기서 들어온 데이터에 대해 validation(검증)을 하고 검증이 끝나면 entity로 넘어감(이건 그냥 클래스로)
-> 마지막에 controller에 넘어와 함수를 만나고 return을 해주게됨

  • controller는 service를 선언함
  • service는 repository를 선언한다.

😐 느낀점

결국에는 컨트롤러가 전체를 담당하고, 그 안에 필요한 것들을 넣어줘야한다..
전체적인걸 보고, 세부적인걸로 들어가야 제대로 할 수 있을 것 같다!!

0개의 댓글