분류 전체보기
-
Golang Server Base Code (graphQL, restAPI, mongoDB, postgresql)Golang 2022. 4. 22. 21:33
https://github.com/zzihyeon/golang-server GitHub - zzihyeon/golang-server: graphQL, restAPI, postgresql, mongoDB graphQL, restAPI, postgresql, mongoDB. Contribute to zzihyeon/golang-server development by creating an account on GitHub. github.com Golang 개발을 하고싶은데 처음 환경 setting이 어려운 사람들을 위해서 graphQL, restAPI, mongoDB, postgresql 관련 기본 setting을 한 base code를 push하였다.
-
Server 부하 줄이기Server management 2022. 4. 17. 18:13
계기 기존에 개발에 급급해서 생각하지 못한 문제들이 많았다. 사내 서비스를 개발하다보니 사용량이 많지는 않고 사양이 그리 부족해 보이지도 않는데 가끔 서버에 부하가 걸리고 이에 따른 대응을 하다보니 어떻게 관리할 수 있을까 생각을 하게 되었다. 현재는 대부분이 DB에 직접적으로 접근하고 cache를 관리하지 않고 있다. 그리고 graphQL에서 resolver를 사용할 때 N+1의 문제에 대해서도 고려하지 않고 있었다. 그래서 현재 어떻게 하면 부하를 줄일 수 있을까 생각을 하다가 dataLoader와 Redis에 대해 공부를 해보기로 했다. 사용 방법에 대해서는 따로 작성할 예정이고 개념에 대해서만 알아보고자 한다. GraphQL DataLoader N+1 Promblem GraphQL Resolver..
-
MongoDB - index (1)mongoDB 2022. 4. 17. 16:08
Index는 왜 필요할까? Index는 mongoDB에서 효율적인 쿼리 실행을 도와준다. 만약 index가 없다면 쿼리에 맞는 data를 찾기 위해서 collection의 모든 document를 scan해야 한다. MongoDB에서는 기본적으로 _id field에 대해 index가 존재한다. Index는 collection의 data set의 작은 부분을 특정 형태의 data structure로 저장한다. 특정한 field나 field의 집합의 값을 값에 따라 순서대로 저장한다. Single Index 위의 예시를 보면 score 기준으로 indexing을 하고 score: { "$lt": 30 } 이라는 query를 실행했다. 만약 index가 없었다면 collection의 모든 data의 score ..
-
MongoDB - Data modeling (2)mongoDB 2022. 4. 16. 15:16
2022.04.14 - [mongoDB] - MongoDB - Data modeling (1) 에 이어서 이제 좀 더 심도 있게 알아보도록 하자 The Number of Collections 개발을 하다보면 하나의 collection에 data를 다 저장할지 아니면 세분화해서 여러 collection에 나누어 저장할지 고민해야 되는 상황이 올 수 있다. 예를 들어서 log 정보를 관리하고자 한다고 생각해 보자. { log: "prod", ts: ..., info: ...} { log: "dev", ts: ..., info: ... } { log: "debug", ts: ..., info: ...} 여기서 만약 전체 documents의 수가 적으면 그냥 collection하나에 type으로 document..
-
MongoDB - Data modeling (1)mongoDB 2022. 4. 14. 07:24
data modeling은 왜 필요할까? 무엇인가를 개발할 때 우리는 어플리케이션의 요구사항, 데이터베이스 엔진 성능 그리고 검색 패턴의 균형을 잘 맞춰야만 한다. 즉, 개발 도메인에 맞는 데이터 구조를 파악하고 이에 맞는 데이터베이스 엔진을 선택하고 또 이를 어떻게 사용할지 고려해야만 한다. 그럼 이제 mongoDB의 Data Modeling에 대해 알아보도록 하자. Flexible Schema mongoDB는 noSQL 데이터베이스로써 SQL( Data를 insert하기 전에 Table의 column 즉 Schema을 정해놔야 함)과 다르게 동일 collection의 document들의 schema가 동일할 필요가 없다. document의 특정 field를 삭제하거나 추가하려면 다른 작업이 필요없이 ..
-
MongoDB - Read ConcernmongoDB 2022. 4. 4. 00:17
MongoDB CRUD - 어떻게 완화된 ACID (BASE) 인가? :: 개발 일지 (tistory.com) 에서 마지막에 알아 본 concern의 이해가 어려울 것으로 생각된다. 그래서 mongoDB 문서에 나와있는 예를 들어가며 간단하게 설명하고자 한다. Read Concern local, available "local"은 리턴 한 data가 replica set member들에 data가 써졌음을 보장하지 않는다. 이제 어떻게 동작하는지 알아보자. Write Prev = write 이전 값 Write After = w: "majority" write 이후 실제 쓰여진 값 ~t0 t0~t1 t1~t2 t2~t3 t3~t4 t4~t5 t5~t6 primary Write Prev Write After ..
-
MongoDB CRUD - 어떻게 완화된 ACID (BASE) 인가?mongoDB 2022. 3. 28. 22:32
mongoDB는 완화된 ACID 즉, BASE의 컨셉을 갖고 있다. 그렇다면 mongoDB는 어떻게 완화된 ACID (BASE)로 사용될까? Atomicity and Transactions mongoDB는 single document level write의 atomic을 보장한다. 이는 embedded document에서도 적용이 된다. 말이 좀 어려울 수 있는데 결론은 atomic을 보장하고 싶으면 여러 document에 data를 분산하지 말고 embedded documents로 single document를 관리해야 한다. 여기서 embedded documents를 모를 수 있으니 이에 대해 간단히 설명하겠다. RDBMS에서는 보통 아래와 같이 나누어서 data를 저장한다. 이는 single doc..
-
Mongodb - database and collectionmongoDB 2022. 3. 27. 17:21
이전 글(https://zzihyeon.tistory.com/45)에 이어서 mongoDB에 대해 알아보자 MongoDB는 data를 BSON documents로 저장하고 collection은 이 documents의 집합이다. 또한 database는 이 collection들의 집합이다. 즉 database > collection > document > data 라고 볼 수 있다. 이제 mongodb를 어떻게 사용하는지 알아보자. Database MongoDB에서 database는 여러개의 documents collections을 갖는다. 사용자는 어떤 database를 사용할지 선택할 수 있다. Mongodb를 설치 후 실행한다. mongo --port 27017 또는 mongo ${target_ip}:..