서버 한 대 안 (수정중)
목표 서버 한 대 안에서 Apache·gunicorn·Django·PostgreSQL 이 각각 무슨 일을 하고 어떻게 연결되는지 이해한다.
앞 '요청 여정' 강의에서 요청이 우리 서버 앞까지 오는 길을 봤습니다. 이번엔 그 요청이 서버 안으로 들어온 뒤 어떤 프로그램들을 거쳐 화면이 만들어지는지 봅니다.
1. 서버 한 대 안의 프로그램들
서버 한 대 안에서는 역할이 다른 프로그램 여럿이 함께 돌며 협업합니다. 한 프로그램이 다 하는 게 아닙니다.
| 프로그램 | 하는 일 |
|---|---|
| Apache | 바깥에서 오는 요청을 맨 앞에서 받는 웹서버 |
| gunicorn | 우리 Django 코드를 실제로 실행하는 프로그램 |
| Django | 우리가 짠 코드 (주소·화면·로직) |
| PostgreSQL | 데이터를 저장하는 데이터베이스 |
2. 전체 흐름
바깥 요청이 Apache 로 들어와, gunicorn → Django 를 거치고, 필요하면 PostgreSQL 에서 데이터를 꺼내 화면을 만들어 돌려줍니다.
3. 단계별 역할
- Apache: 바깥 요청을 가장 먼저 받습니다. CSS·이미지 같은 정적 파일은 직접 응답하고, 나머지 요청은 뒤의 gunicorn 으로 넘깁니다.
- gunicorn: Apache 가 넘긴 요청을 받아 우리 Django 코드를 실제로 실행합니다. gunicorn 은 바깥에 직접 열려 있지 않고, Apache 를 거쳐야만 닿습니다.
- Django: 우리가 짠 코드입니다. 주소를 보고 어떤 화면·로직을 처리할지 정하고, 필요하면 데이터베이스에 데이터를 물어봅니다.
- PostgreSQL: 데이터를 영구히 저장하는 데이터베이스입니다. Django 가 요청한 데이터를 꺼내 줍니다.
4. 코드와 데이터 분리
여기서도 앞서 본 원칙이 그대로입니다. gunicorn 이 실행하는 코드는 배포할 때마다 갈아 끼우지만, PostgreSQL 안의 데이터는 그 자리에 남습니다. 그래서 새 버전을 올려도 사용자 데이터는 사라지지 않습니다.
그리고 CSS·이미지 같은 정적 파일은 앞 '정적 파일' 강의에서 봤듯 Apache 가 직접 내보냅니다. 이미 완성된 파일이라 Django 까지 갈 필요가 없기 때문입니다.
마무리
- 핵심 정리: 서버 한 대 안에서 Apache(요청을 받는 웹서버) → gunicorn(Django 실행) → Django(우리 코드) → PostgreSQL(데이터 저장)이 한 줄로 협업해 화면을 만듭니다. 정적 파일은 Apache 가 직접 주고, 코드는 갈아 끼워도 데이터는 남습니다.
- 주의 사항: gunicorn 은 바깥에 직접 열려 있지 않습니다. 모든 바깥 요청은 Apache 를 거칩니다(보안).
- 다음 시간: 이 프로그램들과 데이터·정적 파일 중, '배포'가 무엇을 어떻게 바꾸는지 살펴봅니다.