웹 프로그래밍 HTTP(S) 프로토콜로 통신하는, 클라이언트와 서버를 개발하는 것 ex) 장고와 같은 웹 프레임워크를 사용하여 웹 서버를 개발하는 것 즉, 웹 클라이언트가 요청하고 웹 서버가 응답하는 클라이언트-서버 프로그램이 동작하는 것 웹 클라이언트 웹 브라우저 이외에도 웹 서버에 요청을 보내는 웹 클라이언트는 다양하다 웹 브라우저를 사용하여 요...
HTTP 프로토콜 HTTP(Hypertext Transfer Protocol)은 웹 서버와 웹 클라이언트 사이에서 데이터를 주고받기 위해 사용하는 통신 방식으로 TCP/IP 프로토콜 위에서 동작한다. 즉, 웹을 이용하려면 웹 서버와 웹 클라이언트는 각각 TCP/IP 동작에 필수적인 IP 주소를 가져야 한다 > HTTP는 이름대로라면 하이퍼텍스트(HTM...
URL 설계 URL 설계는 웹 서버 로직 설계의 첫걸음이고, 사용자 또는 웹 클라이언트에게 웹 서버가 가지고 있는 기능을 명시해주는 중요한 단계이다. 전체 프로그램 로직을 생각하면서 차후에 로직이 변경되더라도 URL 변경은 최소화할 수 있도록 유연하게 설계하는 것이 중요하다. URL 스킴 : URL에 사용된 프로토콜 호스트명 : 웹 서버의 호스트명으로 ...
웹 서버와 웹 애플리케이션 서버 구분 정적 페이지 vs 동적 페이지 정적 페이지는 누가, 언제 요구하더라도 항상 같은 내용을 표시하는 웹 페이지이다. 해당 웹 서비스의 제공자가 사전에 준비하여 서버 측에 배치한 것으로 동일한 리소스(URL)의 요청에 대해서는 항상 동일한 내용의 페이지를 반환한다. 동적 페이지는 요구에 따라 각각 다른 내용이 반환되는 페...
웹 라이브러리 구성 파이썬 3.x 버전에서는 다음과 같이 관련된 모듈들을 모아서 패키지를 만들었고, 모듈명을 통해 서버쪽 라이브러리와 클라이언트쪽 라이브러리를 좀 더 확실히 구분짓고 있다. 출처 : https://ssola22.tistory.com/13 urllib 패키지에는 웹 클라이언트를 작성하는 데 사용되는 가장 빈번하게 사용되는 모듈들이 있다....
웹 서버 프로그램을 작성할 때는 직접 파이썬 라이브러리를 사용해서 개발하기 보다는 웹 프레임워크를 사용해서 개발하는 경우가 많다. 프레임워크는 개발자가 웹 서버 프로그램을 개발하기 쉽도록 저수준의 기능을 이미 만들어 놓은 기반 프로그램으로 웹 서버 프로그램 개발자는 프레임워크를 활용하여 응용 로직만 개발하면 되기 때문에 훨씬 효율적이다. 간단한 웹 서버 ...
CGI 방식은 요청이 들어올 때마다 처리를 위한 프로세스가 생성되는 방식이라 짧은 시간에 많은 요청을 받으면 서버의 부하가 높아져서 프로세스가 멈추거나 다운될 수 있다. 이러한 CGI 방식의 단점을 해결하고 파이썬 언어로 웹 서버와 웹 애플리케이션 간의 연동 규격을 정의한 것이 WSGI(Web Server Gateway Interface) 규격 이다. ...
MVC 패턴 기반 MVT MVC(Model-View-Controller)를 기반으로 한 프레임워크인 장고는 View를 Template, Controller를 View라고 부른다. Model은 DB에 액세스하는 컴포턴트 이고, View는 데이터를 가져오고 변형하는 컴포넌트인 반면에 Template는 데이터를 사용자에게 보여주는 컴포넌트이다. (MVT) 객...
웹 사이트를 설계할 때 가장 먼저 해야할 일은 프로그램이 해야 할 일을 적당한 크기로 나누어서 모듈화하는 것이다. 장고에서는 웹 사이트에 대한 전체 프로그램을 프로젝트라고 하고 모듈화된 단위 프로그램을 애플리케이션이라고 한다. MVT 패턴 Model : DB에 저장되는 데이터를 의미 (블로그의 내용을 DB로부터 가져오거나 저장, 수정하는 기능) Tem...
설문에 해당하는 질문을 보여준 후 질문에 포함되어 있는 답변 항목에 투표하면 그 결과를 알려주는 프로그램 UI 설계 index.html : 질문 리스트 detail.html : 질문에 대해 투표할 수 있도록 답변 항목 폼으로 제공 results.html : 질문에 따른 투표 결과 테이블 설계 Question 테이블 설계 Choice 테이블 설계 !...
프로젝트에 필요한 디렉토리 및 파일을 구성 설정 파일을 셋팅 기본 테이블 생성 관리자 계정 슈퍼유저 생성 프로젝트가 만들어지면 그 하위에 애플리케이션 디렉토리 및 파일을 구성한다. 장고는 이를 위한 장고 쉘 커맨드를 제공한다. 최종 디렉토리 체계 이 외에도 templates, static, logs 등의 디렉토리가 필요하다. 프로젝트 생성 mysit...
애플리케이션 개발 - Model 코딩 테이블 정의 polls 애플리케이션은 Question과 Choice 두 개의 테이블이 필요하다. 테이블은 models.py 파일에 정의한다. PK는 클래스에 지정해주지 않아도 장고는 항상 PK에 대한 속성을 Not Null 및 Autoincrement로 이름은 id로 해서 자동으로 만들어 준다. FK는 항상 다른 테...
애플리케이션 개발하기 - View 및 Template 코딩 polls 애플리케이션을 개발할 때 3개의 페이지가 필요했다. 이를 위한 뷰와 템플릿을 코딩한다. URL과 뷰는 1:1 관계로 매핑된다. 이러한 URL/뷰 매핑을 URLconf라고 하며 urls.py 파일에 작성한다. 이 설계 내용을 개발하기 위해 아래 순서대로 코딩을 진행한다. 로직의 흐름상...
필드 순서 변경 테이블의 데이터를 변경하는 것이 아니라 테이블을 보여주는 UI 양식을 변경하려면 voting/admin.py 파일을 변경하면 된다. ModelAdmin 클래스를 상속받아 QuestionAdmin 클래스를 정의하고 그 클래스를 admin.site.register() 함수의 두 번째 인자로 등록해주면 된다. 필드 분리 voting/adm...
Admin 사이트가 UI로 보면서 데이터를 관리할 수 있어 편리하다면, 쉘 데이터 처리는 복잡한 조건 검색처럼 더 다양한 데이터 관리 명령이 가능하다. 따라서 복잡한 데이터 처리 또는 별도로 웹 브라우저로 접속할 필요가 없는 경우 쉘로 데이터를 처리하는 것이 보통이다. python manage.py shell 명령어로 파이썬 쉘을 시작한다. 장고 파이...
MVT에서 UI를 담당하는 것이 템플릿 시스템이다. 장고의 템플릿 시스템은 템플릿 문법으로 작성된 템플릿 코드를 해석하여 템플릿 파일로 결과물을 만든다. 이 과정을 렌더링이라고 한다. 결과물인 템플릿 파일은 HTML, XML, JSON 등의 단순한 텍스트 파일이다. > 템플릿 코드 vs 템플릿 파일 렌더링 전의 템플릿 문법에 따라 작성된 파일은 템플릿 코...
앞서 detail.html 템플에서 투표용 라디오 버튼을 보여주는 폼을 작성했고, vote() 뷰 함수에서 이 폼을 처리하는 로직을 작성했다. HTML에서의 폼 웹 사이트를 개발할 때 사용자로부터 입력을 받기 위해 폼을 사용한다. ... 사이에 있는 엘리먼트들의 집합으로 폼을 통해 텍스트를 입력할 수도 있고, 항목을 선택할 수도 있다. 폼에 입력된 데...
뷰는 요청을 받아서 응답을 반환해주는 호출 가능한 객체이다. 장고에서는 뷰를 함수로도 작성할 수 있고 클래스로도 작성할 수 있다. 사실 함수형 뷰보다 클래스형 뷰가 장점이 많다. 클래스형 뷰를 사용하면 상속과 믹스인 기능을 사용해서 코드를 재사용할 수 있고, 뷰를 체계적으로 구성할 수 있다. 또한 제네릭 뷰 역시 클래스형 뷰로 작성되어 있다. 클래스 뷰...
장고의 로깅은 파이썬의 로깅 체계를 그대로 따르면서 일부만 추가됐다. 파이썬의 로깅 모듈은 로거, 핸들러, 필터, 포맷터 4가지 주요 컴포넌트를 정의하고 있다. 장고의 runserver나 웹 서버에 의해 장고가 실행될 때 장고는 settings.py 파일에 정의된 LOGGING_CONFIG, LOGGING 항목을 참고하여 로깅에 관련된 설정을 처리한다. ...
책을 출판하는 데 필요한 정보들인 책, 저자, 출판사에 대한 정보들을 관리하는 웹 애플리케이션인 books 애플리케이션을 설계한다. 새로운 애플리케이션을 만들기 위해 먼저 상위 프로젝트를 만든다. 프로젝트는 예제에서 사용한 testsite를 사용하고 하위에 books 애플리케이션을 코딩할 것이다. 코딩 순서 애플리케이션 설계 프로젝트 뼈대 만들기 Mo...
각 애플리케이션의 첫 페이지들은 만들었지만 프로젝트의 첫 페이지인 루트(/) URL에 대한 처리 로직은 아직 개발하지 못한 상태 프로젝트 첫 페이지 네비게이션 항목 중 [Project_Home] 항목을 클릭했을 때 에러가 발생한 이유가 프로젝트 첫 페이지인 루트(/) URL에 대한 처리 로직이 없기 때문이다. 로직 설계 UI 설계 URLconf 코딩...
URLconf 코딩 voting/urls.py 파일 수정 View 코딩 함수형 뷰 -> 클래스형 뷰 voting/views.py 파일 수정 Template 코딩 상속 기능 추가하기 base.html을 이미 코딩했기 때문에 이를 상속 받는 basevoting.html 템플릿 파일을 만들고 기존 각 템플릿 파일에서 basevoting.html 템플릿을...
개발한 것을 실제로 서비스하기 위해선 개발한 프로그램을 운영 환경에 배포하고 실행해야 한다. 개발 환경에서 운영 환경으로 옮겨가기 위해선 개발 시 지정했던 설정 사항을 변경해줘야 하고 운영 환경의 웹 서버에서도 만든 애플리케이션을 인식할 수 있도록 설정 사항 변경이 필요하다. 장고의 wsgi.py 파일 startproject 명령어를 통해 프로젝트의 뼈대...
클라우드 서비스란? 인터넷에 있는 서버를 빌려서 사용하는 것으로 필요한 만큼 서버 자원을 빌려 쓰고 쓴 만큼 비용을 지불하는 방식이다. > 클라우드 서비스를 제공해주는 사이트는 AWS, Digital Ocean, Heroku, PythonAnywhere 등 상당히 많은데 여기선 PythonAnywhere을 사용해본다. 그러나 상용 서비스 운영 예정이라면 ...
모든 작업을 완료한 후 사이트를 구동시켜보니 특정 사이트들에서 500 에러가 발생했다. 어디서 에러가 발생했는 지 알기 위해 log 기록들을 확인했다. django.db.utils.OperationalError: unable to open database file 에러가 발생하고 있었다. db 파트에서 에러가 나고 있던 것인데 sqlite의 파일 경로...