도큐먼트 갱신 도큐먼트 갱신은 원자적으로 이뤄진다. 갱신 요청 두 개가 동시에 발생하면 서버에 먼저 도착한 요청이 적용된 후 다음 요청이 적용된다. 따라서 여러 개의 갱신 요청이 빠르게 발생하더라도 결국 마지막 요청이 안전하게 처리된다. 기본 동작을 원치 않으면 도큐먼트 비저닝 패턴(The Document Versioning pattern)을 이용해야 한다. 도큐먼트를 데이터베이스에 저장한 후에는 updateOne, updateMany, replaceOne과 같은 갱신 메서드를 사용해 변경한다. updateOne updateOne은 필터 도큐먼트를 첫 번째 매개변수로, 변경 사항을 설명하는 수정자 도큐먼트를 두 번째 매개변수로 사용한다. > db.products.find() { "_id" : Object..
분류 전체보기
반응형
도큐먼트 삽입 insertOne 도큐먼트를 삽입하려면 컬렉션의 insertOne 메서드를 사용한다. > db.loginLogs.insertOne({name: "devbeekei", loginDate: new Date()}) { "acknowledged" : true, "insertedId" : ObjectId("628f19887a32d396cf84a7e7") } > db.loginLogs.findOne({name: "devbeekei"}) { "_id" : ObjectId("628f19887a32d396cf84a7e7"), "name" : "devbeekei", "loginDate" : ISODate("2022-05-26T06:09:12.597Z") } 도큐먼트에 "_id"키가 추가되고 도큐먼트가 몽고D..
다른 몽고DB 인스턴스에 연결 어떤 몽고DB 인스턴스든 셸을 연결할 수 있다. 다른 장비나 포트에 mongod를 연결하려면 셸을 시작할 때 호스트명, 포트, 데이터베이스를 명시해야 한다. 몽고DB 컨테이너를 하나 더 띄우고 다른 한쪽에서 접속을 해보자. 접속을 위해서는 IP를 확인해야 하므로 컨테이너의 IP를 알아내야 한다. $ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongodb2 172.17.0.3 mongodb2 컨테이너의 IP는 172.17.0.3이다. 이제 다시 mongodb 컨테이너로 접속해 mongodb2 컨테이너 안에 몽고DB에 접속해보자. 접속할때는 mongo {IP}:{PORT}..
데이터형 몽고DB는 도큐먼트의 값으로 다양한 데이터형을 지원한다. 기본 데이터형 몽고DB에서 도큐먼트는 자바스크립트 객체와 개념적으로 닮았다는 점에서 JSON과 닮았다라고 생각할 수 있다. JSON은 데이터의 간단한 표현이다. 명세는 한 단락 정도로 설명되며 여섯 가지 데이터형만을 열거한다. 따라서 이해하고, 구문을 분석하고, 기억하기가 쉬워 여러 방면에서 유용하다. 한편으로는 데이터형이 null, 불리언, 숫자, 문자열, 배열, 객체만 지원하기 때문에 JSON의 표현력은 제한적이다. 하지만 JSON은 데이터베이스와 연동할 때는 날짜형이 따로 없어 다루기가 성가시고, 숫자형이 있기는 하지만 한 가지 뿐이다. 부동소수점형(float)과 정수형을 표현하는 방법은 없으며 32비트와 64비트도 구별되지 않는다...
몽고DB는 명령행에서 몽고DB 인스턴스와 상호작용하는 자바스크립트 셸을 제공한다. 셸은 관리 기능이나, 실행 중인 인스턴스를 점검하거나 간단한 기능을 시험하는데 매우 유용하다. mongo 셸은 몽고DB를 사용하는 데 매우 중요한 도구다. 셸 실행 먼저 몽고DB 컨테이너에 접속한다. $ docker exec -it mongodb bash 정상적으로 접속되었으면 아래 명령어를 통해 셸을 실행한다. $ mongo 위와 같은 문구가 출력됬다면 정상적으로 셸을 실행한 것이다. 셸은 완전한 자바스크립트 해석기이며 임의의 자바스크림트 프로그램을 실행한다. 연산 및 표준 자바스크립트 라이브러리의 모든 기능을 활용할 수 있다. 심지어 함수도 정의하고 호출할 수 도 있다. > x = 200; 200 > x / 4 50 >..
Docker로 몽고DB 시작하기 먼저 아래 명령어로 몽고DB 이미지를 Pull 받는다. 태그에 버전을 지정하지 않으면 최신 버전을 Pull 받게 된다. $ docker pull mongo 아래 명령어로 정상적으로 몽고DB 이미지를 Pull 받았는지 확인한다. $ docker images 이미지를 Pull 받았으면 몽고DB의 볼륨으로 사용할 디렉터리를 하나 만든다. $ cd ~ $ mkdir mongodb 몽고DB 컨테이너의 볼륨을 로컬 디렉터리와 마운트시키지 않으면 컨테이너를 삭제할 때 컨테이너에 저장되어있는 데이터도 삭제되기 때문에 복구할 수 없다. 그리고 아래 명령어를 통해 몽고DB 이미지를 실행한다. $ docker run --name mongodb -v ~/mongodb:/data/db -d -p..
몽고DB란? 몽고DB는 강력하고 유연하면 확장성 높은 도큐먼트 지향 데이터베이스다. 관계형 모델로 대용량 데이터 작업을 하게 되면 스키마에 맞게 데이터를 조작해서 작업해야 한다. 몽고DB는 솔루션 자체적으로 분산 처리, 샤딩, 데이터 리밸런싱, 데이터 복제, 복구 등을 지원하고 무엇보다 스키마가 없기 때문에 대용량의 데이터 작업에 아주 효율적인 데이터베이스이다. 도큐먼트 몽고DB의 핵심이자, 기본 단위는 도큐먼트이며, 이는 관계형 데이터베이스의 행과 유사하다. 도큐먼트는 정렬된 키와 연결된 값의 집합으로 이뤄져있다. 도큐먼트 표현 방식은 프로그래밍 언어마다 다르지만 대부분의 언어는 맵(Map), 해시(Hash), 딕셔너리(dictionary)와 같이 도큐먼트를 자연스럽게 표현하는 자료구조를 가진다. {"..
개요 기존에 Jenkins 자동화 배포를 할때 민감한 정보(db 정보 및 암호화 키 ...)가 기입되어 있는 설정파일(yml, properties ...) 파일은 gitignore를 적용하고 직접 Jenkins 서버에 접속해 넣어주고 빌드를 시켰다. 하지만 프로젝트가 많아졌을때 설정파일을 최신화 하게 되면 직접 프로젝트 루트에 설정파일을 직접 넣기 너무 귀찮고 빌드도 다시 시켜야 했다. Spring Cloud Config를 사용하게 되면 한 곳에서 모든 설정파일을 관리하고, 수정이 있더라도 다시 배포하지 않아도 되는 장점이 있다. 단점은 한마디로 보안이 굉장히 중요하다. 물론 보안은 어느곳에도 중요하지만 만약 Spring Cloud Config 암호화 대칭값이 노출되거나, 암호화 및 복호화 기능에 적용한..
이전 글에 Jekins Pipeline을 생성해 도커 컨테이너 자동화 배포를 구축했다. 이번엔 파이프라인 각 스텝마다 Slack 알림을 받을 수 있도록 설정하려고 한다. 모두 알다시피 슬랙 알림 연동은 API가 매우 잘되어있어 설정하기가 너무 쉽다. 1. Slack에 Jenkins App 추가 https://워크스페이스.slack.com/apps로 접속해 Jenkins를 검색하고 Jenkins CI App을 슬랙에 추가해준다. 알림 받을 채널을 선택한다. 채널을 선택해 Jenkins CI 통합 앱 추가를 클릭하면 설명 지침 페이지로 이동하게 되는데, 여기서 나오는 설명은 모든 스텝이 끝난 후에 알림이 오는 설정이다. 모든 스텝이 끝난 후 알림이 오는 것을 원하면 이대로 따라 하기만 하면 된다. 예제는 파..
이전 글에서는 Jenkins을 이용해 jar파일 자동화 배포를 해보았다. 이번에는 소스코드를 도커 이미지 화 후 서버에서 해당 이미지를 받아 구동시키는 파이프라인을 구축하려고 한다. Blue Ocean 플러그인을 사용해 빌드가 되는 상태를 시각화하고 파이프라인을 쉽게 만들어보겠다. 이전 글과 마찬가지로 Jenkins 서버는 Docker로 로컬에서 구동했고, Jenkins 서버 구축 방법은 이전 글을 참고 바란다. 배포할 서버는 Naver Cloud Platform Server를 사용했고, 컨테이너 저장소는 Naver Container Registry를 사용했으므로 AWS EC2나 ECR을 사용하는 경우 설정법이 조금 다를 수 있다. 대략 진행되는 단계를 그림으로 나타내면 아래와 같다. 구축 예제 1. J..