이 글은 설치하는 방법은 다른 블로그에 좋은 글이 많기 때문에 다루지 않고 실제 어떻게 적용을 했는지 만을 다룬다.solr 는 apache의 enterprise search engine으로 빠른 검색 시스템을 제공해 주고 관리화면을 제공해주며 검색 쿼리를 http get을 사용하여 호출하기 때문에 기존 시스템에 적용하기 좋다. 또한 DIH(Data Import Handler) 를 사용하여 원천 데이터로 부터 검색에 필요한 데이터을 추출하여 solr에 저장할 수 있다. 나는 회사에서 제공하는 많은 디자인을 사용자에게 검색을 통해 제공할 수 있도록 DB검색을 solr 로 전환하는 작업을 했다.처음 구조를 잡을 때 가장 고민했던 것은 검색하려는 목표와 목표를 검색하는데 필요한 데이터들의 분리였다. 목표란 프론..
Single 로 사용하던 세션서버 용도의 Redis 를 노드를 늘릴 수 있는 기회가 생겨서 어떤 구성을 적용할 지 고민을 하게 되었다. 이상적인 구조는 Master 하나와 2대 이상의 Slave 그리고 3대 이상의 Sentinel 이지만 현재의 서버가 부족하여 2대로 구성을 해야 했다.처음 생각했던 것은 Master 1, Slave 1 구성하고 Replication 을 사용하고 Slave 의 read only 를 사용하지 않는 것이었다. 마스터 장애 시 slave 에 쓸 수 있고 장애가 복구되면 다시 master 를 사용하려는 목적이었다. 하지만 slave 의 데이터가 master 로 가지 않는 단점이 있어서 slave 의 사용 시간이 늘어날 수록 복구 후 손실되는 데이터가 많아지는 단점을 갖고 있었다...
개인적으로 개발 중인 서버 프레임워크 및 기타 Github 소스들을 쉽게 제공하기 위해서(나에게 제공...;;) maven 을 사용할 수 있는 방법을 찾던 중 혹시나 Github 에 있지 않을까 해서 확인해보니 역시나 있었다!https://github.com/github/maven-plugins잘 정리가 되어 있어서 일단 따라해 봤다.maven 폴더 안에 있는 settings.xml 에 github 으로 파일을 올리기 위한 설정이 필요하기 때문에 github 의 계정 정보를 설정해 주었다. 내 settings.xml 위치 C:\Users\user\.m2\repository github github id github password 그리고 프로젝트 안의 pom.xml 에 example 에 있는 plugin..
Java는 메모리를 할당 받는 것은 개발자가 원하는 만큼 받을 수 있지만 해제는 개발자의 영역이 아닌 JVM의 영역이다. 이 Garbage Collection는 Garbage Collector(이하 GC)에 의해서 수행되며 할당된 객체가 더이상 참조되지 않을 경우 수행되게 된다.GC는 개발자가 메모리를 명시적으로 해제해야 하는 고민을 덜어 주었지만 의도와 다른 GC 수행으로 잠시 멈추는 현상인해 CPU를 많이 사용하는 프로그램의 경우 어려운 상황을 초래하기도 한다.Hotspot의 GC Hotspot은 Generational Collection 방식을 사용하는데 익히 들어왔던 것과 같이 Heap영역을 Young Generation과 Old Generation으로 나누는 것이다.객체가 처음 생성되는 영역은 ..
Object class는 자바에서 기본적으로 상속을 받는 클래스로 항상 사용은 하고 있지만 Object 의 메소드는 자주 사용하지 않아서 정확한 사용방법을 모르는 경우가 많다. 나도 정확히 모르는 부분이 있어서 java API와 실제 구현 소스를 보고 정리를 해 보았다.참고 API URL : https://docs.oracle.com/javase/7/docs/api/java/lang/Object.htmlpublic native final Class getClass() 객체의 런타임 class를 반환해 준다. 이 반환되는 Class object는 static syncronized methods에 의해서 잠겨있다.public native int hashCode() 이 메소드는 각 객체의 hashCode를 만..
TCP_NODELAY : 데이터 송수신에 Nagle알고리즘(가능하면 데이터를 나누어 보내지 말고 한꺼번에 보내라)의 비활성화 여부를 지정한다. (TCP/IP의 헤더 크기는 약 50바이트)SO_KEEPALIVE : 운영제체에서 지정된 시간에 한번씩 keepalive 패킷을 상대방에게 전송한다.SO_SNDBUF : 송신할 커널 송신버퍼 크기SO_RCVBUF : 수신할 커널 수신버퍼 크기SO_REUSEADDR : TIME_WAIT상태의 포트를 서버 소켓이 바인딩 할 수 있게 한다.SO_LINGER : 소켓을 닫을 때 커널의 송신 버퍼에 전송되지 않은 데이터의 전송 대기시간을 지정SO_BACKLOG : 동시에 수용 가능한 소켓 연결 요청 수. TCP 핸드 셰이크 중 SYN를 전송하고 SYN-ACK 패킷을 전송하..
자바에서는 IO와 NIO라는 두 종류의 입/출력을 제공하고 있다. IO는 Blocking 입출력이며 NIO는 Non Blocking 입출력이다. 참고로 여기서 입력과 출력을 구분 짓는 것은 자신의 메모리의 외부(파일, 네트워크)에서 메모리로 가져오는 것을 입력, 자신의 메모리에서 외부로 내보내는 것을 출력이라 한다. * IOIO에서 Blocking이 되는 부분은 ServerSocket의 accept()와 Socket의 read()가 있다. Blocking이 된다는 것은 이 작업을 수행하는 Thread가 다른 일을 하지 못 하고 호출한 Method가 종료될 때까지 기다려야 한다는 것을 뜻한다. ServerSocket의 accept에서의 Blocking을 극복하기 위해서 보통 IO는 accept의 반환값인 ..
java의 상호 연관된 기술로는 아래와 같이 네 가지있다. - The Java Programming Language기술 : 객체 지향, Multi-Threading, 구조화된 에러 핸들러, Garbage Collection, Dynamic Linking, Dynamic Extension - The Java Class File Format특징 : Compact한 형태, Bytecode로의 변경, Platform 독립적, Network Byte Order의 사용Class 파일에는 실제로 참조하는 라이브러리를 포함하지 않고 Symbolic Reference만을 가지고 있다. Symbolic Reference는 참조하고자 하는 대상의 이름만으로 참조관계를 구성하는 것으로 객체의 특정 메모리 번지로 참조관계를 구..