본문 바로가기

전체보기

(31)
[Spring] 로그 출력하기 스프링 컨테이너가 제공하는 로그를 콘솔에 출력하기 위해서는 log4j2.xml 파일을 작성해야 한다. src/main/resources 소스 폴더에 오른쪽 마우스를 클릭한 후 [ New ] → [ Other ] 를 선택한다. 그리고 아래쪽에 XML 폴더에 있는 [ XML File ] 을 선택하고 버튼을 클릭한다. 파일 이름으로 log4j2.xml을 입력하고 버튼을 클릭하면 src/main/resources에 log4j2.xml 파일이 생성된다. 이제 생성된 log4j2.xml 파일에 다음과 같은 내용을 입력한다. 로그 설정에서 중요한 것은 와 두 가지다. 먼저 는 어디에 어떤 패턴으로 로그를 출력할지 결정해 준다. 로그 메시지는 크게 콘솔, 파일, 데이터베이스에 출력할 수 있는데 위 설정에서는 엘리먼트를..
[Spring] 자동화 빌드 도구 메이븐의 특징과 개념 STEP#01. 빌드 개념 빌드( build )란 무엇일까? 위키( Wikipedia )의 정의에 따르면 소프트웨어 빌드( software build )란 소스코드 파일을 컴퓨터에서 실행할 수 있는 독립 소프트웨어 가공물로 변환하는 과정을 말하거나 그에 대한 결과물을 일컫는다. 소프트웨어 빌드에 있어 가장 중요한 단계 중 하나는 소스코드 파일이 실행 코드로 변환되는 컴파일 과정이다. 이와 같은 정의와 함께, 같이 빌드 자동화라는 단어가 나온다. 이 단어들의 의미를 좀 더 파헤쳐 보자. 프로그래밍 언어를 사용하여 소스코드를 작성하고 나면 실행까지 여러 작업들이 필요하다. 디렉터리를 만들고, 파일을 이동하고, 컴파일을 하고, 테스트를 수행하고, 압축을 하거나 해제하고, 웹 서버나 형상 관리 서버에 올리거나 ..
[Spring] 메이븐 웹 어플리케이션 생성하기 IDE : Spring Tool Suite 4( 개발환경 ) WAS : Apache Tomcat 8.0.9 STEP#01. 메이븐 웹 어플리케이션 프로젝트 생성하기 메이븐 프로젝트는 이클립스에서 생성하거나, 도스 명령행에서 mvn 명령어를 사용하여 생성하는 방법이 있다. 이클립스에서 메이븐을 편리하게 사용하기 위한 플러그인으로 m2eclipse를 사용할 수 있다. 표준프레임워크 개발 환경에는 m2eclipse 플러그인이 포함되어 있다. 표준 프레임워크에서는 두 가지 방식으로 메이븐 프로젝트를 생성할 수 있다. ① 개발 환경에서 제공하는 eGovFrame Perspective( 퍼스펙티브 )를 이용한 메이븐 프로젝트 생성 ② 메이븐 아키타입( archetype ) 플러그인을 이용한 메이븐 프로젝트 생성 해..
[MongoDB] 백업 및 복구 MongoDB 서버는 다인 레플리카 셋뿐만 아니라 샤딩된 클러스터 구성으로도 구축할 수 있다. 단일 레플리카 셋일 때는 다른 RDMBS와 동일하게 단일 서버의 백업만 고려하면 된다. 하지만 샤딩된 클러스터 구성일 때는 여러 샤드 간의 데이터 저장 시점을 동기화해야 하는 어려움이 있다. 그뿐만 아니라 컨피그 서버와 샤드 서버의 동기화 문제( 동일 시점 백업 )도 샤딩된 클러스터의 백업에 있어서 상당히 까다로운 문제일 것이다. 여기에서는 완벽한 백업 및 복구 방법은 아니지만, 가능한 몇 가지 방법을 살펴보겠다. STEP#01. mongodump와 mongorestore를 이용한 놀리 백업 복구 #01. mongodump 백업 mongodump는 MongoDB에서 공식적으로 제공되는 유일한 백업 도구인데, 안..
[MongoDB] 한글 전문 검색 수행하기 STEP#01. 한글과 전문 검색 전문 검색을 수행하기 위한 쿼리의 기능도 중요하지만, 전문 인덱스를 어떻게 구성하는지도 매우 중요하다. 도큐먼트가 저장될 때, 각 필드의 값을 분석해서 전문 인덱스를 구성하는 부분을 일반적으로 전문 파서( Parser )라고 한다. 전문 파서가 문장을 어떻게 검색 단위의 단어로 분리하고 가공하는지에 따라서 검색 결과라 천차 만별이 될 수도 있다. MongoDB 서버의 전문 인덱스는 주요 언어에 대해서는 형태소 분석( Stemming ) 작업을 거쳐서 각 단어의 원형을 인덱스에 저장한다. 하지만 안타깝게도 한국어나 중국어 그리고 일본어 등에 대한 형태소 분석 기능은 제공하지 않는다. MongoDB가 사용하는 형태소( Snowball, http://snowball.tarta..
[MongoDB] 전문검색( Fulltext Search ) STEP#01. 전문 검색 전문검색이란? • 여러 문서에서 특정의 문자열을 검색하는 것 • 여러 문서에 걸쳐 문서에 포함되는 전문을 대상으로한 검색 RDBMS 처럼 MongoDB 서버도 전문 검색을 위해서 전문 검색 인덱스와 전문 검색을 위한 쿼리 문법을 제공하고있다. 우선 MongoDB의 전문 검색을 사용하는 방법을 간단히 살펴보자. // 전문 검색 예제 데이터 저장 mongo> db.stores.insertMany( [ { _id : 1, name : "Java Hut", description : "Coffee and cakes" } , { _id : 2, name : "Burger Buns", description : "Gourmet hamburgers" } , { _id : 3, name : "C..
[MongoDB] 확장 검색 쿼리 - 집계 파이프 라인연산자 종류 파이프라인에서 사용할 수 있는 연산자를 종류별로 나눠서 구분해 보자. STEP#01. 문자열 연산자 $concat 연산자 $concat 연산자는 두 개 이상의 문자열을 하나의 문자열로 연결한다. 예시> { $concat : { "$ltem", "-", "$description"] } $indexOfBytes 연산자 $indexOfBytes 연산자는 바이트 수로 인덱스를 반환한다. 예시> { $indexOfBytes : [ "$Desk", "-"] } $indexOfCP 연산자 $indexOfCP 연산자는 문자열에서 특정 문자가 처음 생겼을 때 인덱스 코드 포인트( CP )에서 찾아내면 필드내의 문자열을 분석하는 데 도움이 된다. 예시> { $indexOfCP : [ "$Desk", "-" ] } 위 쿼리..
[MongoDB] 확장 검색 쿼리 - $facet 스테이지 쇼핑몰처럼 많은 상품을 판매하는 사이트를 경험해본 개발자라면 다양한 기준( 가격대별로 또는 제품의 특성 )별로 상품의 개수를 그룹핑해서 보여주고 있고, 특정 그룹을 선택하면 다시 하위의 다른 기준으로 상품을 그룹핑해서 보여주는 기능을 개발해본 적이 있을 것이다. 아마도 이 기능을 구현하기 위해서 여러개의 쿼리를 작성하고 그 결과를 응용 프로그램에서 조합해서 화면에 출력하도록 하는 작업을 많이 했을 것이다. 이런 기능을 "Facet Query" 라고 하는데, 일반적인 RDBMS에서는 하나의 쿼리로 다양한 기준의 그룹핑 쿼리를 수행할 수 없다. 하지만 MongoDB 3.4 버전부터는 $facet 스테이지를 이용해서 상품을 가격대별로 그리고 카테고리 별로 한번에 그룹핑해서 개수를 가져올 수 있다. Facet ..
[MongoDB] 확장 검색 쿼리 - $lookup과 $graphLookup 스테이지 $lookup과 $graphLookup 스테이지는 Aggregation 쿼리의파이프라인에서 사용할 수 있는 조인 기능이다. $lookup과 $graphLookup 스테이는 FIND 쿼리에서는 사용할 수 없으며, Aggregation에서만 사용할 수 있다. 아래 그림과 같이 컬렉션이 샤딩돼 있지 않다면 $lookup과 $grapLookup 스테이지를 조인의 용도로 사용하는 데 있어서 어떤 제약 사항도 없다. 하지만 샤딩된 클러스터에서는 조인으로 연결되는 컬렉션이 샤딩되지 않은 경우에만 $lookup과 $graphLookup 스테이지를 사용할 수 있다. 즉 로컬 컬렉션( 조인의 드라이빙 테이블 )은 샤딩 여부와 관계없지만, 외래 컬렉션(조인 드리븐 테이블)은 샤딩되지 않은 컬렉션만 사용할 수 있다. 그런데 ..
[MongoDB] 확장 검색 쿼리 - Aggregation 파이프라인 최적화 MongoDB의 Aggregation은 각 스테이지가 순차적으로 처리되며, 그 결과를 다음 스테이지로 전달하면서 사용자의 요청을 처리한다. 그래서 각 스테이지들의 배열 순서는 처리 성능에 많은 영향을 미친다. 예를 들어, 필요한 도큐먼트만 필터링 하는 스테이지는 데이터를 그룹핑하는 스테이지보다 앞쪽에 위치해야 그룹핑해야 할 도큐먼트의 건수를 줄일 수 있고, Aggregation의 성능을 높일 수 있다. MongoDB 서버도 내부적으로 이러 형태의 기본적인 최적화 기능을 내장하고 있는데, 여기에서는 MongoDB가 어떤 최적화를 자동으로 처리할 수 있는지와 어떤 최적화가 불가능한지 살펴보겠다. 또한 MongoDB 서버가 Aggregation의 최적화를 해준다고 하더라도 Aggregation의 스테이지 구성..