Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

5-1 NoSQL 데이터베이스 #433

Closed
Tracked by #432
jongfeel opened this issue May 9, 2023 · 0 comments
Closed
Tracked by #432

5-1 NoSQL 데이터베이스 #433

jongfeel opened this issue May 9, 2023 · 0 comments
Assignees
Labels
2023 Hands-on microservices with kotlin 코틀린 마이크로서비스 개발

Comments

@jongfeel
Copy link
Owner

jongfeel commented May 9, 2023

5-1 NoSQL 데이터베이스

마이크로서비스가 블로킹 오퍼레이션을 사용해 데이터를 쿼리해야 하는 경우에는 리액티브 프로그래밍의 이점을 잃게 되므로 스프링 프레임워크와 스프링 데이터는 대부분 최신 데이터베이스를 위한 리액티브 기능을 제공한다.

NoSQL 데이터베이스인 몽고DB를 통해 완벽하게 통합된 신속한 넌블로킹 리액티브 마이크로서비스를 제공할 준비를 한다.

NoSQL 데이터베이스는 마이크로서비스에 쉽게 통합될 수 있기 때문에, 몽고DB를 마이크로서비스에서 요구하는 데이터의 저장소로 사용할 수 있는 방법을 알아본다.

SQL 데이터베이스란

SQL 데이터베이스에서 데이터는 테이블 형식으로 구성된다. 데이터베이스의 컬렉션을 표현하는 테이블을 여러 개 가지고 있으며, 각각의 테이블에는 이들을 정의하는 칼럼 세트가 있다. 칼럼은 저장할 수 있는 데이터의 종류와 같은 속성을 가질 수 있다.

각 테이블에는 각 컬렉션의 항목을 나타내는 행이 있다. 테이블에는 인덱스 또는 키와 같은 속성이 있어서 테이블에서 특정 요소를 검색하거나 가리킬 수 있다. 테이블은 다른 테이블의 요소들을 연결하는 관계relationsship를 가질 수 있다.

모든 테이블 , 칼럼, 관계는 데이터 모델의 견고하고 엄격한 정의인 데이터베이스 스키마를 나타낸다.

SQL 데이터베이스의 주요 문제점 중 하나는 확장성이며, 이는 이런 관계나 스키마를 쉽게 분리할 수 없기 때문이다.

데이터베이스에 더 많은 테이블, 관계, 종속성이 있는 경우 기하급수적으로 복잡해진다.

NoSQL 데이터베이스란

NoSQL 데이터베이스에서는 정보를 테이블 형태로 표현하는 대신 다른 방식으로 배열한다. 전체적인 컨셉은 데이터가 자유롭게 변경될 수 있는 느슨한 스키마를 갖는 것이다.

NoSQL 데이터베이스에서 데이터를 정렬하는 방법은 문서 기반document-based이 가장 일반적이다.

데이터의 분할은 복잡한 문제는 아니게 되지만 검색의 효율성을 높일 필요가 있다. 서로 다른 데이터 집한 간에 관계를 유지하는 것과 같은 매커니즘을 구현하는 것은 쉬운 일이 아니다.

Tip)
NoSQL 데이터베이스는 훌륭하지만, 모든 문제를 해결하는 최상의 솔루션은 아니다.
무엇을 선택하기 전에 각각의 특성이 무엇이고 필요한 것이 무엇인지 이해하도록 노력해야 한다.
기억해야 할 것은 한 가지 솔루션이 모든 상황에 맞지 않는다는 것이다.

몽고DB 설치

  • mongod: 데이터베이스 서버
  • mongo: 클라이언트

데이터베이스 서버 시작

image

listening port 27017

image

Mongo 클라이언트 연결

책의 내용에는 mongod와 같은 경로에 mongo가 있다고 나와 있는데
실제로는 mongod만 있고 mongodb client는 별도로 설치해야 한다.

https://www.mongodb.com/try/download/shell

여기에 mongosh이라는 클라이언트 툴이 있고 압축을 풀고 설치하면 명령어는 책의 내용과 동일하게 입력해 볼 수 있다.
MongoDB가 설치된 Server 폴더 경로에 다운로드 한 mongosh을 풀고 실행하면 다음과 같이 나온다. 물론 서버는 동작하고 있어야 한다.

image

DB 버전을 확인하고 나오는 명령어

image

데이터베이스 생성

show dbs를 사용해 예제 데이터베이스 확인

image
  • admin: 보안과 관리 정보 저장
  • local: 인스턴스에 필요한 데이터를 저장

새로운 db인 microservices 생성 후 db 변경
책의 설명에는 createCollection으로 컬렉션을 만든 후 데이터를 추가하기 전까지는 실제로 컬렉션을 만들지 않는다고 나와 있지만,
실제 해보면 db와는 달리 컬렉션은 데이터를 넣지 않아도 만들어진 걸 볼 수 있다.

image

insert, insertMany 명령을 통해 데이터를 추가

image

명령 사용

find 명령을 사용해 데이터를 확인

image

update 명령으로 컬렉션에 문서 하나를 업데이트

책의 설명과 달리 실제 update()를 호출해 보면 deprecated 되었다고 안내해 준다.
그래서 updateOne()을 호출하면 atomic operator가 필요하다고 알려주는데
MongoDB 문서를 찾아보면 "$set" 이라는 명령어를 통해 업데이트 할 데이터를 지정해 줘야 한다.

image

remove 명령을 사용해 문서 삭제

역시 책의 내용과 달리 remove()를 호출하면 deprecated 되었다고 알려주고 deleteXXX()를 호출하라고 안내해 준다.
하지만 에러는 나지 않았으므로 실제 삭제는 된다.

image

다시 삭제한 데이터를 추가한 후에 deleteOne() 명령으로 삭제해 보면 안내 메시지 없이 삭제가 이루어진다.

image

find()를 호출할 때 매개 변수를 사용해 결과를 필터링하거나 찾을 수 있다.

image

정규식을 사용해서 문서를 찾을 수도 잇다.
아래 정규식은 대소문자를 무시하고 이름에 spring이 포함된 데이터를 찾는다.

image
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2023 Hands-on microservices with kotlin 코틀린 마이크로서비스 개발
Projects
No open projects
Development

No branches or pull requests

1 participant