데이터베이스의 기본
응용 프로그램 <-> DBMS <-> 데이터베이스 |
위의 구조처럼 데이터베이스 위에 DBMS가 있고, 그 위에 응용 프로그램이 있으며 이러한 구조를 기반으로 데이터를 주고받는다. 예를 들어 MySQL이라는 DBMS가 있고, 그 위에 응용 프로그램에 속하는 Node.js나 php에서 해당 데이터베이스 안에 있는 데이터를 끄집어내 해당 데이터 관련 로직을 구축할 수 있는 것.
DBMS : 데이터베이스를 운영하고 관리하는 소프트웨어계층형, 망형, 관계형 DBMS 중 대부분의 DBMS가 테이블로 구성된 관계형 DBMS(RDMBS)형태로 사용됨.
데이터베이스의 종류는 크게 관계형 데이터 베이스와 NoSQL 데이터베이스로 나눌 수 있다.
이 중 대표적인 관계형 데이터베이스인 MySQL과 대표적인 NoSQL데이터베이스인 MongoDB를 예로 들면, MySQL의 구조는 레코드-테이블-데이터베이스로 이루어져 있고, NoSQL 데이터베이스의 구조는 도큐먼트-컬렉션-데이터베이스로 이루어져 있다.
- RDBMS로 관계형 데이터베이스는 확장성은 떨어지나, 데이터를 안전하게 보관하는 데는 최고이다.
- NoSQL은 빠르게 정보를 빠르게 가져올 수 있다, 그러나 데이터 안정성은 관계형 데이터베이스보다는 떨어진다.
NoSQL같은 경우, 샤드(Shard)라는 기법으로 나눠서 확장을 한다. 그리고 요청이 들어올 때 이 나눠져있는 정보를 빨리 찾는다. 그래서 관계형 데이터베이스와 같이 이용을 할 때 중요한 고객정보/포인트/ 돈과 관련된 정보는 RDBMS에 저장하고, 댓글은 NoSQL에 저장한다.
수평 파티셔닝(horizontal partitioning)은 문서 데이터베이스에 있는 문서나 관계형 데이터베이스에 있는 로우별로 데이터베이스를 분할하는 프로세스를 말한다.
데이터베이스에서 이런 식으로 분할된 부분을 샤드shard라고 하는데, 샤드는 독립된 개별 서버에 저장된다. 문서 데이터베이스의 수평 파티셔닝을 샤딩sharding이라고 하기도 한다. 데이터베이스가 복제 데이터를 갖도록 구성되었을 때 단일 샤드는 서버 여러 대에 저장될 수 있다. 데이터가 실제로 복제되든 그렇지 않든, 일단은 문서 데이터베이스 클러스터 내에 있는 서버는 서버 한 대당 샤드 하나만 갖게 된다
사진을 업로드하면, 스토리지(storage)에 업로드를 한다.
SNS에 업로드 할 때, 썸네일, 작은 이미지, 큰 이미지, 원본 이미지 등으로 변환해서 업로드를 해야하는 데, 변환하는 데 시간이 오래걸린다. 해상도 바꾸는 작업이 끝나면 return하지만, 클라이언트에서는 계속 로딩화면에서 기다려야한다.
그럼 일단 원본 이미지만 스토리지에 저장시키고, 기타 크고작은 이미지로 변환시키는 절차는 나중에 하고, 일단 우선 클라에 응답해준다. 자주 사용하는 이미지는 캐시서버(아마존의 ElastCache)에 저장하고, 해상도를 변환시키는 동작은 서버에서 한다. 그걸 Message Queue라고 한다. Receiver 에서 처리한다. 위 이미지의 파란색 선. 메시지큐는 AWS 에서 SQS라고 한다.
내 서비스를 이용하는 유저가 많이 늘었을 경우, 서버를 여러개 구축해야하지만, AWS는 자동으로 처리해준다. load Balancer라는 친구가 클라에서 받은 요청을 각 서버에게 분배 해주는 역할을 담당하는 데, AWS에도 이 기능이 있다.
AWS의 람다(Lambda)?
Lambda는 AWS에서 제공하는 서버리스 컴퓨팅 플랫폼이다. Platform as a service이고, Paas라고도 한다. 프로비저닝(provisioning)은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말하는 데, Lambda는 서버를 프로비저닝 하거나 관리하지 않고도 코드를 실행할 수 있게 해주는 컴퓨팅 서비스이다.
서버리스란, 서버가 없다는 뜻이 아니고 개발자가 서버의 존재를 신경쓸 필요가 없다는 뜻이다. 서버가 잘 돌아가고 있는지, 개수와 사양한 적당한지 등등 신경쓸 필요없이 사용자는 오직 코드에만 집중할 수 있으니 무척 편하다.
사용자가 많이 늘어날수록 Lambda가 혼자 늘었다 줄었다 알아서 처리해준다. 원래 규칙대로 진행되는게 전통적인 클라우드 방식이면, 서버리스는 유동적으로 작동한다.
이때 사용한 컴퓨팅 시간, 용량에 대해서만 AWS에게 비용을 지불하면 된다.
Lambda가 RDS(MySQL), DynamoDB, S3등에 데이터를 처리한다.
'BackEnd > 리눅스 & AWS' 카테고리의 다른 글
AWS를 Serverless Framework 생성 (0) | 2022.10.04 |
---|---|
AWS Credential 만들기 (0) | 2022.10.03 |
만든 앱 리눅스 서버에서 실행하기 (0) | 2022.06.04 |
백그라운드로 앱 실행하기 (0) | 2022.06.04 |
서버에서 깃의 자료 가져오기: git pull (0) | 2022.06.04 |