본문 바로가기

공부하면서 찾아본 지식

(6)
도커(Docker)란? 도커란? 도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼이다. 다른 포스터에서 가상머신에 대한 글을 썼다. 따라서 가상화에 대한 개념은 알고 있는데 컨테이너 기술이 무엇이냐? 그건 바로 컨테이너가 실행되고 있는 호스트의 OS의 기능을 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 것이다. 컨테이너는 가볍고 애플리케이션을 실행하는 데 필요한 모든 것을 포함하므로 호스트에 현재 설치된 항목에 의존할 필요가 없다. 작업하는 동안 컨테이너를 쉽게 공유할 수 있으며 공유하는 모든 사람이 동일한 방식으로 작동하는 컨테이너를 갖게 된다. 도커는 무엇에 사용되는가? 도커는 개발자가 서비스를 제공하는 로컬 컨테이너를 사용하여 표준화된 환경에서 작업할 수 있도록 하여 개발 수명 주기를 간소화한다. 다음..
가상머신(VM)이란? 평소에 도커에 관해서는 많이 듣긴 했는데 자세히는 모른다. 가상머신이랑 비슷한 개념 같긴한데 내 인식(?)으로는 가상머신이 더 오래된 기술이라고 생각돼서 먼저 알아보기로 했다. 가상 머신이란? 가상머신은 실제 컴퓨터 대신 소프트웨어를 사용하여 프로그램을 실행하고 앱을 배포하는 컴퓨팅 리소스이다. 하나 이상의 '게스트'시스템이 물리적 '호스트'시스템에서 실행된다. 각 가상 시스템은 자체 운영체제를 실행하고 모두 동일한 호스트에서 실행되는 경우에도 다른 VM과 별도로 작동한다. 예를 들어 MacOS 가상 머신이 물리적 PC에서 실행될 수 있음을 의미한다. 가상머신은 무엇에 사용되는가? 가상머신을 사용하면 기업이 데스크톱의 앱 창에서 완전히 별개의 컴퓨터처럼 작동하는 운영체제를 실..
어플리케이션이란? 흔히 어플리케이션이란 말을 많이 쓰는데 대충 휴대폰 앱과 같이 유저가 사용하는 프로그램을 뜻하는 말로 알고 있었다. 그러다 궁금해서 찾아봤다. 어플리케이션(Application software)이란 운영체제에서 실행되는 모든 소프트웨어를 뜻한다. 워드프로세서, 웹브라우저뿐만 아니라 컴파일러나 링커 등도 어플리케이션이라고 할 수 있다. 또는 좁은 의미로 운영체제 위에서 사용자가 직접 사용하게 되는 소프트웨어들을 뜻하기도 한다. (출처: https://ko.wikipedia.org/wiki/%EC%9D%91%EC%9A%A9_%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
EOF란? 알고리즘 문제를 풀던 도중 입력의 횟수가 안 나와있는 문제를 발견함.(입력이 없을 때까지 입력 받는?) 그래서 이 문제를 어떻게 푸나 찾아보던 도중 while(scanf("%d", n) != EOF)로 해결할 수 있는 것을 발견했고 EOF가 뭔지 문득 궁금해져서 찾아 봤다. EOF란 파일의 끝(End of File)이며 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없는 것을 의미한다. 한마디로 저 구문은 읽을 수 있는 데이터가 있는 한 반복문을 계속 실행한다는 뜻. (출처:https://ko.wikipedia.org/wiki/%ED%8C%8C%EC%9D%BC_%EB%81%9D)
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); 알고리즘 문제를 풀다가 풀이를 보면 흔히 `ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);`를 볼 수 있었다. 대충 속도가 빨라진다고는 해서 따라 쓰곤 했는데 자세한 이유가 궁금해 찾아 보았다. ios_base::sync_with_stdio 구문은 c의 stdio와 c++의 iostreamd을 동기화 시켜주는 역할을 하는데, 이때 iostream과 stdio의 버퍼를 모두 사용해서 딜레이가 발생한다. ios_base::sync_with_stdio(false);을 통해서 동기화를 비활성화 시켜준다. 그러면 C++만의 독립적인 버퍼가 생성되면 버퍼의 수가 기존보다 줄었기 때문에 실행 속도가 빨라진다. 단, C스타일의 입출력문은 쓰지 않게 주의해..
라이브러리와 프레임워크 라이브러리 소프트웨어 개발 시 사용되는 프로그램의 구성요소로, 공통으로 사용될 수 있는 특정한 기능들을 모듈화 한 것이다. 프레임워크 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것이다. 차이점 라이브러리를 사용할 때 사용자는 애플리케이션 코드의 흐름을 직접 제어해야 한다. 개발 시 필요한 기능이 있을 경우 능동적으로 호출하거나 가져다가 써야한다. 반면 프레임워크는 애플리케이션 코드가 프레임워크에 의해 사용된다. 즉, 애플리케이션 코드는 프레임워크가 짜 놓은 틀 안에서 수동적으로 동작한다.