ElasticSearch 는 루신을 기반으로 하는 전문 텍스트 검색 엔진이다. ElasticSearch 는 어떤 문장에 대해서 이를 분해한다. 문제는 ElasticSearch 가 외국에서 만든거라서 영어를 기반으로한 문장에 대해서는 분해하고 분석해준다. 하지만 그외에 대해서는 공백을 기반으로 문장을 분석한다. 여기서 문장에 대해서 좀 더 생각을 해봐야 한다. 문장을 분석할때에는 약간의 지식이 필요하다. 예를들어 다음과 같은게 있다고 하자. 고양이는 귀엽다 ElasticSearch 가 이 문장을 분석하면 ‘고양이는’, ‘귀엽다’ 로 분해한다. 하지만 이 문장에는 ‘고양이’ 라는 명사가 있고 ‘는’ 이라는 조사, ‘귀엽다’ 라는 동사가 존재한다. (정확한지는 나도 잘 […]
ElasticSearch Nodes
ElasticSearch 는 노드(node) 로 불리운다. Node 는 ElasticSearch 의 독립된 인스턴스다. 그런데, 이 Node 에는 역할이 있으며 어떻게 Node 에 역할을 부여하는지에 해서 알아본다. Node Type Master Node 마스터 노드(Master Node) 는 ElasticSearch 의 클러스터(Cluster) 전체를 총괄하는 역할을 맡는다. ElasticSearch 는 분산검색엔진이며 각 노드들은 특정한 일을 하기 위한 하나의 그룹내의 멤버들로 관리되는데 이렇게 ‘하나의 그룹’ 을 클러스터라고 한다. 클러스터내에 노드들의 상태를 점검하고 이들의 유기적인 통제를 해야할 필요가 있는데, 이러한 역할을 하는 것이 바로 마스터 노드이다. ElasticSearch 의 공식 문서에 보면 […]
ElasticSearch 시스템 설정
ElasticSearch 를 실행하기 위해서는 기본적으로 리눅스 시스템의 설정을 변경해줄 필요가 있다. 이는 ElasticSearch 문서에도 아주 잘 나와 있다. Max Open File 리눅스 시스템은 사용자별로 최대 파일 오픈 개수를 제한 하고 있다. 이를 늘려주기 위해서는 /etc/security/limits.conf 파일에서 늘려줄 수 있다.
|
1 |
elastic - nofile 65536 |
맨 앞에 문자열은 시스템 계정이며 맨 뒤에 숫자는 오픈가능한 최대치 값이다. ElasticSearch 에서는 65536 값을 권장하고 있다. 파일에 저장하고 계정을 재로그인하면 바로 적용된다. Memlock 해제. Memory Lock 에 대해서 무제한으로 해제를 해줘야 한다. 이것 역시 /etc/security/limits.conf 파일에 다음과 같이 설정하면 […]
Error – The server time zone value ‘KST’ is unrecognized
Java 와 MySQL 을 연동하는 상황에서 다음과 같은 오류를 만나기도 한다.
|
1 2 3 4 5 6 7 |
HTTP Status 500 – Internal Server Error Type Exception Report Message Request processing failed; nested exception is org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Cannot create PoolableConnectionFactory (The server time zone value 'KST' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.) Description The server encountered an unexpected condition that prevented it from fulfilling the request. |
자세히 보면 java.sql.SQLException 이 보인다. 이 경우는 결국에는 데이터베이스쪽에 문제가 있다는 것이며, MySQL을 사용할 경우에 보이게 된다. 이는 MySQL의 시간을 나타내는 타임존 설정이 맞지 않아 생기는 오류다. MySQL 5.7, MariaDB 10 MySQL 5.7 과 MariaDB 10 을 사용한다면 my.cnf 에서 다음과 같이 설정함으로써 문제 해결이 가능하다.
|
1 2 |
# time zone 설정 default-time-zone=Asia/Seoul |
설정할 수 있는 타임존 리스트는 MySQL 메뉴얼을 참조하기 바란다. 이렇게 했는데도 다음과 같은 오류를 만날 가능성도 있다.
|
1 |
[ERROR] Fatal error: Illegal or unknown default time zone 'Asia/Seoul' |
이럴때는 다음과 같이 […]
다얼유 LK158 블루투스 겸용 LED 기계식 키보드
USB와 블루투스를 함께 지원하는 텐키리스 기계식 키보드가 필요했는데, 다얼유 에서 출시해서 구매하게 되었다. 이 키보드는 맥(Mac) 도 지원한다. 맥을 지원한다는 것은 맥에서 사용가능한 펑션키가 있다는 것이며 이는 편리성을 제공한다는 것이다. 내가 구매한 모델은 적축 모델이다. 다음은 블루투스 설정방법을 스크랩한 것이다. 블루투스모드, 유선모드 전환 블루투스 멀티페어링 전환 블루투스 페어링 방법 LED 효과 사용 후기 집에서 아주 만족해 하면서 사용하고 있다. 집에서는 Windows 10 에는 USB 로 연결하고 Mac Mini 를 블루투스로 연결해서 사용하고 있다. 하나의 키보드로 두개의 OS를 번갈아가면서 사용할 […]
Tomcat 설치 디렉토리 구성
과거에 Tomcat Multi Instance 설치에 관해서 쓴 글이 있다. Multi Instance 설치에서 핵심은 CATANINA_HOME과 CATALINA_BASE 를 분리하는데 있다. 오늘은 한발 더 들어가서 배포를 위한 설정과 시작, 종료 스크립트의 변경등에 대해서 이야기해보고자 한다. Multi Instance 구성 Tomcat 을 다운로드 받아 압축을 풀면 그것이 곧 CATALINA_HOME 이 된다. 그리고 CATALINA_BASE 를 위해서 conf 디렉토리를 복사해주고 bin, lib, logs, temp, webapps, work 디렉토리를 생성해준다. 그리고 더블어서 war 파일을 배포를 위한 디렉토리를 Deployments 를 생성해주고 PID 저장을 위한 run 디렉토리도 생성해준다.
|
1 |
Deployments bin conf lib logs run temp webapps work |
CATALINA_HOME 에서 […]
Spring5 requirements
Spring5 를위한 필요사항들을 정리. java 8. 원래 Spring5 는 Java 9를 기반으로 하려고 했지만 변경됐다. 이로 인해서 Reactive Programming을 하기 위해서는 의존성 라이브러리를 필요로 한다. 현재Java 9 은 지원이 중단된 상태다. Java 10 을 사용해도 된다. Java EE 8 호환. Servlet 4.0, Bean Validation 2.0 등을 지원한다. HTTP/2 지원한다. Jackson 2.9, Protobuf 3.0 지원.
컴퓨터 영역이 너무 어려워 지고 있다.
컴퓨터 영역이 너무 어려워 지고 있다. 어찌보면 그런 수순으로 가고 있는게 당연한건지도 모르겠다. 과거에 등안시 했던 것들, 대표적으로 알고리즘 같은 것들을 요즘에는 중요하게 여기는 걸 보면 말이다. 과거나 지금이나 알고리즘은 중요하다. 하지만 유독 그것이 부각되고 나머지는 좀 덜한 중요도를 갖는것처럼 왜곡되고 있는게 문제가 되지 않을까 싶다. 그동안에 개인의 역량이란게 무엇으로 평가 되었는지는 모르겠지만, 요즘에는 코딩 알고리즘 문제가 기본이 되다보니 책방에 가서 보면 알고리즘 관련 서적들이 아주 많다. 거의 15년정도를 컴퓨터 분야에 있다보니, 요즘들어 그런 생각이 더 깊어지는 것 같다. 코딩으로 […]
MyBatis Error – The content of elements must consist of well-formed character data or markup.
MyBatis 의 Mapper XML 파일에서 다음과 같은 오류가 발생 했다. “The content of elements must consist of well-formed character data or markup.” 이는 SQL 연산자인 <, =, > 와 같은 엔터티가 MyBatis 문법과 혼동되서 나오는 문제다. 이럴때는 CDATA 를 적용해주면 된다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<select id="getCheckInDay" resultType="CheckInDayVO"> <![CDATA[ SELECT dayofweek, DATE(start_date) AS day, start_date, end_date, TIMEDIFF(end_date, start_date) AS worktime, CASE WHEN end_date is null OR TIMESTAMPDIFF(MINUTE,start_date,end_date) < 160 THEN TIMESTAMPDIFF(MINUTE,start_date,now()) ELSE TIMESTAMPDIFF(MINUTE,start_date,end_date) END workminute, CASE WHEN end_date is null OR TIMESTAMPDIFF(MINUTE,start_date,end_date) < 160 THEN (TIMESTAMPDIFF(MINUTE,start_date,now())/480)*100 ELSE (TIMESTAMPDIFF(MINUTE,start_date,end_date)/480)*100 END workpercentage FROM checkin WHERE username = #{username} AND DATE(start_date) = #{today} ]]> </select> |
이렇게하면 에러를 없앨 수 있다.
Java 시간 대역 체크하기
Java 프로그래밍을 하다보면 시간을 다루게 된다. 만일 점심시간인지 아닌지를 시간을 체크하고 싶다면 어떻게 할까? 대략 다음과 같이 할 수 있다. isAfter, isBefore 메소드를 이용하면 손쉽게 체크할 수 있다.