# cs_study

네트워크 하향식 접근 1) 컴퓨터 네트워크와 인터넷
네트워크 하향식 접근 (1) 컴퓨터 네트워크와 인터넷 인터넷이란? 구성요소로 본 인터넷 > 전 세계적으로 수십억 개의 컴퓨팅 장치를 연결하는 컴퓨터 네트워크 > 최근, 컴퓨팅 장치에는 주로 전통적인 데스크톱, PC, 자동온도 조절기, 자동차, 게임 … 같은 사물들에게도 확대됨. → 이러한 모든 인터넷 장치는 호스트 혹은 종단 시스템(end system)이라고 불림. 📌 종단시스템 통신링크와 패킷스위치의 네트워크로 연결 한 종단 시스템 → 다른 종단 시스템으로 보낼 때, 데이터 → 세그먼트 단위로 나눔 각 세그먼트(메모리의 한 부분. 최대 64KB)에 헤더를 붙임 이렇게 만들어진 정보 패키지 → 패킷이라 명명. 4

CS_Study Pizza Order Service 구현
Mandatory C++로 Pizza Order Service를 구현 피자 주문을 위해 주문자, 판매자, 재료가게 이렇게 3가지 객체가 존재 (클래스는 더 많겠죠?) 또한 각 객체는 단일이 아닌 여러개일 수 있음. (주문자 여러개) 큰 로직은 주문자가 피자를 주문하면 피자가게에선 미리 메뉴를 만들어 두고 그 메뉴에 어떤 재료가 들어갈지 파악 한 후, 재료가게에서 가져와 피자를 만들어 판매하는 시스템. 이때 재료가게는 각 재료에 대한 재고를 가지고 있어서 재고가 없으면 피자가게에서 주문을 받을때 재료 없음 과 같은 에러메세지를 나타내야함 즉 피자가게는 재료를 가지고 있지 않고, 주문이 들어오면 그때 재료가게에서 주문을 받는 시스템 피자가게에서 피자를 생성할 수도 있지만, 그냥 코드상에 만들어 두는걸로 제한 피자가게 매출과 피자별로 몇개 팔렸는지 볼 수 있는 창이 있어야 함 소비자는 돈 충전하는 메뉴가 있어야 하며, 돈이 부족할 시 잔액

CS_Study 과제 Email Service
cs 스터디에서 사용한 과제 주제 입니다. Email_Service Mandatory C++로 Email Service를 구현 1. 로그인 기능 아이디 비밀번호 받아 로그인 맞는지 확인하는 기능 구현 2. 이메일 기능 메일 쓰기, 받은 메일함, 발송 메일함, 로그아웃, 프로그램 종료 구현 메일 쓰기 시, To, From, Title, Contents 를 각각 한줄에 하나씩 입력 받아 메일 발송 (struct 를 사용하면 편함) 조건 각 코드는 깃헙으로 업데이트 하며 작업할 것. (방법은 알아서 찾을 것.) STL 중 vector, map을 이용하면 편함. 클래스를 MainController, EmailController, AccountController 이렇게 최소 3개를 사용하고, 각각의 데이터를 각 클래스에서 저장하고 있을것. (데이터 침범이 일어나지 않도록 주의.) 텍스트 데이터는 되도록 string을 사용할

객체지향
절차지향 vs 객체 지향 절차 지향 프로그래밍 동사구인 '~하다'에 중점을 둔 프로그래밍 함수들이 각기 자신들의 기능을 절차에 의해 호출한다. 객체 지향 프로그래밍(OOP) 객체에 중점을 둔 프로그래밍 객체 지향 프로그래밍의 특징 상속을 통한 재 사용성을 보장한다. 유지보수 및 관리가 용이하다. 클래스란? C++부터 등장한 사용자 정의 자료형 변수와 데이터를 다루는 기능을 하나로 묶어 놓은 것이다. 객체들을 추상화시킨 하나의 틀이다. 프로그래밍에서 객체란? 클래스는 사용자 정의 자료형 클래스에 변수명을 부여해서 메모리에 등록시키면 객체가 된다. 메모리에 등록된 클래스는 Instance라고도 부른다. 멤버 접근자 1. private 멤버 접근을 오로지 내부에서만 허용한다. 2. public 멤버 접근을 내/외부 모두 허용한다.
index (색인)
인덱스란? 인덱스를 번역하면 “색인”이라는 뜻을 가지고 있다. 즉 색인 이란 책의 “목차”다. 내가 엄청 두꺼운 1000page의 책에서 정보를 찾아야 된다고 가정해보자. 목차가 있다면 목차를 살펴보고 내가 원하는 페이지에 이동해서 필요한 정보를 찾을 수 있다. 하지만 목차가 없다면 일일이 모든 페이지를 넘겨가면서 정보를 찾아야 하는 일이 발생한다.(DB에서는 이런 일을 Full Scan이라고 함) 이렇게 되면 엄청난 시간 소모와 자원이 낭비된다. 데이터 베이스에서는 이를 방지하기 위해 책의 목차와 같은 기능인 INDEX(인덱스)라는 것이 존재한다. DB에서의 인덱스 DB에서의 인덱스는 RDMS에서 검색 속도를 높이기 위한 기술이다. 즉 테이블 칼럼을 색인화 하는 것이다. 칼럼을 색인화 하면 INDEX 파일 검색을 통해 속도를 향상시킬 수 있다. 그러나 INSERT, UPDATE, DELETE의 경우 인덱싱을 하면 정렬된 상태를

CS Study 소프트웨어- 20/21
020. 10억 개 전화번호에서 이름 찾기 : 이진 검색 이진 검색 후보 범위가 한 항목으로 좁혀질 때까지 찾고자 하는 항목을 포함하고 있는 리스트를 반으로 나누는 과정은 반복하는 검색 분할 정복이라는 일반적인 전략의 한 가지 예 단계의 수는 전체 항목의 크기를 2로 계속 나눠 항목 크기가 1에 도달하게 되는 횟수 정렬이 되어있다고 가정 수행해야 하는 일의 양이 데이터의 양이 증가하는 것에 비해 천천히 증가 이진 검색의 예 숫자 맞추기(숫자 범위 : 1~16, 맞출 숫자 : 1) 숫자 범위인 16/2=8의 값을 부른다. DOWN! [1~8], [9~16] 8의 절반인 4 을 부른다. DOWN! [1~4], [5~8] 4의 절반인 2을 부른다. DOWN! [1~2], [3~4] 정답은 1 log : 4 021. 검색을 쉽게 만드는 정렬 : 선택
CS
* Transaction Transaction Isolation Level RDBMS vs NoSQL B-Tree / B+Tree olap vs oltp Redis Transaction > 정보의 교환이나 데이터베이스 갱신 등 연관되는 작업들에 대한 일련의 연산으로, 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위 상태를 변화시킨다는 것 → SQL 질의어를 통해 DB에 접근하는 것 작업 단위 → 많은 SQL 명령문들을 사람이 정하는 기준에 따라 정하는 것
CS
* DB Key JOIN Index Normalization Anomaly Key > 키(Key)는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 튜플들과 구별할 수 있는 유일한 기준이 되는 Attribute(속성)이다. 튜플: 릴레이션을 구성하는 각각의 행, 속성의 모임으로 구성된다. 파일 구조에서는 레코드와 같은 개념. 튜플의 수 = 카디널리티(Cardinality) = 기수 = 대응수 1. Candidate Key (후보키) 릴레이션을 구성하는

[CS Study] - 6주차
* HTTP와 HTTPS의 차이점 DNS round robin 방식 Blocking/Non-blocking & Synchronous/Asynchronous Load Balancing CORS HTTP와 HTTPS의 차이점 HTTP (HyperText Transfer Protocol) > 인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTP는 HyperText Transfer Protocol의 줄임말로, 서버와 클라이언트간에 데이터를 주고 받는 프로토콜이다. 처음에는 문서간에 링크를 통해 연결할 수 있는 HTML을 전송하는 프로토콜로 시작했지만, 지금은 텍스트, 이미지, 영상, JSON 등 거의 모든 형태의 데이터를 전송할 수 있고

[CS Study] - 5주차
* OSI 7계층 GET, POST 방식의 차이점 TCP 3-way-handshake / 4-way-handshake TCP와 UDP의 차이점 TCP/IP 흐름제어 & 혼잡제어 7계층으로 나누는 이유 계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있기 때문이다. 흐름을 한눈에 알아보기 쉽고, 사람들이 이해하기 쉽고, 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장비 및 소프트웨어를 건드리지 않고도 이상이 생긴 단계만 고칠 수 있기 때문이다. OSI 7계층 >

[CS Study] - 4주차
* 페이지 교체 알고리즘 캐시의 지역성 파일 시스템 들어가기 전에 가상 메모리는 요구 페이지 기법을 통해 필요한 페이지만 메모리에 적재하고 사용하지 않는 부분은 그대로 둔다. 하지만 필요한 페이지만 올려도 메모리는 결국 가득 차게 되고, 올라와있던 페이지가 사용이 다 된 후에도 자리만 차지하고 있을 수 있다. 따라서 메모리가 가득 차면, 추가로 페이지를 가져오기 위해서 안쓰는 페이지는 out하고, 해당 공간에 현재 필요한 페이지를 in 시켜야 한다. 여기서 어떤 페이지를 out 시켜야 할 지 정해야 한다. 이때 out되는 페이지를 victim page라고 부른다. 기왕이면 수정이 되지 않는 페이지를 선택해야 좋다. 만약 수정되면 메인 메모리에서 내보낼 때, 하드디스크에서

[CS Study] - 3주차
* Semaphore / Mutex IPC (Inter Process Communication) 가상 메모리 페이징 / 세그멘테이션 들어가기 전에 들어가기 전에 semaphore에 대해 간단하게 알아보도록 하겠다. Semaphore는 깃발이라는 뜻이다. 옛날에는 기찻길에서 깃발 표식으로 파란색이 걸려있으면 지나가도 되고 빨간색이 걸려있으면 섰다가 다른 기차가 지나가면 지나가게끔 하는 용도로 깃발을 사용했었다. 이 깃발을 semaphore라고 부른다. 그림에서처럼 겹치는 기찻길 부분이 두 기차가 공유

[CS Study] - 2주차
* 인터럽트, 시스템 콜 CPU 스케줄러 동기와 비동기의 차이 Dead Lock/Race Condition 들어가기에 앞서 (싱글 코어 CPU에서) 프로세스는 항상 돌아가진 않는다. 한 번에 하나의 프로세스만 동작하는데, 이 과정에서 I/O가 발생하거나, 프로그램에 문제가 생기면 프로세스는 잠시 동작을 멈춰야 하는데, 이것을 누가 처리 해야 할까? 또한, 위에서 언급한 I/O는 실제로는 일반 프로그램이 하는 것이 아니라, 운영체제 측에서 담당해야 하는 것이다. 그런데 왜 우리는 지금까지 그런 것을 모르고 프로그래밍을 했던 것일까? 이 질문들에 대답을 하기 위해선, 우리는 인터럽트와 시스템 콜에 대해 알아야 한다. 운영체제의 동작 과정 - Dual Mode 현대 운영체제의 대부분은 Dual Mode로 작동한다. 이는 운영체제가 서로 다른 두 개의 모드로 돌아가는 것을 의미한다. 사용자 모드 (User Mode): 일반적인 응용프
CS
* 프로세스와 스레드의 차이 프로세스 주소 공간 PCB/Context Swiching 스케줄러의 종류 프로세스와 스레드의 차이 프로세스: 운영체제로부터 자원을 할당받은 작업의 단위 스레드: 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 프로세스(Process) 프로세스라는 명칭은 낯설 수 있는데, 프로그램은 친숙하리라 생각한다. 우리가 흔히 말하는 프로그램이 실행되면 프로세스 인스턴스가 생성된다. 인스턴스가 생성된다는 의미는 프로그램 실행에 필요한 내용이 컴퓨터 메모리(Ram)에 적재된다는 뜻이다. 일반적으로 프로세스와 프로그램을 같은 개념으로 이야기할 때가 많다. 하지만 엄밀히 따지면 이 둘은 다른 개념이다. 스레드(Thread) 
멀티 Thread프로그래밍에서의 동기화 개념 및 구현
Critical Section(임계영역)과 Semaphore critical section은 두 개 이상의 thread가 동시에 접근할 수 없는 영역 semaphore 는 특별한 형태의 시스템 객체이며 get/release 두 개의 기능이 있음 한순간에 오직 하나의 Thread만이 Semaphore를 얻을 수 있고, 나머지 Thread들은 대기상태(일종의 경쟁상태)가 됨 Semaphore를 얻은 Thread만이 Critical Section에 들어갈 수 있으며, 해당 Thread가 Shared Resource를 이용해 작업을 진행                   
Java에서 Thread만들기
Thread란? 하나의 프로세스가 갖게 되는 실제 작업 수행 단위 > 1. 프로그램이 실행되면 OS로부터 메모리를 할당받아 Process상태가 된다 > 2. 하나의 프로세스를 CPU가 점유하면서 실질적으로 우리가 컴퓨터내 여러 프로그램을 사용할 수 있는 것이다 > 3. CPU가 하나의 프로세스를 점유할 때, 1개 이상의 Thread라고 하는 작업 단위에 의해서 프로세스가 구성되고 각 스레드로 하여금 하나의 작업을 처리하게 된다                         ∴ 여러 작업이 동시에 실행할 수 있는 효과! 
DATA STRUCTURE - 3. Sorting
빅오 표기법 정렬 수행시간 #표 Sort Algorithm Explanation 1) 선택 정렬(Selection Sort) 2) 거품 정렬(Bubble Sort) 3) 삽입 정렬(Insertion Sort) 4) 퀵 정렬(Quick Sort) 5) 병합 정렬(Merge Sort) *안정정렬(Stable Sort) VS 불안정정렬(Unstable Sort) (파이썬 알고리즘 인터뷰 p.487): *안정 정렬 : 중복된 값을 입력된 순서와 동일하게 정렬 *불안정 정렬 : 중복된 값을 입력된 순서와 동일하지 않게 정렬

DATA STRUCTURE - 2. (Binary) Tree & BST
트리(Tree) > - 각 노드가 m개 이하의 자식을 가지고 있으면, m-ary 트리(=다항트리, 다진트리)라고 하는데 이때, m=2일 때 즉, 모든 노드의 차수가 2개이하일 때는 특별히 이진트리라고 구분 > - 계층적(hierarchical) 관계에 있는 원소들을 나타내기에 편리한 추상 데이터 타입(Abstract Data Type) > - 가장 널리 사용되는 트리 자료구조 : 이진트리, 이진탐색트리(Binary Search Tree) 1. 이진트리의 구조 항상 루트노드부터 시작하여 최대 2개의 자식노드를 가짐 부모노드와 자식노드는 간선(Edge, Link)로 연결됨 > 현재 노드가 1 일때 , 트리의 높이(Height) : 루트노드(8) ~ 리프노드 까지의 최대 길이 = 3
CSR, SSR, PSSR
CSR (Client Side Rendering) react, vue 등의 SPA(Single Page Application)에서 사용되는 방식이다. 데이터를 제외한 화면을 그리는 코드들이 프론트 서버에서 다운받아진다. 클라이언트의 요청이 발생하면 필요한 데이터만 백엔드 서버에 요청해서 받아온다. 이후로도 계속 필요한 데이터만 갱신하며 화면을 구성하고, 화면 끊김 현상이 발생하지 않는다. 최초에 화면을 그리는 코드들을 js파일에 한번에 번들로 전달받아오기 때문에 이 파일을 처음에 다운받는데 시간이 걸린다.(초기 로딩 속도가 느리다.)code splitting으로 다소 해결이 가능하다.) 초기에 데이터가 존재하지 않기 때문에 검색 봇이 해당 페이지를 빈 페이지로 착각하여 검색 엔진 최적화(SEO)에 취약할 수 있다. (구글 검색 봇 예외) 장점 서버 부하가 적다. 초기 javascript가 로드되면 컨텐츠를 비동기적으로 로드할 수 있다. 단점 초기