1월 7일 화요일
AM 알고리즘 풀이
PM 프로젝트 진행
💡 Today Issue
기술 스택 아키텍처
🤔 나의 생각 + 배운 것
Proxy
❓사용 이유 : 보안상의 이유로 직접 통신할 수 없는 두 점사이에서 대리로 통신을 수행하여 보안성, 성능, 안정성을 향상시킨다.
- 포워드 프록시(Forward Proxy) 일반적인 프록시 서버를 말하며 클라이언트와 서버 사이에서 클라이언트를 대채해 서버로 리소스 요청 시 프록시 서버를 거쳐 요청한다. 👍 장점
-
IP변환을 통해 익명성을 보장한다 .
-
특정 IP or 웹 페이지에 대한 접근을 금지할 수 있다.
-
자주 요청되는 리소스를 캐싱해 원 서버의 부하를 줄이고 응답 속도를 개선한다.
👎 단점
-
설정 관리가 필요하며 잘못 설정 시 보안 위협이 될 수 있다.
-
일부 웹사이트는 프록시 서버를 거치는 접근을 차단한다.
- 리버스 프록시(Reverse Proxy) 외부 요청을 받아 적절한 백엔드 서버로 요청을 전달해 반환한다. WAS 앞단에 놓여 있다. 👍 장점
- 로드밸런싱 기능으로 원 서버의 부하를 줄인다.
- 서버 고유의 IP가 외부로 노출되지 않는다.
- SSL 암호화 처리 집중 등 보안 강화가 가능하다.
메시지 큐
큐(queue)라는 자료구조를 채택해 메세지를 전달하는 시스템이며 메시지 지향 미들웨어(MOM)을 구현한 시스템이다.
❓사용 이유 : 비동기식 메시징이라 하는 모델은 데이터 손실을 방지하고, 프로세스나 연결이 종료 되더라도 메시지가 소실되지 않는다.
메세지 큐는 MSA(Microservice Architecture)
에서 아키텍처의 핵심적인 역할을 하며 대용량 데이터, 채팅 서비스, 비동기 작업 등을 지원 시 주로 사용한다.
메세지를 발행하고 전달하는 부분을 Producer
라고 하며, 메세지를 받아서 소비하는 부분을 Consumer
라고 한다.
메시지 큐가 메세지 or 이벤트가 송수신되는 통신 통로라 하면 브로커는 메시지 or 이벤트를 넣어주는 중개자 역할을 한다.
- 메시지 브로커
Producer
가 생산한 메세지를 메세지 큐에 저장 후 메시지를 Consumer
가 가져갈 수 있도록 한다.
Consumer
가 메시지큐에서 데이터를 가져가게 되면 짧은 시간 내에 메시지 큐에서 삭제된다.
- 이벤트 브로커
이벤트 브로커가 관리하는 데이터를 이벤트라고 하며 데이터를 가져갈 시 삭제되는 메시지 브로커와 달리, 이벤트 브로커 방식에서는 Consumer가 소비한 데이터 필요할 시 다시 소비할 수 있으며 메시지 브로커보다 대용량 데이터를 처리할 수 있는 능력이 있다.
👍 장점
- 비동기 : Queue를 통해 비동기적으로 메세지를 처리할 수 있다.
- 낮은 결합도 : 확장성, 유연성, 효율적인 유지 보수, 장애 전파 방지 등의 장점이 있다.
- 탄력성 : 예기치 않은 상황 or 장애에 대응/대처할 수 있는 능력을 의미한다.
- 과잉 : 정상적인 메세지 송/수신 실패 시 재실행이 가능하다.
- 신뢰성 : 송신된 메세지의 안전하고 확실한 전달을 의미한다.
- 확장성 : 수평 확장을 의미하며 동시다발적인 요청이 증가 시 메시지 큐에
Producer
와 Consumer
를 추가해 쉽게 확장이 가능하다.
MQ의 종류
- RabbitMQ
- ActiveMQ
- ZeroMQ
- Kafka
https://m.blog.naver.com/seek316/222117711303
Storage
- 객체 스토리지 (aws S3) 데이터를 객체라는 개별 단위로 저장하고 관리한다. 객체는 일반적으로 문서, 이미지 또는 데이터 값과 같은 실제 데이터와 관련 메타데이터로 구성되며 객체에 대한 추가 정보로, 객체를 검색하는 데 사용할 수 있다. 가용성보다 스토리지 수량을 우선시하며 확장성이 뛰어난 시스템으로서 객체 스토리지 시스템에 대용량의 비정형 데이터를 저장할 수 있다.
- 블록 스토리지 데이터를 고정된 크기의 블록으로 나누어 개별 단위로 저장하는 방식으로 작동한다. 블록 크기는 수 킬로바이트에서 수 메가바이트에 이르며 블록 크기는 구성 프로세스 중에 미리 지정할 수 있다. 고성능, 짧은 지연 시간, 빠른 데이터 전송 속도를 제공합니다. 블록 수준에서 작동하므로 데이터에 직접 액세스하여 높은 I/O 성능을 얻을 수 있다.
- 클라우드 파일 스토리지 파일 데이터에 대한 공유 액세스를 제공하는 계층적 스토리지 시스템이다. 원격 서버 인프라를 사용하여 데이터를 저장하고 클라우드 제공업체는 서버를 유지 관리하고 서버의 데이터를 관리한다. 고성능을 제공할 수 있지만, 이것이 클라우드 파일 스토리지를 사용하는 주된 이유는 아니다. 클라우드 파일 스토리지의 경우 사람이 액세스할 수 있는 직관적인 방식으로 데이터를 저장한다는 점이 더 중요하다
DB
SQL(RDB - 관계형 데이터베이스)
고정된 행과 열로 구성된 테이블에 데이터를 저장하는 DB이다.
👍 장점
- 명확하게 정의된 스키마, 데이터 무결성을 보장한다.
- 관계는 각 데이터를 중복없이 한번만 저장한다.
👎 단점
- 데이터 스키마를 사전에 계획하고 알려줘야한다.
- 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있다.
- 대체로 수직적 확장만 가능하다.
NOSQL(비관계형 데이터베이스)
관계형 데이터베이스를 제외한 나머지 유형의 DB이다.
👍 장점
- 스키마가 없어서 유연하다. 언제든지 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있다.
- 데이터는 에플리케이션이 필요로 하는 형식으로 저장되며 데이터를 읽어오는 속도가 빨라진다.
- 수직 및 수평 확장이 가능하며 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리가 가능하다.
👎 단점
- 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있다.
- 데이터 중복을 계속 업데이트 해야한다.
- 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야한다.
NOSQL DB 유형
- key-value 타입 : Redis, Amazon DynamoDB
- 문서형 DB : MongoDB
- Wide-Column Store DB : DB의 열에 대한 데이터를 집중적으로 관리하는 DB이다. ex) Apache Cassandra, Apache HBase
- 그래프 DB : 자료구조의 그래프와 비슷한 형식으로 데이터 간의 관계를 구성하는 DB이다. ex) Neo4J, InfiniteGraph
🕐회고