Spring 입문 2주차 (1)

신성훈·2024년 5월 20일

TIL

목록 보기
20/162
post-thumbnail

오늘의 학습 키워드

  • 3 Layer Architecture
  • IoC와 DI
  • JPA

3 Layer Architecture

  • Controller 클래스 하나로 모든 API를 처리하고 있는 문제점이 있어서
    -> 처리 과정을 크게 Controller, Service, Repository 3개로 분리
  1. Controller
    -클라이언트의 요청에 의해 Request를 Service에 전달하고, Service에서 처리 된 결과를 클라이언트에서 Response 한다.

  2. Service
    -클라이언트의 요구사항을 처리, DB 저장 및 조회가 필요할때는 Repository에게 요청한다.

  3. Repository
    -DB 관리(연결, 해제, 자원관리)하고, DB CRUD 작업을 처리한다.

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

  • IoC, DI는 객체지향의 SOLID 원칙 그리고 GoF의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴

  • IoC는 설계 원칙에 해당하고 DI는 디자인 패턴에 해당

  • 주입
    -필요에 의한 객체를 해당 객체로 전할하는 것

  • 의존성
    -결합과 의존성을 낮추는 작업을 한다.
    -필드 직접 주입, 메서드를 통한 주입, 생성자를 통한 주입
    -강한결합 해결방법

    1. 각 객체에 대한 객체 생성은 딱 1번만!
    2. 생성된 객체를 모든 곳에서 재사용!
    3. 생성자 주입을 사용하여 필요로하는 객체에 해당 객체 주입!

  • 제어의 역전
    -기존의 개발 방식에서 개발자가 직접 제어 흐름을 제어하는 것이 아니라, 외부의 프레임워크나 라이브러리가 제어 흐름을 대신하게 되는 것을 말한다.
    -강한 결합의 경우 제어의 흐름은 Controller ⇒ Service ⇒ Repository
    -의존성 주입을 통해 제어의 흐름을 Repository ⇒ Service ⇒ Controller 로 역전함

  • 장점

    • 코드의 유연성과 재사용성이 증가한다.
      IoC 컨테이너를 사용하면 의존성을 관리하기 쉬워져 코드 변경이 쉬워진다.
    • 테스트의 용이성이 증가된다.
    • 의존성 주입을 통해 테스트용 객체를 쉽게 만들 수 있으므로 테스트 코드를 작성하는 데 있어서도 도움이 된다.
    • 결합도가 낮아져 유지보수가 용이해진다.
      의존성을 관리하는 작업이 자동화되어 객체 간의 결합도가 낮아져 유지보수가 용이해진다.
    • 객체간의 의존성 관리를 통해 개발 시간을 단축시킬 수 있다.
  • 단점

    • 의존성 주입이 많아질수록 코드의 가독성이 떨어질 수 있다. 코드의 복잡성이 증가할 수 있다.

    • IoC 컨테이너가 복잡해질수록 초기 설정과 성능 이슈가 발생할 수 있다.

    • IoC 컨테이너를 사용하면 일부 개발자는 어떤 객체가 어떻게 생성되는지에 대한 이해를 잃을 수 있다.

  • IoC Container와 Bean
    -빈 (Bean): Spring이 관리하는 객체
    -Spring IoC 컨테이너: 'Bean'을 모아둔 컨테이너

  • Bean 등록 방법
    -@Component 어노테이션 클래스 상단에 설정 후, 클래스의 앞글자만 소문자로 변경
    -packages 위치와 하위 packages 들을 전부 확인하여 @Component가 설정된 클래스들을 ‘Bean’으로 등록
    -@SpringBootApplication에 의해 default 설정

  • Bean 사용 방법
    -해당 대입해주는 생성자 위에 필드 위에 @Autowired 사용하여 의존성을 주입
    -생성자 선언이 1개 일 때 생략 가능하다.

JPA

  • ORM
    -ORM : Object-Relational Mapping
    -Object : "객체"지향 언어 (자바, 파이썬)
    -Relational : "관계형" 데이터베이스 (H2, MySQL)
    => 반복적이고 번거로운 애플리케이션 단에서의 SQL 작업을 줄여주기 위해서 ORM(객체 관계 매핑)기술들이 등장
  • JPA란
    -JPA: Java Persistence API
    -자바 ORM 기술의 대표적인 표준 명세
    -JPA는 애플리케이션과 JDBC 사이에서 동작
    -JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리함
    -객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있다.

  • 하이버네이트(Hibernate)란?
    -JPA 는 표준 명세이고, 실제 구현한 프레임워크 중 사실상 표준이 하이버네이트이다.
    -스프링 부트에서는 기본적으로 ‘하이버네이트’ 구현체를 사용

📝오늘의 회고

Spring을 Java기반이라 기초 공부를 열심히 하자
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글