Recent Posts
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 | 31 |
Tags
- Value too long for column
- 티스토리챌린지
- table not found
- JanusWebRTC
- 자원부족
- kotlin
- JanusWebRTCGateway
- 겨울 부산
- PytestPluginManager
- terminal
- 코루틴 컨텍스트
- mp4fpsmod
- JanusWebRTCServer
- Spring Batch
- preemption #
- 코루틴 빌더
- addhooks
- taint
- vfr video
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- JanusGateway
- PersistenceContext
- python
- 오블완
- VARCHAR (1)
- 깡돼후
- tolerated
- 달인막창
- 개성국밥
- pytest
Archives
너와 나의 스토리
Spring DI, CI 본문
반응형
Spring DI
- 객체들 간의 의존성을 줄이기 위해 사용되는 Spring의 IoC 컨테이너의 구체적인 구현 방식
- 객체 자체가 아니라 프레임워크에 의해 객체의 의존성이 주입되는 설계 패턴
- 객체간의 의존성을 자신이 아닌 외부에서 주입하는 개념
- 객체를 주입 받는다는 것은 외부에서 생성된 객체를 넘겨받는 것이다. 이렇게 하면 결합도를 낮출 수 있고, 런타임시에 의존관계가 결정 되기 때문에 유연한 구조를 가진다.
- 왜? 모듈 간의 결합도를 낮춰서 유연한 변경을 가능하도록 하기 위해서
* 런타임 & 컴파일 타임
- 컴파일 타임: 작성된 소스코드를 기계어코드로 변환 되어 실행 가능한 프로그램으로 만듦
- 런타임: 컴파일 과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 런타임이라고 부른다.
객체 자체가 아니라 프레임워크에 의해 객체의 의존성이 주입되는 설계 패턴
- Framework에 의해 동적으로 주입되므로 여러 객체 간의 결합이 줄어든다.
- 컨테이너가 bean 객체를 생성하고, 종속성 주입을 수행한다.
- 스프링의 의존 주입은 이전략 패턴을 사용하여 구현 됨
Dependency Injection과 Inversion of Controler는 같은 의미로 사용된다.
- IoC(제어의 역전)는 DI를 통해 달성된다.
IoC: 프로그램 제어권을 프레임워크가 가져가는 것
- 개발자가 모든 제어의 중심이지만 코드 전체에 대한 제어는 프레임워크가 한다.
- DI란 IoC container가 xml 파일에 정의된대로 bean 객체를 생성하고 의존성을 대신 주입하는 것을 의미한다. IoC란 사용자가 직접 객체를 생성하고 관리하던 것을 spring의 IoC Container가 대신 해준다는 말이다.
- 개발자가 설정(xml, annotation 등)만 하면 container가 알아서 처리한다.
- 즉, 우리는 Framework 속에서 프로그래밍을 하는 것.
- 객체의 생명주기 관리를 컨테이너가 컨트롤하기 때문에 제어권의 흐름이 바뀌었다고 하여 제어의 역전이라고 표현합니다.
- 제어권이 컨테이너로 넘어옴으로써 DI나 AOP 등이 가능하게 된다.
- IoC가 없다면 Autowired를 통한 의존성 주입을 할 수 없다.
* Bean: 스프링이 관리하는 객체
@Configuration
- @Configuration은 스프링 IOC Container에게 해당 클래스를 bean 구성 클래스임을 알려주는 것
- @Configuration이 붙은 클래스는 Spring IoC Container에 의해 사용되는 클래스로 정의할 수 있다. 이 어노테이션도 @Component의 확장형이므로, @Autowired로 찾을 수 있다.
@Bean vs @Component
- @Bean과 @component 둘 다 spring(IoC) container에 bean을 등록하도록 하는 메타데이터를 기입하는 어노테이션이다.
- @Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리등을 bean으로 만들려고 할 때 사용된다.
- Bean(name="myarray") 이런 식으로 이름 지정해주면 자신이 원하는 id로 bean을 등록 할 수 있다.
- 어노테이션 안에 값(name)을 입력하지 않을 경우 메소드의 이름을 camelcase로 변경한 것이 bean의 id가 된다.
- @Component는 개발자가 직접 작성한 클래스를 bean으로 등록하기 위한 어노테이션이다. 아래의 예제를 보자.
- component를 사용한 bean의 의존성 주입은 @Autowired 어노테이션을 이용하여 할 수 있다.
- 요약
- @Component는 개발자가 직접 작성한 class를 bean으로 만드는 것이고, @Bean은 개발자가 작성한 method를 통해 반환되는 객체를 bean으로 만드는 것이다.
- 개발자가 생성한 클래스에 @Bean 선언은 불가능
의존성 주입 방법
- 생성자 주입
- 필요한 의존성을 모두 포함하는 클래스의 생성자를 만들고 그 생성자를 통해 의존성을 주입한다.
- setter 주입
- 의존성을 입력받는 setter 메소드를 만들고 이를 통해 의존성 주입
- Field 주입
- Autowired
Spring Container
- Spring Framework의 핵심 컴포넌트
- Container는 DI를 사용하여 응용 프로그램을 구성하는 bean 객체를 관리하다.
- 역할
- bean 객체를 생성하고
- 객체들을 함께 묶고
- 객체들을 구성하고
- 객체들의 전체 수명주기(lifecycle)를 관리
- 설정 방법
- XML
- bean 객체 정의
- 의존성 주입(DI)
- Java Annotation
- Java code
- XML
- Spring container의 2가지 유형
- BeanFactory
- 주로 단순한 DI에서만 사용
- ApplicationContext
- Resources가 제한되어 있지 않은 모든 곳에서 사용
- BeanFactory
Spring CI(Continuous Integration)
- 지속적으로 품질관리를 적용하는 프로세스를 실행하는 것
- 코드 버전 관리를 하는 VCS 시스템에 PUSH가 되면 자동으로 Test, Build가 수행되고 Build 결과를 운영 서버에 배포까지 자동으로 진행되는 이 과정을 CI (지속적 통합)이라고 합니다.
단순히 CI 툴을 도입했다고 해서 CI를 하고 있는 것은 아닙니다.
마틴 파울러의 블로그를 가보시면 CI에 대해 다음과 같은 4가지 규칙을 이야기합니다.
- 모든 소스 코드가 살아있고(현재 실행되고) 어느 누구든 현재의 소스를 접근할 수 있는 단일 지점을 유지할 것
- 빌드 프로세스를 자동화시켜서 어느 누구든 소스로부터 시스템을 빌드하는 단일 명령어를 사용할 수 있게 할 것
- 테스팅을 자동화시켜서 단일 명령어를 통해서 언제든지 시스템에 대한 건전한 테스트 수트를 실핼할 수 있게 할 것
- 누구나 현재 실행 파일을 얻으면 지금까지 최고의 실행파일을 얻었다는 확신을 하게 만들 것
여기서 특히나 중요한 것은 테스팅 자동화입니다.
지속적으로 통합하기 위해선 무엇보다 이 프로젝트가 완전한 상태임을 보장하기 위해 테스트 코드가 구현되어 있어야만 합니다.
반응형
'개발 > Spring Boot' 카테고리의 다른 글
[Spring] 마이바티스(MyBatis)란? & 연동하는 방법 (0) | 2021.01.11 |
---|---|
[Spring] MySQL 연동 - 설정하기 (0) | 2021.01.11 |
Spring security - 용어 정리/작동 방식/JWT (0) | 2020.08.22 |
HATEOAS 설정하기 - swagger와 함께 사용하기 (에러 해결) (0) | 2020.08.04 |
URL Design (0) | 2020.07.25 |
Comments