IT/CS 22

[CS] Rate Limit 이란?

API Rate Limit 에 대해 정리하고자 한다. 1. 개념- 클라이언트가 일정 시간 동안 서버에 보낼 수 있는 요청 수를 제한하는 정책- Rate: 일정 시간 동안 허용되는 요청 수 - Limit: 클라이언트에게 부여된 최대 요청 횟수- Window: 제한이 적용되는 시간 간격 2. 필요 이유 - 과도한 요청 방지 (DDoS, 무한 루프, 크롤러 등)- 자원 보호 및 안정적인 서비스 제공- 공정한 자원 배분 (모든 유저가 일정량의 요청만 가능)- 비용 관리 3. 주요 알고리즘1) Fixed Window- 고정된 시간 창 기준으로 요청 수 카운트- 단순하지만 경계 시점에 요청이 몰릴 수 있음2) Sliding Window- 시간 창을 계속 이동하면서 계산- 좀 더 정밀한 제어 가능3) Token Bu..

IT/CS 2025.07.01

[CS] gRPC(Google Remote Procedure Call) 란?

말로만 듣던 gRPC 에 대해 이해 및 정리를 하고 싶어서 글을 쓰게 되었다. 1. 개념- 네트워크를 통한 함수 호출을 마치 로컬 함수처럼 수행할 수 있도록 해주는 RPC 프레임워크- HTTP/2 프로토콜을 기반으로 통신- 데이터 직렬화에는 Protocol Buffers (protobuf) 사용 2. 사용 목적- 마이크로서비스 아키텍처에서 서비스 간 통신- 다양한 언어 간 통신 지원 (ex. Java Python Go 등)- 빠르고 경량화된 통신이 필요한 시스템- 모바일, IoT, 클라우드 네이티브 환경에서의 고성능 API 구현- 프로토콜 정의 파일 (.proto) 을 기반으로 자동으로 타입 안전한 코드 생성- 클라이언트 서버 간 실시간 양방향 통신 가능 3. 단점- 브라우저에서 직접 호출하기 어렵..

IT/CS 2025.06.19

[CS] SOAP(Simple Object Access Protocol) 이란?

새로 이직한 회사에서 REST 방식이 아닌 SOAP 방식으로 통신을 하는 경우에 직면하게 되었다. 그래서 SOAP 통신의 사용 목적, 장점이 무엇이기에 이를 도입했을까? 라는 생각이 들어 이에 대한 정리를 하게 되었다. 1. 개요- 정의: XML 을 기반으로 요청과 응답을 포장하는 프로토콜- 목적: 플랫폼, 언어, 시스템에 독립적인 원격 호출을 가능하게 함- 전송 방식: 주로 HTTP 을 사용하지만 SMTP, FTP 등도 가능 2. 특징- 표준화: W3C 표준이며 엄격한 스펙을 가짐- 확장: 보안(WS-Security), 트랜잭션 등 다양한 확장 기능 존재- 언어/플랫폼 독립: Java, .NET, Python 등 다양한 언어에서 구현 가능- 복잡성: XML 파싱 및 스키마 검증 등으로 REST 보다 무..

IT/CS 2025.06.08

[기타] SEO(Search Engine Optimization, 검색 엔진 최적화)란?

출시한 플랫폼의 사용성을 높이기 위한 방법 중 하나로 SEO(Search Engine Optimization) 이라는 것이 있다.이 SEO 의 정의, 목적, 주요 요소 등에 대한 정리 글을 쓰고자 한다. 1. 개념- 웹사이트나 웹페이지가 검색 엔진에서 더 높은 순위에 노출되도록 최적화하는 작업 2. 목적- 검색 엔진에서 자연스러운 트래픽을 늘리는 것- 검색 결과 상위 노출을 통해 브랜드 인지도, 방문자 수, 전환율 증가 3. 주요 요소1) On-page SEO (내부 최적화) - 웹사이트 내부의 콘텐츠와 구조를 최적화하는 작업 > 키워드 최적화 : 제목, 본문, 메타태그에 적절한 키워드 사용 > 메타 태그 작성 : , 등 검색엔진에 노출되는 내용 > 헤더 태그 구조화 : , 등으로 ..

IT/CS 2025.04.20

[CS] 쓰레싱(Thrashing) 이란?

쓰레싱에 대한 개념, 발생 원인, 이를 방지하기 위한 메모리 관리 전략에 대해 정리하고자 한다. 1. 개념- 운영체제에서 과도한 페이지 교체가 발생하면서, 실제 작업은 거의 수행되지 않고 대부분의 시간과 자원이 페이지 교체에 소비되는 현상으로, 주로 가상 메모리를 사용하는 시스템에서 발생한다. 2. 발생 원인- 과도한 다중 프로그래밍 > 너무 많은 프로세스를 동시에 실행시키면 각 프로세스가 필요한 만큼의 메모리 확보를 하지 못한다. > 그 결과 페이지 결함이 빈번하게 발생하고, 디스크 I/O 가 증가하면서 성능이 저하된다.- Working Set 크기보다 적은 프레임 할당 > 각 프로세스는 일정 시간 동안 자주 참조하는 Working Set 이 있는데, 이 크기보다 적은 메모리를 할당 받으면 계속..

IT/CS 2025.04.19

[CS] 객체 지향 설계 5가지 원칙 - SOLID

객체 지향 설계에서 사용하는 5가지 원칙에 대해 각각 정리하고자 한다. 1. 단일 책임 원칙 (SRP, Single Responsibility Principle)- 설명 : 클래스는 단 하나의 책임만 가져야 한다.- 의미 : 하나의 클래스가 하나의 기능만 담당해야 하며, 변경이 필요한 이유가 오직 하나여야 한다.  2. 개방-폐쇄 원칙 (OCP, Open/Closed Principle)- 설명 : 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.- 의미 : 기존 코드를 수정하지 않고 기능을 확장할 수 있도록 설계해야 한다. 3. 리스코프 치환 원칙 (LSP, Liskov Substitution Principle)- 설명 : 자식 클래스는 부모 클래스를 대체할 수 있어야 한다.- 의미 : 부모 클래..

IT/CS 2025.03.16

[CS] CRDT

CRDT(Conflict-free Replicated Data Type) 는 분산 시스템에서 데이터 복제를 처리하기 위한 구조다. 1. 주요 특징- 충돌 없는 병합 > 각 노드에서 독립적으로 데이터를 수정한 후, 병합 시 충돌 없이 자동으로 일관된 상태 보장- 최종 일관성 > 네트워크 분리 또는 지연 상황에서도, 모든 노드는 결국 동일한 상태로 수렴- 병합 및 독립 수정 허용 > 여러 노드에서 병렬로 데이터를 수정할 수 있으며, 수정된 데이터는 병합 시 자동으로 조화 2. 종류 (데이터 병합 방식에 따라 나뉨)- 2.1. State-Based CRDT > 각 노드는 데이터의 전체 상태를 주기적으로 다른 노드와 동기화 > 병합 연산자는 결합 연산자를 사용하며, 연산의 순서와 상관없이 동일한 결과 ..

IT/CS 2024.12.11

[CS] .so 파일과 .a 파일 비교

.so 파일과 .a 파일에 대한 비교 글을 작성하고자 한다.결론적으로 .so 파일과 .a 파일은 모두 컴파일된 코드를 담고 있는 라이브러리 파일이지만, 사용하는 방식과 목적이 다르다. 1. .so 파일- 1.1. 정의  - 동적(공유) 라이브러리 파일- 1.2. 특징  - 실행 시간에 프로그램이 라이브러리 로딩  - 동일한 라이브러리를 여러 프로그램이 동시에 사용할 수 있어 메모리 사용량 줄임  - 변경된 라이브러리를 다시 컴파일하지 않고도 프로그램이 업데이트된 내용 사용 가능  - 배포 시 실행 환경에서 반드시 .so 파일 필요 2. .a 파일- 2.1. 정의  - 정적 라이브러리 파일- 2.2. 특징  - 프로그램이 빌드될 때 라이브러리의 모든 필요한 코드가 실행 파일에 포함되어 파일 크기 커짐  ..

IT/CS 2024.12.11

[CS] 사용자 패스워드 전송/보관 방법

사용자 패스워드를 전송 및 보관하는 방법에 대해 정리하고자 한다. 1. 패스워드 전송- 사용자 패스워드를 전송할 때는 네트워크에서의 도청과 변조를 방지해야 한다.- 대표적인 방법으로는 TLS(Transport Layer Security), CSRF(Cross-Site Request Forgery) 토큰 사용 등이 있다. 2. 패스워드 저장- 서버에서 사용자 패스워드를 해싱하여 저장한다.- 이때 사용되는 해싱 알고리즘으로는 bcrypt, 솔트(salt) 추가 등이 있다.(여기서 솔트(salt)란, 암호학 및 보안에서 사용되는 무작위로 생성된 고유한 데이터로 패스워드를 해싱하기 전에 추가하는 값을 의미한다. 즉, 패스워드에 솔트를 추가한 후 해싱한다.) 3. 패스워드 검증- 사용자가 로그인할 때 입력한 패..

IT/CS 2024.12.11

[CS] Base64 인코딩

이번엔 Base64 인코딩에 대해 정리하려고 한다. 1. 정의- 64개의 ASCII 문자를 사용하여 바이너리 데이터를 텍스트 형식으로 변환하는 인코딩 방식(이 때, 64개는 A-Z(26자), a-z(26자), 0-9(10자), +,/(2자) 로 구성되어 있다.) 2. 작동 방식- 1) 데이터를 3바이트(24비트)씩 나눈다.- 2) 각 24비트를 6비트씩 분할하여 4개의 블록으로 나눈다.- 3) 각 6비트 블록을 64개의 ASCII 문자로 변환한다.여기서 원본 데이터의 길이가 3의 배수가 아니라면 남은 바이트의 수에 따라 '=' 패딩 문자를 추가한다. 3. 주요 특징- 데이터 크기 증가 (원본 데이터의 크기보다 33% 증가, 3바이트 입력이 4바이트 출력으로 변환되므로)- 가독성 (인코딩된 데이터는 읽기..

IT/CS 2024.12.11