
3 Layer Architecture

Controller
-클라이언트의 요청에 의해 Request를 Service에 전달하고, Service에서 처리 된 결과를 클라이언트에서 Response 한다.
Service
-클라이언트의 요구사항을 처리, DB 저장 및 조회가 필요할때는 Repository에게 요청한다.
Repository
-DB 관리(연결, 해제, 자원관리)하고, DB CRUD 작업을 처리한다.
IoC(제어의 역전)와 DI(의존성 주입)
IoC, DI는 객체지향의 SOLID 원칙 그리고 GoF의 디자인 패턴과 같은 설계 원칙 및 디자인 패턴
IoC는 설계 원칙에 해당하고 DI는 디자인 패턴에 해당
주입
-필요에 의한 객체를 해당 객체로 전할하는 것
의존성
-결합과 의존성을 낮추는 작업을 한다.
-필드 직접 주입, 메서드를 통한 주입, 생성자를 통한 주입
-강한결합 해결방법
제어의 역전
-기존의 개발 방식에서 개발자가 직접 제어 흐름을 제어하는 것이 아니라, 외부의 프레임워크나 라이브러리가 제어 흐름을 대신하게 되는 것을 말한다.
-강한 결합의 경우 제어의 흐름은 Controller ⇒ Service ⇒ Repository
-의존성 주입을 통해 제어의 흐름을 Repository ⇒ Service ⇒ Controller 로 역전함
장점
단점
의존성 주입이 많아질수록 코드의 가독성이 떨어질 수 있다. 코드의 복잡성이 증가할 수 있다.
IoC 컨테이너가 복잡해질수록 초기 설정과 성능 이슈가 발생할 수 있다.
IoC 컨테이너를 사용하면 일부 개발자는 어떤 객체가 어떻게 생성되는지에 대한 이해를 잃을 수 있다.
IoC Container와 Bean
-빈 (Bean): Spring이 관리하는 객체
-Spring IoC 컨테이너: 'Bean'을 모아둔 컨테이너
Bean 등록 방법
-@Component 어노테이션 클래스 상단에 설정 후, 클래스의 앞글자만 소문자로 변경
-packages 위치와 하위 packages 들을 전부 확인하여 @Component가 설정된 클래스들을 ‘Bean’으로 등록
-@SpringBootApplication에 의해 default 설정
Bean 사용 방법
-해당 대입해주는 생성자 위에 필드 위에 @Autowired 사용하여 의존성을 주입
-생성자 선언이 1개 일 때 생략 가능하다.
JPA

JPA란
-JPA: Java Persistence API
-자바 ORM 기술의 대표적인 표준 명세
-JPA는 애플리케이션과 JDBC 사이에서 동작
-JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자동으로 처리함
-객체를 통해 간접적으로 DB 데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있다.

하이버네이트(Hibernate)란?
-JPA 는 표준 명세이고, 실제 구현한 프레임워크 중 사실상 표준이 하이버네이트이다.
-스프링 부트에서는 기본적으로 ‘하이버네이트’ 구현체를 사용
📝오늘의 회고
Spring을 Java기반이라 기초 공부를 열심히 하자
오늘도! 쳐지지 말고 포기하지말고 힘내서 가보자고~~~