Computer Science/Programming 13

Interpreter와 Compiler 인터프리터와 컴파일러는 둘 다 고급 프로그래밍 언어로 작성된 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 도구입니다. 그러나 이 두 가지 도구는 코드를 실행하는 방식과 처리 과정에서 차이가 있습니다. 인터프리터(Interpreter) 인터프리터는 소스 코드를 한 줄씩 읽고, 해석하며, 실행합니다. 즉, 코드를 기계어로 미리 변환하지 않고 실행 시점에 해석하는 방식입니다. 이로 인해 인터프리터는 디버깅이 쉽고 코드 수정이 빠르지만, 실행 속도가 상대적으로 느립니다. 파이썬, 루비, JavaScript 등이 인터프리터 언어의 예입니다. 컴파일러(Compiler) 컴파일러는 소스 코드를 전체를 읽어 분석한 후, 기계어로 변환하는 과정을 거칩니다. 이렇게 생성된 기계어로 된 실행 파일은 원래의 소스 코드와.. Computer Science/Programming 2023. 4. 21.
What is GraphQL 기존의 RESTFul API 생태계에서는 보통의 경우 Server와 Client의 통신이 있어서 Server에 Template하게 구현된 API에 맞게 특정 EndPoint를 Client가 호출하여 데이터를 가져옵니다. 원하는 결과를 얻기 위해서 한번 또는 그 이상의 API 통신을 통해 원하는 데이터 결과를 도출할 수 있습니다. 이는 성능에 부정적인 영향을 미칠 수 있는 Over-Fetch 또는 Under-Fetch로 이어질 수 있습니다. 이러한 한계를 극복하기 위해 등장한 것이 GraphQL입니다. GraphQL은 고객이 한 번의 요청으로 필요한 데이터만 요청할 수 있게 함으로써 이러한 한계를 극복하기 위해 개발되었습니다. 이는 사용 가능한 데이터와 작업을 정의하는 강력한 유형의 Schema와 Clie.. Computer Science/Programming 2023. 2. 16.
Process & Thread Process Process란 메모리를 할당받아 컴퓨터에서 연속적으로 실행중인 Program이라고 할 수 있습니다. OS(Operating System)로부터 시스템 자원을 할당 받습니다. Process는 독립된 메모리 영역에 Code, Data, Stack, Heap 구조를 가지고 있습니다. Process는 최소 1개의 Thread를 가지고 있습니다. (Main Thread) Process가 다른 Process의 자원에 접근하려면 IPC와 같은 통신을 이용할 수 있습니다. Thread Process 내에서 실행되는 흐름의 단위를 의미합니다. Process로부터 자원을 할당 받습니다. Process 내에서 Stack만을 따로 할당받고 Code, Data, Heap 영역은 공유합니다. 공유 자원이 존재하기.. Computer Science/Programming 2023. 2. 7.
초보자를 위한 Linux 기초 명령어 path 경로입니다. ~는 home directory를 의미합니다. .는 자기 자신을 의미하고, ..는 상위 directory를 의미합니다. ./donghwan 는 현재 directory에서 donghwan이라는 directory를 의미합니다. ../donghwan 는 현재 directory의 상위 directory에 있는 donghwan이라는 directory를 의미합니다. cd change directory를 의미 합니다. path와 함께 사용됩니다. cd ~ 또는 cd ./donghwan 또는 cd ../donghwan 등등으로 사용됩니다. 가장 많이 사용되는 명령어 중 하나입니다. ls list directory contents에서 유래된 명령어입니다. 현재 위치 또는 특정 path에 존재하는 모.. Computer Science/Programming 2022. 9. 25.
Base64란? 8bit binary 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념입니다. Base64를 글자 그대로 번역하면 '64진법' 이라는 뜻입니다. 64는 2^6 이며, 2의 제곱수들에 기반한 진법들 중에서 화면에 표시되는 ASCII문자들을 써서 표현할 수 있는 가장 큰 진법입니다. 128 진법에는 128개의 기호가 필요한데 ASCII문자들은 128개가 되지 않습니다. a-z, A-Z, 0-9 62개의 문자와 나머지 2개 문자를 어떤 기호를 쓰느냐의 차이만 있지만 MIME에서 정의한 나머지 두개의 문자열은 +와 /이며, =는 끝을 알리는 코드로 쓰입니다. @Base64를 사용하는 .. Computer Science/Programming 2022. 9. 19.
암호화 암호화는 비밀을 다루는 방법이라고 볼 수 있습니다. 암호화는 인류가 기록을 시작한 이래로 다양한 유형으로 존재해 왔습니다. 고대 그리스인들은 '스키테일'이라는 도구를 사용해 메시지를 암호화했고, 제2차 세계대전에서는 독일이 그 유명한 '에니그마' 장비를 사용해 군사적/외교적 통신을 보호 했습니다. 특징 기밀성(Confidentiality) : 암호화된 내용을 알 수 없어야 합니다. 무결성(Integrity) : 내용이 원본과 같다는 것을 확신할 수 있습니다. 가용성(Availability) : 권한이 있는 사람(허가 받은 사람)만 정보에 접근할 수 있어야 합니다. 암호화는 단순히 볼 수 없다고 완성되지 않습니다. 위와 같은 3가지의 기밀을 지키기 위한 요소를 가지고 있어야 합니다. 보호되지 않은 데이터를.. Computer Science/Programming 2022. 9. 15.
[Programming] Process & Thread 프로세스란? 프로그램은 하드디스크 같은 저장장치에 보관되어 있고 폰노이만 구조에서 프로그램이 실행된다는 것은 해당 코드가 메모리에 올라와서 작업이 진행된다는 의미입니다. 프로그램은 저장장치에 저장되어 있는 정적인 상태이고, 프로세스는 실행을 위해 메모리에 올라온 동적인 상태입니다. 쉽게 말해, 프로세스란 실행중인 프로그램입니다. 하나의 CPU 즉 프로세서는 한 순간에 하나의 프로세스만 실행할 수 있습니다. 하지만 우리는 동시에 여러 프로그램을 사용합니다. 이것은 운영체제가 엄청나게 빠르게 CPU가 실행할 프로세스를 교체하고 있기 때문에 동시에 실행되는 것이 아니라 동시에 실행되는 것처럼 보이는 것입니다. 프로세스의 특징 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 (실행중인 프로그램) 메모리에 올.. Computer Science/Programming 2021. 9. 29.
[Docker] VM과 Container Virtual Machine Host OS위에 Guest OS를 가상화하는 방식입니다. 사용법이 간단하지만 각 가상 머신마다 전용 운영 체제가 있기때문에 가상머신에 구축된 애플리케이션을 실행할 때 메모리 사용량이 필요 이상으로 많아져 가상 머신이 호스트에 필요한 리소스를 모두 사용할 수 있습니다. 가상머신이 Host하는 애플리케이션과 함께 전체 운영체제와 관련 도구도 포함하기 때문입니다. 또한 운영 체제를 업데이트하거나 패치할 경우 기존 컴퓨터를 하나씩 업데이트해야 하고 각 게스트 OS를 개별적으로 패치해야 합니다. 하지만 Host OS와 Guest OS가 완벽하게 격리하기 때문에 강력한 보안 경계가 필요할 때 유용합니다. Container VM과 같이 가상화하는 방식은 무겁고 성능 문제가 발생하기에 프.. Computer Science/Programming 2021. 9. 25.
Web Server와 Web Application Server ( Static Pages / 정적 웹 페이지 / Dynamic Pages / 동적 웹 페이지 / 웹 서버 / 웹 앱 서버 / WAS / Container / Servlet / Web Container / Servlet Container) Static Pages (정적 웹 페이지) 저장된 그대로 사용자에게 전달되는 웹 페이지입니다. 서버에 저장된 데이터가 변경되지 않는 한 사용자는 고정된 웹 페이지를 보게 됩니다. 정적 웹 페이지들은 업데이트를 전혀 하지 않거나 거의 할 필요가 없는 내용에 적절합니다. 저장된 데이터만 보여줄 수 있어 서비스가 한정적입니다. 삽입/수정/삭제 등의 작업이 모두 수동적이므로 관리가 힘듭니다. Dynamic Pages (동적 웹 페이지) 서버가 사용자의 요청에 대하여 데이터를 가공한 후 생성되는 웹 페이지입니다. 사용자의 상황, 시간, 요청 등에 따라 달라지는 웹 페이지를 보게 됩니다. 같은 페이지라도 사용자마다 다른 결과의 웹 페이지를 볼 수 있습니다. 웹 사이트의 구조에 따라 삽입/수정/삭제 등의 작업이 용이.. Computer Science/Programming 2021. 9. 17.
Clean Architecture Robert C. Martin는 책에서 설계적인 측면에서 좋은 소프트웨어 설계는 필요한 시스템을 만들고 유지보수하는데 투입되는 비용을 최소화하는데 있다고 이야기 합니다. 좋은 소프트웨어 시스템은 깔끔한 코드로부터 시작합니다. 좋은 아키텍쳐를 정의하는 원칙으로 SOLID 원칙을 들고 있습니다. SOLID 원칙의 목적은 중간(모듈) 수준의 소프트웨어 구조가 변경에 유연하며, 이해하기 쉽고, 많은 소프트웨어 시스템에 사용될 수 있는 컴포넌트의 기반이 되도록 하는데 있다고 합니다. #정책# 좋은 아키텍쳐의 목표는 시스템에서 정책을 가장 핵심적인 요소로 식별하고, 동시에 세부사항은 정책에 무관하게 만들 수 있는 형태로 구축하는 것이라고 이야기 합니다. 예를 들자면, 개발 초기에 데이터베이스가 어떤 데이터베이스인지.. Computer Science/Programming 2021. 8. 31.