간단 MongoDB 운영 명령


1. MongoDB Windows Service 등록하는 방법


mongod.exe -f d:\mongodb\config\mongod.yaml -install



mongod.yaml file 구성


systemLog:
   destination: file
   path: "d:\\mongodb\\data\\log\\mongod.log"
   logAppend: true
storage:
   dbPath: "d:\\mongodb\\data\\db"
   journal:
      enabled: true
net:
   bindIp: 0.0.0.0
   port: 27017




2. 전체 백업

mongodump.exe --out 백업디렉토리 --db db명


3. db전체 복원

mongorestore /db:db명  백업화일위치디렉토리

MS가 리눅스 제단에 합류했다는 뉴스와 동시에 윈도우 환경에서만 동작하던 MSSQL 을 드디어 리눅스 버젼으로도 발표했다.


Redhat 과 Ubunto 를 지원하는 MSSQL !!!

아직은 Preview 상태인지라 당장 시장에 영향을 주지는 않겠지만 GA된 이후부터는 시장에서의 반응이 어떻게 될지 궁금해진다.


사실 리눅스를 사용하는 주된 이유는 모든 솔루션을 비싼 라이센스 비용을 내지 않으면서 수평확장(Scale-out)을 지원할 수 있는 방안을 찾다보니 리눅스 기반에 MySQL 을 주로 사용하지 않았나 싶다.


물론 DBMS 자체로만 보면 MSSQL의 안정성과 만족도가 훨씬 높겠지만..

수백, 수천만원의 라이센스 비용을 모든 회사가 감당하기란 쉽지 않았기에 그 대안으로 선택했던 영역으로 사람들이 몰리기 시작했고 그 결과 리눅스와 MySQL 의 조합도 매우 안정적이고 유연한 확장이 된다는것들이 증명되고 있는 상황이라 여겨진다. 

또한 NoSQL + Redis 조합 역시 RDBMS를 벗어나기엔 휼륭한 조합이니.



어찌되었든 MS에서는 이제라도 리눅스 진영에 발을 담갔기에 하나씩 리눅스 환경에서의 장점들을 포함하겠지만 다소 늦은감이 들기도 하지만.. 어떻게 발전해 나갈지 궁금해 진다.


MSSQL for Linux


Visual studio for Mac


ASP.NET Core 1.0


마지막으로 MS의 개발 환경 및 운영 환경이 나디아 집권 이후 오픈 플랫폼을 적극 지원하는 자세로 바뀌는것에 대해서는 찬사를 보낸다.




리눅스에서 MSSQL 설치 방법

https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-ubuntu



핸즈온랩 - 설치해보기 

=> 한번 해보면 리눅스 환경이 익숙하지 않은 분들도 쉽게 따라 하실 수는 있습니다.

https://vlabs.holsystems.com/vlabs/technet?eng=VLabs&auth=none&src=vlabs&altadd=true&labid=29101&lod=true



MongoDB에 저장된 데이터 중 특정 Subset(Array) 데이터들만 조회하는 방법에 대한 설명입니다.


MongoDB에서 데이터들을 조회할 때에는 Javascript 를 활용해서 필요한 데이터들을 조합할 수 있습니다.


1)  var myCursor = db.receipt.find({}, {"storeName":1, "marketId":1, "items.barcode":1, "items.name":1, "items.unitPrice":1, _id:0});
  var storeName = null;
  var marketId = null;

2)  while (myCursor.hasNext()) {
    var allReceipt = myCursor.next();
    var receipt = allReceipt.items;    

    marketId = allReceipt.marketId;
    storeName = allReceipt.storeName;

    for( var i = 0; i < receipt.length; i++ )
    {
3)        var item = receipt[i];
4)        print(marketId + "@" + storeName + "@"+item.barcode + "@" + item.name + "@" + item.unitPrice);
    }
  }



몽고 DB로 데이터를 저장시에는 비정규화를 해서 데이터를 저장하도록 권장하고 있는데..

예를 들어 A라는 사람이 C1, C2, C3 라는 물건을 샀다고 가정하는 경우 해당 정보를 하나의 레코드로 저장하게 될 경우가 생깁니다.

즉 하나의 레코드는 아래와 같이 저장됩니다.


{ "Name":"A", purchaseProducts:[{"itemName":"C1"},  {"itemName":"C2"}, {"itemName":"C3"}]}


이렇게 데이터가 저장되어져 있는 경우 누가 샀는지보다 사람들이 산 모든 물건을 추출해야 할 경우가 생길 수 있는데요.

이럴 때 활용할 수 있는 MongoDB 스크립트가 위에 있는 예시 입니다.


항목별로 보면

1) 번에는 어떠한 필드를 조회할지 선택을 합니다.

  즉, 조회 결과에 출력할 기본 필드에 대해서는 "필드명":1 이라고 선언하게 되면 기본적으로 find를 이용하여 데이터 조회시 해당 필드만 출력되게 됩니다. 특이한 점은 저는 MongoDB 에서 기본적으로 출력되는 "_id" 필드에 대해서는 조회할 필요가 없기에 0 으로 설정해서 출력되지 않도록 설정했습니다.

또한 해당 조회 결과를 Cursor 를 이용해서 핸들링 하려 합니다.


2) 번에서 모든 레코드를 다 읽을 때까지 반복하게 됩니다.


3) 번에서는 위의 설명에서 예를 든 하나의 레코드 안의 배열들 즉, purchaseProducts 같은 배열만 따로 변수에 할당합니다.


4) 번에서는 할당된 배열에 대해서 건별로 출력하게 됩니다.


사실 RDBMS에 익숙하다면 이러한 상황에 대해 잘 이해가 안 가실수도 있겠지만..

위에서도 언급했듯이 비정규화된 데이터들 중 레코드별로 입력된 특정 subset만 추출하고자 한다면..

여러 가지 방법을 찾아봤지만 이 방법이 최선일 것 같습니다.

'IT 이야기' 카테고리의 다른 글

MongoDB Install, Backup, Restore  (0) 2016.12.20
IP 정보로 활용 가능한 서비스 범위  (0) 2016.11.08
베뉴 8 Pro Windows 10 업그레이드  (0) 2016.06.29
택배 조회 URL 모음  (0) 2016.04.06
Windows용 Mantis 설치  (0) 2015.05.29

우리 생활속에는 언제든 네트워크로 연결되어 있습니다.

원하던 원하지 않던 우리는 알지 못하는 사이에 많은 족적들을 남기며 살아가고 있죠.


이런 정보들 중에는 PII (Personal Identification Information) 도 있고 모바일 단말에 부여된 고유 식별 번호도 있으며 또한 네트웍을 이용시에는 늘 접속한 IP 정보를 남기게 됩니다.


이 중에서 IP로 쉽게 확인 가능한 정보들은 무엇이 있을지와 어떻게 이용가능할지 정리해 봅니다.


1. 등록된 IP의 정보는 무엇이 있나  ?


   IP는 대륙별 또는 국가별 할당되어진 대역들을 관리하는 조직들이 있습니다.

 한국은 한국인터넷진흥원(KISA)라는 조직에서 관리하게 되고 KISA를 통해 확인 가능한 정보들은 아래와 같습니다.



이 외에도 해당 IP가 어느 나라의 IP인지, 등록된 위도 경도는 무엇인지도 확인 가능합니다만.

위도 경도는 실제 사용하는 IP의 위치를 나타내지는 않습니다.



2. IP정보 활용 범위


 1)  글로벌 서비스를 하는 큰 시스템의 경우 한 국가에만 시스템이 존재하지 않고 국가별 또는 대륙별로 시스템을 분리해 놓기도 합니다.

이럴 때 사용자가 접속한 IP의 국가가 어디인지에 따라 접속해야 하는 목적지가 달라질 수도 있게 합니다.


2) 또한 IP로 확인 된 국가 정보를 기준으로 결제시 해당 국가의 화폐를 보여준다거나 또는 서비스 이용 정책들을 다르게 운용할 수도 있습니다.


3) 보안에도 적용할 수가 있겠는데요. 특정 IP 에서 비정상적으로 무한 접속을 시도한다던지 또는 트래픽이 과도하게 몰리는 경우 해당 IP를 차단할 수도 있겠습니다.


4) IP 단위별로 서비스를 제공하는 회사들에서는 하나의 IP에 에 몇 명의 유저가 물려 있는지 확인 해서 이를 과금의 기본 정책으로 삼을 수도 있습니다. 흔히 게임 서비스에서 주로 이용하는 방법 중 하나입니다.


아래는  IP 정보로 취득 가능한 정보들을 출력해 주는 간단히 만든 웹사이트 입니다.


https://www.ip-addr.kr


접속해 보시면 지금 사용하는 IP는 무엇인지 그리고  IP 에 등록된 정보는 무엇인지 쉽게 확인 가능합니다.

위 사이트에서는 도메인 정보 및 실제 접속하는 위치는 어디인지도 손쉽게 확인 가능합니다.

어떤 목적을 갖고 만들지 않아서.. 디자인은 좀 구리지만 IP정보 확인이 필요할 때 이용하시면 되겠습니다. 





사 놓은지는 꽤 되었지만 최근에서야 정독하게 된 전공서적입니다.



.Net Framework 속 깊은 부분에 대해서 심도있게 정리한 책으로 가볍게 접근하면 어려운 책입니다. 하지만 닷넷 Framework 의 속 깊은 부분에 대해 이해하기에는 많은 도움이 될 것 같습니다.


닷넷 환경에서 개발하시는 분들이라면 시간내어 살펴보시면 좋을 듯 싶네요.



목차

들어가며

1장. 성능 측정과 도구
- 측정 대상 선택
- 평균 VS. 백분위
- 측정 도구
- 요약

2장. 가비지 수집
- 기본 동작
- 구성 옵션
- 할당 비율 감소
- 가장 중요한 규칙
- 개체 수명 줄이기
- 트리의 깊이 줄이기
- 개체들 간의 참조 줄이기
- 고정 피하기
- 종료자 피하기
- 큰 개체 할당 피하기
- 버퍼 복사 피하기
- 수명이 긴 풀과 큰 개체
- 큰 개체 힙 조각화 줄이기
- 전체 GC 수행을 강제하는 환경
- 필요에 따라 대형 개체 힙 조각 모음
- 수집 발생 전에 수집 알림 받기
- 캐시를 위한 약한 참조 사용
- GC 성능 측정과 조사
- 요약

3장. JIT 컴파일
- JIT 컴파일의 이점
- JIT 컴파일의 비용
- JIT 컴파일의 최적화
- JIT와 시작 시간 줄이기
- 프로파일링으로 JITing 최적화
- NCEN 사용 시기
- JIT가 경쟁력이 없을 때
- 측정
- 요약

4장. 비동기 프로그래밍
- Tasks 사용
- 병렬 루프
- 차단 피하기
- I/O 차단을 피하기 위한 Tasks 사용
- Async와 Await
- 프로그램 구조에 관한 고찰
- 올바른 타이머 사용
- 바람직한 시작 스레드 풀 크기
- 스레드를 중단하지 않는다
- 스레드 우선순위를 변경하지 않는다
- 스레드 동기화와 잠금
- 측정
- 요약

5장. 일반 코딩 및 클래스 설계
- 클래스와 구조체
- 구조체에 대한 Equals 및 GetHashCode 오버라이드
- 가상 메서드 및 봉인 클래스
- 인터페이스 디스패치
- 박싱 피하기
- For와 Foreach
- 캐스팅
- 플랫폼 호출(P/Invoke)
- 대리자
- 예외
- Dynamic
- 코드 생성
- 전처리
- 측정
- 요약

6장. .NET 프레임워크 사용
- 호출하는 모든 API를 이해하자
- 동일한 작업을 하는 여러 API
- 컬렉션
- 문자열
- 정상적인 상황에서 예외 발생 API 회피하기
- 대형 개체 힙에서 할당한 API 회피하기
- 느슨한 초기화 사용
- 열거의 높은 비용
- 추적 시간
- 정규 표현식
- LINQ
- 파일 읽기
- HTTP 설정 및 네트워크 통신 최적화
- 리플렉션
- 측정
- 요약

7장. 성능 카운터
- 존재하는 카운터 사용
- 사용자 정의 카운터 생성
- 요약

8장. EWT 이벤트
- 이벤트 정의
- PerfView에서 사용자 정의 이벤트 사용
- 사용자 정의 ETW 이벤트 수신자 생성
- EventSource 데이터 상세 구하기
- 사용자 정의 PerfView 분석 확장
- 요약

9장. Windows Phone
- 도구
- 가비지 수집 및 메모리
- JIT
- 비동기 프로그래밍과 메모리 모델
- 기타 고려 사항
- 요약

10장. 코드 안정성
- OS와 API와 하드웨어 기본 이해하기
- 코드의 특정 영역에서 API 사용 제한하기
- 중앙 집중화 및 성능에 민감한 추상화와 어려운 코드
- 비관리 또는 안전하지 않은 코드 격리
- 입증 전까지 성능에 대한 코드 무결성 유지
- 요약

11장. 성능을 고민하는 팀 꾸리기
- 중요한 성능 영역 이해
- 효과적인 테스트
- 성능 인프라 및 자동화
- 숫자만을 신뢰하자
- 효과적인 코드 리뷰
- 교육
- 요약













+ Recent posts