Spring Boot4 [Spring] Spring AOP 적용 데이터베이스 업데이트 프로젝트에서 테이블 별 업데이트 된 현황을 명세 테이블에 저장하는 기능을 구현해야 했다. 이 기능의 핵심 동작은 모두 같기 때문에 공통적으로 사용할 수 있도록 모듈화(하나만 만들어서 재사용)를 시키고 싶었다. 그래서 공통 기능을 모듈화하여 자동적으로 수행할 수 있도록 해주는 AOP를 적용하게 되었다. AOP란? Aspect Oriented Programing으로 관점 지향 프로그래밍으로 객체 지향을 보완하는 수단이다. 공통 관심사(Aspect)를 모듈화하여 비즈니스 로직을 헤치지 않고 재사용하는 프로그래밍 기법이다. 공통 관심사는 쉽게 말해서 여러 클래스에서 반복적으로 사용되는 공통 로직이라고 이해하면 된다. Spring에서 AOP는 프록시 패턴을 기반으로 설계되어 있다. Proxy.. 2023. 6. 19. [Java] 비동기 + multi threading 구현 데이터베이스 업데이트 프로젝트를 진행하던 때에 데이터를 가공하는 작업을 수행하는데 시간이 매우 오래 걸리는 부분이 있었다. 업데이트를 위해 수집해온 데이터가 8천만개 이상인 상황에서 싱글 쓰레드로 수행하면 완료 시간이 말도 안되는 시간이 예상되어 멀티 쓰레딩을 통한 시간 단축이 필수라고 생각되었다. 구현 로직 구현은 java 8에서 비동기 요청을 처리할때 사용하는 객체인 CompletableFuture를 사용하였다. 1. 데이터 가공 2. 가공한 데이터를 저장 1번 완료 후 리턴값을 받아서 2번을 수행하는 과정을 모두 비동기 작업으로 병렬처리한다. ThreadPoolTaskExecutor 별도의 thread pool을 생성하여 실행하기위해 Executor를 설정하여 bean으로 등록해둔다. @Config.. 2023. 3. 1. [Spring] Spring Security + JWT Spring Security 기반에 JWT 인증 방식을 적용해보았다. 인증 방식은 이렇다. 1. 클라이언트가 로그인을 요청한다. 2. ID/PW 검증 후 access token, rerfresh token을 발급한다. 3. refresh token은 DB에 저장하고, access token은 클라이언트에게 응답한다. 4. 클라이언트가 api 요청 시 access token이 만료되었으면 해당 유저의 refresh token으로 검증 후 access token을 재발급해준다. 위 방식을 하나씩 구현해 보자. 먼저 Spring Security와 JWT를 사용할 수 있도록 의존성을 추가해준다. 의존성 추가 build.gradle // security implementation 'org.springframewo.. 2023. 2. 6. [JPA] batch insert 적용 batch insert는 단건 insert가 아닌, insert를 모아서 하는 multi insert를 의미한다. jpa에서 객체를 데이터베이스에 저장할 때 save() 대신 saveAll()을 한다고해서 멀티 insert가 되는건 아니었다. 별도의 설정이 필요했다. 설정 추가 데이터베이스별로 설정 방법이 다르다. (Oracle은 못찾았다..) // 공통 설정 spring.jpa.properties.hibernate.jdbc.batch_size=1000 spring.jpa.properties.hibernate.order_inserts=true spring.jpa.properties.hibernate.order_updates=true // mysql은 아래 설정 추가 spring.datasource.hik.. 2022. 11. 19. 이전 1 다음