일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- UpstageAILab
- 업스테이지패스트캠퍼스
- 패스트캠퍼스
- 패스트캠퍼스업스테이지에이아이랩
- 티스토리챌린지
- UpstageAILab#국비지원
- 오블완
- 국비지원
- 패스트캠퍼스AI부트캠프
- 패스트캠퍼스업스테이지부트캠프
- Today
- Total
김민주
[Spring Master] 입문 이론 - 3 Layer Architecture, IoC와 DI, Bean 본문
* http://localhost:8080은 자동으로 /static/index.html 경로를 반환합니다.
DTO
Data Transfer Object, DTO는 데이터 전송 및 이동을 위해 생성되는 객체입니다.
Client에서 보내오는 데이터를 객체로 처리할 때 사용되며, 서버의 계층 간 이동에 사용됩니다. 또한, DB와의 소통을 담당하는 Java 클래스를 그대로 Client에 반환하는 것이 아니라, DTO로 한 번 변환한 후, 반환할 때도 사용됩니다.
3 Layer Architecture
Controller 클래스 하나로 모든 API를 처리하면 양이 많아지고 수정이 어렵다는 한계가 있습니다.
따라서 서버에서의 처리 과정을 크게 Controller, Service, Repository 즉, 3계층으로 분리합니다.
- Controller: Client의 요청을 받고, 로직 처리는 Service에 전달하며 Service에서 처리 완료된 결과를 Client에게 응답합니다.
- Service: Client 요구사항을 처리하는 실세 중 실세입니다. 비즈니스 로직을 담당하기에 현업에서는 서비스 코드가 계속 비대해지고 있습니다. DB 저장 및 조회가 필요할 때는 Repository에게 요청합니다.
- Repository: DB CRUD 작업을 처리합니다.
IoC(제어의 역전), DI(의존성 주입)
IoC, DI는 객체지향의 SOLID 원칙과 GoF 디자인 패턴과 같은 '설계 원칙' 및 '디자인 패턴'입니다.
Spring Docs에서는 'IoC는 DI로도 알려져 있다'라고 합니다. 즉, DI(의존성 주입) 디자인 패턴을 사용해 IoC(제어의 역전) 설계 원칙을 구현하고 있다고 이해할 수 있습니다.
- 의존성: 강하게 결합된 코드를 Interface 다형성 원리를 사용해 약한 결합 및 약한 의존성으로 바꿀 수 있습니다.
- 주입: 필요로 하는 객체를 해당 객체에 전달합니다.
- 필드에 직접 주입
- 메서드를 통한 주입
- 생성자를 통한 주입 - 추천! (객체의 불변성을 지켜줄 수 있습니다.)
- 제어의 역전: 강한 결합의 코드는 새로운 객체를 만들 때 코드 변경이 불가피했으나, 의존성 주입을 통해 코드 변경 없이도 다양한 객체를 사용할 수 있게 되었습니다. 즉, 제어의 흐름이 역전된 것입니다.
IoC Container와 Bean
DI(의존성 주입)를 사용하기 위해서는 '객체 생성'이 우선되어야 합니다. 이때 Spring에서는 Spring 프레임워크가 필요한 객체를 생성하고 관리하는 역할을 대신 해줍니다.
- Bean(빈): Spring이 관리하는 객체
- Spring IoC Container: 'Bean'을 모아둔 컨테이너
Spring 'Bean' 등록 방법
- @Component: Bean으로 등록하고자 하는 클래스 위에 설정합니다.
Spring 'Bean' 사용 방법
- @Autowired: Bean을 주입하고자 하는 필드나 메서드 위에 설정합니다.
- @Autowired 생략 조건
- 생성자 선언이 1개일 때는 생략 가능합니다.
- @RequiredArgsConstructor 사용 시 final로 선언된 멤버 변수를 파라미터로 사용하여 생성자를 자동으로 생성하기 때문에 @Autowired 대신 사용이 가능합니다.
- @Autowired 생략 조건
3 Layer Annotation
- Spring 3 Layer Annotation은 Controller, Service, Repository의 역할로 구분된 클래스들을 ‘Bean’으로 등록할 때 해당 ‘Bean’ 클래스의 역할을 명시하기위해 사용됩니다.
- @Controller, @RestController
- @Service
- @Repository
- Spring 3 Layer Annotation은 모두 @Component가 추가되어 있습니다.
[ 정리 ]
SpringFramework가 주입이 되는 객체(클래스)를 @Component를 달면 Bean 객체로 IoC Container에 등록을 해서 갖고 있다가 의존성 주입(DI)이 필요할 때 @Autowired를 달아서 주입을 해줍니다. (@RequiredArgsConstructor로도 주입이 가능합니다.) 생성자를 통한 주입 시 생성자가 하나만 있을 경우에는 @Autowired 생략이 가능합니다.
'STUDY > 이론' 카테고리의 다른 글
[Spring Master] 입문 이론 - Spring Data JPA (1) | 2024.11.28 |
---|---|
[Spring Master] 입문 이론 - JPA CORE (1) | 2024.11.25 |
[Spring Master] 입문 이론 - Spring MVC (1) | 2024.11.17 |
[Spring Master] 입문 이론 - 사전 지식 (2) | 2024.11.16 |
[특강] Git, PR(Pull Request) (0) | 2024.11.16 |