극락코딩
-
온디맨드가 뭔디?극락코딩 2023. 8. 20. 15:15
온디맨드 서비스, 온디맨드 구축 등 온디맨드 관련된 단어를 많이 들을 것이다. 그렇다면, 온디맨드는 무엇을 의미하는 것일까? 온디맨드란?(On-Demand) 온디맨드(On-Demand)는 사용자의 요구에 따라 필요한 서비스나 콘텐츠를 즉시 제공하는 방식을 의미한다. 온디맨드 서비스는 사용자가 언제든지 원하는 시간에 필요한 서비스를 이용할 수 있는 편리성을 제공한다. 예시 온디맨드 비디오 스트리밍 서비스인 Netflix는 사용자가 영화나 TV 프로그램을 원하는 시간에 스트리밍하여 시청할 수 있게 해준다. 사용자는 특정 프로그램을 예약하거나 방송 시간을 기다릴 필요 없이 언제든지 해당 콘텐츠를 선택해 재생할 수 있다. AWS의 온디맨드 서비스는 사용자의 요청에 따라, 서비스를 제공한다. 온디맨드 서비스는 또..
-
Redis Pub-Sub 사용하기극락코딩 2023. 8. 19. 11:41
Redis의 사용용도는 무궁무진하다. 캐싱, 큐, 분산락, 그리고 pub-sub 등 다양한 기능으로 사용될 수 있다. 이번에는 redis pub-sub에 대해 정리해볼려고 한다. Pub-Sub 구조란? 분산 시스템에서 사용되는 메시징 아키텍처 패턴 중 하나이다. 시스템 내의 다른 컴포넌트나 서비스 간에 데이터나 이벤트를 비동기적으로 교환하는데 사용한다. --> 컴포넌트들을 느슨한 결합으로 연결할 수 있다. 구조 Publisher (발행자) Publisher는 메시지나 이벤트를 생성하고 PubSub 시스템에 발행 데이터 생산자 역할 Publisher는 어떤 이벤트가 발생했을 때 해당 이벤트를 PubSub 시스템에 알리는 역할 Subscriber (구독자) Subscriber는 PubSub 시스템에서 발행된..
-
디프만 똑스 서버에서 캐싱 공통 모듈 만들기극락코딩 2023. 8. 17. 23:34
디프만 12기에서 진행한 똑스라는 프로젝트가 있다. 12기 활동 진행시에는 운영진으로 참여하여 대부분의 구현 작업에 참여하지는 않았는데.. 12기 종료후에 본격적으로 개발 작업에 참여하게 되었다. 개발 작업에 착수하며, 몇가지 문제점을 파악했는데, 그 중에서 캐싱 부분에 대해 확인해보겠다. 문제가 되는 부분 1. 자주 사용되는, 하지만 변경이 일어나지 않는 데이터에 대한 캐싱이 없다. 2. 그렇기에 데이터 조회시 레이턴시가 상당하다. 3. 조회 성능이 중요한 api의 레이턴시가 300ms를 넘게 초과한다. 해결방안 1. Network IO를 가능한 적게 타도록 구성 2. 변경이 적은 데이터에 대한 레디스 캐싱 작업 진행 api의 레이턴시를 낮추기 위해, 가장 좋은 방법은 network IO를 가능한 줄..
-
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 서버 종료 요청이 들어오더라도, 현재 작업 중인 내역을 수행하고 중지시키는 ..