스레드 프로세스는 두가지 특정 자원, 제어로 구분할 수 있는데 '제어'만 분리한 실행 단위를 '스레드'라고 한다. 프로세스 하나는 스레드 한 개 이상으로 나눌 수 있다. 스레드들은 프로세스의 직접 실행 정보를 제외한 나머지 프로세스 관리 정보를 공유한다. 스레드의 구조 스레드는 별도의 스택이 필요하고, 프로그램 카운터가 독립적이라서 같은 프로세스의 여러 스레드들이 동시에 코드의 동일한 부분이나 다른 부분을 실행할 수 있다. 스레드는 관련 자원과 함께 메모리를 공유할 수 있는데, 이 때문에 손상된 데이터나 스레드의 이상 동작을 고려해야한다. 응용 프로그램은 적어도 하나의 프로세스가 있고, 프로세스에는 스레드가 1개 이상 있다. 같은 프로세스의 스레드들은 동일한 주소 공간을 공유한다. (위 사진에서 스택을 ..
프로세스 일반적인 프로세스의 정의는 '실행중인 프로그램'이다. 프로그램이 실행중이라는 의미는 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태가 되었다는 것이다. 디스크 -> 메모리 (자신만의 메모리 영역(주소공간)이 있다는 의미) ▶ 프로그램이란 프로그램은 컴파일한 코드와 초기화 전역변수, 문자열과 문자열 상수 등 정적 데이터를 포함하는 정적인 개체다. 프로세스는 스택, 힙, 데이터, 코드 메모리 구조를 이루고, 프로그램 카운터나 레지스터처럼 현재 어떤 자원을 사용하는지 관련 정보가 들어있는 동적인 개체다. 프로세스 정의 정의 사용자 관점에서 프로세스 주소 공간을 가지고 실행하는 프로그램 시스템 관점에서 프로세스 실행중인 프로그램 프로세스는 프로그램 실행의 인스턴스도 된다. 예를들..
시퀀스의 개념 데이터의 '순서'를 뜻하며, 시퀀스를 객체로 사용하여 자동으로 증가하는 숫자로 사용한다. 시퀀스 생성 예시 CREATE SEQUENCE [이름] INCREMENT BY [증감숫자] START WITH [시작숫자] MINVALUE [최솟값] MAXVALUE [최대값] CYCLE OR NOCYCLE CACHE [숫자, 생략가능] OR NOCACHE ORDER OR NOORDER 위 옵션들을 하나씩 알아보자. 1) INCREMENT BY [증감숫자] 시퀀스에서 생성할 번호의 증가 값이다. 설정하지 않으면 default 1을 가진다. 2) START WITH [시작 숫자] 시퀀스의 시작값을 지정한다. 3) MINVALUE [최솟값] 시퀀스에서 생성할 번호의 최솟값을 지정한다. 4) MAXVALUE..
조인의 개념 - 두 개 이상의 테이블 들을 연결 또는 결합하여 데이터를 출력하는것 - JOIN은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이라고 할 수 있다. - 일반적인 경우 행들은 PRIMARY KEY(PK)나 FOREIGN KEY(FK) 값의 연관에 의해 JOIN이 성립된다. - 하지만 어떤 경우에는 이러한 PK, FK의 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다. Inner Join (내부 조인) 1) Equi Join (동등 조인) - 두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하는 경우에 사용된다. - 위 세타조인 중 비교연산자 = 를 사용한 조인이다. - 동등 조건에 해당하는 튜플을 반환한다. 예제 쿼리 SELECT 테이블1.칼럼명, 테이블2..
DB Lock Database는 여러 곳에서 동시에 접근할 수 밖에 없는 구조이다. 동시에 접근시 데이터가 오염될 가능성이 있기 때문이다. Database는 데이터의 일관성과 무결성을 유지하기 위해 Lock을 사용한다. 데이터의 일관성 : 어떤 데이터가 서로 모순 없이 일관되게 일치한다. 트랜잭션이 실행을 성공적으로 완료하면 모순 없이 일관성 있는 데이터베이스 상태를 보존한다. 데이터의 무결성 : 어떤 데이터의 값이 정확한 상태로, Database에 저장된 데이터의 일관성과 정확성을 유지하기위한 제약조건이다. Lock은 트랜잭션 처리의 순차성을 보장해주는 기능을 제공하며, 하나의 트랜잭션이 완벽하게 끝날때까지 다른 요청을 막는다. Lock의 종류 1) Shared Lock (=Read Lock) 공유락은..
기준 동기/비동기 작업 완료를 누가 신경 쓰는가? 1) 동기 : '호출한 함수'가 스스로 신경쓴다. 2) 비동기 : '호출된 함수 (callback 함수)' 가 신경쓰고, '호출한 함수'는 신경쓰지 않는다. 블로킹/논블로킹 호출되는 함수가 바로 return 되는가? 호출한 함수가 제어권을 넘겨주는가? 1) 블로킹 : '호출된 함수'가 자신의 작업을 모두 마칠 때까지 '호출한 함수'에게 제어권을 넘겨주지 않고 대기한다. 2) 논블로킹 : '호출된 함수'에게 제어권이 넘어가지않고, '호출한 함수'가 제어권을 가지고 계속해서 다른 일을 한다. 위 내용은 동기/비동기, 블로킹/논블로킹을 요약한 내용이다. 계속해서 동기, 비동기, 블로킹, 논블로킹을 자세히 살펴보자. 동기/비동기, 블로킹/논블로킹의 판단 기준은 ..
브라우저 URL 파싱 주소창에 devfunny.tistory.com URL을 입력했다. 어떤 일이 발생할까? 1) 브라우저가 해당 URL 구조를 해석한다. ** https://devfunny.tistory.com 1) protocol : https:// 2) url : devfunny.tistory.com 3) port : 443 (port는 생략이 가능하다. HTTP 요청일 경우 80, HTTPS의 요청일 경우 443으로 요청한다.) 2) HSTS (HTTP Strict Transport Secucrity) 목록을 조회한다. HTTPS 프로토콜로만 접속이 가능하도록 강제화하는 기능이다. 만약 HTTP 요청일 경우, HTTP 응답 헤더에 "String Transport Security" 라는 필드를 포함..
Memory Model High Address 메모리 구조에서 높은 주소 영역으로, Heap, Stack 이 포함된다. Low Address 메모리 구조에서 낮은 주소 영역으로, Data 영역, Code 영역이 포함된다. BSS/GVAR Data 영역이 BSS와 GVAR(Data) 영역으로 나눠진다. BSS 영역에는 초기화되지 않은 데이터가 저장되고, GVAR 영역에는 초기화된 데이터가 저장된다. * 영역이 BSS로 분리되는 이유는? 초기화된 데이터는 초기화되지 않은 변수와 다르게, 해당 값을 프로그램에 저장하고 있어야 한다. BSS 영역은 초기화되지 않은 데이터가 저장되기 때문에, 프로그램이 실행될때 영역만 차지하고 그 값을 프로그램에 저장하고 있을 필요가 없다. BSS 영역 변수들이 많아져도 프로그램..
CORS(Cross Origin Resource Sharing) CORS는 '교차 출처 리소스 공유'라는 이름으로, HTTP 헤더를 사용하여 한 출처(origin)에서 실행중인 웹 어플리케이션이 다른 출처(cross-origin)의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 정책이다. origin (=출처) https://test-a.com:80/member?idx=1 1) protocol : https:// 2) host : test-a.com 3) port : 80 4) path : /member 5) query string : ?idx=1 cross-origin (=다른 출처) - https://test-a.com:80/** - https://test-b.com:80/** ..
로드밸런서 (Load Balancer) 로드밸런싱(Load Balancing) 기술을 제공하는 서비스 또는 컴퓨터 네트워크 기술의 일종이다. 클라이언트와 서버 또는 네트워크 허브 사이에 위치한다. Client [Load Balancer] Server 즉, 위의 표와같이, 클라이언트로부터의 여러 요청들로 인해 서버에 가해지는 부하를 분산시켜주는 장치다. 네트워크 로드밸런서를 알기 전, '스위치'에 대한 개념부터 알아보자. 스위치 스위치는 데이터 링크 계층에서 동작하는 '스위칭 허브'라고도 부른다. 스위치 내부에 있는 MAC 주소 테이블(MAC address table)가 스위치의 포트 번호와 해당 포트에 연결되어 있는 컴퓨터의 MAC 주소를 저장하고있어, 브리지 테이블(bridge table)이라고도 한다..
전송계층 역할 네트워크 계층에서 다른 네트워크로 데이터를 전송하려면 라우터가 필요하고 라우터의 라우팅 기능을 사용하여 전송할 수 있다. 라우팅 정보가 잘못될 수도 있고, 많은 라우터를 경유하는 도중에 라우터에 문제가 생기거나 패킷이 손상된다면 데이터를 전송하더라도 목적지에 도착하지 못할 수 있다. 전송계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다. 전송계층에는 오류를 점검하는 기능이 있다. 오류가 발생하면 데이터를 재전송하도록 요청한다. 데이터가 어떤 애플리케이션에서 사용하는 데이터인지 판단한다. 전송계층에서는 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능이 있다. 연결형 통신과 비연결형 통신 (1) 연결형 통신 [TCP : Transmission Control Proto..
데이터 링크 계층의 역할과 이더넷 랜에서 데이터를 주고받으려면 데이트 링크 계층의 기술이 필요하다. 데이터 링크 계층은 네트워크 장비 간에 신호를 주고받는 규칙을 정하는 계층이다. 랜에서 데이터를 정상적으로 주고받기 위해 필요하다. 이더넷 그 규칙중 대표적인것이 ‘이더넷‘ 이다. 이더넷은 허브와 같은 장비에 연결된 컴퓨터와 데이터를 주고받을때 사용한다.허브를 사용했을때에는 모든 포트에 들어오는 데이터를 그대로 보내므로, 컴퓨터 여러대가 동시에 데이터를 보내면 ‘충돌’이 일어날 수 있다. 이더넷은 여러 컴퓨터가 동시에 데이터를 전송해도 충돌이 나지 않는 구조로 되어있다. 데이터가 보내는 시점을 조절한다. 이더넷에서 이처럼 시점을 늦추는 것을 ‘CSMA/CD‘ 라고 한다. CSMA/CD (Carrier Se..