Studies/Computer Science 10

[컴파일러 이론] Tokenizer, Lexer, Parser

[컴파일러 이론] Tokenizer, Lexer, Parser 컴파일러는 소스코드를 기계어로 바꿔주는 역할을 합니다. 이 때 구문분석 -> 최적화 -> 코드생성 -> 링킹 의 과정이 진행됩니다. 구문분석 과정에서 소스코드는 Tokenizer, Lexer, Parser 를 차례대로 지나가며 구문분석을 진행하게 되는데, 오늘은 이 부분에 대해 알아보도록 하겠습니다. Tokenizer Tokenizer 는 말 그대로 어떤 구문을 토큰화 하는 역할을 합니다. 여기서 토큰이란 어휘 분석의 단위를 뜻하며 단어, 단어구, 문자열 등 의미있는 단위로 정해집니다. 토큰은 어떤 요소들을 구조적으로 표현할 수 있도록 도와줍니다. Lexer Lexer 는 Tokenizer 로 인해 쪼개진 토큰들의 의미를 분석하는 역할을 합니..

[운영체제] 캐시 교체 정책

[운영체제] 캐시 교체 정책 & LRU 캐시 교체 정책에 대해 알아보기 전, 캐시에 대한 이해가 필요하신 분들은 아래 게시물을 참고하시면 좋을 것 같습니다. 2022.08.19 - [운영체제] 캐시 (Cache) 캐시의 용량은 매우 작기 때문에 캐싱되는 모든 데이터를 다 담아둘수가 없습니다. 그래서 새로운 데이터를 캐싱하기 위해서는 불필요한 데이터를 지워줘야 하는데, 불필요한 데이터를 나누는 기준을 캐시 교체 정책이라고 합니다. 캐시 교체 정책 캐시 교체 정책에는 크게 3가지가 있습니다. FIFO (First In First Out) Queue 와 같이 가장 먼저 들어간 데이터를 교체 구현은 간단하지만 교체가 잦을수도 있음 LFU (Least Frequently Used) 사용 횟수가 가장 적은 데이터를..

[운영체제] 캐시 (Cache)

[운영체제] 캐시 (Cache) 메모리 용량이 작을수록 파일을 저장하고 꺼내오는 속도는 더 빠릅니다. 그렇기 때문에 용량이 큰 저장장치는 속도가 느릴수밖에 없습니다. 하지만 메모리 용량이 크고, 속도가 빠른 두 가지 장점을 잡기에는 비용이 너무 많이 듭니다. 그래서 데이터 저장 공간은 속도와 용량 등 특성에 맞게 역할을 나눠서 사용하는데, 이를 메모리 계층 구조라고 합니다. 위 그림처럼 데이터 처리속도를 높이기 위해 자주 사용되는 데이터를 담아두고, 해당 데이터가 필요할 때 캐시에 접근합니다. 데이터 지역성 원리 (Principle of Locality) 파레토의 법칙은 원인 중 상위 20% 가 전체 결과의 80% 를 만든다는 법칙입니다. 이 법칙은 메모리에도 적용되는데요, 자주 쓰이는 데이터는 시간적 ..

[Linux] Linux & Unix

[Linux] Linux & Unix 운영체제는 컴퓨터 사용자와 하드웨어 간의 인터페이스로 다른 응용 프로그램들이 유용한 작업을 할 수 있는 환경을 제공합니다. 주로 PC 환경에서 많이 이용되는 운영체제는 Windows, macOS, 리눅스 등이 있고, 서버 환경에서 많이 이용되는 운영체제는 리눅스, 유닉스 등이 있습니다. 오늘은 그 중에서 리눅스에 대해 알아보도록 하겠습니다. Unix 리눅스는 유닉스를 기반으로 작성되었기 때문에 리눅스를 알기 전, 먼저 유닉스에 대해 간단하게 짚고 넘어가 보겠습니다. 유닉스는 범용 다중 사용자 방식의 시분할 운영체제로, 현대의 다양한 운영체제들 중 유닉스 기반인 제품들이 있습니다. 대표적으로 macOS 가 유닉스 기반으로 개발되었고, 아이폰에서 사용되는 iOS 또한 유..

[네트워크] 쿠키와 세션

[네트워크] 쿠키와 세션 현재 웹이나 모바일 환경에서 서버와 통신을 할 때 가장 많이 쓰이는 방식은 HTTP 입니다. HTTP 프로토콜은 Connectionless, Stateless 한 특성을 가지기 때문에 서버는 클라이언트가 누구인지 매번 확인해야합니다. 이러한 단점을 보완하기 위해 사용하는 것이 쿠키와 세션입니다. 먼저 간단하게 Connectionless 와 Stateless 가 무슨 뜻인지 살펴보겠습니다. Connectionless 비연결지향형 클라이언트의 요청 이후 서버가 그 요청에 알맞은 응답을 보낸 다음에 연결을 끊는 처리 방식 Stateless 클라이언트의 상태 정보를 가지지 않는 서버 처리 방식 연결을 끊는 순간 클라이언트와 서버 통신이 끝나며 상태정보는 유지하지 않음 HTTP 는 위와 ..

[네트워크] JSON & XML

[네트워크] JSON & XML 네트워크 통신을 구현하다 보면 JSON 이나 XML 이란 단어를 들어보신 적이 있을겁니다. 둘은 모두 데이터를 저장하고 교환하기 위한 표준이며, 오늘은 이 둘에 대해 알아보도록 하겠습니다. JSON 이란? JSON 은 Javascript Object Notation 의 약자로 데이터를 쉽게 저장하고 전달하기 위해 만들어진 텍스트 기반의 데이터 교환 표준입니다. XML 의 대안으로써 조금 더 데이터를 쉽게 교환하고 저장하기 위해 고안되었습니다. JSON 은 Javascript 를 확장하여 만들어졌기 때문에 Javascript 객체 표기법을 따르며, key-value 쌍을 가지고 있습니다. JSON 은 다음 예시와 같이 사용됩니다. { "language": [ { "name"..

[네트워크] TCP & UDP

[네트워크] TCP & UDP TCP 와 UDP 는 TCP/IP 의 데이터의 전달을 담당하는 전송 계층에서 사용되는 프로토콜입니다. TCP 와 UDP 는 모두 포트 번호를 이용하여 주소를 지정한다는 점과, 데이터 오류검사를 위한 체크섬이 존재한다는 공통점이 있지만 이보다 훨씬 많은 차이점을 가지고 있습니다. TCP (Transmission Control Protocol) TCP 는 클라이언트와 서버가 1:1 로 연결된 상태에서 데이터를 주고받는 연결 지향형 (Connection-Oriented) 프로토콜입니다. TCP 는 클라이언트와 서버의 연결을 위해 포트를 확인하고 이를 연결을 설정하기 위해 3번의 응답을 주고받는 과정인 3-way handshake 이라는 방식을 이용하고, 연결을 해제하기 위해서는 ..

[네트워크] RESTful, REST API

[네트워크] RESTful, REST API REST 는 REpresentational State Transfer 의 약자로 로이 필딩의 박사논문에서 최초로 소개되었습니다. 이는 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다. 로이 필딩은 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습이 안타까워 웹의 장점을 최대한 활용할 수 있는 아키텍쳐로 REST 를 발표했다고 합니다. REST 는 크게 3가지 항목으로 구성됩니다. 자원 (Resource) - HTTP URI (Uniform Resource Identifier) 를 통해 자원 명시 행위 (Verb) - HTTP Method (POST, GET, PUT, DELETE) 사용한 CRUD (Crea..

[네트워크] OSI 7계층

[네트워크] OSI 7계층 정보통신산업 초기에는 정보통신 업체들이 각자의 방법으로 장비를 개발해 제조사가 다르면 서로 통신이 불가능했습니다. OSI 7계층은 네트워크에서 통신이 일어나는 과정을 7단계로 분리한 것으로, 서로 다른 제조사 시스템 간의 호환성 문제 해결을 위해 iso 국제표준에 의해 재정되었습니다. OSI 는 Open System Interconnection 의 약자로, OSI 7계층을 준수하는 통신장비들은 서로 호환이 가능해집니다. 장단점 그렇다면 이를 7개의 계층 구조로 나타낸 이유가 있을텐데, 그 장단점에 대해 알아보겠습니다. 장점 네트워크 통신을 계층 구조로 나누다면 각 계층은 독립적인 역할을 할 수 있음 통신이 일어나는 과정을 이해하기 쉽고, 이를 단계별로 파악할 수 있게 됨 각 계..

[운영체제] 프로세스와 스레드 (Process & Thread)

프로세스 개념 프로세스는 메모리에 올라와 실행되고 있는 프로그램의 독립 객체를 말합니다. 우리가 프로그램을 실행시키면 프로세스 객체가 생성됩니다. 이는 프로그램 실행에 필요한 내용이 메모리 (RAM) 에 적재된다는 것을 의미합니다. 프로세스는 OS 로부터 시스템 자원을 할당받아 실행되는데, 이 때 할당받는 시스템 자원은 CPU 시간, 운영되기 위해 필요한 주소 공간, 메모리 영역 등이 있습니다. 특징 프로세스는 각각 독립된 메모리영역 (Code, Data, Stack, Heap) 을 할당받음 기본적으로 프로세스당 최소 1개의 스레드를 가지고 있음 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없음 한 프로세스가 다른 프로세스의 자원에 접근하려면 ..