본문 바로가기

분류 전체보기55

1. 서문 1.서문 Elasticsearch는 전문검색뿐 아니라 보안, 로그 분석 등 다양하게 이용된다. Elasticsearch는 주로 ELK 스택, Elasticsearch, Logstash, Kibana와 함께 쓰이며 경량 데이터 수집기인 Beats와도 같이 쓰인다. 모니터링, 클라우드, 머신러닝 서비스도 제공한다. Elasticsearch 데이터를 색인하고, 저장하고, 검색 및 집계 기능 등을 수행한다. 뛰어난 검색 능력과 대규모 분산시스템 기능을 제공한다. 사용법은 간단하다. 실시간으로 인덱싱하자마자 검색 및 집계가 가능하다. Full Text (전문) 검색 및 다양한 점수 기반의 다양한 정확도 알고리즘을 사용할 수 있다. 내부적으로 Inverted File Index 구조를 사용한다. 사용자 관점으로는 .. 2021. 8. 31.
Part 3 - 함수 정의와 호출 Ch.3 함수 정의와 호출 3.1 코틀린에서 컬렉션 만들기 val set = hashSetOf(1,7,53) val list = arrayListOf(1,7,53) val map = hashMapOf(1 to "one", ...) val strings = listOf("first", ...) val numbers = setOf(...) val last = strings.last() val max = numbers.max() 코틀린은 자체 컬렉션을 제공하지 않고 자바 컬렉션에 의존한다. 코틀린의 메서드 익스텐션을 이용해서 자바 컬렉션보다 더 쉽게 컬렉션을 사용할 수 있다. 3.2 함수를 호출하기 쉽게 만들기 3.2.2 디폴트 파라미터값 fun joinToString( collection: Collectio.. 2021. 8. 29.
Part 2 - 코틀린 기초 Ch2. 코틀린 기초 2.1 기본 요소 : 함수와 변수 2.1.1 Hello World fun main(args: Array) { println("Hello World!") } 함수를 선언할 때는 fun 키워드를 사용한다. 변수명 뒤에 타입을 선언한다. 함수를 최상위 수준에 정의할 수 있다. 배열 문법이 따로 존재하지 않는다. 간결성을 위해 자바 메서드를 감싼 Wrapper 메서드가 있다. 세미콜론으르 생략 가능하다. 2.1.2 함수 fun max(a: Int, b: Int): Int = if(a>b) a else b 식(Expression): 값으로 치환될 수 있는 코드 문장(statement): 실행될 수 있는 코드 단위, 값을 만들어내지 않는다. 코틀린은 루프를 제외한 모든 제어 구조가 식이다.->.. 2021. 8. 20.
Part 1 - 코틀린 소개 코틀린이란? 자바 플랫폼(JVM)에서 돌아가는 새로운 프로그래밍 언어이다. 코틀린은 1. 간결하고 2. 실용적이며 3. 상호운용성을 중시하며 4. 안전하다. 코틀린은 범용 프로그래밍 언어로써, 서버 개발, 안드로이드 앱 개발 뿐만 아니라 다양한 분야에서 사용할 수 있다. 코틀인은 정적 타입 지정 언어이다. 객체의 타입을 컴파일 시점에 지정해서 컴파일 타임에 타입 오류를 검증할 수 있다. 정적 타입은 안전하지만 컴파일러에게 더 많은 정보를 제공해줘야하기 때문에 생산성이 떨어진다. 코틀린은 "var x = 1" 처럼 타입 추론 기능을 지원하기 때문에 안전성과 생산성의 트레이드 오프 관계를 벗어난다. 코틀린은 함수형 프로그래밍과 객체지향 프로그래밍을 동시에 지원한다. 코틀린에서 함수는 일반 객체이다. 함수형 .. 2021. 8. 1.
컴파일과 빌드의 차이 IDE에 익숙해진 초보 프로그래머들에게는 컴파일과 빌드의 차이는 애매모호하다. 잡지를 만드는 과정을 예로 들어 이해해보자. 어느날 PanGyo는 마음에 드는 잡지를 발견했다. 다만 아쉬운 점은 그 잡지가 영어로된 잡지여서 친구들과 같이 읽을 수 없다는 점이었다. 그래서 PanGyo는 영어로된 잡지를 한글로 번역해 출판하기로 마음먹었다. 출판하는 과정을 하나씩 살펴보자. 잡지는 영어로된 여러 기사들로 이루어져 있고, 각 기사에는 잡지내 다른 기사를 참조하는 경우가 잦다. 첫번째로 할 일은 각 기사를 한글로 번역하는 일이다. 기사를 영어에서 한글로 번역하면 친구들과 같이 읽을 수 있다. 두번째로 할 일은 원래 기사와 번역된 기사를 연결짓는 일이다. 예를 들어 "영문기사 A"가 번역되어 "한글기사 가"가 된 .. 2021. 7. 23.
로깅을 어떻게 해야할까? AOP를 공부하다보면 대표적인 Cross cutting concern의 예시로 로깅이 언급된다. 컨트롤러 어노테이션을 달고 다니는 오브젝트의 메서드들을 프록시로 감싸서 실행시간을 측정하는 것이 대표적인 로깅의 예시인데, 별로 마음에 들지 않는다. 아래 예시를 보자. 예제 수준의 로깅 코드다. 로깅 메세지를 보면 "-----(대충몇개)----> Respons : {} ~" 식으로 되어 있다. 그러면 거대한 시스템의 경우 초당 수십만개의 로그가 쌓이는데, 저렇게 로깅을 해도 될까? 유튜브 채널 EO에 우아한형제들 전 CTO, 현 CEO인 분이 나와서 얘기하시기를, 평시 리퀘스트는 초당 만개, 이벤트 시에는 200만개가 넘게 들어온다고 한다. 그러면 저런 문자열이 리퀘스트 *2 개만큼 생기고, 컨트롤러 로깅뿐.. 2021. 7. 15.
orElseGet()과 orElse()의 차이 cfdf.tistory.com/34 java, optional의 orElse와 orElseGet의 차이 java8의 optional api 많이들 사용하실텐데요. 어찌보면 당연하지만 햇갈리는 내용에 대해 다뤄보겠습니다. 마무리 연산인 orElse와 orElseGet의 차이입니다. 귀찮으신분들을 위해 요약을 먼저 하자면 orE cfdf.tistory.com orElse와 orElseGet에 대해 흥미로운 글을 봤다. 무심코 넘겼던 부분인데 둘은 꽤 중요한 차이가 있다. orElse(Value)는 Value가 메모리 상에 존재한다고 가정하므로, Value가 함수의 리턴값이라면 Optional 내부 값이 null이건 말건 함수를 실행시켜 Value을 가져온다. 다음의 예제를 보자. orElse문 안의 Valu.. 2021. 3. 27.