[Spring] Transaction 정리
Spring boot 2021. 11. 24. 20:36

Transaction은 DB와 연관된 개발을 함에 있어서 중요한 개념으로 자리 잡았다. 트래픽이 많은 요즘 제품 개발에 있어 더 중요해 진것 같다. Python에서는 라이브러리설정에서 몇가지 설정만 하면 transaction을 구현 가능 헸다. 이 글은 spring에서 transaction을 구현하는 방법을 알아보기 전에 JDBC을 이용하여 transaction을 어떻게 구성할 수 있을지에 대해 알아보고 Spring에서의 사용법에 대하여 간단히 알아볼 예정이다. JDBC를 이용한 Transaction 아래 코드는 JDBC 연결을 하고 AutoCommit를 false로 설정 한 후 코드 실행 도중 Exception이 발생하면 rollback를 수행하는 코드 이다. (roolback은 JDBC에서 savep..

[Spring] Logging 구성 및 구현
Spring boot 2021. 11. 22. 22:46

앞 글을 통하여 Logging의 중요성과 어떤 Content들을 정리해야 하는지에 대하여 알아 보았다. 앞글의 내용을 바탕으로 Spring Application에 있어서 중요한 것들을 정리해 보았다. 사용자 인증인가 정보(로그인 및 resource에 대한 접근 정보도 포함) Exception 정보, 어떤 상황에 어떤 Exception이 발생하였는지를 추후 분석할 수 있을 정도면 충분할 것 같다. Transation에 관련된 log, 데이터와 관계되는 부분이니 데이터 베이스 장애처리하는데 도움을 줄 수 있다 이외에도 중요한 비즈니스 로직이나, 장애 발생 상황 등을 빠르게 판단할 수 있는 것들을 남겨야 한다. 위의것들을 잘 분류하여 주기적으로 삭제가능 혹은 영구 보존 등으로 등급을 나누어 관리 할 수 있다...

[Spring] Async 대해
Spring boot 2021. 11. 22. 18:03

Spring에서의 기본적인 처리는 순차적인 처리이다. 이런 방식은 bocking 현상을 야기하고 만약 덩치가 큰 비즈니스 로직을 수행해야 한다면 여러 Thread로 나누어서 처리 후 다시 결과를 합치는 과정을 거쳐야 한다. Spring에서 Async 사용 Async process를 사용하려면 @EnableAsync 어노테이션을 붙이고 thread pool에 대한 설정을 해주어야 한다. 아래는 kotlin 문법으로 작성한 설정이다. @Configuration @EnableAsync class AsyncConfig { @Bean fun taskExecutor(): TaskExecutor { val taskExecutor = ThreadPoolTaskExecutor() taskExecutor.corePoolS..

[Spring] 사용자 Token 인증 방식
Spring boot 2021. 11. 20. 13:44

사용자에 대한 인증 방식에는 쿠키 기반 인증방식으로 부터 세션 기반 인증 방식을 거쳐 최근에는 토큰 기반 인증방식을 많이 사용한다. 이 글에서는간단한 Token 기반 인증방식에 대하여 소개할 예정이다. 이글에서 이론적 배경지식을 자세히 다루고 있다. Spring boot를 이용한 사용자 인증을 저번 글에서 소개했던 AOP 방식을 사용하여 구현할 예정이다. Gradle 설정 UUID 생성을 위해서는 아래 라이브러리를 추가할 필요가 있다. implementation("com.fasterxml.uuid:java-uuid-generator:3.3.0") Token 발급 이 글에서는 UUID를 발급 받아 UUID를 Base64로 인코딩하여 사용하였다.(보안적 측면에서 생각하면 한번더 암호화하거나 JWT를 사용하여..

[Spring] Spring AOP 개념 및 구현
Spring boot 2021. 11. 15. 05:24

AOP라는 개념을 접하면 먼가 추상적이다. 이 개념은 OOP의 SOLID 원칙을 지키면서 , 원하는 기능을 모두 구현하려면 한계점을 봉착할 때가 많다. 간단한 예를 들면 사용자에 대한 인증이다. 어떠한 서비스를 사용하기 위하여 사용자 권한이 있는지 판단하기 위해서는 권한 체크부분을 서비스에 포함 시켜야 된다. 이렇게 설계하다보면 여기저기 코드가 난립해 있고 관리도 않된다. 또한 OOP 설계 원칙도 지키지 못하게 된다. 위의 문제를 해결하기 위해 Spring에서는 JAVA의 Aspectj를 AOP(Aspect Oriented Programming) 방식으로 도입 했다. Spring에서의 AOP는 프록시 기반의 AspectJ이다. Spring AOP의 몇개 개념 Aspect Advice, PointCut의 ..

[Spring] Kotlin + Spring boot 에 MongoDB을 도입(Spring Data MongoDB, Querydsl)
Spring boot 2021. 11. 14. 11:55

앞의 두글(개념 및 설치, 기본적인 사용법)에서 MongoDB에 대해 간단하게 알아가는 시간이 였다면 이 글에서는 Spring boot에 적용에 있어서 설정과 사용법 그리고 주의해야 할 점들에 대하여 알아보자. 프로젝트 설정 MongoDB를 사용하려면 프로젝트 설정 build.gradle.kts에서 아래와 같이 설정해 줘야 한다. import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("org.springframework.boot") version "2.5.6" id("io.spring.dependency-management") version "1.0.11.RELEASE" kotlin("jvm") version "1.5.31" kotlin..

[Spring boot] DI 설정에 관하여
Spring boot 2021. 11. 12. 08:02

이번 글에서 3가지의 DI 설정방식에 대하여 설명하고 각각의 장단점에 정리하할 예정이다. 앞글에서 DI 방식에는 3가지(Construction, setting, field) 방식이 있다는 것을 소개 했다. 그렇다면 그들을 실제 spring project에서 사용되는 방식에 대해 알아보자 XML-based Configuration 이 설정 방식을 사용하려면 applicationContext.xml 파일을 생성 후 원소 내부에 설성 해야 한다. 자세한 내용은 공식문서를 참조하면 좋을 것 같다. //daos.xml 이렇게 설정한 bean은 코드에서 아래와 같이 사용할 수 있다. import org.springframework.beans.factory.getBean // create and configure b..

[Spring boot]Dependency injection(DI)
Spring boot 2021. 11. 11. 20:35

여러개의 object(class)들 사이에는 의존적 관계가 존재한다. 이런 의존적 관계를 가지고 구현하는 것을 tight-coupled programming이라고 한다. Spring에서는 이런 관계를 좀 더 유연한 관계(loosely-coupled programming)으로 변환하는 메가니즘을 dependency injection(DI)라고 한다. 즉 object의 생성과 생명주기 관리를 spring에 넘기므로써 개발자는 로직에만 집중하여 개발 할 수 있게 만드는 것이다. DI 주입 방식은 보통 3가지가 있다. 그것들을 소개하고 장점과 단점에 대해 논의해 보자. Setter-based DI set 함수를 이용하여 의존성을 부여하는 것을 말한다. 이 방식은 runtime에 주입 받는 객체가 변경될 가능성이..