본문 바로가기

Weekend I Learend

항해 3 주차 후기

 항해 3 주차는 드디어 나의 주특이긴 Spring을 공부하였다.

스프링은 1~2 주차와는 다르게 정말 공부해야 할 것이 많았다. 일단 기본적인 Spring 구조, @를 붙이는 어노테이션 기법, 그밖에 스프링에서 사용하는 DI, AOP, IOC 등 spring이 제공하는 기본 구조들을 필수적으로 모두 공부야해 했다. 나는 이것들을 모두 정확이 이해하는데는 시간이 너무 오래 걸릴꺼라는 판단해 간단한 프로젝트를 통해서 익히는 공부법을 선택했다. 그래서 다음과 같이 spring boot를 통해 게시판 api를 만들어 보았다. 

 

기본적인 폴더 구조는 controller와 domain, service를 나누었다. 그리고 DB는 JPA를 사용하였다.

간단하게 설명하자면 domain에는 db와 연관되어 있는 model 객채 board를 만들어 주었다. 그리고 db를 연결 할 BoardRepository를 만들었다. Timestamped는 객체 생성날짜와 수정날짜를 담는 abstract객체이며 Board가 Timestamped를 상속하여 사용했다. 나머지는 파일은 데이터를 임시로 담을 Dto 객체이다.

다음은 controller 이다. controller에서는 클라이언트에서 보낸 요청주소를 controller에서 구분하여 응답하는 역할을 해준다. 요청은 GET, POST, PUT, DELETE 방식으로 오고 그에 따른 알맞은 MAPPING을 controller에서 해주어야 한다. controller는 직접적인 로직을 구현하지 않고 service에게 로직 구현을 넘기는 역할도 한다.

 

다음은 service이다. service에서는 controller에서 넘겨온 요청사항을 직접적으로 구현하는 역할을 한다. 그림에서 BoardRepository를 통해 DB에서 데이터를 가져오는데 이것은 JPA문법이다. JPA는 기본적인 CRUD를 편리하게 할 수 있도록 메소드가 제공된다. service에서 로직이 이루어진다면 다시 controller에게 그 결과를 전달해준다.

 

이러한 간단한 프로젝트를 통해 spring의 기본 구조와 개념을 익힐 수 있었다. 그리고 상황에 맞는 어노테이션을 사용함으로써 그 역할을 공부 할 수 있었다.

 


이번주 공부한 기술

- DI 

  • DI - Dependency Injection, 의존성 주입

DI(의존관계 주입)은 스프링 프레임워크에서 지원하는 IoC의 형태로 객체(빈) 사이의 의존관계를 빈 설정 정보를 바탕으로 DI 컨테이너가 자동으로 연결하는 것이다.

  • Dependency(의존 관계)란?A가 B를 의존한다”는 굉장히 추상적인 표현이지만, 토비의 스프링에서는 “의존 대상 B가 변하면, 그것이 A에 영향을 미친다”고 한다. 즉, B의 기능이 추가되거나 변경되면 그 영향이 A에 미치는 것이다.
  • DI 방법강한결합

객체 내부에서 다른 객체를 생성하는 것은 강한 결합도를 가지는 구조이다.
A 클래스 내부에서 B 라는 객체를 직접 생성하고 있다면, B 객체를 C 객체로 바꾸고 싶은 경우에 A 클래스도 수정해야 하는 방식이기 때문에 강한 결합이다.

 

     느슨한 결합

 

객체를 주입 받는다는 것은 외부에서 생성된 객체를 인터페이스를 통해서 넘겨받는 것이다.
이렇게 하면 결합도를 낮출 수 있고, 런타임시에 의존관계가 결정되기 때문에 유연한 구조를 가진다.

 

  • 의존성 주입의 종류로는 Field Injection, Setter Injection, Constructor Injection 방법이 있다.

 

 

- IoC

  • IoC 란?

IoC란 Inversion of Control의 줄임말이며, 제어의 역전이라고 한다. 스프링 애플리케이션에서는 오브젝트(빈)의 생성과 의존 관계 설정, 사용, 제거 등의 작업을 애플리케이션 코드 대신 스프링 컨테이너가 담당한다.

 

  • IoC 사용 이유

- 객체 간 결합도를 낮춘다.

- 유연한 코드 작성 가능

- 가독성 증진

- 코드 중복 방지

- 유지 보수 용이

 

- Bean

  • Bean이란

 스프링 컨테이너가 관리하는 자바 객체를 빈(Bean)이라 한다.

스프링의 특징에는 제어의 역전(IoC)이 있다.

제어의 역전이란, 간단히 말해서 객체의 생성 및 제어권을 사용자가 아닌 스프링에게 맡기는 것이다. 지금까지는 사용자가 new연산을 통해 객체를 생성하고 메소드를 호출했다. IoC가 적용된 경우에는 이러한 객체의 생성과 사용자의 제어권을 스프링에게 넘긴다. 사용자는 직접 new를 이용해 생성한 객체를 사용하지 않고, 스프링에 의하여 관리당하는 자바 객체를 사용한다. 이 객체를 '빈(bean)'이라 한다.

 

 

  • Bean 등록방법

- @Component 어노테이션이 있으면 스프링 빈으로 자동 등록된다. 또한, @Component를 포함하는 @Controller, @Service, @Repository 어노테이션도 스프링 빈으로 자동 등록된다.

다음과 같이 스프링 빈으로 등록되면 class 왼쪽에 커피콩 모양이 나온다. (인테리제이)

'Weekend I Learend' 카테고리의 다른 글

항해 5 주차 후기  (0) 2022.08.21
항해 4 주차 후기  (0) 2022.08.14
항해 2 주차 후기  (0) 2022.07.24
항해 1 주차 후기  (0) 2022.07.17