[kotlin] Collection & Sequence
Kotlin 2021. 11. 23. 09:44

kotlin standard libary에는 Container type으로 Collection과 Sequence(Sequence) 두가지 타입을 가지고 있다. Collection Collection은 대부분 언어에서 라이브러리로 제공된다. C++에는 STL이 있고 python은 자체적으로 제공한다. 제공하는 방식이 다를뿐 사용법에 있어서는 비슷하다고 할 수 있다. 그럼 kotlin에서 제공되는 collection 함수 set, list, map을 세개를 제공한다.공식 문서 참조 특징을 간단히 정리하면 read only와 mutable 두가지 종류로 나뉜다. val numbers = mutableListOf("one", "two", "three", "four") // read only val wordRep..

[kotlin] 자주 사용하는 문법 정리
Kotlin 2021. 11. 23. 09:43

String 원하는 형식으로 String을 formatting하는 방법(추후 추가 예정) String.format("%.4f",0.998999) String.format("%d",30) Substring을 추출하는 방법 //07:05:45PM time_str = (s.substring(0,2).toInt()+12).toString() + s.substring(2,8) //19:05:45 sort 배열을 정열함 val new = arr.sorted() // var 변수는 sort 를 지원 않함. new.sort() //ok Array 초기값이 0인 N 개 배열 생성 var arr = Array(N) { i->0 } //0은 초기값 for 범위 순환 for(i in 0..10){ //TODO } for (i..

[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를 사용하여..

Logging에 대하여
Logging 2021. 11. 15. 21:04

Logging는 단순히 문제 해결에만 집중하면 Logging 시스템 자체를 한번 더 검토 해볼 필요가 있다고 생각한다. 단순히 생각했을 때 아래 같은 질문에 쉽게 답변을 할 수 있어야 한다고 생각한다. 장애가 어디에서 어떤식으로 발생 했는지 ? 원인은 ? 시스템 자체가 잘 동작하는지 ? 퍼포먼스는 어떠한지? 정보에 대한 보안 조치는 제대로 되고 있는지? 어떤 작업자(사용자 혹은 관리자)가 무엇을 하고 있는지 ? 문제는 없는지 이런 물음에 쉽게 답변 할 수 있는 Logging 시스템을 설계하려면 기존의 Logging 시스템들은 어떻게 설계 되었는지 한번 볼 필요가 있다. 기존의 Logging 시스템은 로그의 중요도에 따라 보통 Security logging, Operational logging, Appli..

[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..