본문 바로가기

분류 전체보기257

[Java] Java와 Lazy Evaluation Lazy evaluation은 실제로 필요로 해지는 경우에 연산을 시작하는 것입니다. 이 반대로는 eager evaluation이 있으며 이는 할당되자마다 연산을 시작합니다. 기본적인 Java의 기조는 eager evaluation을 기본으로합니다. 하지만 일부 Lazy Evaluation이 있었으며 Java 8이 나오면서 Java에는 Lazy Evaluation을 좀 더 유연하게 사용할 수 있게되었습니다. 오늘은 Lazy Evaluation의 예제와 Java 8에서 어떻게 사용할 수 있을지에 대해서 알아보는 시간을 가져보도록 하겠습니다. 예제 오늩 테스트를 위해 사용하는 메서드는 아래와 같습니다. 해당 메서드를 실행하게되면 1초간 sleep을 하고 입력받은 파라미터에 a가 포함되어있는지 여부로 true.. 2021. 3. 26.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - Document CRUD 만들기 안녕하세요. 오늘은 이전 시간에 이어서 elasticsearch를 java Spring에서 사용하는 방법에 대해서 코드로 알아보도는 시간을 가져보도록 하겠습니다. 오늘 알아볼 내용은 Java Spring을 이용하여 ElasticSaerch와 기본적인 Document의 CRUD 작업을 하는 방법입니다. Document는 ElasticSearch에 저장되는 실제 데이터입니다. RDB로 치자면 Table의 row에 해당한다고 볼 수 있습니다. 주의사항 제가 사용하는 ElasticSearch 버전은 7.9.3 버전입니다. Java High Level REST Client SDK 같은 경우 버전에 종속적이기 때문에 만약 버전을 꼭 맞추시고 사용하시기를 권장드립니다. 대표적인 예로 6 버전에는 Type 이라는 In.. 2021. 3. 23.
[LeetCode] Reverse String(문자열 뒤집기) 개인 풀이 문제 문자열을 뒤집는 메서드를 작성하세요. 주어진 입력은 char 배열입니다. 단, 별도의 array를 생성하면 안되며 입력받은 메모리만을 이용하여 문제를 해결하여야합니다. 또한 char 배열의 내부에는 ascii characters로 표현가능한 문자열들만 있다고 가정합니다. 예제 1 입력 : ["h","e","l","l","o"] 출력 : ["o","l","l","e","h"] 예제 2 입력 : ["H","a","n","n","a","h"] 출력 : ["h","a","n","n","a","H"] 원본 문제 : https://leetcode.com/problems/reverse-string/ 개인 풀이 가장 간단하게 떠오르는 풀이방법은 해당 배열의 크기만큼 배열을 하나 더 생성 한 후 하나씩 거꾸로 매핑.. 2021. 3. 16.
[LeetCode] 3Sum 개인 풀이 문제 Integer로 주어지는 배열이 있습니다. 해당 배열의 요소중 3개를 선택해서 합이 0이 만들어지는 경우를 출력하세요. 중복된 경우는 한번만 출력합니다. 예제 1 입력: nums = [-1,0,1,2,-1,-4] 출력: [[-1,-1,2],[-1,0,1]] 예제 2 입력: nums = [] 출력: [] 예제 3 입력: nums = [0] 출력: [] 제약조건 nums의 길이는 0 ~ 3000까지 가능 10^5 2021. 3. 10.
[elasticsearch + Spring] elasticsearch를 Java Spring에서 사용해보자 - 환경설정과 Index 만들기 안녕하세요. 오늘은 Elastic에서 제공하는 SDK를 이용하여 Java에서 ElasticSearch에 통신히여 결과를 가져올 수 있도록 해보겠습니다. ElasticSearch의 이론적인 내용에 대해서는 추후에 별도 포스팅으로 여러분들께 공유드리도록 하겠습니다. ElasticSearch API 종류 Elastic에서 제공하는 Java SDK는 2가지 종류가 있습니다. 첫번째는 Low Level SDK이며 두번째는 Hight Level SDK 입니다. 저희가 이번에 사용할 SDK는 Hight Level SDK입니다. Java Low Level REST Client ElasticSearch에서 제공하는 Low Level Java 통신 SDK 입니다. http 요청을 만들 수 있는 라이브러리입니다. Elast.. 2021. 3. 10.
[Java] final 키워드에 대해서 알아보자 안녕하세요. 오늘은 여러분들과 java의 final 키워드에 대해서 알아보려고 합니다. final final 키워드는 변수(variable), 메서드(method), 또는 클래스(class)에 사용될 수 있습니다. 이 final 키워드는 어떤 곳에 사용되냐에 따라 다른 의미를 가집니다. 하지만 final 키워드를 붙이면 무언가를 제한한다는 의미를 가지는 것은 공통적이 성격입니다. 변수(variable) 변수에 final을 붙여보겠습니다. 변수에 final을 붙이면 이 변수는 수정할 수 없다는 의미를 가집니다. 수정될 수 없기 때문에 초기화 값은 필수적입니다. 만약에 객체안의 변수라면 생성자, static 블럭을 통한 초기화까지는 허용합니다. 수정 할 수 없다는 범위는 그 변수의 값에 한정합니다. 즉, 다.. 2021. 3. 3.
[Design Pattern] Lombok에서 발견한 디자인패턴 - Builder Pattern 안녕하세요. Lombok에 @Builder를 사용하면 객체 생성을 유연하게 할 수 있습니다. 이게 바로 빌더 패턴을 이용하는 건데요. 오늘은 이 빌터 패턴(Builder Pattern)에 대해서 알아보는 시간을 가져보도록 하겠습니다. Effective Java의 두번째 규칙의 제목이 바로 생성자의 인자가 많을 때는 빌더(Builder) 패턴을 이용하라라고 되어있습니다. 빌더 패턴을 사용하면 객체의 생성을 깔끔하고 유연하게 할 수 있습니다. 어떻게 달성할 수 있다는 것일까요? 오늘은 빌더 패턴을 이용하면 어떻게 이를 달성할 수 있는지 다른 방법들과는 어떻게 다른지 한번 알아보도록 하겠습니다. 기존 생성자의 문제점 일반생성자는 선택적인 파라미터가 많은 상황에서 코드의 길이가 길어진다는 단점을 가지고 있습니다.. 2021. 2. 25.
[Linux] top 명령어로 서버의 상태 파악하기 안녕하세요. 오늘은 linux의 top 명령어어 대해서 분석하는시간을 가져보도록 하겠습니다. TOP 명령어 top 명령어는 현재 OS의 상태를 나타내주는 CLI 어플리케이션입니다. 메모리 사용량, CPU 사용량 등을 나타내주며 top를 실행하는 동안에는 주기적인 업데이트로 실시간에 근접한 내용을 보여줍니다. 리눅스에서 top 명령어를 실행하면 아래와 깉이 노출됩니다. 위에는 전체의 요약이 있으며 아래에는 각 프로세스마다 구체적인 내용을 포함하고 있습니다. 요약 영역 요약 영역은 top에서 상단에 위치하고 있습니다. 이 요약영역은 전체 프로세스가 OS에 대해서 리소스를 어느정도 차지하고 있는지를 알려줍니다. 요약 영역에 나타나는 대표적인 값은 시간, 유저, 로드 에버리지(Load Average), 테스크(.. 2021. 2. 23.
우선순위 큐(Heap)과 트리맵(Red black Tree)의 차이 안녕하세요. 오늘 여러분들과 이야기해볼 주제는 바로 우선순위 큐와 트리맵(TreeMap)의 차이점에 대해서 이야기 해보려고 합니다. 이전 포스팅을 보신 분들이라면 아시겠지만 일단 우선순위 큐는 Heap 자료구조를 이용하고 트리맵은 Red-Black Tree를 이용합니다. 둘 다 트리 구조를 가지고 있기 때문에 어떤 상황에서 어떤 자료구조를 사용해야할지 한번 보도록 하겠습니다. 우선순위 큐 PriorityQueue는 Heap 자료구조를 기반으로 되어있습니다. 먼저 Heap 자료구조란 무엇인지를 확인해보겠습니다. Heap 자료구조는 최솟값, 최댓값을 빠르게 찾기위해 완전 이진 트리를 사용하는 자료구조입니다. 간단히 개념을 설명드리면 최소힙의 경우 root 노드가 값이 제일 작으며 트리는 부모 노드는 자식 노.. 2021. 2. 18.
[자료구조] 코드로 알아보는 java의 PriorityQueue with Heap 안녕하세요. 오늘은 코드로 알아보는 java 시간압니다. 오늘 여러분들과 알아볼 Java의 자료구조는 PriorityQueue입니다. PriorityQueue는 우선순위 큐입니다. 우선순위 큐는 일반적인 FIFO 구조를 가지는 큐에 우선순위를 넣어 우선순위가 높은 노드부터 먼저가져올 수 있는 Queue입니다. Heap 자료구조 PriorityQueue는 Heap 자료구조를 기반으로 되어있습니다. 먼저 Heap 자료구조란 무엇인지를 확인해보겠습니다. Heap 자료구조는 최솟값, 최댓값을 빠르게 찾기위해 완전 이진 트리를 사용하는 자료구조입니다. 간단히 개념을 설명드리면 최소힙의 경우 root 노드가 값이 제일 작으며 트리는 부모 노드는 자식 노드보다 값이 작음을 항상 만족하는 트리입니다. 그리고 이렇게 H.. 2021. 2. 11.
[HTTP] HTTP Cache - 프로세스와 기본 헤더 안녕하세요. 오늘 여러분들에게 소개해드릴 내용는 HTTP의 Cache 프로세스와 관련된 기본 헤더들입니다. 웹사이트를 통해 이미지 , js, html 파일 등의 데이터를 가지고 올 때 해당 데이터의 크기만큼의 통신 데이터 처리가 필요합니다. 동일한 이미지를 접속할 때 마다 받아온다면 클라이언트 입장에서도 부담이며 여러 클라이언트를 동시에 상대하는 서버에는 더더욱 부담이 될 것입니다. 이렇게 때문에 HTTP에서는 캐싱(caching)를 지원하고 있습니다.오늘은 HTTP Cache의 종류와 그 과정에 대해서 알아보는 시간을 가져보도록 하겠습니다.HTTP 캐싱캐싱은 크게 두가지의 종류가 있습니다. 사설(private) 캐시와 공유(shared) 캐시입니다. 사설 캐시는 각 Client의 로컬 캐시에 데이터를 .. 2021. 2. 4.
[Cache & Redis] 캐싱 전략 (Cashing Strategies) 안녕하세요. Redis와 같은 Caching을 이용한다면 RDB 보다 빠른 write와 read를 경험 할 수 있게 됩니다. 이런 장점을 극대화하기 위한 전략들이 몇가지 존재합니다. 이를 활용하여 우리는 Redis를 다양한 상황에서 사용할 수 있습니다. 오늘은 Redis를 이용한 캐싱 전략(Caching Strategies)에 대해서 알아보도록 하겠습니다. 오늘 포스팅은 아마존의 ElasticCache docs를 번역 및 가공 한 것으로 원문을 보기 원하시는 분들은 Link를 참조해 주시기 바랍니다. 레이지 로딩(Lazy Loading) 이름에 나타나듯이 레이지 로딩은 클라이언트에게서 데이터가 필요로 해질 때 Cache에 로딩하는 전략입니다. DB나 외부 API에 접근하기 전 Cache를 먼저 확인 한 .. 2021. 1. 30.