Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Java
- js
- Excel
- 라이프 사이클
- VUE
- dependency injection
- HTTP 메서드
- vuex
- HTTP
- Vue.js
- 의존성 주입
- cache
- 캐시
- 싱글톤
- 프로토타입
- DB
- Security
- di
- Stateless
- vue-cli
- JPA
- Spring
- 로그인
- Setter
- Repository
- Kotlin
- javascript
- Singleton
- thymeleaf
- BEAN
Archives
- Today
- Total
jhhan의 블로그
Spring 주요 개념에 대해 본문
Spring의 주요개념에 대해 알아볼 것이다.
근데 지금 당장 올리기는 어려울 것 같다.
조만간 글을 수정해서 올릴 것이다.
*주요 개념에 대해서만 설명하는 글이어서 예제를 담지 않기로 했습니다. 나중에 추가할 수도 있습니다.
먼저 Spring의 장점에 대해 말해보겠습니다.
Spring 장점
- Java파일의 수정없이 xml만 수정하면 됩니다.
- 따라서 유지보수가 수월합니다.
- 대규모 프로젝트에서 유용합니다.
- 트랜잭션을 지원합니다.(xml과 애너테이션을 제공)
- DI를 통해 결합도를 낮춰줍니다.
1.IoC(Inversion of Control)
- '제어의 역전' 이라고 번역할 수 있습니다.
- 자바에서는 객체의 생성을 개발자가 담당합니다.
- 반면 스프링에서는 객체의 생성을 개발자가 담당하는 대신 스프링이 관리합니다.
- 개발자가 주도하던 프로그램 Flow가 프레임워크가 주도하는 것으로 바뀌었습니다.
- 특징 4가지
- 개발자에서 object를 생성하는 제어 흐름을 뒤집는다.
- IoC에서는 object가 자신이 사용될 object를 생성하거나 선택하지 않는다.
- 모든 object는 자신이 어떻게 생성되고 어떻게 사용되는지 관심이 없습니다.
- 모든 Object는 제어 권한을 가진 특별한 object에 의해 만들어지고 사용된다.
2.IoC컨테이너
- 모든 작업을 사용하는 쪽에서 제어합니다. 즉 IoC컨테이너가 제어합니다.
- 기본적으로 객체(Bean이라고 함)를 생성하고 객체간의 의존성을 이어줍니다.
- 다시 말하면 Bean을 만들고 엮어주고 제공합니다.
- BeanFactory와 ApplicationContext를 사용하는데,
- ApplicationContext가 BeanFactory를 상속받아 확장성이 높기 때문에 ApplicationContext를 사용하는 것을 권장합니다.
- BeanFactory는 특별한 경우에만 사용합니다.
3. Bean
- Spring에서 객체를 뜻하는 말입니다.
- Spring IoC컨테이너가 관리하는 객체입니다.
- ApplicationContext가 만들어서 그 안에 담고 있는 객체입니다.
- Bean으로 등록하기
- Componet Scanning
- @Component
- @Repository
- @Service
- @Controller
- @Configuration
- @Component
- @Bean으로 직접 등록할 수도 있습니다.
- 특정 인터페이스의 경우 애너테이션이 없어도 Bean으로 등록하는 것이 가능합니다.
- Componet Scanning
- 등록한 Bean을 꺼내쓰기
- @AutoWired 사용
- ApplicationContext에서 꺼내쓰기
- 보통 @AutoWired를 많이 쓴다.
4. DI(Dependency Injection)
- 직역하면 '의존성 주입'이라는 뜻입니다.
- 객체를 직접 생성하지 않고 외부에서 생성된 객체를 주입시킵니다.
- 크게 3가지 방법이 있습니다.
- 생성자
- Setter
- 필드 : @AutoWired를 사용
- 스프링에서는 생성자 사용을 권장합니다.
- 필수적으로 사용해야 하는 레퍼런스 없이 인스턴스를 만들지 못하게 강제할 수 있기 때문입니다.
- 다음과 같은 코드에서 OwnerController의 생성자인 것을 알 수 있습니다. 그리고 그에 대해 OwnerRepository와 VisitRepository가 없으면 OwnerController는 동작할 수 없다는 것을 알 수 있습니다.
- 따라서 OwnerController입장에서 OwnerRepository, VisitRepository는 반드시 필요한 객체입니다.
- OwnerRepository, VisitRepository가 있어야만 OwnerController의 객체를 만들 수 있기 때문에 코드가 안전한 편이라고 할 수 있습니다.
5.AOP(Aspect Oriented Programming)
- 번역을 하면 '관점지향 프로그래밍'이라고 할 수 있습니다.
- 응집도와 관련이 있습니다.
- 핵심관심과 횡단 관심으로 구분합니다.
- 핵심 관심 : 비즈니스 로직
- 횡단 관심 : 메소드마다 공통으로 등장하는 코드
- 여기서 우리는 횡단 관심에 초점을 맞춥니다.
- 핵심 기능 이외에 부가기능을 모듈화하여 재사용합니다.
- 이 때 부가기능을 Aspect라고 합니다.
- AOP 구현 방법
- 컴파일 : AspectJ
- 바이트코드 조작 : AspectJ
- 프록시 패턴 : Spring AOP가 사용하는 방법
6. PSA(Portable Service Abstraction)
- 교체가 용이한 서비스를 추상화 한 것입니다.
- PSA 적용시 확정성이 좋아지고 테스트하기 편해집니다.
- Spring이 제공하는 API는 대부분 PSA입니다.
- 예시
- Spring Transaction
- 트랜잭션 처리를 독립적으로 처리하기 위한 추상화 기법
- Aspect를 통해 처리
- Spring Web MVC
- Cache
- Spring Transaction
- 사실 PSA와 관련해서는 설명을 하기가 힘든 부분이 있습니다.
- PSA에 대해서는 다른 블로그들이 정리를 잘 해놨으니 참고하시면 될 것 같습니다.
'Spring' 카테고리의 다른 글
Spring_Security 응용 - 로그인 페이지 만들기(1) (0) | 2020.03.03 |
---|---|
Spring - Error_Page (0) | 2020.03.03 |
Spring_JPA (0) | 2020.02.27 |
Spring ThymeLeaf(타임리프)(2) (1) | 2020.02.27 |
Spring ThymeLeaf(타임리프)(1) (0) | 2020.02.25 |