Light Blue Pointer
본문 바로가기

TIL(CS)13

웹소켓이란? (feat.Spring,STOMP,SockJS) 웹소켓이란?웹소켓(WebSocket)은 클라이언트와 서버 간의 실시간 양방향 통신을 가능하게 하는 프로토콜기존의 HTTP 통신 방식은 클라이언트가 요청을 보내면 서버가 응답하는 요청-응답 모델을 따른다.반면, 웹소켓은 최초 연결 이후 클라이언트와 서버 간에 지속적인 연결을 유지하면서 상호 간에 데이터를 주고받을 수 있다.이는 실시간 기능이 필요한 애플리케이션(채팅, 실시간 알림, 게임) 등에 유용하게 사용된다.웹소켓의 특징양방향 통신클라이언트와 서버 모두 메시지를 보낼 수 있다.지속적인 연결HTTP와 달리 웹소켓은 연결이 한번 성립되면 끊기지 않고 계속 유지된다낮은 오버헤드HTTP처럼 매번 요청 헤더를 보내지 않고, 한 번 연결되면 지속적으로 데이터를 주고받을 수 있어 오버헤드가 적다.지연 감소(실시간 .. 2024. 10. 26.
OOP의 SOLID 원칙 OOP의 SOLID 원칙S : Single Responsibility Principle클래스는 하나의 책임만 가져야 하며, 클래스가 변경되는 이유는 단 하나뿐이어야 한다하나의 클래스가 하나의 기능만 담당하도록 하여 코드의 응집도를 높이고, 유지보수를 용이하게 한다SRP 위반 예시Invoice 클래스가 여러 책임(기능)을 가지고 있다.Invoice 클래스는 청구서의 데이터 저장, 청구서의 프린트, 그리고 총액 계산을 모두 담당하고 있다.class Invoice { private double amount; public Invoice(double amount) { this.amount = amount; } public double getAmount() { retu.. 2024. 5. 28.
RDBMS의 ACID 트랜잭션과 NoSQL의 BASE 속성 ACID vs BASE 비교개념ACIDBASE가용성낮음 (일관성을 우선)높음 (가용성을 우선)일관성높음 (즉각적인 일관성)낮음 (최종적인 일관성)상태단단한 상태 (변경 불가능한 상태)부드러운 상태 (변경 가능한 상태)트랜잭션 격리강한 격리성약한 격리성시스템 설계 목표안정성과 신뢰성확장성과 가용성ACID 트랜잭션은 금융 거래와 같이 높은 일관성과 신뢰성이 요구되는 시스템에 적합하며, BASE 속성은 대규모 분산 시스템에서 높은 가용성과 확장성을 필요로 하는 시스템에 적합하다ACID 트랜잭션RDBMS에서 트랜잭션의 신뢰성과 일관성을 보장하는 속성Atomicity (원자성)트랜잭션의 모든 작업이 완전히 수행되거나 전혀 수행되지 않아야 함을 보장트랜잭션 중 일부 작업만 수행되거나 실패하는 경우, 시스템은 트랜잭.. 2024. 5. 28.
NoSQL의 CAP 이론(The CAP theorem) CAP 이론분산 데이터베이스 시스템의 기본 원칙특히 NoSQL 데이터베이스와 관련이 깊다.일관성 (Consistency, C)모든 읽기 요청은 가장 최근의 쓰기 결과 또는 오류를 반환한다분산 시스템의 모든 노드가 동일한 데이터를 동시에 볼 수 있다.모든 클라이언트가 일관된 데이터를 보도록 보장한다가용성 (Availability, A)모든 요청(읽기 또는 쓰기)은 최신 데이터를 보장하지 않더라도 응답을 받는다시스템은 항상 운영 상태를 유지하며 응답성을 갖는다.장애가 발생하더라도 시스템은 요청을 처리한다(비록 반환된 데이터가 최신이 아닐 수 있지만).분할 허용성 (Partition Tolerance, P)네트워크 분할로 인해 일부 노드가 통신할 수 없게 되더라도 시스템은 계속 작동한다시스템은 임의의 네트워크.. 2024. 5. 28.
클러스터링과 샤딩의 차이점 ClusteringSharding목적Purpose고가용성(High Availability), 로드 밸런싱(Load Balancing)확장성(Scalability), 성능 향상(performance improvement)구조여러 개의 데이터베이스 인스턴스(Node)가 하나의 클러스터를 구성인스턴스는 서로 복제(replication)되어 동일한 데이터를 유지여러 개의 독립된 데이터베이스 인스턴스(샤드)로 분할하여 저장하고, 샤드 키를 통해 데이터를 적절한 샤드에 분배 시스템의 확장성과 성능을 향상시킴데이터 분포 Data Distribution모든 노드가 동일한 데이터 저장All nodes store the same data각 샤드가 일부 데이터만 저장Each shard stores only a subset .. 2024. 5. 28.
NoSQL과 RDBMS의 차이 RDBMSNoSQL데이터 모델관계형 데이터 모델데이터를 테이블, 행, 열 형식으로 저장다양한 데이터 모델문서(Document), 키-값(Key-Value), 열(Column), 그래프(Graph) 모델스키마사전에 정의, 변경 어려움유연, 변경이 쉽다제약조건데이터 무결성 및 일관성을 유지하기 위해 엄격한 제약조건(키, 외래 키, 고유 제약조건)제약조건이 없거나 느슨하다애플리케이션 레벨에서 데이터 무결성과 일관성을 관리한다확장 방법수직확장수평확장(클러스터링과 샤딩으로 쉽게 확장)확장성제한적, 단일 서버의 성능에 의존뛰어남, 대규모 데이터 처리 가능일관성강한 일관성 보장트랜잭션이 완료되면 모든 읽기 작업이 가장 최근의 쓰기 작업을 반영ACID 트랜잭션: 원자성, 일관성, 고립성, 지속성을 지원하여 데이터의 무.. 2024. 5. 28.
Creational patterns Singleton Pattern Instance가 딱 하나만 존재할 수 있는 패턴 class 안에 static instance가 있고 static getInstance() 메서드로 instance가 이미 존재한다면 그것을 return, instance가 존재하지 않는다면 생성하고 static에 넣은 후에 그것을 return Prototype Pattern (Clone) 그 클래스의 코드에 의존적이지 않은 채로 존재하는 객체를 복사할 수 있게 해준다 Prototype Pattern이 나온 배경 객체를 복사해서 똑같은 복제본을 만들고 싶은 상황 똑같은 클래스의 객체를 하나 더 생성한다 원래 객체의 모든 필드에서 값을 복사해다 새로운 객체에다가 붙여넣는다 이런 상황에서 생기는 문제점들 어떤 필드는 privat.. 2024. 4. 18.
디자인 패턴 디자인 패턴이란? 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상화관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은 것 Design patterns는 Elements of Reusable Object-Oriented Software라는 책으로 처음 등장했는데 네 명의 C++ Engineer들이 썼다고 함 정답은 아니지만 알아두면 사고방식 향상에 도움이 된다고 한다 https://refactoring.guru/design-patterns 이 웹사이트에 가면 상세한 설명이 있다 디자인 패턴의 장점 재사용성 반복적인 문제에 대한 일반적인 해결책을 제공하므로, 이를 재사용하여 유사한 상황에서 코드를 더 쉽게 작성할 수 있다. 가독성 일정한 구조로 정리하고 명확하게 작성하여 개발자가.. 2024. 4. 17.
HTTP/HTTPS HTTP = Hypertext Transfer Protocol 클라이언트와 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜 사용자가 웹 사이트를 방문했을 시 사용자 브라우저가 웹 서버에 HTTP 요청을 전송 웹 서버는 HTTP 응답으로 응답 웹 서버와 사용자 브라우저는 데이터를 일반 텍스트로 교환 HTTPS = Hypertext Transfer Protocol Secure HTTP의 더 안전한 버전 HTTPS에서는 브라우저와 서버가 데이터를 전송하기 전에 SSL/TLS를 사용하여 안전하고 암호화된 연결을 설정함 SSL/TLS를 사용하여 연결을 암호화하는 웹사이트는 URL에 HTTPS를 포함한다 📖SSL /TLS HTTP보다 HTTPS가 나은 이유 보안 HTTP 메시지는 일반 텍스트라 권한이 없어도 쉽.. 2024. 4. 11.