Web Application
Web application (web service) 개발
- 인터넷을 통해 사용자에게 제공되는 소프트웨어 프로그램을 구축하는 과정
- 다양한 디바이스(모바일, 태블릿, PC 등)에서 웹 브라우저를 통해 접근하고 사용할 수 있음
클라이언트와 서버
- 웹의 동작 방식: 클라이언트 - 서버 구조
- Client: 서비스를 요청하는 주체 (사용자의 웹 브라우저, 모바일 웹)
- Server: 클라이언트의 요청에 응답하는 주체 (웹 서버, 데이터베이스 서버)
- 일반적인 웹 서비스에서는 클라이언트가 페이지를 달라고 요청할 경우 서버가 페이지를 응답해줌
- 우리가 웹 페이지를 보게 되는 과정
- 웹 브라우저(클라이언트)에서 ‘google.com’을 입력 후 Enter
- 웹 브라우저는 인터넷에 연결된 전세계 어딘가에 있는 구글 컴퓨터(서버)에게 ‘메인 홈페이지.html’파일을 달라고 요청
- 요청을 받은 구글 컴퓨터는 데이터베이스에서 ‘메인 홈페이지.html’파일을 찾아 응답
- 웹 브라우저는 전달받은 ‘메인 홈페이지.html’파일을 사람이 볼 수 있도록 해석해주고 사용자는 구글의 메인 페이지를 보게 됨
Frontend & Backend
- Frontend (프론트엔드)
- 사용자 인터페이스(UI)를 구성하고, 사용자가 애플리케이션과 상호작용할 수 있도록 함
- HTML, CSS, JavaScript, 프론트엔드 프레임워크 등
- HTML: 웹 페이지의 의미와 구조를 정의하는 언어
- CSS: 웹 페이지의 디자인과 레이아웃을 구성하는 언어
- Vue.js는 프론트엔드로 활용되는 대표적인 프레임워크
- Backend (백엔드)
- 서버 측에서 동작하며, 클라이언트의 요청에 대한 처리와 데이터베이스와의 상호작용 등을 담당
- 서버 언어(Python, Java 등) 및 백엔드 프레임워크, 데이터베이스, API, 보안 등
- Django는 백엔드로 활용되는 대표적인 프레임워크
Framework
Web Framework
- 웹 애플리케이션을 빠르게 개발할 수 있도록 도와주는 도구
- 개발에 필요한 기본 구조, 규칙, 라이브러리 등을 제공 (로그인/로그아웃, 회원관리, 데이터베이스, 보안 등)
Django Framework
- Django란?
- Python 기반의 대표적인 웹 프레임워크
- 클라이언트-서버 구조의 서버를 구현하는 것이 Django를 배우는 목적
- Django를 사용하는 이유
- 다양성: Python 기반으로 웹, 모바일 앱 백엔드, API 서버 및 빅데이터 관리 등 광범위한 서비스 개발에 적합
- 확장성: 대량의 데이터에 대해 빠르고 유연하게 확장할 수 있는 기능을 제공
- 보안: 취약점으로부터 보호하는 보안 기능이 기본적으로 내장되어 있음
- 커뮤니티 지원: 개발자를 위한 지원, 문서 및 업데이트를 제공하는 활성화 된 커뮤니티
- 검증된 웹 프레임워크: 대규모 트래픽 서비스에서도 안정적인 서비스 제공
가상 환경
가상 환경(Virtual Environment)
하나의 컴퓨터 안에서 또 다른 독립된 파이썬 환경
가상 환경 생성 및 활성화
-
가상 환경 생성
python -m venv venv
- 현재 디렉토리 안에 venv라는 폴더가 생성됨
- venv 폴더 안에는 파이썬 실행 파일, 라이브러리 등을 담을 공간이 마련됨
- venv라는 이름의 가상 환경을 생성한 것
-
가상 환경 활성화
source venv/Scripts/activate
- 활성화 후, 프롬프트 앞에 (venv)와 같이 표시된다면 성공한 것
- Mac / Linux에서는 명령어가 다르니 주의:
source venv/bin/activate
-
가상 환경 종료
deactivate
- 활성화한 상태에서 deactivate 명령을 입력하면, 다시 Python Global 환경으로 돌아옴
의존성 패키지
- 의존성: 하나의 소프트웨어가 동작하기 위해 필요로 하는 다른 소프트웨어나 라이브러리
- 의존성 패키지: 프로젝트가 의존하는 “개별 라이브러리”들을 가리키는 말
- 패키지 목록 확인
pip list
- 현재 가상 환경에 설치된 라이브러리 목록을 확인하는 명령어
- 갓 생성된 가상 환경은 추가 설치된 패키지가 없음
의존성 관리: 환경의 일치
-
의존성 기록 (내보내기)
pip freeze > requirements.txt
- 현재 가상환경에 설치된 모든 패키지와 버전을 파일로 저장
>는 pip 명령어가 아닌 CLI(shell)의 Redirection operator
- 이전 명령어의 출력을 파일로 redirect, 즉 생성하고 작성한다.
- 같은 명령어를 다시 사용할 경우 이전 파일의 내용을 덮어쓴다.
-
의존성 설치 (가져오기)
pip install -r requirements.txt
- requirements.txt에 명시된 라이브러리를 한 번에 설치
-r 옵션은 --requirement의 축양형
- 패키지 이름을 하나씩 직접 입력하는 대신 “지정된 텍스트 파일을 읽어서 그 안에 적힌 모든 패키지를 설치해라”라고 지시하는 옵션
- 의존성 패키지 관리가 필요한 이유
- 환경의 통일
- 버전이 다른 경우 함수명이나 동작이 달라질 수 있음
- "내 컴퓨터에선 되는데 네 컴퓨터에선 안 돼" 문제 해결
- 협업 효율
- 프로젝트가 커질수록 사용하는 패키지의 개수도 늘어나게 됨
- 팀원 간 동일한 개발 환경을 즉시 구축 가능
가상 환경 주의사항
- 가상 환경에 "들어가고 나오는" 것이 아니라 사용할 Python 환경을 "On/Off"로 전환하는 개념
- 가상 환경 활성화는 현재 터미널 환경에만 영향을 끼침
- 새 터미널 창을 열면 다시 활성화해야 함
- 프로젝트마다 별도의 가상 환경을 사용
- 일반적으로 가상 환경 폴더 venv는 관련된 프로젝트와 동일한 경로에 위치시킴
- 폴더 venv는 ·gitignore파일에 작성되어 원격 저장소에 공유하지 않음
- 저장소 크기를 줄여 효율적인 협업과 배포를 가능하게 하고
- OS 별 차이점으로 인한 문제를 방지하기 위함
- 대신 requirements. txt를 공유하여 각자의 가상 환경을 구성
- 가상 환경이 필요한 이유
- 프로젝트마다 다른 버전의 라이브러리 사용
- 한 프로젝트에서는 Django 4.2를 다른 프로젝트에서는 Django 5.2를 사용해야 할 수도 있음
- 가상 환경을 사용하면 서로 다른 버전을 동시에 설치해도 충돌 없이 각각의 프로젝트를 유지할 수 있음
- 의존성 충돌 방지
- 프로젝트별로 라이브러리를 독립적으로 관리하게 해 줌
- 여러 프로젝트가 동시에 같은 라이브러리를 쓰더라도 버전 충돌 문제를 예방
- 팀원 간 협업
- 누구든지 동일한 방식으로 가상 환경을 만들어서, 똑같은 버전의 라이브러리를 설치하면 에러 가능성을 줄일 수 있음
요약
- 가상 환경 생성(
python -m venv venv)
- 가상 환경 활성화 (
source venv/Scripts/activate)
- 필요한 의존성 패키지 설치 (
pip install)
- 현재 환경의 패키지 목록을 "
pip freeze > requirements.txt"로 저장하여 의존성을 관리
- 다른 컴퓨터나 팀원도 같은 환경이 필요하다면, "
pip install -r requirements.txt"로 동일한 버전의 라이브러리를 설치
- 작업이 끝나면 "
deactivate"로 가상 환경을 비활성화