WIL (Weekly I Learned) 220725-220731

BOSEUL KIM·2022년 7월 31일
0

TIL / WIL

목록 보기
5/9

이번주차는 Spring 입문 과정으로 RESTfulAPI로 나만의 블로그 만들기였다..
처음엔 html 파일까지 만드는줄 알고 페이지이동이나 이런건 어찌하지 머리를 싸매고...ㅋㅋㅋ근데 html은 필요없고 api 구현만 하고 postman으로 확인하는거였다..
ㅋㅋ그와중에 해놓은 게 아까워서 두긴했다 ㅎㅎ
과제를 일찍 제출하긴했지만 아쉬운 부분이 많이 있었다
data를 감싸는 success와 error 부분도 만들어줬어야했는데 구현하지 못해서 아쉬웠다 ㅜㅜ 이래저래 해보긴했지만 생각과는 다르게 만들어져서 ㅜ결국 과제가 끝나고 제공해주신 완성본 예시를 보고 다시 따라해봣다 ㅎㅎ
그리고 금요일부터 새로 시작한 숙련 과제는... 한숨밖에 안나온다.. 바로 spring security....일단 JWT는 시작도안했는데 로그인부터 벌써 막혔다..
이거 완성할 수 있을까?? (,, ・́ . ・̀,, )

일단 WIL 작성을 해보자면 이번 주 WIL의 키워드는 DI, IoC, Bean 세 가지이다
아마 이번 과제에서 분명히 사용한 것 같은데 아직도 잘 모르겠따... 어려운 스프링 ㅜ

정리를 시작해보겠습니다~

DI (Dependency Injection)

DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다.

DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다.

첫번째 방법은 A객체가 B와 C객체를 New 생성자를 통해서 직접 생성하는 방법이고,

두번째 방법은 외부에서 생성 된 객체를 setter()를 통해 사용하는 방법이다.

이러한 두번째 방식이 의존성 주입의 예시인데,
A 객체에서 B, C객체를 사용(의존)할 때 A 객체에서 직접 생성 하는 것이 아니라 외부(IOC컨테이너)에서 생성된 B, C객체를 조립(주입)시켜 setter 혹은 생성자를 통해 사용하는 방식이다.

스프링에서는 객체를 Bean이라고 부르며, 프로젝트가 실행될때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을 스프링에서는 Bean 컨테이너라고 부른다.

Ioc(Inversion of Control)

IoC(Inversion of Control)란 "제어의 역전" 이라는 의미로, 말 그대로 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미한다.

IoC는 제어의 역전이라고 말하며, 간단히 말해 "제어의 흐름을 바꾼다"라고 한다.

객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.

기존에는 다음과 순서로 객체가 만들어지고 실행되었다.

  1. 객체 생성

  2. 의존성 객체 생성
    클래스 내부에서 생성

  3. 의존성 객체 메소드 호출

하지만, 스프링에서는 다음과 같은 순서로 객체가 만들어지고 실행된다.

  1. 객체 생성

  2. 의존성 객체 주입
    스스로가 만드는것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.

  3. 의존성 객체 메소드 호출

스프링이 모든 의존성 객체를 스프링이 실행될때 다 만들어주고 필요한곳에 주입시켜줌으로써 Bean들은 싱글턴 패턴의 특징을 가지며,

제어의 흐름을 사용자가 컨트롤 하는 것이 아니라 스프링에게 맡겨 작업을 처리하게 된다.

Bean

Bean은 Spring Bean Container에 존재하는 객체를 말한다. Bean Container는 의존성 주입을 통해 Bean 객체를 사용할 수 있도록 해준다. Bean은 보통 싱글턴으로 존재한다. Beans는 우리가 컨테이너에 공급하는 설정 메타 데이터(XML 파일)에 의해 생성된다.

참고:
https://leveloper.tistory.com/33
https://jobc.tistory.com/30
https://velog.io/@gillog/Spring-DIDependency-Injection

0개의 댓글