[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]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에 주입 받는 객체가 변경될 가능성이..

[Kotlin] apply, with, let, also, run 사용
Kotlin 2021. 11. 9. 14:27

언어마다 각자 특색의 lamda 함수가 있다. 이번 글에서는 5개의 lamda 함수가 kotlin에서 어떻게 사용되는지 알아보자 정의 inline fun with(receiver: T, block: T.() -> R): R { return receiver.block() } inline fun T.also(block: (T) -> Unit): T { block(this) return this } inline fun T.apply(block: T.() -> Unit): T { block() return this } inline fun T.let(block: (T) -> R): R { return block(this) } inline fun T.run(block: T.() -> R): R { return bl..

[Spring] Kotlin + Spring Boot Controller 에 대하여
Spring boot 2021. 11. 4. 22:00

Spring MVC는 Web application을 개발함에 있어서 기본이라고 보면 된다. 이중에서 Controller에 대한 깊은 이해는 Sprinsg MVC를 이해함에 있어 필수 조건이라고 본다. HttpServlet Spring MVC를 이해함에 있어 제일 중요한 개념이라고 생각된다. HttpServlet은 다양한 데이터를 생성해주는 클라스이므로 JAVA기반의 웹 응용프로그램 개발에 있어서 필수 요소라고 할 수 있다. 보다 자세한HttpServlet 클라스에 대해서는 이글을 참조하시기 바랍니다. 이 클라스에 대해 간단히 요약하면 low level까지 구현해봐야 할듯 하다. HTTP 요청, 응답에 대해 모두 구현해야 하고 Controller에 대한 매핑관계도 모두 구현해야 한다. DispatcherS..

[Spring] Kotlin + Spring boot 에 JPA 적용
Spring boot 2021. 11. 2. 19:56

앞글 시나리오에 단어를 추가하고 싶고 지속적인 저장을 하고 싶다는 요구사항을 추가하면 어떻게 될지 고민해 보자. 위의 요구사항을 만족시키려면 데이터를 Database에 저장해야 한다. Database와 연동을 ORM 기반으로 구현할 예정이고 ORM 기반으로 구현하려면 오늘의 주인공 JPA가 필수 이다. 이 블로그에서 특별한 설명이 없으면 Database는 PostgreSQL을 기본으로 사용한다. JPA(JAVA Persistence API) 이름 그대로 ORM기술에 대한 JAVA 명세다. JPA는 딱 interface 역할만 하고 그 이후의 처리는 Hibernate 같은 구현체를 사용하여 구현한다. Hibernate JAVA base로 한 ORM 구현체이다. python에 Sqlalchemy가 있듯이 말..