ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MongoDB] 9 & 10. 보안과 성능향상 & RockMongo와 phpMoAdmin을 사용한 몽고DB 관리
    CSE/MongoDB 2015. 6. 13. 11:52
    이번 포스팅은 9장, 10장 동시에 작성하겠습니다!

    분량이 적은 관계로 한번에 쓸수 있을 것 같더군요~

    오늘 갑자기 날씨가 추워져서 감기가 걸릴지도 모르겠네요~ 관리 잘하세요 다들~

    먼저 9장의 순서입니다.
     1. 몽고DB 컬렉션에 색인 생성
     2. 몽고DB에 사용자 인증 추가



    1. 몽고DB 컬렉션에 색인 생성

     이번 실습은 몽고 쉘에서 작업하므로 쉘을 열어주세요~

     use testdb

     명령을 쳐서 db를 testdb로 사용하겠습니다!


     그런 다음 movies 컬렉션에 여러 영화들을 넣어보죠~

      db.movies.insert({name: "The Matrix", genre: "sci-fi", year: 1998})
      db.movies.insert({name: "Lord of the Rings", genre: "fantasy", year: 2002})
      db.movies.insert({name: "Saving private Ryan", genre: "war", year: 1997})
      db.movies.insert({name: "Goodwill Hunting", genre: "drama", year: 1995})
      db.movies.insert({name: "The Dark Knight", genre: "action", year: 2008})
      db.movies.insert({name: "Inception", genre: "sci-fi", year: 2010})
      db.movies.insert({name: "Oldboy", genre: "thriller", year: 2003})
      db.movies.insert({name: "Forrest Gump", genre: "drama", year: 1994})
      db.movies.insert({name: "Love me if you dare", genre: "romance", year: 2004})
      db.movies.insert({name: "My Love, Don't Cross That River", genre: "documentary", year: 2014})
      db.movies.insert({name: "The Theory of Everything", genre: "romance", year: 2014})


    다음으로 genre필드에 색인(Index)를 생성합니다.

     db.movies.ensureIndex({genre:1})


    생성한 색인을 열거하기 위해 아래 명령을 줍니다.

     
     db.movies.getIndexes()



     마지막 명령어를 치면 아래와 같이 출력이 되는데, 두개의 인덱스가 보일겁니다!



     



    id 와 genre로 두개의 인덱스가 있네요~ id는 자동으로 생성된 것이고, 아래 genre가 저희가 만들 것이죠~

    간단하게 색인을 만들어 봤습니다. 그럼 다음으로 색인의 여러 방식에 대해 알아보겠습니다.


    색인(Index)에는 여러 방식이 존재합니다.
     - 유일한 색인
     - 복합 키 색인
     - 내장된 다큐먼트 필드에 대한 색인 
     - 배열 필드에 대한 색인

    간단하게 짚고 넘어가겠습니다.

     - 유일한 색인
     유일한 색인은 MySQL에서 unique key처럼 동작합니다. 특정 Collection에 들어있는 모든 Document를 대상으로 색인된 특정 필드의 값이 중복되지 않도록 보증해줍니다. 아래 예시를 통해 이 색인을 생성하는 방법을 나타내겠습니다.

     db.movies.ensureIndex( {name: 1}, {unique: 1} )

    이전의 색인 생성하는 방법 뒤에, {unique:1} 옵션을 주어서 유일한 색인을 생성합니다. 생성이 되고나서, name 필드 값이 동일한 Document를 삽입하려고 하면 오류가 발생하게 됩니다.



     - 복합 키 색인
     복합 키 색인은 Document의 다중 필드에 대한 색인을 말합니다. 사용법은 아래와 같습니다. 장르와 년도 필드에 대한 복합 키 생인을 생성합니다.

     db.movies.ensureIndex( {genre: 1}, {year: -1} )



     - 내장된 다큐먼트 필드에 대한 색인
     예를 들어, movies 컬렉션에 영화 상영 시간과 스튜디오 이름을 저장하기 위한 meta 필드가 있다고 가정합니다.

     db.movies.insert({name: "Thor", genre: "action", year: 2011, meta: {duration_minutes: 115, studio: "Paramount"}} )

     위 meta내의 필드를 색인하는 방법은 다음과 같습니다.

     db.movies.ensureIndex( {"meta.duration_minutes":1, "meta.studio": 1} )

     meta 내의 필드이므로 .(점)표기법을 사용하여 색인을 생성합니다. 




     - 배열 필드에 대한 색인
     예를 들어, movies 컬렉션에 tags 필드가 있다고 가정합니다.

     db.movies.insert({name: "Iron Man 2", genre: "action", year: 2010, tags: ['superhero', 'marvel', 'comics', 'scifi'})

     위 tags 필드를 색인하는 방법은 일반적으로 색인을 생성하는 법과 같습니다.

     db.movies.ensureIndex( {tags: 1} )

     아래 방법으로 배열의 구성 요소를 색인 할 수 있습니다.

     db.movies.find({tags: 'superhero'})





    2. 몽고DB에 사용자 인증 추가

     이 실습은 진행하지 않겠습니다. 왠지 사용자 계정 생성이나 삭제는 초장에 다뤄좌야 될 것 같은데 막바지에 다룬다는게 참 아이러닉하고, 실습되는 내용이 addUser를 사용하는데, deprecated된 메소드이므로 진행하지 않겠습니다!
     



    아 몽고DB에서도 SQL Injection을 주의해야합니다!!! 아래 링크에 대처법을 제시해 둔 것 같네요~


    또한 몽고DB에서 제공하는 사용자 인증 기법은 아주 기초적이며, 복잡한 공경을 방어할만큼 안전하지 않습니다!!!
    그러므로, 상용 몽고DB 서버를 신뢰하는 환경에 배치해야 합니다!! 방법은 아래와 같습니다.
     - 서버는 방화벽 뒤에 배치
     - 컴퓨터에 모든 가용 IP에 귀를 귀울이는 대신, 특정 IP에만 귀를 기울이도록 구성해야 함
     - 서버가 사용하는 TCP 포트는 신뢰할 수 있는 컴퓨터만 접근 가능하도록 구성되어야 함


    이것으로 9장을 마치고 10장으로 넘어가겠습니다!!!



    10. RockMongo와 phpMoAdmin을 사용한 몽고DB 관리



    설명은 집어치우고 RockMongo부터 설치해보도록 하죠!!

    1. RockMongo 설치


    위 경로로 진입하시면 아래와 같이 비슷하게 뜨실겁니다. 보시면 가장 상위에 rockmongo-v.1.1.3.zip으로 되어있는데 요걸 클릭하셔서  다운 받아주세요!! (1.1.3은 현재 포스팅된 날짜 기준으로 최신버전입니다. 버전업은 continued 된다는 사실....)





     





    내려받은 rockmongo.zip 파일을 압축을 풀 뒤, 푼 디렉토리명을 rockmongo로 바꿔주세요!!



    rockmongo 폴더를 htdocs로 이동해주세요! 아래처럼 말이죠~





     



     


    다음으로 rockmongo/rockmongo 안에 config.php의 아래부분처럼 수정해줍니다. (false로 되어있습니다. true로 바꿔주세요~)





     






    위와같이 설정하고 rockmongo내의 index.php를 실행해 주면!!!


     


     




     
    네... Fatal error가 납니다. 저는...

    보니깐 index.php에서 수정해줘야되나 봅니다ㅜㅜ index.php를 열어줍니다. 아래와 같이 만들어주세요~
    처음 index.php열면 27번 라인처럼 설정되어있는데
    27번 라인 주석처리하고, 28번으로 대체한 것입니다.





     


    수정 후, 다시 실행하니깐 되는군요... 휴...









    하... 근데 연결해서 로그인해보니 이런 맛깔나는 상황이 있네요...







    죄다 사장 된 건가... 뭐지 ... 

    해법을 찾다찾다 못찾겠더군요....ㅜㅜㅜㅜ 죄송합니다. 저만 이런건지, 케이스가 좀 부족하네요ㅜㅜ 다음으로 바로 넘어가겠습니다.

    혹시나 다른분들 되실수도 있으니 여꺼증 남겨놓것습니다.





    2. phpMoAdmin 설치
    이것 또한, 사장된 건지 뭐 잘 안되네요ㅠㅠ 
    여기까지가 끝인가보오~

    진행이 더이상 안됩니다 ㅜㅜ GUI툴로 관리한다는건 정말 DB관리시 큰 일인데... 

    참고 서적이 너무 옛날 버전인지, 그에 대응하는 해법이 너무 웹에 적게 나와있는지라... 송구하옵니다 ㅜㅜ



    뭔가 찜찜한 이느낌은 뭐지 ㅠㅠ


    댓글

Designed by Tistory.