본문 바로가기

분류 전체보기123

컴파일러 최적화 종류와 기법 정리 컴파일러 Back-end에서는 어떻게든 머신 인스트럭션의 갯수를 하나라도 줄이고자 노력한다. 컴파일러 최적화 기법은 컴파일러마다 다양하지만, 일반적으로 많이 사용되는 것은 주로 상수 연산을 최대한 줄이는 것이다. 다음 기법들은 일반적인 컴파일러에서 통용되는 최적화 기법들이다. 1. Copy propagation Copy propagation은 직접 할당의 대상을 해당 값으로 대체하는 최적화 과정이다. 아래와 같이 y = x의 직접 할당은 해당 값으로 대체될 수 있다. 최적화 이전 최적화 이후 2. Constant folding Constant Folding은 런타임에 계산 전, 컴파일 타임에 상수 표현을 인식하고 처리하는 최적화 과정이다. 최적화 이전 1스텝 진행 결과 2번째 줄, b의 할당 값인 9 -.. 2020. 9. 4.
웹 프론트엔드 프레임워크, Bootstrap 예쁘고 안깨지는 반응형 웹 페이지를 만들자! 부트스트랩 깃허브 리퍼지토리 부트스트랩, 깃허브에서 2번째로 별을 많이 받은 리퍼지토리이다. 깃허브에서의 별 갯수가 보여주듯이, 부트스트랩의 인기는 전 세계 웹 개발자들 사이에서 정말 뜨겁다. 부트스트랩은 개인 블로그 개발자 뿐만 아니라, 여러 대기업 웹페이지에서도 사용된다. 예를 들면, NBA.com, Wal-Mart, Target 이 있는데, 이는 모두 부트스트랩을 사용해 웹 프론트엔드를 구축한 홈페이지들이다. 부트스트랩의 장점은 잘 구조화 된 컴포넌트 배치와 디자인에 있다. 하지만 그 중에서 가장 큰 장점은 브라우저 해상도에 따라서 반응하여 컴포넌트를 재배치시켜주는 반응형 웹 프론트엔드라는 것이다. 노트북 모니터와 핸드폰에서의 페이지 비교 사진 본 홈페이.. 2020. 9. 4.
구글신의 축복, 구글 크롬 웹 브라우저계의 선두주자, 과연 계속될지? 2017년 11월 웹 브라우저 점유율표(출처:W3Counter) 구글 크롬은 웹 브라우저 시장에서의 점유율에서의 우위를 꾸준히 점하고 있다. 2017년 11월을 기준으로 크롬 브라우저의 점유율은 59.2%를 차지하고 있는 데, 이는 과반을 넘은 압도적인 수준이다. 크롬의 사용성은 높은 사용자수가 보여주듯이 우수성을 보여주는데, 내가 개인적으로 사용하고 느낀 바로는 현존하는 브라우저 중에 제일 사용하기 편하고, 빠른편에 속한다.(제일 빠른 브라우저는 파이어폭스 퀀텀) 구글 크롬을 사용하면서 가장 피부에 와닿게 느끼는 좋은 점 두가지는 속도와 기능성이다. 일단 페이지 로딩 속도나 이벤트 처리 속도가 매우 빠르다. 크롬 브라우저는 캐시를 저장해놓고 해당 페이지에 대한.. 2020. 9. 4.
OCaml 컴파일과 빌드 OCaml 컴파일러 ocamlc - OCaml 바이트코드 컴파일러. .byte를 만들어낸다. ocamlopt - OCaml 네이티브코드 컴파일러. .native를 만들어낸다. 파일 확장자명 종류 .c - c source를 나타냄 .cc - c++ source를 나타냄 .C - c++ source를 나타냄(.c와 구분 주의) .o - c object를 나타냄 .a - c archive를 나타냄(archive란 오브젝트 파일들을 모아 하나의 파일로 만든 것) .cmi - mli object를 나타냄 (mli는 ml 인터페이스 파일) .cmo - ocaml object를 나타냄 (byte code) .cmx - ocaml object를 나타냄 (native code) .cmxs - native plugin을 .. 2020. 9. 4.
Neovim, 리눅스 에디터의 미래 Vim 호환성을 갖춘 hackable Vim 리눅스에서 단연 많이 사용되는 에디터로 Vim을 빼놓고 말할 수가 없을 것이다. Vim의 장점은 가벼우면서도 강력한 여러가지 기능들, 텍스트 편집 기능과 여러 정규 표현식 문법, 그리고 다양한 편집 환경 변경 자유도를 제공한다는 것이다. 이러한 Vim을 개선시킨 것이 Neovim인데, Neovim을 사용해야 하는 이유 중 가장 큰 것은 이전 Vim에서 개선되지 않았던 Vim에서의 작업 중 비동기적으로 실행 중인 작업에 대한 엑세스일 것이다. 오늘 리뷰에서는 내가 Neovim을 사용하면서 겪었던 경험과 후기를 공유해보고자 한다. 기본적으로는 나는 Neovim을 사용하는데 만족하고 있는데, Neovim은 여러가지 장점을 가지고 있기 때문이다. Neovim위에서의 .. 2020. 9. 4.
NP 문제에 대한 쉬운 설명 P 문제 Polynominal complexity의 알고리즘을 가지고 있는 쉬운 문제. 즉, 다항 시간내에 풀리는 문제. NP 클래스 Non-deterministic Polynominal complexity를 가지는 문제들. 운에 기대면 현실적인 비용으로 해결할 수 있는 문제들. 예를 들자면 주어진 지도 위의 도시(그래프)를 한 번씩만 방문하는 경로 찾기 문제인 해밀턴 경로(Hamilton path) 문제가 대표적이다. 이를 다항시간 내에 푸는 알고리즘은 아직 없다. 건너풀기(Problem Reduction) 문제 A를 푼 알고리즘으로 동일하게 B 문제를 해결할 수 있다면, 그 문제는 간접적으로 풀 수 있는 것이다. 단, A 문제로 푼 답을 B 문제의 답으로 옮기는 건 다항 시간내에 되야한다. NP 완전.. 2020. 9. 4.
Flickr 이미지 서버와 Flickr API 개인 블로그에서 빠르고 대용량의 이미지 서버를 찾는다면 개인 블로그를 구성함에 있어서 여러 고려할 점이 있겠지만, 나의 경우 사진 갤러리에 수많은 사진들을 게시하면서 이런 이미지 파일들에 대해서(특히나 고화질, 고용량의) 관리에 대해서 고민을 많이 하게 되었다. 약간의 고민을 통해 생각해낸 결론은, 나처럼 자그마한 개인 블로그를 운영하는 경우에는 외부 서비스를 통해 이미지 호스팅을 지원받는 편이 효율적이라는 것이었다. 나는 휴대폰으로 사진을 자주 찍는 편인데, 내가 본 블로그에 사진들을 업로드하기 위해서는 휴대폰에서 사진을 컴퓨터로 옮겨서 서버로 업로드하거나, 혹은 이를 바로 올릴 수 있는 웹서비스를 만들어야 했는데, 둘 다 너무 귀찮았고, 만들어도 크게 의미없는 일이라 외부 서비스를 이용하기로 결정했다.. 2020. 9. 4.
GNU make GNU make는 기본적으로 프로그램 그룹 중에서 어느 부분이 새롭게 컴파일되어야 하는지를 자동적으로 판단해서 필요한 커맨드를 실행한다. GNU make에 그 프로그램의 타겟과 의존성들을 알려주는 것이 Makefile이다. Makefile의 기본적인 구조는 아래와 같다. 타겟은 말 그대로 명령이 수행되어 얻을 결과 파일이고 의존성은 타겟이 의존하고 있는, 즉 타겟이 컴파일되기 위해 필요한 파일들을 의미한다. 참고로 타겟에는 결과 파일만 올 수 있는 것뿐 아니라 clean과 같은 레이블도 올 수 있다. 명령 부분은 앞에 반드시 TAB으로 구분한다. make는 명령어를 앞단에서 TAB으로 구분하기 때문이다. 나의 경우처럼 TAB 기본 설정이 nvim.init 에디터 설정에.. 2020. 9. 4.
리눅스 디렉토리 구조 중요도 순서대로 정리하자면, / - 루트 디렉토리. 모든 파일과 디렉토리가 이 곳에서 시작된다. /bin - 사용자 바이너리 디렉토리. 실행가능한 바이너리 파일들이 들어있다. (ex. grep, ping, cp) /sbin - 시스템 바이너리 디렉토리. 실행가능한 시스템 바이너리 파일들이 들어 있다. (ex. fdisk, ifconfig) /etc - 설정 파일 디렉토리. 왜 이름이 conf가 아니라 etc인지는 의문이다. 서버에서는 아파치 설정파일이 여기에 들어간다. /var - 가변 파일 디렉토리. /var/log의 시스템 로그나 /var/email의 이메일 등의 가변 파일을 보관한다. /home - 홈 디렉토리. 보통 사용자의 개인 파일을 유저 별로 나누어 디렉토리에 각각 보관한다. /tmp - 임.. 2020. 9. 4.
Let's Encrypt SSL/TLS 인증 개인 홈페이지를 HTTPS로 보안 연결해보자! Let's Encrypt는 SSL/TLS 보안 인증을 지원해주는 무료 인증 기관이다. 개인 홈페이지를 운영하는 데 있어서 보안에 대해 신경을 쓰지 않을 수 없다. 기존의 여러 인증 기관들은 소정의 비용을 받아 SSL/TLS 인증 지원을 해주었는데, 이 혁신적인 기업은 전세계 모든 사이트들의 암호화 통신을 기원하며 무료로 보안 인증을 지원하고 있다. 오늘은 이 Let's Encrypt를 리눅스 서버에 설치하여 개인 홈페이지를 HTTP에서 HTTPS로 통신할 수 있도록 만드는 방법을 소개하고자 한다. Let's Encrypt 인증 설치 과정은 매우 간단하다. 본 리뷰는 본인의 서버(Ubuntu 16.04 64bit) 환경을 기준으로 한다. 가동중인 웹 어플리케이.. 2020. 9. 4.
다재다능한 메모장 Notepad++ 윈도우 유저라면 제발 노트패드 쁠쁠 씁시다! 내가 Notepad++을 알게 된 것은 윈도우에서 메모장을 사용하던 중이었다. 기본적인 문서편집을 위해 나는 워드편집기가 아닌 가벼운 문서 편집기가 필요했는데, 연구실 선배의 추천으로 설치하여 사용해보게 되었다. 이런 Notepad++의 가장 큰 장점은 메모장 정도의 가벼움과 여느 에디터에서 지원하는 언어를 전부 지원한다는 점이다. 물론, 나는 Notepad++ 위에서 코딩하는 것을 추천하지는 않는다. Notepad++에서의 다양한 플러그인이 가능하게 해주기는 하지만 아직 여러 제약사항이 있다. 윈도우에서 프로그래밍을 하기 위함이라면 Atom이 더 나을 것 같다. 개인적인 생각이지만 Notepad++로 가벼운 메모작업이나, 소스코드 확인 및 간단한 편집 정도만.. 2020. 9. 4.
IDE같은 에디터 아톰(Atom) 깃허브(Github)에서 만들어 믿고 쓰는 내가 처음 아톰을 접하게 된 계기는 웹 어플리케이션의 Front-end를 개발하던 중이었다. 무거운 IDE로 스크립트를 개발하는 데 불편함을 많이 느껴 어느 정도 가벼운 새로운 에디터를 찾고 있었다. 그러다가 발견하게 된 아톰은 윈도우 환경에서 작업하기 아주 적합한 환경이었고 플러그인들이 다양하게 제공되어 있어 편리하게 개발할 수 있었다. "대기업에서 만든 제품이니 안심하고 쓰라구!" 아톰은 깃허브에서 만든 에디터라 그런지 다른 에디터들보다 더욱 신경을 많이 쓴 느낌이 난다. 특히나 개발된 언어가 Coffee-script로 짜여져 있어서 운영체제에 상관없이 동일하게 UI를 제공하고(마치 접속하는 클라이언트의 운영체제에 영향을 받지 않는 웹 어플리케이션처럼), 동.. 2020. 9. 4.
윈도우 10, 리눅스 우분투 그놈 16.04 듀얼부팅 변태적이지만 만족스러운 나는 얼마전부터 계획해왔던 윈도우 10과 리눅스 우분트 그놈의 듀얼부팅을 실행으로 옮기게 되었고, 하루의 밤샘과 삽질끝에 성공하여 정보 공유 및 후기 차원에서 이 글을 쓰게 되었다. 이 글은 Dell xps 9360 모델에서 윈도우 10과 리눅스 우분투 그놈 16.04 버전 듀얼부팅을 설치한 후기이며 여타 다른 하드웨어나 다른 OS 버전에서의 듀얼부팅 설치는 차이가 있을 수 있으니 참고만 하기를 바란다. "누가 이런 끔찍한 혼종을 만들어냈단 말인가" 솔직히 찝찝하기는 했다. 잘 돌아가는 윈도우 머신 위에서 파티션을 갈라 또 다른 운영체제를 넣는 것이고 부트로더며 두 개의 파일 시스템이 하나의 머신에서 잘 분리되어 문제없이 돌아가게 될 지에 대한 의심도 있었다. 하지만 윈도우 위에서.. 2020. 9. 4.
[LeetCode - Easy] Two Sum 풀이 (C++) A. 문제설명 https://leetcode.com/problems/two-sum/ Two Sum - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문제에 대한 자세한 설명은 링크 참조 1. 배열 nums와 정수 target이 주어짐 2. nums 배열 내 두 값을 더해 수 target을 만드는 배열의 인덱스를 찾을 것 B. 접근법 1. Brute-force 먼저, 아주 단순하게 배열 내 모든 두 원소를 비교하며 Brute-force로 확인하는 방식이다. 이 경.. 2020. 9. 3.
[백준 17142] 연구소 3 (C++) A. 문제설명 https://www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net 문제에 대한 자세한 설명은 링크 참조 1. N*N 배열크기 땅이 존재 2. 각 배열의 엔트리에는 빈칸, 벽, 바이러스가 존재 3. 여기서 주어진 바이러스 중, M개를 활성화 시키려고 한다. 즉, 전체 바이러스가 |V|개라면 M개가 활성화 바이러스, |V|-M개가 비활성화 바이러스가 됨 4. 이제 활성화된 바이러스들을 시작으로 주변에 퍼뜨리는데, 바이러스는 벽을 제외한 칸에 바이러스를 퍼뜨림 .. 2020. 9. 2.