spring boot 17

Caffeine Cache 사용하기

스프링 공식 라이브러리는 아니지만, 스프링 부트에서도 지원할 정도의 신뢰도 높은 캐시 라이브러리이다.캐시에 항목 자동 로딩, 측정된 시간을 기반으로 캐시 만료, 첫번째 요청이 발생할 때 비동기적으로 새로고침하는 기능을 제공해준다.Caffeine cache는 초당 데이터 처리량에서 우수한 지표를 보여주고 있다. Read와 Write에서 최고의 성능을 보여주고 싶다면 Caffeine cache를 사용하는 것이 좋다.  적용하는 방법을 알아보자!1. dependency 추가 build.gradle에 라이브러리를 추가해준다.implementation 'org.springframework.boot:spring-boot-starter-cache'implementation 'com.github.ben-manes.ca..

spring boot 기본 캐시 사용

✨캐싱db에서 데이터를 가져오지 않고, 캐싱 해놓은 데이터를 가져와서 데이터를 가져오는 시간을 줄일 수 있다.  ✨스프링 기본 캐시스프링 부트 어플리케이션을 실행하면 해당 어플리케이션과 함께 살아있는 캐시 공간을 사용한다. 캐시 공간은 메모리를 차지하기 때문에 많은 데이터를 저장할 수 없다. 1. 종속성 추가하기implementation 'org.springframework.boot:spring-boot-starter-cache' 2. @EnableCaching 설정@EnableCaching을 붙여주면 해당 어플리케이션의 캐싱 기능이 활성화되어 캐싱 기능을 이용할 수 있다.@SpringBootApplication@EnableCachingpublic class TestApplication { public ..

싱글톤

싱글톤 패턴클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴객체 인스턴스를 2개 이상 생성하지 못하도록 해야 한다. -> private 생성자를 사용해 외부에서 new 키워드를 사용하지 못하도록 해야 함 public class SingletonService { private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance() { return instance; } private SingletonService() { } public void test() { // 필요한 함수 구현 }}1)..

스프링 컨테이너

개념 및 기능스프링 프레임워크의 핵심 컴포넌트이다.자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들(bean)에게 추가적인 기능을 제공한다.스프링 컨테이너를 통해 원하는 만큼 객체를 가질 수 있다.의존성 주입을 통해 애플리케이션의 컴포넌트를 관리할 수 있다.서로 다른 빈을 연결하여 애플리케이션 빈을 연결하는 역할을 한다.  사용 이유객체 간의 의존성을 낮추어 결합도는 낮추고, 높은 캡슐화를 위해 사용된다.  종류스프링 컨테이너는 BeanFactory와 ApplicationContext 두 종류의 인터페이스로 구현되어 있다. BeanFactory- 스프링 컨테이너의 최상위 인터페이스- 빈의 생성과 관계 설정 같은 제어를 담당하는 IoC 오브젝트- getBean() 메서드를 통해 빈을 인스턴스화 할 수..

스프링 트랜잭션

트랜잭션하나의 작업을 수행하기 위해 데이터베이스에서 논리적인 작업의 단위 또는 한번에 모두 수행되어야 하는 일련의 연산이다.커밋으로 성공하거나 롤백으로 실패 이후 취소되어야 한다. 스프링의 트랜잭션 지원트랜잭션 관리자트랜잭션이 완료될 때까지 트랜잭션 상태를 유지하는 역할을 한다.여러 작업이 동시에 실행되고 있을 때 한 작업의 에러 발생 시 이 트랜잭션은 중단되고 충돌없이 잘 이루어지도록 관리해준다. PlatformTransactionManager이 인터페이스를 이용해 추상화한다. db 연동 기술에 따라 각각의 구현 클래스가 제공된다.이 구현체를 직접 사용하진 않는다.// 정의public interface PlatformTransactionManager extends TransactionManager { ..

[오류] 다중 데이터베이스 설정을 각각 했는데 같은 설정값이 적용된 경우

오류 발생 상황 : primary db와 연결하기 위해 만든 config 파일에서 second db의 정보 값을 가져온 datasource가 생성되었다. 이 datasource를 사용하고 있는데 primary db에 있는 테이블을 조회하려고 해서 오류가 발생했다!  나는 DataSourceConfig와 SecondDataSourceConfig를 각각 작성해주었다.DataSourceConfig.groovy @Bean @ConfigurationProperties(prefix = "spring.datasource.primary") DataSourceProperties dataSourceProperties() { return new DataSourceProperties() } ..

[오류] Invalid bound statement (not found)

Mybatis를 사용하면서 잘 나타나는 오류이다.  아래는 오류가 발생하는 원인들이다.1. Mapper 인터페이스와 xml의 오타선언하는 id에 오타가 있을 수도 있고, id가 mapper 인터페이스의 메서드 명과 다른지 확인  2. mapper-locations쿼리가 작성되어 있는 mapper xml이 위치한 경로를 application.properties에 정의하지 않아서, 잘못 선언해서 발생할 수 있다.  3. 동일한 이름, 다른 패키지 경로패키지 이름이 달라서 컴파일 오류가 발생하는 경우이다.  4. yaml 파일 오타yaml 파일에서 작성할 때 최상단에 spring이 아니라 mybatis가 위치해야한다.  5. Datasource configuration 점검SessionFactory가 설정된 ..

다중 데이터베이스 사용하기

하나의 데이터베이스를 사용할 때는 application.properties 또는 application.yml에 설정을 해주면 바로 db 세팅을 해주지만 다중 db를 사용할 때는 직접 설정해주어야한다.  1. application.properties 또는 application.yml에 기본 설정해주기spring.datasource.url = jdbc:mysql://localhost:33061/shop_dbspring.datasource.driverClassName = com.mysql.cj.jdbc.Driverspring.datasource.username = rootspring.datasource.password = pwspring.second-datasource.url = jdbc:mysql://loc..

DataSource 설정 예제

DataSource커넥션을 획득하는 방법을 추상화 한 인터페이스이다.public interface DataSource { Connection getConnection() throws SQLException;} DataSource에 설정해 준 메타 데이터들을 토대로 DB와의 Connection을 생성하고, 자신의 Connection Pool에 따로 저장한다. 그리고 이 connection을 사용할 수 있도록 getConnection()을 고정적으로 제공한다. @Bean public DataSource dataSource() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName..

DataSource 이해하기

Connection poolDB와 연결하는 것을 Connection이라 한다.Java에는 DB Connection을 지원하는 JDBC가 있다.hibernate, jpa, ibatis는 JDBC api를 사용해 DB에 접근한다. Connection pool(CP)은 이 Connection을 미리 만들고, 해당 Connection을 관리하는 것이다.일반적으로 CP instance 생성자에 Connection을 생성하는 코드가 포함되어 있어 생성과 동시에 DB Connection을 만든다.  DataSourceDataSource는 DB연결 정보를 저장하고, Connection을 생성하고, Connection pool에 등록하고, 관리하는 역할을 한다.즉, DB와의 연결을 미리 생성하고, 그것을 관리하는 인터페..