반응형

Computer Science 30

[OS] 운영체제 스케줄링

운영체제 스케줄링의 개념과 용어 운영체제 스케줄링이란 시스템의 목표를 달성할 수 있도록 프로세서를 할당하는 일련의 과정을 이야기 합니다. 즉 어떤 프로세스가 cpu를 사용할지를 결정하는 것입니다. 스케줄링 알고리즘은 여러가지가 있는데 이러한 알고리즘의 성능의 기준은 아래와 같습니다. 프로세서 사용률 : 높은게 좋음. 단위 시간당 처리율 : 높은게 좋음. 반환 시간 : 작업이 시스템에서 완전이 끝날 때까지 걸리는 시간. 짧은게 좋음. 대기시간 : ready 큐에서 기다렸던 시간. 짧은게 좋음. 아래는 운영체제 스케줄링에서 사용되는 용어들과 그에 대한 설명들 입니다. PCB (processor control block) 특정 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자체 자료구조입니다...

Computer Science/OS 2020.03.23

[Database] 트랜젝션

트랜잭션이란? 한번 쿼리를 실행하면 모두 수행되거나, 모두 수행되지 않는 작업 수행의 논리적인 단위를 이야기 합니다. 트랜잭션의 4가지 특징이란? 트랜잭션에는 4가지 특징이 있습니다. 이를 앞글자만 따서 ACID라고 부릅니다. acid는 정보처리기사 시험이나 면접에서도 자주 출제되는 중요한 특성이니 꼭 기억해두는 것이 좋습니다. Atomicity(원자성) 어떤 트랜젝션 안의기능들이 모두 수행되거나 모두 수행되지 않아야 합니다. Consistency(일관성) 트랜젝션 발생 전후로 DB의 일관성이 깨지지 않아야 합니다. Isolation(독립성) 각 트랜젝션은 독립적으로 이루어져 서로에게 간섭할 수 없습니다. Durability(지속성) 트랜젝션 발생 후 디비의 변경 사항은 지속적으로 유지되어야 합니다. c..

[Network] TCP 신뢰성의 특징: 흐름제어 / 혼잡제어

TCP의 가장 큰 특징은 신뢰성입니다. 신뢰성이란 중간에 데이터가 유실되지 않는 것을 이야기하는데 이러한 신뢰성을 구성해주는 대표적인 방법으로 흐름제어와 혼잡제어가 있습니다. 흐름제어 먼저 흐름제어에 대해 알아보겠습니다. 흐름제어란 송신 측과 수신 측의 데이터 처리 속도 차이를 해결하기 위한 기법입니다. 수신측이 송신측 보다 처리 속도가 빠르다면 문제가 될 것이 없지만, 만약 송식 측이 수신 측보다 전송 속도가 빠르게 되면 전송된 패킷은 수신측의 제한된 저장 용량을 초과하여 이후에 도착하는 데이터가 손실될 수 있습니다. 만약 데이터가 손실 된다면 추가적으로 응답과 데이터의 재전송이 이루어져야 하기 때문에 리소스의 낭비로 이어질 수 있습니다. 이러한 위험을 줄이기 위해 송신측의 데이터 전송량을 수신측의 처..

[Network] TCP / UDP

TCP TCP란 인터넷 상에서 데이터를 메세지 형태로 보내기 위해서 ip와 함께 사용하는 프로토콜 입니다. TCP는 아래와 같은 특성을 가지고 있습니다. 1. 연결형 서비스 입니다. 2. 높은 신뢰성을 가지고 있습니다. 3. 3 way-hand-shaking으로 연결하고 4way-handshaking으로 해제합니다. 4. UDP보다 속도가 느립니다. 3-way handshaking 1. 클라이언트에서 Server로 연결 요청을 하기위해 SYN 데이터를 보냅니다. 2. 서버에서 해당 포트를 LISTEN하고 있는 상태로 SYN 데이터를 받고, 정상적으로 데이터를 받았다는 대답(ACK)와 client도 포트를 열어달라는 SYN데이터를 함께 보냅니다. 3. 클라이언트에서는 SYN + ACK를 받고 ESTABLI..

[Tech] Protocol Buffer: Serialization에 관하여, 모두가 JSON을 쓴다고 하여 JSON만이 정답일까?

이 포스팅은 우연히 google cloud api를 사용하던 중 response 객체가 json 타입이 아니라는 사실을 알게 되면서, '왜 당연하듯 모두가 json객체를 사용하는가?'라는 의문에서부터 시작된 공부이다. 이 블로그의 모든 포스팅이 그러하듯 먼저 Serialization(직렬화)가 무엇인지부터 시작해보도록 하겠다. Serialization란? 직렬화란 시스템 내부에서 사용하는 객체를 다른 시스템에서도 사용할 수 있도록 바이트(byte)형태로 데이터를 변환하는 기술을 뜻한다. (반대로 다시 객체 형태로 변환하는 기술은 역직렬화라고 부른다.) 이를테면 Java에서 사용하던 객체 방식과 ruby on rails나 Node.js에서는 형식이 다를 수 있기 때문에 모두가 같은 데이터를 사용할 수 있도..

[Tech] JWT(Json Wet Token)이란?

JWT 이전에는 세션 방식을 이용해서 로그인 기능을 구현했지만, 최근엔 JWT라는 토큰 기반의 인증 방식이 나오면서 웹과 모바일에서 대부분의 인증이 JWT로 구현되고 있다. JWT(Json Wet Token)는 클레임 토큰 기반 인증 방식으로 인증에 필요한 정보를 암호화시켜 토큰 body에 저장함으로써 클라이언트가 증명서처럼 사용한다. 세션과 비교 하였을 때 JWT JWT는 세션과 비교하였을 때 무상태(stateless)와 확장성(scalability)의 이점이 있다. 토큰은 클라이언트에서 저장하기 때문에 서버측에서는 stateless하며, 요청이 왔을 때 서명이 옳바른지만 확인하면 되므로 비저장의 이점을 지닌다. 또한 msa와 같은 서버가 여러대로 분리되어 사용되고 있다면 어떤 유저가 로그인 햇을 때 ..

[Database] RDB(relational database)에서 테이블간의 관계 (1:1, 1:N, N:M)

관계형 데이터베이스는 두 entity끼리 관계를 맺을 수 있기 때문에 이러한 이름을 가지게 되었다. 따라서 rdb를 사용하다 보면 foreign key를 이용하여 테이블 간의 관계를 정의해야 하게 되는데, 이러한 관계에는 아래와 같은 유형이 있다. 1 : 1 (일대일) 1 : N (일대다) N : M (다대다) SNS(Social network service) 어플리케이션의 데이터베이스를 예를 들어보겠다. 사용자는 자신의 정보를 담고 있는 테이블과의 관계만 존재하므로 1 : 1 관계라고 할 수 있다. 반대로 N : M 관계로는 게시글 테이블과 해시태그(#)를 예로들 수 있다. 마지막으로는 게시글 하나에 붙는 여러개의 댓글들을 1 : N 관계라고 볼 수 있다.

[Database] ORM(Object-relational Mapping)이란?

ORM이란? ORM(Object-relational Mapping)이란 OOP 간의 호환되지 않는 데이터를 변환하는 프로그래밍 기법으로 쉽게 말해 객체로 관계형 데이터베이스를 관리하는 기술이다. 대부분의 개발 언어 platform마다 제공되고 있으며, 대표적으로 spring에는 JPA가, node의 sequalize, 또 Django에는 orm이 내장되어있다. 기존 SQL 방식의 문제점 기존의 SQL로 데이터베이스를 관리하던 때의 문제점은 계속되는 반복되는 코드의 문제점이 있었고, SQL을 확인하기 전까지는 Entity를 신뢰할 수 없다는 불편함이 있었다. 또한 SQL의 의존적인 개발을 피할 수 없고, 계층 분할의 어려움이 있었다. ORM을 사용 했을 때의 장점 객체 관계 매핑(Object-relatio..

[Tech] MSA(Microservice Architecture)란?

Monolithic Architecture MSA에 대해 이해하기 위해서는 먼저 그에 상반된 모놀리틱 아키텍처에 관해 이해할 필요가 있다. 모놀리틱 아키텍처란 전통적인 소프트웨어 아키텍처 스타일로써 하나의 서버에 UI와 비즈니스 로직, 그리고 데이터베이스까지 베포 되는 것으로 하나의 서비스 또는 에플리케이션이 하나의 거대한 아키텍처로 구성되는 것을 의미한다. Monolithic 스타일로 아키텍처를 구성하면 하나의 중앙 관리적인 구조로써 통합된 서비스를 구축하기 때문에 통제가 편리하고, 단순한 아키텍처 구조로 인해 초기 개발의 용이성이 있지만 아키텍처의 크기가 커짐에 따라서 확장성에 대한 복잡성이 심각하게 증가한다. Microservice Architecture MSA(Microservice Archite..

[Network] Get방식의 Query string방식과 Path value방식

GET방식은 http method 중에서 url을 통해 정보를 전달하는 방식이다. 그런데 이러한 get을 사용하는 방법에는 두 가지가 있는데 그것에 대해 알아보겠다. 예를 들어 우리가 sns 서비스를 개발하고 있다고 가정해보자. 그렇다면 서비스는 필연적으로 user의 정보를 컨트롤해야 할 것이다. 아래는 그러한 예시들을 query방식과 params방식으로 구분하여 예시를 작성하였다. Query String 만약 우리가 user의 id 값을 get 방식으로 받아와야할 때 이러한 방식으로 사용할 수 있을 것이다. /users?id=123 그럼 우리는 백엔드에서 id값을 받아올 수 있게 된다. Node.js의 경우 해당 값을 아래의 코드와 같이 데이터를 받아올 수 있다. const {id} = req.quer..

반응형