안녕하세요. IT 엘도라도 에 오신 것을 환영합니다.
글을 쓰는 것은 귀찮지만 다시 찾아보는 것은 더 귀찮습니다.
완전한 나만의 것으로 만들기 위해 지식을 차곡차곡 저장해 보아요.   포스팅 둘러보기 ▼

전체 글 (168)

[AWS] Django 프로젝트 배포하기 (Elastic Beanstalk + PostgreSQL)

이전 포스팅과 연결 : [Django] 프로젝트 구조 설정 (앱, 템플릿, Static 파일 등) 1. 웹 서버, WSGI, 웹 어플리케이션 개념 장고 프로젝트를 배포하기에 앞서, 간단하게 웹 서버와 관련된 사전 지식들을 짚고 넘어가자. 웹 서버 (Web Server) 정적인 컨텐츠를 제공하는 서버를 의미한다. 프로그램을 실행하거나 데이터베이스에 접근하는 등의 동적인 기능은 수행할 수 없다. 파일 시스템에 존재하는 정적 파일들을 찾아서 제공해주는 정적 기능만 수행할 수 있다. 대표적으로 Apache, Nginx 등이 있다. 웹 어플리케이션 서버 (Web Application Server, WAS) 동적인 컨텐츠를 제공할 수 있는 서버를 의미한다. 프로그램을 실행하거나 데이터베이스에 접근하는 등의 동적인 ..

[Django] 프로젝트 구조 설정 (앱, 템플릿, Static 파일 등)

이전 포스팅과 연결 : [Django] 개발 환경 세팅 : CentOS7 (VirtualBox + Vagrant), PyCharm 1. 장고 프로젝트 구조 장고 개발자마다 선호하는 프로젝트 구조가 다르겠지만, 필자는 다음과 같은 프로젝트 구조를 선호한다. 프로젝트 구조란 프로젝트 폴더 내에 필요한 파일들을 어떤 구조(위치)로 배치하느냐에 관한 문제이다. 그리고 만약 그 구조가 장고가 기본적으로 제공하는 구조와 다르다면 별도의 설정을 해줘야 한다(아래의 구조는 기본 구조와 다르다). 이번 포스팅은 그 설정 방법에 관해 설명한다. 프로젝트 폴더/ config/ apps/ {app_name_1}/ {app_name_2}/ {app_name_3}/ templates/ static/ css/ font/ img/ ..

장고 (Django) 2020.06.01

[JavaScript] DOM/BOM, Web API, 이벤트 캡쳐링/버블링

BOM과 DOM의 핵심적인 개념은 그 이름에 담겨 있다. BOM은 Brower Object Model, DOM은 Document Object Model이다. Object Model이란 객체 지향 모델, 즉 무언가를 객체(Object)들로서 표현하는 형식을 일컫는다. 따라서 BOM은 웹 브라우저 자체를 객체들로 표현하는 형식을 말하며, DOM은 웹 페이지(문서)의 내용을 객체들로 표현하는 형식을 말한다. 무엇보다 중요한 둘의 공통점은 바로 JavaScript와 같은 스크립트 언어가 웹 브라우저/페이지를 쉽게 제어 및 조작할 수 있도록 한다는 것이다. 이번 포스팅에서는 BOM과 DOM의 개념을 간단히 정리하고, 이와 관련된 이벤트 캡쳐링 및 버블링의 개념도 한 번 알아보도록 하자. 1. DOM (Docume..

[JavaScript] 바닐라 JS, ECMAScript 개념

1. jQuery와 바닐라 JS 그동안 웹 브라우저의 호환성 문제 혹은 코드의 가독성 문제 등으로 일반 JavaScript보다 jQuery를 많이 사용해왔다. 그러나 최근 ES6, ES7 등을 따르는 JavaScript가 등장하면서 이러한 문제점들이 상당수 해결되었고, jQuery 자체도 불필요한 코드의 로드에 의한 성능적인 비효율을 야기한다는 문제점을 가지고 있었다. 이로 인해 최근에는 라이브러리를 사용하지 않는 날 것 그대로의 JavaScript, 즉 바닐라 JS를 많이 사용하기 시작했다. 사실 바닐라 JS에 익숙해지면 React, Angular, jQuery 등 프론트 엔드 개발 프레임워크 및 라이브러리들을 습득하는 시간도 굉장히 짧아진다. 이는 웹 브라우저를 이루는 DOM 등의 기본적인 개념들을 ..

[Django] 개발 환경 세팅 : CentOS7 (VirtualBox + Vagrant), PyCharm

1. CentOS7 가상 머신 설치 가상 머신(Virtual Machine)이란 특정 OS의 컴퓨터 환경을 가상화한 것으로, 또 다른 OS의 컴퓨터 한 대가 더 있는 듯한 착각을 제공하는 가상화 기술이다. VirtualBox나 VMWare 등이 바로 특정 가상 머신을 구동하기 위한 소프트웨어들에 해당한다. 그리고 Vagrant는 그러한 가상 머신들을 쉽게 설치하고 관리할 수 있도록 도와주는 소프트웨어이다. Vagrant를 이용하면 이미 누군가가 만들어 놓은 특정 환경의 가상 머신들을 쉽게 가져다 설치할 수 있다. 이러한 것들 하나하나를 가상 머신 box라고 부르며, 각 가상 머신 box에는 특정 OS와 그 OS에서 필요한 각종 소프트웨어들이 이미 갖추어져 있다. 가상 머신 box는 공식적으로 제공되는 것..

장고 (Django) 2020.05.27

[Web] DNS (Domain Name System)

인터넷에 연결된 각각의 컴퓨터 등의 장치를 호스트(host)라고 부른다. 그리고 전 세계의 호스트들은 서로 통신을 하기 위해 반드시 IP 주소를 가지고 있어야 한다. 초창기에는 이러한 IP 주소를 이용하여 다른 호스트에 접속하는 것만으로도 큰 혁명이었다. 그러나 점점 IP 주소를 기억해서 사용하는 것에 대한 불만이 쏟아져 나오기 시작했고, 이로 인해 DNS(Domain Name System)라는 것이 탄생하였다. DNS 기술의 핵심은 숫자로 되어 있어서 기억하기 어려운 IP 주소에 이름을 붙여주는 것이며, 이를 위해서는 도메인 이름과 IP 주소 사이의 맵핑 정보들을 기록하고 있는 DNS 서버가 필요하다. 이번 포스팅을 통해 DNS 기술에 대해 한 번 알아보도록 하자. 1. hosts 파일 각 운영체제는 ..

[Django] Filtering based on Aggregation

예를 들어 다음과 같은 연결 관계를 가지는 모델 ModelA와 ModelB가 있다고 해보자. 그리고 다음과 같이 장고 ORM을 작성해 보자. 이는 CONDITION이라는 조건에 의해 필터링된 ModelA 객체들에 대하여, 가장 최근에 생성된 ModelB 객체의 이름이 홍길동인 것들만 필터링하는 코드에 해당한다. 그러면 이 ORM은 다음과 같은 SQL 쿼리문으로 변환된다. 번호는 해당 절(Clause)이 해석되는 순서를 의미한다. 이제 위 SQL 쿼리문을 해석 순서대로 분석해 보자. ① FROM 절, JOIN 절 ModelA 테이블을 ModelA_To_ModelB 테이블과 조인하고, 그 결과를 다시 또 다른 ModelA_To_ModelB 테이블(T4)과 조인하며, 그 결과를 또다시 ModelB 테이블(T5..

장고 (Django) 2020.04.02

그리디 알고리즘 (Greedy Algorithm) 정당성 증명 방법

1. 그리디 알고리즘 정당성 증명 "매 순간 내리는 선택을 포함하는 최적해가 반드시 존재한다"를 증명하면 된다. 늘 그렇듯 기초가 가장 중요하므로, 쉬운 문제들을 예시로 삼아서 그리디 알고리즘의 정당성을 어떻게 증명하는지 한 번 살펴보도록 하자. 2. 백준 1931번 문제 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 종료 시간이 가장 빠른 회의를 m이라고 하자. 이때 m이 최적해에 포함되지 않는다고 가정하자. 그러면 최적해의 회의들 중 종료 시간이 가장 빠른 회의를 m으로 대체하여 또 다른 최적해를 얻을 수 있다. 따라서 m을 포함하는 최적해는 반드시 존재한다. 그러면 이제는 m을 선택했다는 가정 하에 m을 제외한 나머지..

[CSAPP] Virtual Memory

1. Introduction 1-1. 가상 메모리 (Virtual Memory) 몇몇 단순한 임베디드 마이크로컨트롤러와 같이 가상 메모리 기술을 사용하지 않는 시스템에서는 메모리 참조 방식이 아래 왼쪽 그림과 같다. 즉, CPU가 물리 주소를 메인 메모리에 바로 입력하여 메모리 참조를 진행하는 것이다. 반면 대부분의 현대 데스크탑, 서버, 노트북과 같이 가상 메모리 기술을 사용하는 시스템에서는 메모리 참조 방식이 아래 오른쪽 그림과 같다. 가상 메모리(Virtual Memory) 시스템에서는 각 프로그램이 가상의 주소를 사용하도록 하며, CPU가 메모리 참조를 시도할 때는 MMU(Memory Management Unit)라는 하드웨어 장치를 이용하여 해당 가상 주소(Virtual Address)를 실제 ..

[CSAPP] Exceptional Control Flow

1. Introduction 1-1. 예외적인 제어 흐름 (Exceptional Control Flow, ECF) 프로세서에 전력이 공급된 시점부터 전력 공급이 끊기는 시점까지, 프로그램 카운터(PC)는 다음과 같은 값들을 갖는다. a_k는 명령어 I_k의 시작 주소를 의미한다. 이와 같이 실행하는 명령어에 따라 PC의 값이 변해가는 흐름을 제어 흐름(Control Transfer)이라고 부른다. 제어 흐름의 양상은 크게 세 종류이다. 첫 번째는 메모리에 연속적으로 할당되어 있는 명령어들을 순차적으로 실행하는 경우이다. 이는 가장 기본적이면서 대부분의 시간을 차지하는 제어 흐름에 해당한다. 두 번째는 프로그램 변수로 표현되는 프로그램 상태의 변화에 반응하여 제어 흐름이 갑자기 바뀌는 경우이다. 대표적으로..