[SPRING:이론] 3

김승수·2024년 5월 20일
0

SPRING

목록 보기
3/27

⏰ 2024. 05. 20 월

✔ 스프링 이론 강의를 듣고 정리하면서 작성했습니다.

💡 목차

  1. 3 Layer Architecture
  2. IoC와 DI
  3. JPA

3 Layer Architecture

3 Layer Architecture(3 계층)

하나의 클래스에서 모든 API의 처리를 수행하고 있는 경우, 너무 많은 기능이 하나의 클래스에 존재해 매우 복잡하고 문제 발생 시 유지보수가 어렵기 때문에, API의 기능의 처리 과정을 크게 Controller, Service, Repository 3계층으로 분리해 작성하는 것을 3 Layer Architecture 라고 부른다.

1. Controller

클라이언트로부터 받은 요청과 Request 데이터를 Service에 전달하고, Service에서 처리 완료된 결과를 클라이언트에게 응답을 전달하는 계층

2. Service

Controller에서 전달받은 요청의 요구사항을 처리하는 비지니스 로직을 수행하고, DB저장 및 조회가 필요할 때는 Repository 계층에 요청하는 계층

3. Repository

DB 연결, 해제, 자원 관리 등의 DB 관리 기능을 수행하고, CRUD 작업을 통해 얻은 데이터를 Service 계층에 전달하는 계층

IoC와 DI

IoC(제어의 역전)와 DI(의존성 주입)

IoC와 DI는 설계 원칙과 디자인 패턴, 즉 IoC는 설계 원칙이고, DI는 디자인 패턴으로 좋은 코드 작성을 위한 Spring의 핵심 기술이다.
Spring에서는 DI 패턴을 사용하여 IoC 설계 원칙을 구현하고 있다. 즉, 의존성 주입을 통해 제어의 역전을 구현하고 있다.

IoC(제어의 역전)

기존의 구현객체는 객체의 생성 및 실행, 생명주기 관리, 제어 등을 개발자가 직접 해야하지만, IoC는 개발자는 직접 객체를 생성하지 않고, 외부 조립기가(IoC Container) 해당 제어권을 가져와 객체의 생명주기를 컨트롤 함으로써, 의존 관계의 방향이 달라지게 되는 것을 의미한다.

  • IoC의 장점(= 써야하는 이유)
    • 역할과 관심을 분리해 응집도를 높이고 결합도를 낮추며, 이에 따라 변경에 유연한 코드를 작성할 수 있다.
    • 프로그램의 진행 흐름과 구체적인 구현을 분리시킬 수 있다.
    • 개발자는 비즈니스 로직에 집중할 수 있다.
    • 객체 간 의존성이 낮아진다.

DI(의존성 주입)

DI(Dependency Injection)는 IoC를 구현하기 위해 사용하는 디자인 패턴 중 하나로, 이름 그대로 객체의 의존관계를 객체 기준의 외부에서 주입시키는 패턴이다.

  • DI의 3가지 조건

    • 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않고, 인터페이스에만 의존하고 있어야 한다.
    • 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정한다.
    • 의존관계는 사용할 객체에 대한 레퍼런스를 외부에서 주입해 줌으로써 만들어진다.
  • DI 방법 3가지

    • 생성자 주입 : 필요한 의존성을 모두 포함하는 생성자를 만들고, 그 생성자를 통해 의존성 주입하는 방법
    • Setter 주입 : 의존성을 입력받는 Setter 메서드를 만들고, 메서드를 호출해서 의존성을 주입하는 방법
    • 필드 주입 : 의존성이 필요한 필드를 선언하고, 직접 new 키워드로 생성해 의존성을 주입하는 방법

⚡ 미리 만든 객체를 주입해주는 외부는 바로 "Spring 프레임워크"

IoC Container와 Bean

Bean은 Spring이 관리하는 객체이고, IoC Container는 Bean을 모아둔 컨테이너이다.

Bean 등록 방법 - @Component 어노테이션

  • Bean으로 등록하고자하는 클래스 위에 설정, Bean 이름은 클래스의 맨 앞글자만 소문자로 변경

⚡ Spring 3계층 어노테이션 @Controller(@RestController), @Service, @Repository는 3계층 역할 분리 뿐만 아니라 Bean으로 등록할 때 사용되는 @Component을 포함하고 있어, 3계층 분리와 동시에 해당 클래스들을 Bean으로 등록해준다.

Bean 사용 방법 - @Autowired 어노테이션

  • 해당 필드를 대입해주는 생성자 위에 설정, 설정한 생성자가 대입해주는 필드에 의존성을 주입

⚡ 객체의 불변성을 확보할 수 있는 생성자를 사용하여 의존성 주입을 하는게 좋다.

  • @Autowired 적용 조건 : IoC Container에 의해 관리되는 Bean 객체만 사용 가능

  • @Autowired 생략 조건 : 생성자 선언이 1번일 경우 생략가능

JPA

ORM

ORM은 Object-Relational Mapping의 약자로 객체와 DB의 관계를 매핑해주는 도구이고, SQL 작업을 줄여주기 위한 기술이다.

JPA

JPA는 자바에서 사용되는 자바 ORM 기술에 대한 표준 명세이다.

JPA는 애플리케이션과 JDBC 사이에서 동작한다. 그리고 DB 연결 과정을 직접하지 않아도 자동으로 처리해주고, 객체를 통해 간접적으로 DB 데이터를 다룰 수 있어 매우 쉽게 DB 작업을 처리한다.

  • 하이버네이트(Hibernate) : JPA는 표준 명세이고, 이를 실제로 구현한 프레임워크로 스트링 부트에서 기본적으로 사용된다.
profile
개발하는 미어캣

0개의 댓글