* 발표자 : 이용혁(ItemBay)

NIKON CORPORATION | NIKON D80 | 2013:02:23 13:56:33

* Server

NIKON CORPORATION | NIKON D80 | 2013:02:23 13:19:55


* Database

* 쓰던거 쓴다! MySQL, 

* 이중화 + 세션 클러스터링

* nginx + tomcat + RDB

* 추가증설에 대한 고민

* 세션클러스터링의 한계 : 클러스터링 하다가 많은 서버들이 복잡하게 연결

- 사용자가 집중되었을 때 문제가 발생할 가능성이 있다.

NIKON CORPORATION | NIKON D80 | 2013:02:23 13:50:10


* 대책

* tomcat간의 세션 클러스터링 포기

* 세션 대신 쿠키 사용

* 쿠키에는 KEY값 저장

* 업무에 필요한 사용자정보는 DB저장

* DB의 집중 문제가 발생!

- 로그인 20여 만건 이상 : 성능상의 이슈가 발생

* Cache Server!!

- 세션정보를 저장

- 자주 사용되는 항목들 저장

- 물리적인 서버 추가는 힘들다.

- 기존 WAS의 남는 리소스에 띄운다.

- 여러 WAS에 분산가능해야 한다.

- Open Source

- infinispan : http://www.jboss.org/infinispan

- Transactional in memory key/value NoSQL database & Data grid

- JSR 107, JSR 347 완벽지원

- 무료!!

- etc/cluster.xml 설명

1. eviction : 자신이 실제로 데이터를 가지고 있는 수 지정

- etc/jgroups-tcp.xml : 통신 설정 정의

1. <TCP ... /> -> <MPING ... />

2. 멀티캐스트 IP를 가지고 있는 것들끼리 내부적으로 그룹화처리됨

서로 공유한다

- bin/sc01.sh

- bin/sc02.sh 

- java pom.xml

- tomcat7 과 부딪치는 것 때문에 <execution />으로 infinispan 을 제외시켜주어야 한다.

- Java : hotrod-client.properties

- 접속할 서버 리스트 : 중점적으로 접속할 서버만 설정해주면, 자동으로 연결되면서 자동처리됨

- java : Default Util

- RemoteCacheManage

- RemoteCache<Object, Object>

- java : Session Util

- java : Session Interceptor

* tomcat + was 2대 + infinispan 4대

* Cache는 메모리에 저장

* 시스템 다운시 데이터 사라짐

* 캐시 사용으로 이점이 있지만 문제 상황에 대비해야함

- Down시에는 다시 DB 사용

* 메인 DB를 사용하기에는 부담

* NoSQL 사용

* NoSQL에 대한 고심

* MongoDB, Cassandra : MongoDB 사용, 기존에 사용해왔고 내재화가 잘 되어 있음.

* 무료기술지원 : Google!!

- 무료기술지원 : www.mongodb.org

* Java  : Session Util 변경

- 캐시에서 가져와서 null인 경우 몽고DB에서 가져오면서 캐시에 등록

- 데이터 저장시 : 몽고DB에 우선 넣고 성공시 세션에 추가하도록 구현

- 분당 요청 : 3~5000, 몽고DB의 리소스 사용률은 지극히 낮다.

* RDB + MongoDB

* 이중화 + 클러스터링 되어 있어서 특정 서버가 정지하더라도 안정적인 작업이 가능

* 서버 구성 

* Nginx 1.2

* Tomcat 7

* infinispan 5

* mongoDB

* RDB

* Spring 

* 분산처리(멀티 스레드 환경 포함)에서는 static 으로 선언해주는 것이 중요하군.

* 정리

* 오픈소스 기반으로 구축

* 쉽고 빠른 확장

* 성능저하 최소

- 성능의 저하요소 : DB의 성능저하가 없는 이상 별다른 성능저하 요소가 없음

- DB 성능만 받쳐준다면 앞에 서버들은 언제나 확장 가능

* 관리이슈 증가 : 캐시서버의 상태 관리

* 담당자들의 역량 중요 : 오픈소스 사용한 프로젝트는 담당자들이 해결해야 함, 기술 내재화에 대한 장단점

- 비용은 감소, 담당자들의 역량은 강화


최근에 유행하고 있는 기술 트랜드의 중심은 오픈소스다. 과거 엔터프라이즈와 벤더 중심에서 오픈소스로 넘어오기 시작한 것이다. 오픈소스라고 하면 공짜의 느낌을 강하게 받는 사람들이 많은데, 전혀 '공짜'가 아니다. 기술을 사용하는 것은 자유로울지 모르지만, 그 기술을 사용하기 위해서 들여야 하는 노력(오픈소스를 하면서 생길 수 있는 '오류'나 오픈소스에 있는 '결함'을 해결하거나 우회하기 위한 파악)이 필요하다. 

이런 노력은 그 기술을 도입하는 조직이 '일정 크기'이상의 규모를 지녔을 때 감쇄효과가 있다.오픈소스를 사용하기 위해 중요한 것은, 그것을 조직 내부의 것으로 만들 수 있는 내재화를 하는 것이다. 벤더의 기술을 사용할 때와는 달리, 오픈소스를 사용하면서 생기는 시행착오와 오류를 해결하는 것은 전적으로 조직 내부와 외부의 지원(오픈소스 관련 커뮤니티 활동성과도 관련이 커질 것이다) 정도에 달려있다고 본다. 이런 의미에서 보면 오픈소스를 도입하고 적용하는 것은 역시나 인적-물적 자원이 풍부한 대기업이 앞설 수밖에 없다고 본다. 최근 인력이동의 시기에 맞춰서 내가 아는 조직들 사이에 인력유출과 인력유입이 활발하게 진행되고 있다. 이런 인력유동 현상은 '오픈소스'에 대한 역량을 격동시키는 큰 요인이될 수 있을 것이라 예측해본다.

컨퍼런스에 참관하러 가서 듣고 싶은 것 중에 하나는 '새로운 시도에 대한 시행착오와 그것을 해결하기 위한 시도들에 대한 이야기'이다. 그런 의미에서 본다면 만족스런 발표였지만, 한편으로는 내가 nginx, infinispan나 mongoDB에 대한 이해나 경험이 부족한 탓에 충분히 이해하지 못하였다는 불만도 있겠다. 이 만은 결국 내 부족함에서 시작된 것이지.

+ Recent posts