Programming 144

Hibernate - Architecture

아래의 그림은 하이버네이트 아키텍처의 고수준의 뷰를 보여준다. 불행하게도 우리는 모든 런타임 아키텍처의 자세한 뷰를 제공할 수 없다. 하이버네이트는 사용하는 방법에 따라 충분히 유연하고, 많은 아키텍처로 나타날 수 있다. 하지만 우리는 특별하게 2가지로 설명을 하겠다. 2.1.1. Minimal architecture 최소한의 아키텍처는 어플리케이션을 가지고 있으며 이 어플리케이션은 자신의 JDBC 연결과 그 연결을 하이버네이트에 제공하는 것을 관리한다. 추가적으로 어플리케이션의 자신을 위한 트랜잭션을 관리한다. 이러한 접근은 Hibernate API에 최소 서브셋을 활용한다. 2.1.2. Comprehensive architecture 포괄적인 아키텍처는 어플리케이션을 JDBC/JTA API와 분리시켜..

Spring Boot - SpringApplication

SpringApplication클래스는 Spring 어플리케이션 구동하는 편리한 방법을 제공한다. Spring 어플리케이션은 main 메소드로부터 시작할 것이다. 많은 상황에서 단순하게 static한 SpringApplication.run 메소드를 델리게이트할 수 있다. public static void main(String[] args) { SpringApplication.run(MySpringConfiguration.class, args);}. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| ..

Elasticsearch - Mapping

매핑은 검색 엔진에게 어떻게 도큐먼트들이 매핑될 수 있는지를 정의하는 단계이다. 필드가 검색 대상이 되는지 어떻게 토큰나이즈 되는지 등이 예이다. 엘라스틱 서치에서는 인덱스는 다른 매핑 타입의 도큐먼트들을 저장할 수 있다. 엘라스틱 서치는 각 매핑 타입을 위한 1:N 매핑을 적용할 수 있다. 명시적인 매핑은 index/type 레벨에서 정의된다. 기본적으로 명시적인 매핑을 정의할 필요는 없다. 새로운 타입이나 새로운 필드가 소개될때 퍼포먼스 저하 없이 자동으로 새성되고 등록되기 때문이다. 기본값이 오버라이드 될 필요가 있을때에만 매핑 정의는 제공되어야만 한다. Mapping types 매핑 타입은 하나의 인덱스내에 도큐먼트들을 논리적인 그룹으로 분리하는 방법이다. 데이터베이스의 테이블로 생각하면 유사하다..

Elasticsearch - API Conventions

엘라스틱 REST API는 HTTP를 통해 JSON을 이용하여 노출되어 있다. 이번에 볼 리스트된 컨벤션은 REST API를 통해 적용할 수 있다. Multiple Indices 대부분은 API는 다수의 인덱스를 통한 실행을 지원하기 위해 test1,test2,test3과 같은 식으로 인덱스를 기술할 수 있다. 또한 wildcards를 지원해서 test* 라던지 +test*, -test3 등의 문법도 지원한다. 모든 멀티풀 인덱스 API는 다음과 같은 쿼리 파라미터를 지원한다. ignore_unavailable - 특정 인덱스가 사라졌거나 닫혀서 이용가능하지 않을때 무시할 지 여부를 컨트롤 한다. true 나 false로 지정할 수 있다.allow_no_indices - 와일드카드 인덱스가 없다면 실패로..

Elasticsearch - Exploring Your Data

이제 우리는 기초적인 내용을 잠깐 보았다. 이제 좀더 실제적인 데이터셋과 동작을 해보자. 고객 은행 계좌 정보를 표현한 샘플을 준비하였다. 각 도큐먼트는 다음과 같은 스키마를 가진다. { "account_number": 0, "balance": 16623, "firstname": "Bradshaw", "lastname": "Mckenzie", "age": 29, "gender": "F", "address": "244 Columbus Place", "employer": "Euron", "email": "bradshawmckenzie@euron.com", "city": "Hobucken", "state": "CO"} 이 데이터는 www.json-generator.com/로 부터 생성한 데이터이다. 이 사이트..

Elasticsearch - Modifying Your Data

엘라스틱 서티는 NRT상의 데이터 조작과 검색 기능을 제공한다. 기본적으로 데이터를 입력/변경/삭제하고 조회 결과에 나타날때까지 1초의 딜레이가 예상된다. 이것은 트랜잭션이 완료되면 즉시 조회가 가능한 SQL 기반의 다른 플랫폼과의 주요한 차이점이다. Indexing/Replacing Documents 하나의 도튜먼트를 인덱싱 해보기 위해 다시 아래와 같은 커맨드를 수행해보자, curl -XPUT 'localhost:9200/customer/external/1?pretty' -d '{ "name": "John Doe"}' 다시 customer 인덱스, external 타입에 ID 1로 도큐먼트가 인덱싱 되었다. 만약 다른 도큐먼트로 위의 커맨드를 다시 실행한다면 엘라스틱 서치는 ID 1에 존재하는 도큐먼..

Elasticsearch - Exploring Cluster

REST API 이제 우리는 우리의 노드를 가지게 되었고, 실행하였다. 다음은 노드와 어떻게 커뮤니케이션을 하는 것인가이다. 엘라스틱 서치에서는 매우 이해하기 쉽고 파워풀한 REST API를 제공한다. API를 통해서 수행할 수 있는 작업은 다음과 같다. 클러스터, 노드와 인덱스 헬스, 상태, 통계 체크클러스터, 모드 , 인덱스 데이터 및 메타데이터 관리인덱스에 CRUD 수행 및 검색 수행페이징, 소팅, 필터링, 스크립팅, faceting, aggregation등 진화된 검색 수행 Cluster Health 기본적인 헬스 체크부터 시작해보자. 우리는 curl를 사용할 것이다. 하지만 당신이 원한다면 HTTP/REST 콜을 생성하는 다른 툴을 사용해도 좋다. 명령을 수행하기 위해 다른 쉘 윈도우를 열자. ..

Elasticsearch - 시작하기

Getting Started 엘라스틱 서치는 고성능의 확장가능한 오픈소스 풀텍스트 검색 및 분석 엔진이다. 준실시간으로 대량의 데이터의 빠르게 저장할 수 있고 검색할 수 있고, 분석할 수 있다. 다음은 엘라스틱 서치를 사용할 만한 유스케이스들이다. 당신의 판매할 상품들을 위한 고객들이 검색할 수 있게 온라인 웹스토어를 실행킨다. 이런 경우 엘라스틱 서치에 모든 제품의 카탈로그를 저장하고, 상품들의 자동완성 추천을 할 수 있다.트렌드나 통계, 합산 등을 위해 로그 및 트랜잭션 데이터를 수집하기를 원한다. 이러한 경우 Logstash를 사용할 수 있다. 한번 데이터가 엘라스틱 서치에 저장되면 그것들을 검색하거나 조합할 수 잇다.가격 알림 플랫폼을 실행할 수 있다. 특정 가격 이하로 떨어진 상품을 추천하는 것..

Spring - Java-based container configuration

스프링의 새로운 자바기반 설정에서는 @Configuration 어노테이션 클래스와 @Bean 어노테이션 메소드를 지원한다. @Bean 어노테이션은 메소드 초기화를 위해 지정되고, 스프링 IOC 컨테이너에의해 관리되는 새로운 오브젝트를 설정하거나 초기화하기 위해 사용된다. 스프링 XML 설정에 친숙하다면 @Bean 어노테이션은 엘레먼트와 같은 역할을 수행한다고 보면 된다. @Bean 어노테이션은 스프링 모든 @Componet에 나타날 수 있지만, 주로 @Configuration에 빈정의를 위해서 사용된다. @Configuration으로 클래스를 지정했다는 것은 해당 소스의 주요 목적이 빈 정의라는 것을 의미한다. 더욱이 @Configuration 클래스는 같은 클래스의 @Bean 메소드에서 간단하게 호출하..

Programming/Spring 2015.05.19

Hibernate - Mapping associations

이전에 우리는 하나의 퍼시스턴트 엔티티 클래스와 테이블간에 1대1 매핑의 경우에 대해서 살펴 보았다. 이제 여러 클래스간의 관계로 확장해보자. 우리는 어플리케이션에 인물들을 추가하고 각 참가자의 이벤트 리스트를 저장할 것이다. 1.2.1. Mapping the Person class 첫번째로 Person 클래스를 살펴보자. package org.hibernate.tutorial.domain; public class Person { private Long id; private int age; private String firstname; private String lastname; public Person() {} // Accessor methods for all properties, private set..