= 객체 생성 및 주입
= 애플리케이션 개발에 필요한 기반을 제공하여, 개발자가 비즈니스 로직 구현에만 집중할 수 있게 하는 것
IoC의 구현 방법 5가지
1. DI⭐: 의존성 주입
2. Service Locator: Service Locator에서 직접 가져와쓰는 것
3. Events: 이벤트 발행(Publisher/Subscriber)
4. Delegates: 위임(실행 결과를 받는 것까지 모두 위임)
5. Template Pattern: 추상 클래스 부분 구현
이 중에서 우리가 앞으로 써야하고 알아야하는 것은 바로 DI!😊😊
Container가 Bean을 직접 주입해주는 것으로 필요 객체들이 생성되어 주입되는 것을 말한다.
과거 Spring에서는 필요 객체들을 개발자가 개발한 뒤, XML을 통해 일일히 Bean으로 등록했었다.
현재 Spring은 XML이 아닌 @Container, @Repository 등의 어노테이션들을 사용하여 Bean으로 등록한다.
=> 현재 방식이 아주아주 훨씬훨씬 편한 거라고 한다!
위와 같이 Bean을 등록한다는 것은
DI를 구현하기 위한 방법에는 크게 3가지가 있다.
// 생성자 2. 실제 현업에서 사용하는 코드
@RequiredArgConstructor
class MyClass {
private final MyService service;
public void test() {
service.test()
}
}
class MyClass {
@Autowired
private MyService service;
public void test() {
service.test()
}
}
class MyClass {
private MyService service;
@Autowired
public void setService(MyService service) {
this.service = service;
}
}
Spring 프레임워크는 Frameworkd의 제어 역전(IoC, Inversion of Control)
- Library 혹은 구현체의 연결과 설정 및 객체 생성 및 주입 제공
모든 의존성 신경쓰지 않고, 버전 충돌없이 잘 말아놓은 최상위 패키지 사용
대표적으로 아래와 같은 친구들이 있다.
build.gradle에 가면 이 친구들을 거의 항상 볼 예정
spring-boot-starter-web
spring-boot-starter-security
spring-boot-starter-jdbc
spring-boot-starter-date-jpa
먼저 Configuration이란 Spring의 Bean을 등록하는 JAVA 설정 파일을 말한다.
의존성 관리에서 꽤 많은 라이브러리들을 내포하게 되는데, 이 모든 것에 대한 설정이 문제
스프링 부트에서는 @EnableAutoConfiguration 또는 @SpringBootApplication 중 하나만 사용하면 자동 환경설정이 가능하다.
각 애노테이션들중 대부분은 또 다른 애노테이션들을 포함하는 경우가 있다.
아래는 @SpringBootApplication의 내부 모습이다.
// @SpringBootApplication
@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
즉 @SpringBootApplication은
@SpringBootConfiguration, @ComponentScan, @EnableAutoConfiguration을 포함하고 있는 것이다.
이것 자체로는 Spring Boot에 필요한 모든 것을 세팅 그리고 기본 설정하는 역할을 한다고 볼 수 있다!👍👍
이 3개의 애노테이션은 각각 아래와 같은 역할을 갖고 있다.
@SpringBootConfiguration
@ComponentScan
@EnableAutoConfiguration
Spring의 동작 과정 내부 구조는 다음과 같이 2가지로 분류하여 볼 수 있다.
둘은 Spring의 구조를 표현하는 방식들이다!
대부분 MVC Architecture 패턴으로 설명한다고 하니 위에껄 더 주의깊게 보자!!⭐⭐
Tomcat=WAS+Servlet Container
1. Tomcat이 인스턴스에서 처음 구동 시 2개의 Container 생성
a. Servlet Container
b. Spring Container
- Web Application Context
ex) @Container
- Root Web Application Context
ex) @Service
, @Repository
, @Component
2. 클라이언트로부터 요청이 들어오면 WAS(Tomcat)이 받아 정적 컨텐츠 검색
3. 정적 컨텐츠가 없다면, Servlet Container가 요청을 받아 Servlet 생성
4. DispatchServlet은 아래의 절차대로 요청 처리
관심사의 분리(Seperation of Concern)
-> 높은 유지 보수성과 쉬운 테스트
Presentation Layer: 클라이언트 요청에 따른 결과/화면 반환
a. Controller: 요청 시, 반환 시 데이터 변환 및 처리
b. View: 반환 시 어떤 페이지를 어떻게 만들어 반환할 것인지 처리
Business Layer: 비즈니스 로직 수행(여러 DB 데이터들을 조합)
Data Access Layer: 애플리케이션 영속성 유지 및 CRUD
위의 이미지에서 사용되는 DTO!
개발할 때 파일 제일 많이 만들어지는 이것...
DTO란?🤔
그렇다면 VO는 무엇인가!
VO(Value Object)란?🤔
정리하면 DTO는 가변 객체, VO는 불변 객체이다!
Spring 뭔가 단순하면서도 복잡하다.
들어가면 갈 수록 하나씩 나오는...
MVC 구조에 대해서는 조금 더 깊게 알아봐도 좋을 것같다!