프로젝트의 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 사용 트랜잭션 지원 |
수평적 확장 용이 스키마 유연성 다양한 데이터 모델 지원 높은 성능과 확장성 |
단점 | 수평적 확장 어려움 스키마 변경 복잡 대용량 데이터 처리에 비효율적 |
데이터 일관성 보장 어려움 트랜잭션 지원 부족 표준화 부족 복잡한 쿼리 지원 미흡 |
'Diary > TIL' 카테고리의 다른 글
2024-04-15) 인덱싱 적용 (0) | 2024.05.21 |
---|---|
2024-04-13) 대규모 시스템 설계 기초 CH1: 규모 확장, 캐시 (0) | 2024.05.19 |
2024-04-11) CI/CD with github-action (0) | 2024.05.19 |
2024-04-09) release 와 dev 분리 (0) | 2024.05.18 |
2024-04-08) 모니터링&테스트와 관련된 의사결정 여러가지 (0) | 2024.05.17 |