Development (15) 썸네일형 리스트형 Python Django[장고] 시작하기 - 1 (Pycharm, Anaconda를 이용하여) Anaconda를 설치하였다면, Anaconda Python3는 기본적으로 Django 라이브러리를 제공합니다. 이를 이용하여 이번 포스팅에는 기본적인 웹 서버 기능을 구현하고자 합니다. (Anaconda 다운로드, Pycharm 다운로드) 파이참을 이용해 New Project를 선택하면 다음과 같은 화면이 보입니다. 왼편의 Django를 선택한 후, 오른편에서 적절한 프로젝트 위치와 인터프리터 경로를 설정합니다. 이후 템플릿 언어를 설정하는 칸이 있는데, 여기에는 Django와 Jinja2가 있습니다. 저는 Jinja2를 사용하겠습니다. (템플릿 언어로 Django를 사용하셔도 무방합니다.) * 장고를 개별적으로 받아서 사용하는 경우 아래와 같은 커맨드로 장고 프로젝트 생성이 가능합니다. $ djang.. 싱글톤 패턴(Singleton Pattern) 간단하게 구현하기 파이썬 언어는 OOP(Object Oriented Programming, 객체지향 프로그래밍)로써, 다양한 개발 기법들이 존재합니다. 그 중에서 이번에 소개해드릴 기법은 디자인패턴 중에 하나인 싱글톤(Singleton)입니다. 프로그래밍을 공부하시다 보면, "아 이거는 객체처럼 쓸 수 있긴한데, 프로그램 시작할때만 생성하고 다른 어느 클래스에서 불러와도 동일한 (필드)값들을 유지하면 좋겠다." 라는 생각을 한번쯤 해보셨을 것입니다. 이를 위한 패턴이 바로 싱글톤(Singleton)입니다. 조금 더 자세히 설명을 드리자면, 싱글톤 패턴은 어떠한 클래스가 최초 한번만 메모리를 정적(Static)으로 할당하고 해당 메모리에 인스턴스를 만들어서 사용하는 기법입니다. 따라서 생성자가 여러 차례 호출되더라도 실제로.. 브루트 포스(Brute Force, 완전 탐색) 브루트 포스(Brute Force)는 거의 모든 문제에 사용할 수 있는 기법으로 완전 탐색이라고도 합니다. 이 기법은 이름처럼,"맹목적으로, 모든 경우의 수를 탐색하여 결과를 도출하는 기법" 입니다. 이 기법은 어쩔수없이 모든 경우의 수를 탐색해 봐야만 하는 경우나, 모든 경우의 수를 요구하는 문제에서 주로 사용됩니다. 예를들어, 1부터 100까지의 합을 구하는 문제가 있을 때 아래와 같이 모든 경우의 수( 1부터 100까지) 탐색하여 그 합을 구하는 방식이 브루트 포스가 될 수 있습니다. 123sum = 0for i in range(1, 101): sum += ics 이 뿐 아니라 가장 대표적인 예시로, 순열을 구하는 문제가 있습니다. 예를들어, 1부터 5까지의 수를 이용해 모든 수에 대한 순열을 구하.. 서버(Server), 클라이언트(Client) -기초, 브라우저 Server와 Client는 가장 많이 사용되는 용어 중 하나입니다. 해당 용어에 대한 관계를 간단하게 말하자면 아래와 같습니다. "두 개의 프로그램 간에서 Server는 서비스를 제공(응답)하는 측면, Client는 해당 서비스를 요청하고 받는 측면" 위의 관계에 따라 Server와 Client는 단일 컴퓨터 내에서도 이루어질 수 있지만, 통신을 이용하여 원격으로 이루어질 경우 큰 의미를 갖습니다. 그래서 보통 웹 상에서 많이 사용되는 개념입니다. 이번 포스팅에서는 사용자가 브라우저를 통해 접속했을 때의 서버, 클라이언트 관계와 과정에 대하여 간략히 다뤄보도록 하겠습니다. 가장 먼저, 사용자는 보통 브라우저(Chrome, Explorer, Safari 등) 소프트웨어를 통해 웹에 접속하곤 합니다. 그리.. 깊이우선 탐색(DFS), 넓이우선 탐색(BFS) 깊이우선 탐색(DFS, Depth-first Search)과 넓이우선 탐색(BFS, Breadth-first Search)은 그래프에서 사용되는 가장 대표적이며, 어쩌면 맹목적인 두 가지 탐색 기법입니다. (맹목적인이라는 말을 언급한 이유는 기본적으로, 원하는 결과를 도출하기 위한 방향이 없이 해당 노드에서 모든 경우에 대하여 탐색을 수행하기 때문입니다.) 두 가지 방식에 대한 차이는 탐색하는 모든 경우를 깊이에 우선하여 탐색을 수행할 것이냐, 넓이에 우선하여 탐색을 수행할 것이냐 라는 것입니다. 깊이에 우선한다는 것은 현재 노드에서 이동 가능한(연결된) 다음 레벨의 노드를 확인한 후, 곧바로 현재 노드 위치를 선택된 다음 레벨의 노드로 변경한다는 것입니다. 이때, 다음 레벨의 노드에서 원하는 결과를 찾.. 분할 정복(Divide and Conquer) 기법의 이름 그대로 큰 문제를 분할하여, 작은 문제들(Sub problems)로 나눈 뒤 그 결과들을 합쳐 기존의 큰 문제를 해결해나가는 기법입니다. 네이버 사전에 검색하면 아래와 같은 결과가 나옵니다. 분할정복의 경우 재귀적으로 해결하는 방식이 가장 많이 사용되곤 합니다. 위 사전에서 설명하듯 성질이 같은 여러 개의 부분 문제로 쪼개고, 쪼개진 문제(Sub problem)에서 동일한 방식으로 다시 쪼개고, 쪼개고 ... 쪼개다가 더이상 나눌 수 없을 경우 해당 Sub problem에서 해를 구하고 재귀적으로 돌아오면서 전체의 큰 문제를 해결합니다. 예를 들어 아래와 같은 [배열에서 1의 개수]를 구하는 문제가 있다고 합시다. (물론 2차원 배열이기 때문에, 2중 반복문을 통해 1의 개수를 찾는 것이 가.. 동적 프로그래밍(Dynamic Programming) 알고리즘을 공부하게 되면 보통 가장 먼저 접하게 되는 기법입니다. 그만큼 등장빈도도 굉장히 높고, 다양한 문제를 쉽게 접할 수 있습니다. 네이버 사전에 검색하면 아래와 같은 결과가 나옵니다.. 다단 배치 과정, 확률적 다단 결정 과정 등 어려운 말들이 많지만 추후에 천천히 공부해보기로 하고... 순차적으로 접근하는 문제에서 가장 많이 사용되는 기법으로, 동적 프로그래밍의 가장 중요한 개념은 다음과 같습니다. "이전에 사용한 결과값을 이용해, 다음의 결과값을 구한다." 동적 프로그래밍은 하나의 문제를 여러 개의 작은 부분 문제(Sub problem)으로 나누어 해결하는 문제 해결 기법입니다. 그래서 대부분의 문제들을 [이전에 해결한 문제에서 도출된 결과값] 들을 사용하여 [다음 문제의 결과값]을 구하기 위.. 이전 1 2 다음