본문 바로가기

Diary/TIL

2024-04-12) 대규모 시스템 설계 기초 CH1: 단일 서버, db

프로젝트의 DB 선택 과정:

데이터베이스 선택 시 가장 큰 비중을 차지한 부분은 러닝 커브이었다. 프로젝트 팀원들이 이미 어느 정도 지식을 가지고 있는 MySQL을 선택한 이유도 이 때문이다.

사용자 정보와 관련된 내용은, 인증과 같은 ACID 속성(Atomicity, Consistency, Isolation, Durability)이 필요한 데이터를 처리해야 하기 때문에 관계형 데이터베이스(RDBMS)를 채택했다.

사용자 정보, 항공기 정보, 좌석 정보 등 여러 관계가 복잡하게 얽혀있는 데이터를 관리해야 하는 필요성이 있었다. 현재 팀의 NoSQL에 대한 지식과 경험으로는 이러한 관계 데이터를 효과적으로 관리하기 어렵다고 판단했다. NoSQL 데이터베이스를 학습하고 개발하는 데 추가적인 시간과 노력이 필요하며, 이는 프로젝트 기한 내에 실현 가능하지 않다고 결론지었다.

이러한 이유로 MySQL을 채택하게 되었다.

아래 내용은 책에서 공부한 내용이다.

단일 서버

DNS = Domain name service로 웹 브라우저나, 모바일 앱에서 도메인 이름을 검색하면 ip주소로 반환 => 제 3 사업자가 반환하기 때문에 우리 시스템의 일부 x

 

반환된 IP주소로 HTTP, HTTPS 요청을 보낸다.

>> HTTP, HTTPS 요청의 차이는?

구분 HTTP(HyperText Transfer Protocol) HTTPS(HyperText Transfer Protocol Secure)
보안성 데이터가 암호화되지 않음 SSL/TLS를 사용하여 데이터가 암호화됨
포트 번호 기본적으로 포트 80 사용 기본적으로 포트 443 사용
인증서 인증서 사용 없음 SSL/TLS 인증서 사용
속도 암호화 과정이 없어 약간 더 빠를 수 있음 호화와 복호화 과정으로 약간 느릴 수 있음

 

웹 서버는 HTML 페이지 또는 JSON 형태의 응답을 반환

>> HTML 반환, JSON 응답 반환의 차이는?

구분 HTML 페이지 반환 JSON 형태의 응답 반환
용도 웹 브라우저에서 인간이 읽을 수 있는 웹 페이지 렌더링 클라이언트-서버 간 데이터 교환 및 API 통신
형식 HTML 태그를 사용한 문서 구조 정의 키-값 쌍으로 구성된 가벼운 데이터 교환 형식
처리 방식 웹 브라우저가 HTML 파싱 및 렌더링 JavaScript로 파싱 및 애플리케이션 로직에 사용
용량 및 속도 크기가 크고 다양한 리소스 포함 가능,
전송 속도가 느릴 수 있음
가벼운 형식으로 전송 속도가 빠름

 

다만 개인적인 생각이지만, html 캐싱을 진행하지 않는다면 테스트 상 큰 차이가 없지 않을까? 라는 생각이 들긴 한다.

 

db

구분 RDBMS NoSQL
종류 MySQL
PostgreSQL
Oracle
SQL Server
MongoDB
Cassandra
Redis
 CouchDB
유형 관계형 데이터베이스 (Relational Database) 문서 지향 (Document)
키-값 (Key-Value)
열 지향 (Column-Family)
그래프 (Graph)
장점 데이터 무결성과 일관성 보장
표준 SQL 사용
트랜잭션 지원
수평적 확장 용이
스키마 유연성
다양한 데이터 모델 지원
높은 성능과 확장성
단점 수평적 확장 어려움
스키마 변경 복잡
대용량 데이터 처리에 비효율적
데이터 일관성 보장 어려움
트랜잭션 지원 부족
표준화 부족
복잡한 쿼리 지원 미흡