반응형

 

우분투(Ubuntu) 환경에서 장고(Django)를 이용해 간단한 REST API 서버를 구축하는 방법입니다.

이 예제는 AWS EC2 인스턴스에서도 실행 및 테스트가 가능합니다.

STEP 1. 기본 환경 설정

우선 시스템 패키지를 업데이트하고, 파이썬 가상환경을 만들기 위한 도구를 설치합니다.

sudo apt update
sudo apt install python3-venv python3-pip -y

 

 

STEP 2. 프로젝트 디렉토리 생성 및 가상환경 설정

프로젝트 폴더를 만들고 가상환경을 활성화합니다. 가상환경을 사용하면 다른 프로젝트와 패키지 충돌을 방지할 수 있습니다.

mkdir my_api_project && cd my_api_project
python3 -m venv venv
source venv/bin/activate

 

 

STEP 3. 필수 패키지 설치

Django와 API 개발을 편리하게 해주는 Django REST Framework(DRF)를 설치합니다.

pip install django djangorestframework

 

 

STEP 4. 장고 프로젝트 및 앱 생성

이제 실제 프로젝트 구조를 생성합니다.

django-admin startproject config .  # 현재 디렉토리에 프로젝트 생성
python manage.py startapp api       # api라는 이름의 앱 생성

 

 

STEP 5. 설정 추가 (config/settings.py)

config/settings.py 파일을 열어 INSTALLED_APPS 항목에 rest_framework와 방금 만든 api 앱을 추가합니다.

 

$ vi config/settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
    'api',
]

 

 

STEP 6. 간단한 API 뷰 작성 (api/views.py)

접속했을 때 "Hello, Django API!"라는 메시지를 보여주는 간단한 함수형 뷰를 만듭니다.

from rest_framework.decorators import api_view
from rest_framework.response import Response

@api_view(['GET'])
def hello_api(request):
    return Response({"message": "Hello, Django API!"})

 

 

STEP 7. URL 연결

api/urls.py 생성

api 폴더 안에 urls.py 파일을 새로 만들고 아래 내용을 적습니다.

from django.urls import path
from .views import hello_api

urlpatterns = [
    path('hello/', hello_api),
]

 

 

config/urls.py 수정

메인 프로젝트 설정에서 방금 만든 api 경로를 포함시킵니다.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('api.urls')),
]

 

 

STEP 8. 서버 실행 및 확인

마지막으로 데이터베이스 마이그레이션을 진행하고 (없어도 migrate를 실행해도 문제없습니다.) 서버를 실행합니다.

python3 manage.py migrate
python3 manage.py runserver 0.0.0.0:8000

 

 

(외부 접속을 가능하게 하기위해 0.0.0.0:8000로 run합니다.)

 

이제 브라우저나 curl을 이용해 아래 주소로 접속해봅시다.

- 외부에서 접속할 경우

http://<서버 IP 주소>:8000/api/hello/    (e.g., http://143.232.12.33:8000/api/hello/)

 

- 로컬에서 접속할 경우

http://localhost:8000/api/hello/

 

※ 주의 

 외부에서 접속하는 경우 " config/settings.py" 파일에서 ALLOWED_HOSTS를 수정해야합니다. 안그러면 외부에서 API 요청이 동작하지 않습니다. 왜냐하면 장고의 보안기능 때문에 허용되지 않은 호스트 요청을 차단하기 때문입니다. 따라서 허용 리스트에 주소를 추가해주어야합니다.

(1) 혹은 (2) 둘 중에 하나로 수정하시면 됩니다.

 

(1) 특정 IP만 허용할 경우

ALLOWED_HOSTS = ['100.100.22.22']    (현재 서버 주소가 " 100.100.22.22" 라면)

 

(2) 테스트 용으로 모든 접속을 허용할 경우

ALLOWED_HOSTS = ['*']

 

 

 

성공했다면 아래와 같은 JSON 응답이 보일 겁니다.

 

 

 아래는 만약 우분투 서버를 껐다 켰거나, 터미널을 새로 열었을 때 다시 서버를 구동하는 과정입니다 내가 만들어둔 가상환경 폴더로 돌아가서 활성화를 해야합니다 (터미널 프롬프트 앞에 (venv)라는 표시가 없다면, 현재 가상환경이 꺼진 상태입니다.)

# 1. 프로젝트 폴더로 이동
cd ~/my_api_project

# 2. 가상환경 활성화
source venv/bin/activate

# 3. 서버 실행
python3 manage.py runserver 0.0.0.0:8000
 
반응형