
TCP (흐름제어/혼잡제어) TCP 통신이란? 네트워크 통신에서 신뢰적인 연결방식 TCP는 기본적으로 unreliable network에서, reliable network를 보장할 수 있도록 하는 프로토콜 TCP는 network congestion avoidance algorithm을 사용 reliable network를 보장한다는 것은 4가지 문제점 존재 손실 : packet이 손실될 수 있는 문제 순서 바뀜 : packet의 순서가 바뀌는 문제 Congestion : 네트워크가 혼잡한 문제 Overload : receiver가 overload 되는 문제 흐름제어/혼잡제어란? 흐름제어 (endsystem 대 endsystem) 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법 Flow Co..

프로세스의 주소 공간 프로그램이 CPU에 의해 실행됨 → 프로세스가 생성되고 메모리에 **'프로세스 주소 공간'**이 할당됨 프로세스 주소 공간에는 코드, 데이터, 스택으로 이루어져 있다. 코드 Segment : 프로그램 소스 코드 저장 데이터 Segment : 전역 변수 저장 스택 Segment : 함수, 지역 변수 저장 왜 이렇게 구역을 나눈건가요? 최대한 데이터를 공유하여 메모리 사용량을 줄여야 합니다. Code는 같은 프로그램 자체에서는 모두 같은 내용이기 때문에 따로 관리하여 공유함 Stack과 데이터를 나눈 이유는, 스택 구조의 특성과 전역 변수의 활용성을 위한 것! 프로그램의 함수와 지역 변수는, LIFO(가장 나중에 들어간게 먼저 나옴)특성을 가진 스택에서 실행된다. 따라서 이 함수들 안에..

SQL과 NoSQL의 차이 웹 앱을 개발할 때, 데이터베이스를 선택할 때 고민하게 된다. MySQL과 같은 SQL을 사용할까? 아니면 MongoDB와 같은 NoSQL을 사용할까? 보통 Spring에서 개발할 때는 MySQL을, Node.js에서는 MongoDB를 주로 사용했을 것이다. 하지만 그냥 단순히 프레임워크에 따라 결정하는 것이 아니다. 프로젝트를 진행하기에 앞서 적합한 데이터베이스를 택해야 한다. 차이점을 알아보자 SQL (관계형 DB) SQL을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색 할 수 있음 관계형 데이터베이스에는 핵심적인 두 가지 특징이 있다. 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다. 데이터는 관계를 통해 여러 테이블에 분산된다. 데이터는 테이블에 레..

프로세스 & 스레드 프로세스(Process) : 프로그램을 메모리 상에서 실행중인 작업 스레드(Thread) : 프로세스 안에서 실행되는 여러 흐름 단위 기본적으로 프로세스마다 최소 1개의 스레드 소유 (메인 스레드 포함) 프로세스는 각각 별도의 주소공간 할당 (독립적) Code : 코드 자체를 구성하는 메모리 영역(프로그램 명령) Data : 전역변수, 정적변수, 배열 등 (초기화된 데이터) Heap : 동적 할당 시 사용 (new(), mallock() 등) Stack : 지역변수, 매개변수, 리턴 값 (임시 메모리 영역) 스레드는 Stack만 따로 할당 받고 나머지 영역은 서로 공유 하나의 프로세스가 생성될 때, 기본적으로 하나의 스레드 같이 생성 프로세스는 자신만의 고유 공간과 자원을 할당받아 사..
SQL Injection 해커에 의해 조작된 SQL 쿼리문이 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법 공격 방법 1) 인증 우회 보통 로그인을 할 때, 아이디와 비밀번호를 input 창에 입력하게 된다. 쉽게 이해하기 위해 가벼운 예를 들어보자. 아이디가 abc, 비밀번호가 만약 1234일 때 쿼리는 아래와 같은 방식으로 전송될 것이다. SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234"; SQL Injection으로 공격할 때, input 창에 비밀번호를 입력함과 동시에 다른 쿼리문을 함께 입력하는 것이다. 1234; DELETE * USER FROM ID = "1"; 보안이 완벽하지 않은 경우, 이처럼 비밀번호가 아이디와 ..

Array vs ArrayList vs LinkedList 세 자료구조를 한 문장으로 정의하면 아래와 같이 말할 수 있다. Array는 index로 빠르게 값을 찾는 것이 가능함 LinkedList는 데이터의 삽입 및 삭제가 빠름 ArrayList는 데이터를 찾는데 빠르지만, 삽입 및 삭제가 느림 좀 더 자세히 비교하면? 우선 배열(Array)는 선언할 때 크기와 데이터 타입을 지정해야 한다. int arr[10]; String arr[5]; 이처럼, array은 메모리 공간에 할당할 사이즈를 미리 정해놓고 사용하는 자료구조다. 따라서 계속 데이터가 늘어날 때, 최대 사이즈를 알 수 없을 때는 사용하기에 부적합하다. 또한 중간에 데이터를 삽입하거나 삭제할 때도 매우 비효율적이다. 4번째 index 값에 ..

Linked List 연속적인 메모리 위치에 저장되지 않는 선형 데이터 구조 (포인터를 사용해서 연결된다) 각 노드는 데이터 필드와 다음 노드에 대한 참조를 포함하는 노드로 구성 왜 Linked List를 사용하나? 배열은 비슷한 유형의 선형 데이터를 저장하는데 사용할 수 있지만 제한 사항이 있음 배열의 크기가 고정되어 있어 미리 요소의 수에 대해 할당을 받아야 함 새로운 요소를 삽입하는 것은 비용이 많이 듬 (공간을 만들고, 기존 요소 전부 이동) 장점 동적 크기 삽입/삭제 용이 단점 임의로 액세스를 허용할 수 없음. 즉, 첫 번째 노드부터 순차적으로 요소에 액세스 해야함 (이진 검색 수행 불가능) 포인터의 여분의 메모리 공간이 목록의 각 요소에 필요 노드 구현은 아래와 같이 데이터와 다음 노드에 대한..

배열 (Array) C++에서 사이즈 구하기 int arr[] = { 1, 2, 3, 4, 5, 6, 7 }; int n = sizeof(arr) / sizeof(arr[0]); // 7 1. 배열 회전 프로그램 기본적인 회전 알고리즘 구현 #include using namespace std; //왼쪽으로 한번 회전 void leftRotatebyOne(int arr[], int n){ int temp = arr[0], i; for(i = 0; i < n-1; i++){ arr[i] = arr[i+1]; } arr[i] = temp; } // d만큼 회전 void leftRotate(int arr[], int d, int n){ for(int i = 0; i < d; i++) leftRotatebyOne..

[TCP] 3 way handshake & 4 way handshake 연결을 성립하고 해제하는 과정을 말한다 3 way handshake - 연결 성립 TCP는 정확한 전송을 보장해야 한다. 따라서 통신하기에 앞서, 논리적인 접속을 성립하기 위해 3 way handshake 과정을 진행한다. 클라이언트가 서버에게 SYN 패킷을 보냄 (sequence : x) 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄 (sequence : y, ACK : x + 1) 클라이언트는 서버의 응답은 ACK(x+1)와 SYN(y) 패킷을 받고, ACK(y+1)를 서버로 보냄 이렇게 3번의 통신이 완료되면 연결이 성립된다. (3번이라 3 way handshake인 것) 4 way han..

7계층은 왜 나눌까? 통신이 일어나는 과정을 단계별로 알 수 있고, 특정한 곳에 이상이 생기면 그 단계만 수정할 수 있기 때문이다. 1) 물리(Physical) 리피터, 케이블, 허브 등 단지 데이터 전기적인 신호로 변환해서 주고받는 기능을 진행하는 공간 즉, 데이터를 전송하는 역할만 진행한다. 2) 데이터 링크(Data Link) 브릿지, 스위치 등 물리 계층으로 송수신되는 정보를 관리하여 안전하게 전달되도록 도와주는 역할 Mac 주소를 통해 통신한다. 프레임에 Mac 주소를 부여하고 에러검출, 재전송, 흐름제어를 진행한다. 3) 네트워크(Network) 라우터, IP 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능을 담당한다. 라우터를 통해 이동할 경로를 선택하여 IP 주소를 지정하고, 해당 ..
- Total
- Today
- Yesterday