극락코딩
-
Http에서 국가 정보 얻기극락코딩 2023. 8. 17. 00:14
한국이 아닌, 다른 나라에서 접근하는 유저에 대해 다국어 지원, 혹은 별도의 필터링을 해야 되는 작업이 있을 수 있다. 이럴때, 어떻게 국가 정보를 얻을 것인지 혼란스러울 수 있다. 사실, 라우팅하는 쪽에서 심어주어도 될 것 같긴한데, 그것 말고 Http Header 기반으로 체크하는 방법도 있다. (이게 가장 간단하긴 함,, 하지만 정확성은 떨어진다.. 어쩔 수 없음) Http Header 중에서, accept-language 라는 항목이 있다. 해당 항목에 데이터 요청시 어떤 언어를 어떤 순위로 지정할 것인지 들어 있다. 자세한건.. 요기서 아래의 코드를 참고하면, 아주 쉽게 Country Check 기능 구현 가능~! 전체코드 import mu.KotlinLogging import org.sprin..
-
Kotlin에서 Builder Pattern을?극락코딩 2023. 8. 15. 17:39
java에서는 코드의 가독성과 편의를 위해 롬복을 사용한다. 그중에서 builder를 많이 사용할 것인데... Kotlin에서는 builer Pattern을 생각보다 많이 사용하지 않는다. (물론 사용은 가능...) 그래서 예시를 함 보자 kotlin에서 builder Pattern을 사용하지 않는 이유가 무엇일까요? 1. kotlin에서는 getter없이 property 접근이 가능하다.. 2. kotlin에서는 setter없이 property 값을 변경 가능하다.. 위의 두가지 처럼, property를 직접 접근 가능한 이유로 builder 쓸 이유가 없어진다. 그래도 만약에 쓰고 싶다면, 아래와 같이 해보면 어떨까 import java.time.LocalDateTime /** 단순 객체 데이터를 B..
-
ThreadLocal을 간단하게 살펴보기극락코딩 2023. 8. 15. 17:33
다양한 스레드가 하나의 자원을 소유하여 사용하려고 할때 동시성 문제가 발생할 수 있다. 내가 원하던 값과 다른 정반대의 값이 반환될 수 있다. 그럴때 ThreadLocal을 통해 각 스레드별로 자원을 할당하게 하여 사용할 수 있다. ThreadLocal이란? 특정 스레드에서만 접근할 수 있는 데이터를 저장하고 관리하는 기능을 제공한다. 서로 다른 스레드가 서로 다른 자원을 사용하기 때문에 동시 접근되는 자원이 없어 safety하게 사용할 수 있다는 장점 있다. 패키지는 java.lang.ThreadLocal이다. 물론 문제점도 있다. 아래의 예시와 같이... 1. 먼저 응용 프로그램이 풀에서 스레드를 빌린다. 2. 그런 다음 일부 스레드 제한 값을 현재 스레드의 ThreadLocal에 저장한다. 3. 현..
-
ehcache 사용하기 (로컬 캐시 사용하기)극락코딩 2023. 8. 9. 13:44
Spring Local Cache Local Cache를 통해 Network IO 비용을 줄이자 로컬 캐시 description 로컬 캐시는 스프링 init되고 나서, 서버의 로컬 캐싱 저장소에 데이터를 저장하는 방법을 의미 변경이 없고, 빠르게 데이터를 서빙해야 하는 상황에서 해당 로컬 캐시 사용 네트워크 부하가 많이 발생하는 상황이고, 조회되는 데이터가 변경되지 않는 다면 로컬 캐시 적용관련하여 고려 굳 단점 데이터 정합성이 중요한 경우, 로컬 캐시는 부적절함 팟이 여러개 띄워진 상황에서 로컬캐시에 대한 cache evict을 어떻게 수행하지? -> 별도의 중간 관리체계가 필요함 사용법 Dependency 설정 object DependencyVersion { const val EHCACHE_VERSI..
-
시멘틱 버저닝이란 무엇인가?극락코딩 2023. 8. 9. 13:40
라이브러리를 사용하다보면, 라이브러리 이름 뒤에 극락-1.0.0과 같은 형태의 숫자를 본적이 있을 것이다. 라이브러리 네이밍 뒤에 나오는 숫자가 버저닝을 의미한다. 그럼 각각의 숫자는 어떤것을 의미할까? 대부분 버저닝을 진행할 떄 시멘틱 버저닝을 사용한다. 시맨틱 버저닝은 1.0.0 과 같은 스타일로 버저닝을 기입하는 방법이다. 도트 .를 기준으로 major, minor, patch이다. major란? major는 이전 버전의 라이브러리와 차이가 발생했을 경우 올린다. 업데이트된 버전이 기존 기능을 원활하게 동작시키지 않게 하는 경우가 이에 해당한다. major를 올리는 경우, minor와 patch의 첫 시작을 0으로 초기화해야 한다. 기존 api 변경 및 삭제 되거나 하위 호환을 지원하지 않는 경우 ..
-
OLTP와 OLAP극락코딩 2023. 7. 30. 23:28
OLTP와 OLAP 데이터 관련 작업을 진행하면서, 2가지 이론에 대해 알게 되었다. 조금 더 정리해보자 OLTP (Online Transaction Processing) 온라인 뱅킹, 쇼핑, 주문 입력 또는 텍스트 메시지 전송 등 동시에 발생하는 다수의 트랜잭션을 실행하는 데이터 처리 유형 흔히 우리가 만드는 어플리케이션에서 사용하는 트랜잭션들을 의미, 여러 사람이 다수의 트랜잭션을 실시간으로 실행할 수 있음 OLAP (Online Analytical Processing) 온라인 분석 처리,, 분석을 목적으로 데이터베이스 내의 트랜잭션을 질의하는 작업을 포함하는 단어 만들어진 데이터에 대한 데이터 통계용 목적 관련하여 오라클에서 엄청 정리를 잘해두었음 결론은 OLTP는 실시간으로 온라인상에서 처리, O..
-
Server Shutdown극락코딩 2023. 7. 30. 23:25
서버의 shutdown 방식에 대해 학습하자 Default Options 기본적으로 Spring에서 서버 shutdown 옵션은 `IMMEDIATE`이다. 즉시 서버의 구동을 중지시키는 것이다. 하지만, 이런 옵션은 현재 작업중인 API의 응답 손실을 야기시킬 수 있다. 그렇기 때문에 데이터 혹은 요청 손실을 줄이기 위해서 `GRACEFUL`을 이용하는 것을 권한다. (물론, 상황에 따라 다름) IMMEDIATE 기본으로 설정된 shutdown 기법이다. `org.springframework.boot.web.server.Shutdown`을 참고하자. 서버 종료 요청이 들어온 경우, 즉시 서버의 가동을 중지시킨다. GRACEFUL 서버 종료 요청이 들어오더라도, 현재 작업 중인 내역을 수행하고 중지시키는 ..
-
스프링 스케줄러 사용법극락코딩 2023. 7. 30. 23:22
스프링 스케줄러 사용법 스케줄링 관련 서비스를 구현할때, 어떤 주기로 스케줄링을 할지 고민할 때가 많다. cron 및 스프링 스케줄러에서 지원하는 기능을 알아보자 스프링 스케줄러 패키지 Gradle: org.springframework:spring-context / org.springframework.scheduling 먼저 스케줄러를 사용하기 위해서는 스프링 스케줄러 빈을 등록해야 한다. 스케줄러를 사용한다고 명시해야 사용 가능하다 @Configuration @EnableScheduling class SchedulerConfig { } 스케줄러 주기를 설정하는 방법은 다음과 같다. cron fixedDelay fixedDelayString fixedRate fixedRateString 그외.. zone..