spring boot 8

property 우선 순위 (feat. application.properties)

jar 파일로 만들어서 리눅스에서 실행시키려 하는데 hostname이 자꾸 달라져서 고민 끝에 외부 설정 파일로 빼기로 했다.그럼 jar 내부에 있는 properties보다 우선순위가 위에 있기 때문에 jar 밖에서 설정하면 그 부분을 따라가게 된다.우선순위 순으로 정의한 프로퍼티 값이 오버라이딩된다.유저 홈 디렉토리에 있는 spring-boot-dev-tools.properties테스트에 있는 @TestPropertySource@SpringBootTest 어노테이션의 properties attribute커맨드 라인 arguementSPRING_APPLICATION_JSON (환경 변수 또는 시스템 프로퍼티) 에 들어있는 property ServletConfig 파라미터ServletContext 파라미터..

HikariCP - DB ConnectionPool

데이터베이스와 연결된 db connection 객체 미리 만들어 두고 이를 한 곳에 담아 관리하는 것이 connection pool이다.필요할 때마다 커넥션 풀에서 미리 만들어 놓은 커넥션을 찾아 이용하고 반환하는 기법이다. spring boot를 사용하면 가장 많이 볼 수 있는 connection pool 은 hikariCP로 자바로 작성된 경량화된 데이터베이스 연결 풀 라이브러리이다.바로바로 찾아 연결할 수 있기 때문에 디비연결 효율이 좋고 성능을 최적화하여 속도가 빠르다. 그리고 밑에 옵션을 보면서 장점을 더 설명할 수 있는데 Spring boot 에서 사용 시1) 의존성에 jdbc starter를 추가해준다.2) application.properties에 옵션을 추가해준다.spring: data..

IoC 컨테이너와 @Bean, @Component

1. IoC 컨테이너 애플리케이션 컴포넌트의 라이프사이클을 관리컴포넌트 간의 의존성을 주입하는 기능을 제공하는 프레임워크BeanFactoryApplicationContext의 상위 인터페이스XML 파일이나 자바 설정 클래스 등에서 Bean의 정의를 읽어와서 Bean을 생성하고, 필요한 곳에서 의존성 주입을 수행함Bean의 생명주기를 관리하여, Bean이 생성될 때 초기화 작업을 수행하고, 애플리케이션이 종료될 때 Bean을 소멸시킴지연 초기화(lazy initialization)를 지원Bean이 필요한 시점까지 생성을 지연시켜서, 메모리와 자원을 관리인터페이스를 이용해서 다른 컨테이너와 연동할 수 있음ApplicationContextBeanFactory의 확장된 버전BeanFactory와 달리 미리 Be..

DI와 IOC와 DIP (feat. 프레임워크와 라이브러리)

1. DI란?Dependency Injection으로 의존성 주입이라는 뜻객체의 의존 관계를 외부에서 주입하는 방법의존 관계란?네모 그림과 그림 그리는 함수가 예로 있다.네모 그림에 김 그림을 그리는 함수를 넣으면 네모는 김이 되고, 스마트폰을 그리는 함수를 넣으면 네모는 폰이 된다.네모 그림을 그리는 함수 A는 김을 그리거나 폰을 그리는 함수 B, C에 의해 무엇이든 될 수 있고, 이 관계를 의존 관계라 한다.이같은 의존성을 외부에서 주입하는 것을 의존성 주입 DI 라고 한다. 2. 클래스 간의 관계연관 관계class A { private B b;}의존 관계class A { public B method(B b){ return new B(); }}상속 관계class A extends B {}..

Blocking/Non-Blocking 와 Sync/Async 와 Future/Completable Future

이 전까지 동기, 비동기는 그저 화면이 깜박이면서 새로 고침되느냐 안깜박이고 이벤트 탄 곳만 바뀌느냐 정도로 알고 있었다.ㅠㅠ Blocking / Non-Blocking: 다른 주체가 작업할 때 자신에게 제어권이 있는지?* Blocking: 호출된 함수A가 제어권을 갖고 자신의 작업이 끝날 때까지 넘기지 않음-> A가 끝날 때까지 아무 것도 못하고 기다리고 있어야 함(기다릴게~빨리줘!)* Non-Blocking: 호출한 함수B에게 제어권을 넘기고 다른 일을 진행할 수 있게 함(callback)-> A와 B는 각자 알아서 본인 작업을 수행함(내 할 일할게~너도 너 할일 해서 줘) Sync / Async: 결과를 받았을 때 순서와 결과에 관심이 있는지?* Sync (동기): 호출된 함수와 호출한 함수가 수행..

Spring 웹 계층

1. Web Layer- 흔히 사용하는 컨트롤러(@Controller)와 JSP 등의 View 템플릿 영역- 외부 요청과 응답에 대한 전반적인 영역 (ex) @Filter, @ControllerAdvice 등 2. Service Layer- @Service에 사용되는 서비스 영역- 일반적으로 Controller와 DAO의 중간 영역- @Transactional이 사용되어야 하는 영역 3. Repository Layer- DB와 같이 데이터 저장소에 접근하는 영역- DAO 영역으로 이해 4. DTOs- DTO(Data Transfer Object)는 계층 간에 데이터 교환을 위한 객체이며, 이를 위한 영역- View 템플릿 엔진에서 사용될 객체나 Repository Layer에서 결과로 넘겨준 객체 등 ..