CS 61

[Network] 웹 통신의 큰 흐름

계층별 설명 응용 계층 (Application Layer) 사용자가 브라우저를 통해 "https://www.google.com/"을 입력하면, 1. 브라우저가 URL에 적힌 값을 파싱해서 HTTP Request Message를 만든 후, OS에 전송 요청 2. 브라우저는 DNS 서버에 "www.google.com"이라는 도메인 이름의 IP 주소를 요청(DNS Lookup) DNS Lookup 과정: 크롬의 경우 브라우저 → hosts파일 → DNS Cache의 순서로 도메인에 매칭되는 ip를 찾는다. (루트 도메인 서버 -> 서브도메인 서버순으로 찾음) 3. 브라우저는 IP 주소로 HTTPS 요청을 전송한다. 표현 계층 (Presentation Layer) 요청된 데이터를 표현하고 압축, 암호화 등의 변..

CS 2023.10.05

Java Sort Algorithm

Java에서 정렬을 수행하는 두 가지 주요 방법은 Arrays.sort()와 Collections.sort()이다. Arrays.sort()는 배열을 정렬할 때, Collections.sort()은 자료구조의 정렬 시 사용한다. 이 두개는 다른 정렬방식으로 구현된다. Arrays.sort() Arrays.sort의 코드는 듀얼피봇 퀵정렬(Dual-Pivot QuickSort)을 사용한다. 아래는 Arrays.sort의 주석과 코드이다. /** * Sorts the specified array into ascending numerical order. * * Implementation note: The sorting algorithm is a Dual-Pivot Quicksort * by Vladimir Y..

CS 2023.09.30

[Network] TCP/UDP

TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 네트워크에서 데이터를 전송하는 주요 프로토콜이다. TCP (Transmission Control Protocol) 데이터 단위: Segment 1 : 1 전송 통신을 시작하기 전에 세션을 설정하고, 데이터를 전송하고 받은 후 세션을 정리하는 방식으로 통신을 한다. 데이터 전송 중에 손실이나 오류가 발생하면 재전송을 요청하여 확실하게 데이터를 전달한다. 데이터를 보낸 순서대로 받아들이고 재조립하여 순서를 보장한다. 파일 전송, 웹 페이지 로딩 등 대용량 데이터 전송에 적합하며 주로 사용된다. 3-way handshake로 연결, 4-way handshake로 연결을 해제함으로써 신뢰성과 데이..

CS 2023.08.04

[CS] NoSQL vs RDMBS

NoSQL "Not Only SQL"의 약자로, RDBMS가 아닌 다른 형태의 데이터 저장과 처리를 지원하는 데이터베이스 시스템 장점: - 유연성이 높아서 비구조적인 데이터, 다양한 형태의 데이터를 처리하기 용이하다. - 대량의 데이터를 처리하는 데 뛰어난 성능을 가진다. - 수평적 확장이 쉽기 때문에 대규모 분산 시스템에 적합하다. - JSON과 같은 형태의 데이터 구조를 사용할 수 있다. 단점: - ACID (원자성, 일관성, 고립성, 지속성) 특성을 보장하지 않을 수 있어 데이터 무결성이 보장되지 않을 수 있다. - 복잡한 쿼리 작성이 어렵다. - 데이터 모델링에 유연성이 있기 때문에 비교적 데이터 일관성 유지가 어렵다. RDBMS "Relational Database Management Syste..

CS 2023.08.02

[CS] 쿠키와 세션의 차이

쿠키(Cookie) 클라이언트에 작은 데이터 조각을 저장하는 방식이다. 클라이언트에 저장되므로 클라이언트가 직접 수정할 수 있으며 보안에 비교적 취약하다. 주로 비밀번호, 로그인 상태 유지 등의 기능을 구현하는데 사용한다. 서버에서 일정 시간이 지나면 삭제되도록 설정한 암호화된 토큰으로 개인정보를 저장하여 사용한다. 각 도메인당 쿠키의 개수와 총 저장 용량에 제한이 있다. 세션(Session) 서버에 사용자 상태 정보를 저장하는 방식이다. 서버는 클라이언트 요청 시 고유한 세션 ID를 생성하고, 이를 쿠키를 통해 클라이언트에게 전송한다 로그인 정보, 장바구니 내역, 사용자 정보 등 사용자 상태를 유지하는데 사용한다. 쿠키와 달리 세션 데이터는 서버에 저장되므로 클라이언트가 직접 수정할 수 없고, 보안상 ..

CS 2023.08.01

[CS] TDD(Test-Driven Development)란?

TDD(Test-Driven Development) TDD는 테스트 주도 개발이라고도 불린다. 테스트 코드를 작성하고 이를 통과하는 최소한의 코드를 작성한 후에 리팩토링하는 과정을 반복하여개발하는 방식이다. 1. 기능 코드를 작성하기 전에 테스트 코드를 먼저 작성하여 테스트 하는 것이 핵심 원칙이다. 2. 보통 단위 테스트로 진행한다. 3. 테스트를 통과할 수 있는 최소한의 코드만 작성하여 기능이 작동하는지 검증한다. 4. 기능이 작동하는 것을 확인 후 코드 구조 개선 및 중복 제거 등 작업을 수행하는 리팩토링을 진행한다. 장점 1. 코드 품질 향상: 각 기능에 대한 테스트를 보장하므로 코드 품질이 높아지며 버그를 발견하기 쉬워진다. 2. 신뢰성 확보: 테스트를 통과한 기능은 정상적으로 동작한다는 확신을..

CS 2023.07.31

[CS] 스케줄링

스케줄링: 프로세스 실행 시 필요한 여러 자원을 해당 프로세스에게 할당하는 것 스케줄링의 종류 장기 스케줄링 : 어떤 프로세스가 시스템 자원을 할당받을지 결정 후 준비상태 큐로 보냄 작업 스케줄링, 상위 스케줄링이라고도 하며 작업 스케줄러에 의해 수행 중기 스케줄링 : 어떤 프로세스들이 CPU를 할당받을 것인지 결정하는 작업 CPU를 할당받으려는 프로세스들이 많을 시 일시보류 시킨 후 활성화해서 부하 조절 단기 스케줄링 : CPU를 할당받는 시기와 특정 프로세스를 지정하는 작업 프로세서 스케줄링, 하위 스케줄링 이라고도 한다 프로세서 스케줄링 및 문맥교환은 프로세서 스케줄러에 의해 수행됨 문맥교환(Context Switching) : OS에 의해 CPU가 할당되는 프로세스 변경 시 실행 프로세스에 CPU..

CS 2023.07.15

[CS] 병행(Concurrency)과 병렬(Parallel)

공부를 하던 도중, 병행과 병렬의 개념이 헷갈려서 정리해봤다. 병행(Concurrency) 병렬(Parallel) 동시에 실행되는 것 같이 보이는 것 실제로 동시에 여러 작업이 처리되는 것 싱글 코어에서 멀티 쓰레드(Multi thread)를 동작 시키는 방식 멀티 코어에서 멀티 쓰레드(Multi thread)를 동작시키는 방식 한번에 많은 것을 처리 한번에 많은 일을 처리 논리적인 개념 물리적인 개념 병행(Concurrency) 단일 프로세서 또는 단일 코어에서 여러 작업이 시분할 방식으로 조금씩 번갈아가며 실행되는 방식이다. 여러 작업을 번갈아 가며 실행되면서 자원을 최대한 활용하여 작업을 빠르게 완료하는 것이 목표이다. 작업들이 서로에게 영향을 주지 않거나 의존성이 적을 경우 성능 향상을 노릴 수 ..

CS 2023.07.12

[CS] DBMS

DBMS는 DB를 효율적이고 직관적이며 안전하게 사용할 수 있게 해주는 DB ManagerSystem이다 효율성: 중복 제어 및 무결성 제약조건을 정의/검사하는 기능을 가짐 직관성: 서로 다른 데이터 간의 관계를 표현해주는 관계 표현 및 편리한 인터페이스를 제공 안전성: 접근하는 사용자마다 다른 권한을 주어 접근통제 및 데이터 수정/삭제 시 백업 기능 제공 트랜잭션: DB의 상태를 변화시키는 작업 단위나 병행제어 및 회복 작업 시 처리되는 작업의 논리적 단위로 사용된다. 트랜잭션의 특성: ACID - Atomicity(원자성) : 모두 반영(Commit)되거나 전혀 반영되지 않아야 함(Rollback) - Consistency(일관성) : 시스템의 고정요소는 트랜잭션 수행 전, 후의 상태가 같아야 함 -..

CS 2023.07.08

[Network] HTTP/HTTPS의 차이, SSL/TLS이란?

HTTP/HTTPS HTTP와 HTTPS는 클라이언트와 서버 간 통신에 사용되는 프로토콜이다. 프로토콜이란 컴퓨터나 디지털 장치 등 다양한 기기간에 통신하기 위한 규칙과 규약이다. 사용자의 요청(주소창에 URL을 입력하거나 웹 페이지의 링크를 클릭 등) 시, 브라우저는 해당 URL로 서버에 요청(Request)을 보낸다. 이 요청을 HTTP 또는 HTTPS 프로토콜을 사용하여 이루어진다. HTTP HTTP (HyperText Transfer Protocol): 텍스트 기반으로 데이터를 전송하며 보안 기능이 없는 평문 통신 방식이다. 중간에 제3자가 데이터를 가로채거나 조작할 가능성이 있다. 80번 포트를 사용하여 데이터를 전송한다. HTTPS HTTP에 SSL/TLS을 사용하여 데이터를 암호화하여 안전하..

CS 2023.07.05