Swagger

ํ™ฉ์—ฐ์ค€ยท2024๋…„ 7์›” 22์ผ

Lambda Service ๋ฐฑ์—”๋“œ ์ธํ„ด

๋ชฉ๋ก ๋ณด๊ธฐ
7/9

Swagger ์‚ฌ์šฉ ์ด์œ 

FE์™€ BE์˜ ์›ํ™œํ•œ ์†Œํ†ต์„ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์œ ์ง€, ๋ณด์ˆ˜, ๊ฐœ๋ฐœ ์†๋„๋ฅผ ๋ชจ๋‘ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
Postman, dbeaver๋ฅผ ์ง์ ‘ ์ผœ์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚ซ๋‹ค.

base.py

base.py์— SWAGGER_SETTINGS ์ถ”๊ฐ€
JWT ํ† ํฐ์œผ๋กœ authorization์„ ๋ถ€์—ฌํ•˜์˜€๋‹ค.

SWAGGER_SETTINGS = {
    'USE_SESSION_AUTH': False,
    'SECURITY_DEFINITIONS': {
        'BearerAuth': {
            'type': 'apiKey',
            'name': 'Authorization',
            'in': 'header',
            'description': "JWT Token"
        }
    },
    'SECURITY_REQUIREMENTS': [{
        'BearerAuth': []
    }]
}

urls.py

swagger url์„ ulrpatterns์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.
schema_view๋ฅผ ํ™œ์šฉํ•ด customํ•˜๊ฒŒ ํŽ˜์ด์ง€ ์ฒซ ํ™”๋ฉด์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
redoc์€ ๋‹ค๋ฅธ UI๋ฅผ ๋ณด์ธ๋‹ค.

๐Ÿฆด

  • requirements.txt ์— drf-yasg==1.21.7 ์ถ”๊ฐ€๋ฅผ ์žŠ์ง€๋ง์ž!
  • pip install --upgrade setuptools
  • base.py INSTALLED_APPS ์— 'drf-yasg' ์ถ”๊ฐ€ํ•ด์•ผ๋งŒ swagger templates์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
schema_view = get_schema_view(
    openapi.Info(
        title="Lambda Genesis Api",
        default_version='Version : 1.0.0',
        description="Lambda Genesis Api ๋ฌธ์„œ)",
        terms_of_service="~",
        contact=openapi.Contact(email="~"), # ๋ถ€๊ฐ€์ •๋ณด
        license=openapi.License(name="Lambda"),     # ๋ถ€๊ฐ€์ •๋ณด
    ),
    public=True,
    permission_classes=[permissions.AllowAny],
)
urlpatterns = [
    path(r'swagger(?P<format>\.json|\.yaml)/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
    path(r'swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    path(r'redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc-v1'),

Authorize

http://127.0.0.1:8000/swagger/

  • login โ†’ id, password ์ž…๋ ฅ

๐Ÿ”‘JWT Token Receive

  • Authorize : JWT <๐Ÿ”‘ jwt token ์ž…๋ ฅ> or Bearer <๐Ÿ”‘ jwt token ์ž…๋ ฅ>

โ€ผ๏ธJWTโ€ โ€œToken // ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

gunicorn์œผ๋กœ ๋„์šฐ๋ฉด swagger ์•ˆ๋ณด์ด๋Š” ์ด์œ ?

https://velog.io/@may_soouu/nginx-swagger-ui

deployment.yaml ์—์„œ ์œ„์™€ ๊ฐ™์ด django์—์„œ ์‹คํ–‰ํ•˜๊ฒŒ๋” ํ•˜์—ฌ dev ์›น์—์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ๋” ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.(eks ์‚ฌ์šฉ)

ํ•œ๋ฒˆ์— ์ ์šฉ์ด ์•ˆ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  rancher๋ฅผ ํ™•์ธํ•˜์—ฌ image๊ฐ€ ์—…๋ฐ์ดํŠธ๊ฐ€ ์•ˆ๋œ ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๋‹ค. argocd์—์„œ sync๋ฅผ ์‚ฌ์šฉํ•ด update ํ›„ ์ ‘์†ํ•˜์˜€๋”๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ ‘์†์ด ๋˜์—ˆ๋‹ค.

TO DO

urls.py์—์„œ if ๋ฌธ์œผ๋กœ ๋””๋ฒ„๊น… ๋ชจ๋“œ๋กœ ๋“ค์–ด๊ฐˆ๋•Œ๋งŒ swagger ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•ด์ค˜์•ผํ•จ. (์ฆ‰, dev mode์ผ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ด์ค˜์•ผํ•จ.)

question, add student ๊ฐ™์€ ์ž‘์—…์€ input ์ด requiredํ•จ์œผ๋กœ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€