전체 글

개발은 좋은데 뭘로 개발할까
CS/컴퓨터 네트워크

[컴퓨터 네트워크] 8. Application Layer (1) : 어플리케이션 계층 개요

인터넷을 사용하는 어플리케이션을 만들 때, 프로그래머는 Transport 계층이 제공하는 서비스 중 어떤 서비스를 사용해서 어플리케이션을 만들 것인지, 어떤 구조로 만들 것인지만 결정하면 된다. 어플리케이션 밑에 있는 라우터, 스위치 같은 core device의 동작에 대해서는 신경쓰지 않아도 된다. Application Design Paradigm 네트워크 어플리케이션을 만들 때 사용할 수 있는 디자인 패러다임으로 크게 client - server 패러다임과 peer to peer 패러다임이 있다. client - server paradigm 데이터를 요구하는 클라이언트와 데이터를 제공하는 서버로 역할을 구분하는 패러다임이다. 서버는 항상 켜져있는 컴퓨터(host)이고, 고정된 IP주소를 가지고 있다...

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 7. Protocol layers

이번 글에서는 네트워크 5계층과 프로토콜에 대해 정리하고자 한다. 인터넷은 매우 복잡하고 거대한 개념이다.이 개념을 그냥 구현하려고 한다면 매우 복잡하고 거대하기 때문에 힘든일이 될 것이다.그래서 이 거대한 개념을 보다 작은 단위의 개념으로 나눈다음, 이 작은 단위의 개념을 서로 연결해서 큰 개념을 구현하도록 설계했다. 비행기 탑승 절차와 레이어예를 들어 비행기를 타고 다른 나라로 여행을 가는 과정을 생각해보자.비행기는 단순히 타고싶을 때 타서 바로 슝 날아가서 도착하는게 아니라 여러 복잡한 절차가 존재한다. 비행기 표 예매 > 짐 맡기기 > 탑승구에서 비행기 탑승 > 활주로 이륙 > 비행 > 활주로 착륙 > 비행기에서 내려 탑승구로 나오기 > 짐 찾기 > 비행기 티켓에 대해 문제가 있..

CS/프로그래밍언어론

[프로그래밍언어론] 1. 프로그래밍 언어의 개념

프로그래밍 언어의 개념을 공부하는 이유- 아이디어 표현 능력 향상- 적절한 언어를 선택하는데 필요한 배경 지식 습득- 새로운 언어 학습 능력 향상- 프로그래밍 언어의 구현 방식에 대한 깊은 이해와 이를 바탕으로한 기존 언어에 대한 이해도 향상 프로그래밍 분야- 과학 분야 (큰 수의 부동 소수점 계산 등) → Fortran- 경영 분야 (레포트 생성, 10진수 숫자와 문자 사용)  → COBOL- 인공 지능 (심볼릭 컴퓨테이션 = 기호를 이용한 논리 전개, 링크드 리스트 사용) → LISP- 시스템 프로그래밍 (지속적인 사용을 위해 효율성이 필요) → C- 웹 소프트웨어 → HTML, PHP, Java 프로그래밍 언어의 평가 기준Readability프로그램을 읽고 이해하기 쉬워야..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 9. Shader (5) - 직사각형에 실시간으로 변하는 색상 입히기 (GLFW, GLAD)

직사각형에 색상 입히기 예제 지난 글에 작성했던 내용을 한번 코드로 실습해보고자 한다. 우선 아래와 같이 색상을 입힌 직사각형 코드를 준비했다. #include #include #include "Shader_s.h" #include float vertex_data[] = { -0.5, -0.5, 1.0, 0.2, 0.2, 0.2, // 왼쪽 아래 0.5, -0.5, 1.0, 0.3, 0.3, 0.3, // 오른쪽 아래 -0.5, 0.5, 1.0, 0.4, 0.4, 0.4, // 왼쪽 위 0.5, 0.5, 1.0, 0.5, 0.5, 0.5, // 오른쪽 위 }; unsigned int index_data[] = { 0, 1, 2, 1, 2, 3 }; int main() { glfwInit(); glfwWi..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 8. Shader (4) - GLSL

GLSL GLSL은 GL Shader Language 의 약자로, 셰이더 프로그래밍을 위한 C 기반의 언어이다. 대표적인 사용 방법은 아래와 같다. #version version_number // Open GL 버전 in type in_variable_name; in type in_variable_name2; // 셰이더에 들어오는 입력 변수 out type out_variable_name; // 셰이더가 처리한 뒤 내보내는 출력 변수 uniform type uniform_name; // 모든 정점에 대해 동일하게 사용되는 전역 변수 void main() { out_variable_name = weird_stuff_we_processed; } GLSL 데이터 타입 GLSL은 대부분의 C 데이터 타입을 지..

CS/컴퓨터 네트워크

[컴퓨터 네트워크] 6. Security

이번 글에서는 네트워크 보안에 대해 간단하게 정리하고자 한다. 원래 인터넷은 미국의 군사용 네트워크로 만들어졌다. 군 내부적으로 데이터를 주고받기 위해 만들어졌다보니, 당연히 군 내부에서 폐쇄적으로 사용이 되었기에 처음에는 보안에 관심이 없었다. (서로 알고있는 군 관계자끼리 데이터를 주고 받았기 때문이다) 하지만 인터넷이 밖으로 나와 상업적 목적에 의해 세계적으로 보급되기 시작하면서 보안 문제가 대두되기 시작했다. 인터넷이라는 인프라를 통해 흐르는 데이터를 임의로 조작하거나, 데이터의 흐름을 통제하여 이익을 얻고자 하는 사람들이 등장했다. 따라서 이 문제를 해결하기 위해 보안 솔루션이 등장하기 시작했다. 초기 인터넷은 보안 개념을 고려하여 설계되지 않았기 때문에, 이후에 나온 보안 개념은 이 인터넷의 ..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 7. Shader (3) - EBO (Element Buffer Object)

지난 글에서는 VBO 와 VAO 를 사용하여 삼각형을 그리는 방법에 대해 정리하였다. 이번 글에서는 EBO를 사용하여 정점 데이터를 중복으로 사용하지 않도록 하는 과정을 정리한다. 먼저 지난 예제를 토대로 사각형을 그리는 예제를 아래와 같이 작성하였다. #include #include unsigned int createAndCompileShader(GLenum shaderEnum, const char* shaderSourceCode); unsigned int createShaderProgramWithShaders(unsigned int vertexShader, unsigned int fragmentShader); const char* VertexShaderSourceCode = "#version 330 ..

CS/HCI 윈도우즈프로그래밍

[OpenGL] 6. Shader (2) - VAO

지난 글에서는 셰이더의 개념과 만드는 방법 그리고 셰이더 넘길 데이터가 담기는 버퍼를 만들어서 데이터와 연결하는 과정까지 정리하였다. 이번 글에서는 버퍼에 있는 데이터를 어떻게 셰이더로 넘길지 정의하는 VAO에 대해서 정리해보고자 한다. Vertex Attribute Pointer 지난 시간에 만든 VBO ( Vertex Buffer Object ) 에는 셰이더 넘길 전체 데이터가 들어가 있었다. float vertices[] = { -0.5f, -0.5f, 0.0f, // vertex 1 0.5f, -0.5f, 0.0f, // vertex 2 0.0f, -0.5f, 0.0f, // vertex 3 -0.5f, 0.5f, 0.0f // vertex 4 }; 가령 이 코드를 보면, 삼각형을 만드는데 사용할..

CS/컴퓨터 구조

[컴퓨터 구조] 4. MIPS Data Transfer Instructions (1)

Data Transfer Instructions CPU 내부의 레지스터는 32개밖에 없다. 만약 4byte 데이터 배열 100개를 선언하는 것과 같이 레지스터의 저장 공간을 넘어서는 용량이 필요한 경우, 메모리를 활용해야 한다. 따라서 MIPS 모든 CPU는 레지스터와 메모리 사이에 데이터를 주고 받을 수 있는 명령어를 제공한다. 메모리에 데이터를 쓰는 동작은 Store (Write) 라고 한다. 메모리에서 데이터를 읽는 동작은 Load (Read) 라고 한다. 메모리에 접근할 때는 메모리 주소를 사용해야 하는데, 메모리 주소는 메모리 공간의 8bit = 1 byte 마다 하나의 주소값을 가진다. (이를 byte - addressable 하다고 한다.) 레지스터와 메모리 사이에 데이터를 주고받을 때는, ..

CS/컴퓨터 구조

[컴퓨터 구조] 3. MIPS Arithmetic & Logical Instruction

MIPS 명령어의 포맷명령어 하나는 결국 컴퓨터라는 기계가 이해하기 위해 32bit 의 0과 1의 조합으로 나타내야한다.32bit 의 공간 안에 이 명령어가 어떤 명령어인지, 어떤 데이터를 가지고 명령어를 실행하는지를 기술한다.이를 위해 32bit 명령어의 어디부터 어디까지 어떤 데이터를 담을지 형식을 정의해두었는데 이를 명령어 포맷이라고 한다. MIPS 명령어는 R-format, I-format, J-format 이렇게 3가지 포맷이 존재한다.( MIPS의 설계 원칙 중 좋은 디자인을 위해 타협이 필요하다는 원칙에 입각하여,편의를 위해 명령어 포맷을 1가지로 통일하기보다 3가지로 구분하는 쪽으로 타협을 본 것이다.)이번 글에서는 R-formant, I-format 2가지를 살펴보며, 그 중 산술, 논리..

에버듀
Blog. 에버듀