동석쿠
프로그래밍 공부
동석쿠
전체 방문자
오늘
어제
  • 공부 (80)
    • 공부기록 (64)
      • 웹개발 (6)
      • Java (7)
      • cs 공부 (3)
      • http 웹 기본 지식 (8)
      • 자바 스프링 (20)
      • 개인 미니프로젝트 (3)
      • 알고리즘 공부 (6)
      • 면접준비 (2)
      • 프론트공부 (8)
      • 파이썬 플라스크 (1)
    • 항해99 기록 (14)
      • 회고록 (10)
      • 팀프로젝트 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바스크립트
  • 프로그래머스
  • 항해99
  • Java
  • 문법
  • 상속
  • lombok
  • 리프레쉬토큰
  • 스프링
  • 알고리즘
  • Get
  • API
  • 파이썬
  • 자바
  • 리프레시토큰
  • Post
  • 리액트
  • 리스트
  • JPA
  • 스프링부트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
동석쿠

프로그래밍 공부

스프링 DI(의존성주입), IOC컨테이너
공부기록/자바 스프링

스프링 DI(의존성주입), IOC컨테이너

2022. 1. 29. 14:07

DI 의존성 주입

강한결합의 문제점

다음과 같은 상황에선 Controller 5개가 각각 Service1을 생성하여 사용중

만약 Repository1 생성자 변경이 일어나면 모든 Controller와 모든 Service의 코드 변경이 필요

 

강한결합을 해결하기 위해서 각 객체애대한 객체 생성은 딱 1번만 하고, 생성된 객체를 모든 곳에서 재사용 하면 된다.

위의 구조를 다음과같이 변경해준다면 Repostiory1이 변경이되어도 아무도 코드를 변경할 필요가 없어진다.

Service1생성자가 변경되어도 모든 Ctonroller를 변경할 필요가 없어진다.

 

DI (의존성 주입)의 이해

"제어의 역전 (IoC: Inversion of Control)"
프로그램의 제어 흐름이 뒤바뀜
  • 일반적: 사용자가 자신이 필요한 객체를 생성해서 사용
  • IoC (제어의 역전)
    • 용도에 맞게 필요한 객체를 그냥 가져다 사용
      • "DI (Dependency Injection)" 혹은 한국말로 "의존성 주입"이라고 부릅니다.
    • 사용할 객체가 어떻게 만들어졌는지는 알 필요 없음
      • 음식을 자를 때 필요한 가위는? → 부엌가위 (생성되어 있는 객체 kitchenScissors)
      • 무늬를 내며 자를 때 필요한 가위는? → 핑킹가위 (생성되어 있는 객체 pinkingShears)
      • 정원의 나무를 다듬을 때 필요한 가위는? → 전지가위 (생성되어 있는 객체 pruningShears)실생활 예제) 가위의 용도별 사용
        •  

 

스프링 IOC 컨테이너 사용하기

 

앞에서 DI 를 사용했을 때의 장점을 살펴 보았다.

그런데 DI 를 사용하기 위해서는 객체 생성이 우선 되어야 했다. 
과연 어디서 객체 생성을 해야 할까? 
바로 스프링 프레임워크가 필요한 객체를 생성하여 관리하는 역할을 대신해 준다.
  • 빈 (Bean): 스프링이 관리하는 객체
  • 스프링 IoC 컨테이너: 빈을 모아둔 통

 

18. 스프링 프레임워크 재이해

스프링 프레임워크란?

  • The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform.
    • Enterprise applications 개발 편의성 제공
      • Enterprise applications? 기업용 애플리케이션??
        • 고객 대상 웹 서비스 ex) 구글, 네이버, 쿠팡 등
    • 스프링은 결국 기업용 애플리케이션의 요구사항 해결에 초점을 맞춘 프레임워크
    • 기업용 애플리케이션 특성
      1. 신뢰성이 중요 (ex. 병원에서 수술 시 환자 기록이 바뀐다면?)
      2. 서버의 안정성 유지 중요 (ex. 복권 실시간 추첨에 서버 다운 된다면? )
      3. 데이터 관리가 중요
        • 막대한 양의 데이터 관리 필요
        • 여러 사용자가 동시 접속 시 데이터 일관성
        • → 대부분 DB (데이터베이스) 사용

스프링의 핵심 요소는?

A key element of Spring is infrastructural support at the application level: Spring focuses on the "plumbing" of enterprise applications so that teams can focus on application-level business logic, without unnecessary ties to specific deployment environments.

 

  • 비즈니스 로직 (business logic) 에 집중하게 해 준다?
  • 웹 서비스 다이어그램
  • 서버 개발자들이 신경써야 할 부분이 너무 많음
    1. API: 클라이언트 ↔ 서버
    2. 비즈니스 로직 (@Service)
      1. 실제로 사용자의 **"요구사항이 처리"**되는 부분!!
    3. DB: 서버 ↔ DB
  • **"기업의 요구사항"**에만 집중하여 개발할 수 있도록!
    • 반복되고, 실수가 많은 부분 → 스프링이 대신~!!

 

'공부기록 > 자바 스프링' 카테고리의 다른 글

스프링 배팅시스템 만들기 (트위치 배팅시스템 참고)  (0) 2022.03.08
스프링부트 JPA 중복검색 해결 <트러블 슈팅>  (0) 2022.03.07
스프링 Controller, Service, Repository  (0) 2022.01.29
스프링 Controller의 역할  (0) 2022.01.27
3-1. 간단한 미니프로젝트 완성  (0) 2022.01.25
    '공부기록/자바 스프링' 카테고리의 다른 글
    • 스프링 배팅시스템 만들기 (트위치 배팅시스템 참고)
    • 스프링부트 JPA 중복검색 해결 <트러블 슈팅>
    • 스프링 Controller, Service, Repository
    • 스프링 Controller의 역할
    동석쿠
    동석쿠

    티스토리툴바