본문 바로가기
TIL

내일배움캠프 5주차 Spring Layer 3계층, IoC Container, Bean

by 율량동박씨 2024. 5. 15.

오늘의 키워드

  • Spring Layer 3 계층
  • IoC(제어의 역전), DI(의존성 주입)
  • IoC Container와 Bean
  • ORM(Object-Relational Mapping)
  • JPA(Java Persistence API)

오늘의 내용

  • Spring의 3 Layer Architecture
    • Controller, Service, Repository로 처리과정을 분리한다
    • Controller : 클라이언트의 요청을 받고 Request 데이터가 있다면 Service에 같이 전달하고 Service에서 처리 완료된 결과를 클라이언트에게 응답한다
    • Service : 사용자의 요구사항을 처리한다. DB 저장 및 조회가 필요할 때는 Repository에게 요청한다
    • Repository : DB관리(연결, 해제, 자원관리)를 하고  CRUD작업을 처리한다
  • IoC(제어의 역전)와 DI(의존성 주입)
    • IoC는 설계 원칙이고 DI는 디자인 패턴을 말한다
    • IoC, DI는 객체지향의 SOLID 원칙 그리고 GoF의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴이다
    • 좋은 코드의 조건
      • 논리가 간단해야 한다
      • 중복을 제거하고 표현을 명확하게 해야 한다
      • 코드를 처음 보는 사람도 쉽게 이해하고 수정할 수 있어야 한다
      • 의존성을 최소화해야 한다
      • 새로운 기능을 추가하더라도 구종의 변경이 크지 않아야 한다
  • IoC Container와 Bean
    • Bean : Spring이 관리하는 객체를 말한다
    • Spring Ioc Container : Bean을 모아둔 컨테이너
    • Spring 'Bean' 등록 방법
      • @Component를 Bean으로 등록하고자 하는 클래스 위에 설정한다
      • Spring 서버가 뜰 때 IoC 컨테이너에 Bean을 저장해주는데 @Component가 설정된 클래스에 대해서 Spring이 해주는 일을 확인한다
      • Spring 'Bean' 이름: 클래스의 앞글자만 소문자로 변경한다
      • 'Bean' 아이콘 확인(콩모양) → 스프링 IoC에서 관리할 'Bean' 클래스라는 표시다
      • @ComponentScan : Spring 서버가 뜰 때 @ComponentScan에 설정해 준 packages 위치와 하위 packages 들을 전부 확인하여 @Component가 설정된 클래스들을 ‘Bean’으로 등록해 준다
      • @SpringBootApplication에 의해 default 설정이 된다
    • Spring 'Bean' 사용 방법
      • @Autowired를 필드 위에 작성한다
      • Bean을 주입할 때 사용할 메서드 위에 @Autowired를 입력한다
      • @Autowired는 Spring Ioc 컨테이너에 의해 관리되는 클래스에서만 가능하다
      • @Autowired생략이 가능한데 Spring 4.3 버전부터 지원하고 생성자 선언이 1개일 때만 가능하다
    • 3 Layer Annotation
      • pring 3 Layer Annotation은 Controller, Service, Repository의 역할로 구분된 클래스들을 ‘Bean’으로 등록할 때 해당 ‘Bean’ 클래스의 역할을 명시하기 위해 사용된다
      • @Controller, @RestController
      • @Service
      • @Repository
    • ORM과 JPA
      • ORM(Object-Relational Mapping) : 객체와 DB의 관계를 매핑해주는 도구
      • JPA(Java Persistence API) : 자바 ORM기술에 대한 표준 명세

오늘의 회고

  • 강의를 진행할수록 Spring이 점점 낯설어진다...... 이게 Java와 연관이 있는 건 맞는지 의구심조차 들기 시작한다.....
  • 이래서 개인프로젝트 완성이나 할 수 있을까 흠....