전체 글 54

Operating System Instruction (2)

Storage Hierachy Storage System은 속도, 비용(가격),안정성에 따라서 계층적으로 나뉜다. 위로 갈 수록 속도 🆙 , 그만큼 가격도 🆙 / 아래로 갈 수록 보통 용량이 많아진다. Register Cache Main Memory ⬆️ 위로는 휘발성 메모리 : 전력이 차단되면 저장된 데이터가 사라진다. Electronic Disk ⬇️ 아래로는 비휘발성 메모리 : 전력이 차단되어도 저장된 데이터가 사라지지 않는다. Magenatic Disk Optical Disk Magenatic Tapes Caching 속도가 느린 저장공간에 있는 데이터를 미리 속도가 빠른 저장공간에 옮겨 놓는 것. ex) Electronic Disk에 있는 데이터를 Main Memory에 Caching한다. 컴퓨..

Computer Science/OS 2023.11.20

Operating System Instruction (1)

OS란? 🤔 OS의 정의 OS(Operating System)이란 컴퓨터 하드웨어와 컴퓨터 사용자 사이에서 서로를 중재하는 프로그램이다. OS is Resource Allocator : 컴퓨터의 모든 자원을 관리하고, 효율적이고 공정하게 자원을 할당하는 역할을 한다. OS is Control Program : 컴퓨터를 더 적절하게 사용할 수 있도록 하고, 에러를 막는다. OS는 다양한 정의가 있다. 목적 컴퓨터를 사용하는 User가 컴퓨터를 사용하기 더 쉽도록 한다. 하드웨어(HW)를 더 효율적으로 다룰 수 있도록 한다. 컴퓨터 시스템의 구조 컴퓨터는 네가지 시스템으로 구분될 수 있다. HardWare( HW ) : CPU, Memory, I/O Device 등... Operating System( OS..

Computer Science/OS 2023.11.20

MongoDB의 Failover

Conclusion MongoDB는 데이터베이스 수준의 Failover를 제공하여 과반수 이상의 서버에 문제가 발생하지 않는 한 가용성이 유지된다. Application에서 MongoDB의 Failover가 발생하더라도 문제가 없도록 Connection String과 Option을 구성하고 Failover 시 발생할 수 있는 에러를 처리하는 로직을 작성해야한다. 이를 검증하기 위해 Failover Test를 진행하며 Application에서 MongoDB에 연결하여 부하를 준 상황에서 rs.stepDown(), db.shutdownServer(), kill -9 MONGODB_PID 를 통해 테스트할 수 있다. Failover 우리가 MongoDB를 사용할 때, 보통 Replica Set의 형태로 사용한..

Database/MongoDB 2023.11.19

MongoDB 로그 관리 : logRotate와 로그파일 권한

MongoDB의 경우 mongod.log를 뱉는다. 이 mongod.log는 자동으로 rotate가 되지 않고, rotate를 해주지 않으면 파일의 크기가 계속 커지게 된다. 이때, MongoDB의 admin database에 logRotate 명령을 날려주면 MongoDB가 이쁘게 파일을 변경해준다. replset1:PRIMARY> db.adminCommand({logRotate:1}); { "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1700066060, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } }, "operati..

Database/MongoDB 2023.11.16

[MongoDB] MongoDB 빌드하기

MongoDB는 오픈소스이므로 코드를 Github에서 확인할 수 있다. MongoDB에 더 깊은 이해를 가지고자 소스를 분석해보고 싶다는 생각을 했다. 그리고 능력이 된다면 Commit까지,,,, Opensource Committor는 내 눈에는 멋있어보인다. 이번에는 소스코드를 다운로드 받고, 소스를 통해 빌드한 뒤 빌드된 바이너리로 MongoDB를 실행시켜보고자 한다. 1. 소스 다운로드 https://github.com/mongodb/mongo GitHub - mongodb/mongo: The MongoDB Database The MongoDB Database. Contribute to mongodb/mongo development by creating an account on GitHub. git..

Database/MongoDB 2023.03.05

[MongoDB] 도큐먼트의 배열 필드내 요소 범위를 검사하는 쿼리

MongoDB에서는 $elemMatch 셀렉터를 사용해서 배열 내 요소이 특정 조건을 만족하는 쿼리를 작성할 수 있다. 이 때, $elemMatch로 걸린 조건을 배열 내 하나의 요소라도 만족하면 해당 조건을 가져오게 되는데 다음과 같은 과제가 주어졌을 때에는 어떻게 쿼리를 짜야할 지 모를 수 있다. 배열 안의 모든 요소가 3 ~ 6 사이인 document만 가져와라. db.test.insertMany([ {item: "ABC", ratings: [2, 9], category_id: 10}, {item: "XYZ", ratings: [4, 3], category_id: 10}, {item: "ABC", ratings: [9], category_id: 20}, {item: "ABC", ratings: [9..

Database/MongoDB 2023.02.04

[PICKSHOT] AWS 마이그레이션 후 피드 업로드 안되는 문제

PICKSHOT 어플리케이션의 인프라를 새로운 AWS 계정으로 이전했다. 이후 잘 동작하는 줄 알았더만 피드를 업로드 하는데 문제가 발생했다. 피드 업로드 실패 CS가 올라왔다,,,, 무슨 문제인지 바로 확인해봤다. Production Server의 "The bucket does not allow ACLs" production server에 POST /feeds API를 호출했을 때 "The bucket does not allow ACLs" 메세지와 함께 400 에러가 발생했다. 새로 만든 버킷의 ACLs을 설정해주지 않아 발생한 문제로 판단 해결방법 1. 해당 버킷에 권한을 가진 IAM 유저를 새로 생성해주었다. 2. s3 버킷에 ACL을 사용하도록 편집했다. 3. 개발 서버에 aws key를 해당 I..

운영 2022.12.14

[PICKSHOT] AWS 계정 마이그레이션

소프트웨어 마에스트로에서 PICKSHOT 어플리케이션의 지원이 끝나고 AWS 인프라를 개인 계정으로 이전했다. 이전된 항목은 1. PICKSHOT 사진들을 저장하는 S3 Bucket 2. Elastic Beanstalk 서버 3. Database 인스턴스 -> mongodb atlas 서비스로 이전 4. route53 hosting 영역 이다. s3 버킷 이전 기존 s3 버킷을 삭제하고 동일한 버킷을 만들어서 object에 대한 url이 안 바뀌어서 다행히 db의 url을 변경할 필요 없이 db 이전만 하면 되었다. 당연히 s3 버킷을 삭제하고 동일한 이름의 버킷을 바로 생성하는건 불가능했다. 1시간 정도 시간이 지난 후에 동일한 이름의 버킷을 이전하려고 하는 계정에서 만들 수 있었다. Elastic B..

운영 2022.12.14