프로그래밍(Basic)/이론

    [바미] 선형성(Linearity)에 대해

    선형성(Linearity) 선형성이란 가산성과 동차성 성질을 동시에 만족하는 것을 말합니다. 가산성 (Additivity) 각각의 입력에 대한 결과를 합한 것과 입력을 합쳐서 넣은 결과가 동일하다. 이것이 가산성이고 superposition(중첩)이 가능하다고 한다. 다시 말해 복잡한 입력 x1 + x2에 대한 결과를 알기 어려울 때 이미 잘 알고 있거나 계산하기 쉬운 단순한 입력 x1과 x2를 이용해 각각의 결과를 얻고 단순히 합하기만 하면 되는 것을 말합니다. 동차성 (Homogeneity) 입력을 몇 배 늘리거나 줄였을 때 그 결과도 입력이 조정된 비율만큼 조정되는 성질을 말합니다. 선형성이 중요한 이유 예를 들어 어떤 선형적으로 거동하는 물체를 1N의 힘으로 눌렀을 때 1mm만큼 변형하고 2N의 ..

    [바미] RTMP(Real Time Messge Protocol)란?

    RTMP? RTMP(Real Time Message Protocol)이란 어도비 회사에서 독점 프로토콜로 비디오나 오디오등을 인터넷 상에서 실시간으로 스트리밍 데이터를 전송해서 불특정 다수들이 받아 볼 수 있도록 하는 기술의 규격을 말합니다. RTMP는 기본 1935포트를 사용하지만 통신에 실패하면 RTMPS(434)나 RTMPT(80)포트를 사용하여 통신하도록 시도합니다. RTMP 패킷 구조 RTMP의 패킷 구조는 아래와 같습니다. 위 이미지를 통해 RTMP 규격을 거쳐 다른 기기에 전송 되는 구조 라는 것을 알 수 있습니다. 대부분 실시간 방송 서비스는 RTMP를 이용해서 스트리밍하게 됩니다. RTMP를 사용하는 서비스 대부분이 알고 계시는 방송 플랫폼이 RTMP를 사용하고 있습니다. 피드백 프로토콜..

    [바미] WebRTC, STUN서버, TURN서버에 대해

    오늘은 WebRTC, STUN서버, TURN서버에 대해서 포스팅하겠습니다. WebRTC WebRTC란 웹 브라우저간에 플러그인의 도움 없이 서로 통신할 수 있도록 설계된 API를 말합니다. 대표적으로 사용하는 회사는 Discord가 있죠. 일반적인 통신은 이런 식으로 서버를 거쳐서 클라이언트에 전송하는 방식을 사용합니다. 하지만 WebRTC의 기본적인 통신과정은 다음과 같습니다. 대략 이런 식으로 작동한다. 본래 첫 태생 자체는 P2P를 위한 통신방식 입니다. 그러나 아무래도 WebSocket을 이용하기 때문에 직접적으로 IP를 연결하는 방식을 차용하여 방화벽이 존재하거나 허브를(또는 라우터를) 사용하는 NAT환경에서는 연결이 불가능합니다. NAT환경이란 간단하게 말하자면 Wifi 환경과 같이 퍼블릭 I..

    [바미] BROWSER-RENDERING에 대하여

    안녕하세요. 최근에 CS공부를 하고 있던 도중 후임이 HTML 파일이 어떻게 브라우저에 그려지는지 물어보았는데, 제가 그 것을 답변하는 중에 제가 브라우저 렌더링 과정을 정확하게 이해하지 못하고 있다는 걸 알게 되었습니다. 그래서 브라우저 렌더링 과정에 대해서 공부하고 정리해보려고 합니다. 브라우저 브라우저 렌더링 과정을 알아보기전에 브라우저가 무엇인지 먼저 알아보아야 합니다. 우선 브라우저는 우리가 흔히 인터넷에 접속할 때 사용하는 Chrome, Safari, Firefox, Internet Explorer 등을 말합니다. MDN에서는 브라우저에 대해 웹에서 페이지를 찾아서 보여주고, 사용자가 하이퍼링크를 통해 다른 페이지로 이동할 수 있도록 하는 프로그램이라고 설명하고 있는데 여기서 중요하다고 생각하..

    [바미] 관계형 DB VS 비관계형 DB

    관계형 DB 사전적인 의미를 살펴보자면 관계형 데이터베이스란 테이블(table)로 이루어져 있으며, 이 테이블은 키(key)와 값(value)의 관계를 나타낸다. 테이블은 이름을 가지고 있으며, 행(row)과 열(column) 그리고 거기에 대응하는 값을 가진다. 즉, 관계형 데이터베이스는 위와 같이 구성된 테이블이 다른 테이블들과 관계를 맺고 모여있는 집합체로 이해할 수 있습니다. 이처럼 데이터의 종속성을 관계(relationship)로 표현하는 것이 관계형 데이터베이스라고 말합니다. 특징 가장 많이 사용되고 있는 db의 한 종류 (고전적 데이터 베이스) table로 이루어져 있고, table은 키(key)와 값(value)의 관계를 나타냄. 일반적으로 알고있는 Mysqsl, Oracle, Mssql ..

    [바미] REST API에 대하여

    안녕하세요. 오늘은 REST API에 대해 알아보고자 합니다. REST? 흔히 개발을 하셨던 분들이라면 'REST하다.' 라는 표현을 접해보셨을 겁니다. 개발하면서 흔히 접했지만 정확히 얘기하지 못하는 부분 중 하나가 REST-API가 아닌가 싶습니다. REST(Representational State Transfer)의 사전적인 의미들을 요약해보면 'REST라는 아키텍쳐 스타일을 따르는 API'라고 표현 할 수 있습니다. 그러니까 HTTP를 기반으로, 자원을 정의하고, 자원에 접근하는 방식을 정해 놓은 아키텍쳐인데 웹에 존재하는 모든 자원에 고유한 식별자인 URI을 부여해 활용합니다. 여기서 자원은 저장된 데이터(DBMS), 이미지, 동영상, 문서 파일, 서비스 (이메일, 메시지)를 모두 포함합니다. ..

    [바미] Deadlock의 해결방안

    안녕하세요. 오늘은 Deadlock을 어떻게 해결해야 하는지에 대해 알아보도록 하겠습니다. 일단 Deadlock이 무엇인지, 어떤 원인으로 발생하는지는 아래의 글을 참고 하시면 더 좋을 것 같습니다. [바미] Go - DeadLock & channel에 대해 알아보자. 안녕하세요 오늘은 DeadLock에 대해 알아보겠습니다. 여기서 Dead는 '죽었다'의 표현이 아니라 막다른 길을 표현할 때 'Dead end'라고 표현을 하는데 그 때의 'Dead'와 같은 의미입니다. 그래서 Lock이 막 codesk.tistory.com 교착상태를 간단하게 말해보자면 프로세스들의 집합이 더 이상 진행을 못하고 영구적으로 블록(대기)되어 있는 상태를 얘기합니다. 교착상태가 발생하는 조건 교착상태가 발생하기 위해서는 우선..

    [바미] 동적 계획법(Dynamic Programming).

    일반적으로 우리가 사용하는 "dynamic"이나 "programming"라는 단어가 있어 'Dynamic Programming' 과 관련이 있을 것 같지만 실제로는 아무련 관련이 없습니다. 동적 계획법은부분 문제를 통해 큰 문제를 재귀적으로 해결하려고 할 때 중복되는 부분 문제들이 많이 발생하여 불 필요하게 같은 계산이 반복될 때 사용됩니다. 이항 계수를 계산하는 공식은 아래와 같은 공식이 성립하게 되는데 bino(i, j) = bino(i-1, j-1) + bino(i, j-1) 위 식에 대해 생각해보면 알 수 있듯이 주어진 i과 j에 대해 두 문제로 나눠가면서 계산했을 때 밑으로 내려가면서 중복되는 식이 점점 더 많이 발생함을 알 수 있습니다. i과 j의 크기가 커질 수록 중복되는 계산 역시 많아지는..

    [바미] 최소 신장 트리(MST, Minimum Spanning Tree)란

    안녕하세요. 오늘은 최소 신장 트리에 대해 알아보도록 하겠습니다. Spanning Tree란? 그래프 내의 모든 정점을 포함하는 트리를 말합니다. Spanning Tree = 신장 트리 = 스패닝 트리입니다. Spanning Tree는 그래프의 최소 연결 부분 그래프입니다. 최소 연결 = 간선의 수가 가장 적습니다. n개의 정점을 가지는 그래프의 최소 간선의 수는 (n-1)개이고, (n-1)개의 간선으로 연결되어 있으면 필연적으로 트리 형태가 되고 이것이 바로 Spanning Tree가 됩니다. 그러므로, 그래프에서 일부 간선을 선택해서 만든 트리가 되죠. Spanning Tree의 특징 DFS, BFS을 이용하여 그래프에서 신장 트리를 찾을 수 있습니다. 탐색 도중에 사용된 간선만 모으면 만들 수 있습..