Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
115 commits
Select commit Hold shift + click to select a range
01914f4
models 수정
jimmy914 Apr 18, 2025
439bd29
Random mission 수정
jimmy914 Apr 18, 2025
ac66f91
Merge branch 'develop' of https://github.com/2025AlphaProject/alphaBE…
jimmy914 Apr 24, 2025
f789a70
pt 파일 추가
jimmy914 Apr 27, 2025
d241938
settings 파일 수정
jimmy914 Apr 27, 2025
dfa7227
feat : servieces.py 에다가 객체 인식코드 추가 후 requirements.txt 변경
jimmy914 Apr 27, 2025
f3a2c22
random mission api modify
jimmy914 Apr 28, 2025
b61a0ba
Merge branch 'develop' into fix/mission_api
YimTaeKeun Apr 29, 2025
3b558f9
fix : requirements.txt 파일을 수정하였습니다.
jimmy914 Apr 29, 2025
b905703
fix : requirements.txt 파일을 수정하였습니다.
jimmy914 Apr 29, 2025
0c998e4
freeze 재실행
jimmy914 Apr 29, 2025
8a99e1d
FIX: requirements 수정
YimTaeKeun Apr 29, 2025
af0407e
FIX: requiremnts 로그 포매터 추가
YimTaeKeun Apr 29, 2025
b856f50
feat:객체인식코드 검증
jimmy914 Apr 30, 2025
fedc037
mission check api modifying
jimmy914 Apr 30, 2025
7433d1b
객체인식 test 완료
jimmy914 Apr 30, 2025
a54ed38
테스트코드 만지는중...
jimmy914 Apr 30, 2025
c03f66a
mission api modifying and services.py modifying
jimmy914 May 1, 2025
849b86a
requiremenets.txt 수정
jimmy914 May 1, 2025
20f77fd
image file 삭제하고 test 코드 삭제
jimmy914 May 1, 2025
52b7ba4
FIX: 테스트 코드 수정
YimTaeKeun May 1, 2025
0a81830
FIX: 로그 설정 배포 환경으로 수정
YimTaeKeun May 1, 2025
9c3a6b9
Merge pull request #95 from 2025AlphaProject/fix/mission_api
YimTaeKeun May 1, 2025
549276e
HOTFIX: 서버 쪽 마이그레이션 안되는 문제 해결
YimTaeKeun May 1, 2025
7334be5
CHORE: 도커 파일 수정
YimTaeKeun May 1, 2025
98ce8b0
MODIFY: 카카오 리프레시 뷰 앱 키 네이티브 앱 키로 수정 (#96)
YimTaeKeun May 2, 2025
ce2e6ee
Merge pull request #97 from 2025AlphaProject/modify/#96-modifyRefresh
YimTaeKeun May 2, 2025
7172918
HOTFIX: 여행 경로 삭제 수정 (#98)
YimTaeKeun May 2, 2025
c547c7c
TEST: 단위 테스트 통과 (#98)
YimTaeKeun May 2, 2025
7050e21
HOTFIX: 카카오 맵 일일한도 초과시 api 우회 코드 작성 (#98)
YimTaeKeun May 2, 2025
0591518
MODIFY: 서버 분리에 따른 logstash 호스트 변경 (#98)
YimTaeKeun May 2, 2025
450e9ca
Merge pull request #99 from 2025AlphaProject/bug/#98-courseBug
YimTaeKeun May 2, 2025
3013157
HOTFIX: 랜덤 매션 부여 api 수정 (#100)
YimTaeKeun May 3, 2025
eb1511c
CHORE: 관리자 관리 모델 범위 확장 (#100)
YimTaeKeun May 3, 2025
549880d
HOTFIX: place id 출력 (#100)
YimTaeKeun May 3, 2025
2e05027
CHORE: 도커 컴포즈 로그 컨테이너 설정 삭제 (#100)
YimTaeKeun May 3, 2025
4df3101
Merge pull request #101 from 2025AlphaProject/bug/#100-randomMissionBug
YimTaeKeun May 3, 2025
a819c5d
HOTFIX: 미션 랜덤 부여 테스트 코드 삭제
YimTaeKeun May 3, 2025
c9f3438
FIX: RequestException 예외 처리 결과로 MOCK 데이터 전송 방법으로 지오코더 api 막히는 문제 해결 (…
YimTaeKeun May 3, 2025
b7a5bd6
FIX: 502일때 mockup 주는 것으로 변경 (#102)
YimTaeKeun May 3, 2025
752b7de
HOTFIX: 웹소켓 unique_code 추가 (#104)
YimTaeKeun May 3, 2025
fca2ac6
HOTFIX: 웹소켓 가입 아이디 결정 로직 수정 (#104)
YimTaeKeun May 3, 2025
5d459b3
FEAT: 여행 경로 추천에 days 파라미터 추가 (#104)
YimTaeKeun May 3, 2025
6fea321
Merge pull request #105 from 2025AlphaProject/bug/#104-websocketBug
YimTaeKeun May 3, 2025
a916c23
Merge pull request #103 from 2025AlphaProject/bug/#102-blockCI
YimTaeKeun May 3, 2025
160b9d4
FEAT: 로깅 정보 수정
YimTaeKeun May 3, 2025
7233af7
HOTFIX: 랜덤 미션 부여 api 수정
YimTaeKeun May 3, 2025
f699ab3
HOTFIX: 미션 아이디 삭제
YimTaeKeun May 3, 2025
c608261
FEAT: 미션 체크 여부 api 제작
YimTaeKeun May 4, 2025
f904000
HOTFIX: 미션 성공 여부 뷰 위치 수정
YimTaeKeun May 4, 2025
80270c0
hotfix : distance를 200kn에서 0.2km로 수정
jimmy914 May 4, 2025
a1f7088
HOTFIX: 미션 성공 여부 저장 로직 구현
YimTaeKeun May 4, 2025
9e060f8
HOTFIX: 회원 동의항목 없을 때의 예외 핸들링
YimTaeKeun May 4, 2025
245b35c
CHORE: 사소한 오타 수정
YimTaeKeun May 4, 2025
a980019
FEAT: 미션 사진 가져오기 api 제작
YimTaeKeun May 4, 2025
22378ec
FEAT: 실제 배포 카카오 앱 키로 변경 및 에러 핸들링
YimTaeKeun May 5, 2025
8a54df6
FIX: 유저 뷰에서 관리자 유저 배제
YimTaeKeun May 5, 2025
61d2b31
FIX: 유저 닉네임 중복 허용
YimTaeKeun May 5, 2025
7eeef74
Merge pull request #106 from 2025AlphaProject/hotfix/bug_course
YimTaeKeun May 5, 2025
5b41a6b
FEAT: 미션 상태 저장 API 개발 (#107)
YimTaeKeun May 5, 2025
4963ead
code remove
jimmy914 May 5, 2025
648dcfa
Merge pull request #110 from 2025AlphaProject/feature/#107-saveMissio…
YimTaeKeun May 5, 2025
c1512ef
Merge pull request #109 from 2025AlphaProject/modify/#108-gps_remove
YimTaeKeun May 5, 2025
e326a0b
CHORE: 요청 성공 값 변경
YimTaeKeun May 5, 2025
3fb2ab9
HOTFIX: CV 오류 수정
YimTaeKeun May 7, 2025
fecfe33
HOTFIX: CV 오류 수정
YimTaeKeun May 7, 2025
d97af3c
return를 raise로 변경
jimmy914 May 8, 2025
509d636
fix : views modify
jimmy914 May 8, 2025
b1e090c
FIX: 에러 수정
YimTaeKeun May 8, 2025
a22fd8d
FIX: 카카오 자바스크립트 키 추가 (#111)
YimTaeKeun May 8, 2025
70582f9
FIX: 도커 컴포즈 파일 수정 (#111)
YimTaeKeun May 8, 2025
fa24234
FIX: 도커 컴포즈 수정 (#111)
YimTaeKeun May 8, 2025
928fbed
Merge pull request #112 from 2025AlphaProject/hotifx/#111-validation_…
YimTaeKeun May 10, 2025
489d0c0
REFACTOR: 카카오 토큰 서비스 레이어, API 통신 레이어 분리 (#76)
YimTaeKeun May 10, 2025
8da0054
REFACTOR: 카카오 회원 정보 보기 서비스 레이어로 분리 (#76)
YimTaeKeun May 10, 2025
0d8d6e5
REFACTOR: 필요없는 코드 제거 (#76)
YimTaeKeun May 10, 2025
69d9a08
REFACTOR: 전체 예외 핸들러 추가 (#76)
YimTaeKeun May 10, 2025
00baa8c
REFACTOR: exception handler 추가 후 적용 (#76)
YimTaeKeun May 10, 2025
3500882
REFACTOR: exception 미들웨어 제작 (#76)
YimTaeKeun May 10, 2025
185d08a
FIX: Exception 핸들러 수정 (#76)
YimTaeKeun May 10, 2025
bb41001
REFACTOR: tour 앱 커스텀 Exception으로 교체 (#76)
YimTaeKeun May 11, 2025
f8bb60d
REFACTOR: 커스텀 exception 핸들러 추가 (#76)
YimTaeKeun May 11, 2025
37923ae
REFACTOR: NoAttributeException 기본 설정 추가 (#76)
YimTaeKeun May 11, 2025
f2754ae
CHORE: 주석 추가 (#76)
YimTaeKeun May 11, 2025
f4872c0
CHORE: 에러 핸들러 주석 추가 (#76)
YimTaeKeun May 16, 2025
d084f2b
CHORE: 예외 미들웨어 제거 (#76)
YimTaeKeun May 16, 2025
1a9df5a
Merge pull request #113 from 2025AlphaProject/refactor/#76-codeRefactor
YimTaeKeun May 16, 2025
3254053
FEAT: 토큰 발급 추가 (#115)
YimTaeKeun May 25, 2025
0721a96
FEAT: refresh token 뷰 추가 (#115)
YimTaeKeun May 25, 2025
1570e03
FEAT: 커스텀 토큰 리프레시 뷰 추가 (#115)
YimTaeKeun May 25, 2025
b7d02d6
FEAT: 자체 토큰 검증 로직으로 변경 (#115)
YimTaeKeun May 25, 2025
b4f10b0
TEST: 테스트 로직 변경 및 전체 테스트 통과 (#115)
YimTaeKeun May 25, 2025
4be7e82
Merge pull request #116 from 2025AlphaProject/feature/#115-makeOurToken
YimTaeKeun Jun 23, 2025
ae66553
HOTFIX: 로깅 출력 파일로 수정
YimTaeKeun Jun 23, 2025
16df72d
FIX: 로그 핸들러 수정 (#119)
YimTaeKeun Jun 24, 2025
8cd3db3
FIX: ignore 수정 (#119)
YimTaeKeun Jun 24, 2025
202dce9
FIX: 로그 설정 파일 수정 (#119)
YimTaeKeun Jun 24, 2025
5edf340
FIX: DevOps 환경 설정 (#119)
YimTaeKeun Jun 24, 2025
06b0c13
FIX: 액세스 토큰 예외 처리 추가 (#119)
YimTaeKeun Jun 26, 2025
af61ad4
FIX: 로그 format 변경 (#119)
YimTaeKeun Jun 26, 2025
5f9b6b4
FIX: 로그 핸들러 변경에 따른 코드 변경 (#119)
YimTaeKeun Jun 26, 2025
bf7c686
FIX: 미들웨어 로그 포맷 수정 (#119)
YimTaeKeun Jun 26, 2025
81f6e85
Merge pull request #120 from 2025AlphaProject/fix/#119-fixLoggingSystem
YimTaeKeun Jun 26, 2025
35a63ed
FIX: usr 앱 로깅 수정 (#119)
YimTaeKeun Jun 26, 2025
3ef794d
FIX: 로그 핸들러 수정 및 그에 맞게 유저 앱 수정 (#119)
YimTaeKeun Jun 26, 2025
0010086
FEAT: 예외 핸들러 추가 (#119)
YimTaeKeun Jun 26, 2025
dea582c
FIX: tour, mission의 services 로깅 시스템 수정 (#119)
YimTaeKeun Jun 26, 2025
2b95f39
REFACTOR: 미션 로깅 시스템 전면 리팩토링 (#119)
YimTaeKeun Jun 26, 2025
403cc20
Merge pull request #121 from 2025AlphaProject/fix/#119-fixLoggingSystem
YimTaeKeun Jul 5, 2025
18f98a0
FIX: 사진 유사도 판별 버그 수정 (#118)
YimTaeKeun Jul 5, 2025
a5d9fef
Merge pull request #122 from 2025AlphaProject/fix/#118-missionBugFix
YimTaeKeun Jul 5, 2025
01dfe26
FEAT: nginx 설정 ignore 설정 (#124)
YimTaeKeun Jul 6, 2025
d29c306
FEAT: nginx 통한 보안 강화 (#124)
YimTaeKeun Jul 6, 2025
aeacc01
Merge pull request #125 from 2025AlphaProject/feature/#124-setNginx
YimTaeKeun Jul 6, 2025
ab2d3d9
MODIFY: 컨테이너 포트 번호 수정
YimTaeKeun Jul 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
info.log
db.sqlite3
.github
*/migrations
Dockerfile
logs
nginx.conf
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ db.sqlite3
*.dir
# 로그파일 무시
*.log
/logs
nginx.conf
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
FROM python:3.12

WORKDIR /code
RUN apt-get update && apt-get install -y libgl1
COPY ./requirements.txt /code/
RUN pip install -r requirements.txt
RUN apt-get update && apt-get install -y libgl1
COPY . /code/
EXPOSE 8000
2 changes: 2 additions & 0 deletions authenticate/admin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from django.contrib import admin

# Register your models here.
from .models import OIDC
admin.site.register(OIDC)
11 changes: 8 additions & 3 deletions authenticate/authentications.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import requests
from rest_framework.authentication import BaseAuthentication
from rest_framework.exceptions import AuthenticationFailed
from rest_framework_simplejwt.tokens import AccessToken
from usr.models import User
from config.settings import APP_LOGGER

Expand All @@ -23,17 +24,21 @@ def authenticate(self, request):
if prefix != 'Bearer':
raise AuthenticationFailed('Invalid Bearer Prefix')

# 액세스 토큰 검증을 시도합니다.
payload = self.validate_kakao_access_token(access_token)

# 사용자 정보를 받아옵니다.
try:
sub = payload['id']
# 액세스 토큰 검증을 시도합니다.
payload = AccessToken(access_token)
sub = payload['sub']
user = User.objects.get(sub=sub)
logger.info(f'username: {user.username}(sub: {sub}) User attempting to access backend Api')
return user, access_token
except User.DoesNotExist: # 사용자 정보가 없을 경우
logger.info('New User attempting to access backend Api')
return None
except Exception as e:
logger.info(f'Authentication Failed: {e} - Exception code (a40)')
raise AuthenticationFailed(f'Authentication Failed - {e}')

def validate_kakao_access_token(self, access_token):
end_point = 'https://kapi.kakao.com/v1/user/access_token_info' # 유효성 검증 url
Expand Down
3 changes: 2 additions & 1 deletion authenticate/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ def test_login_callback(self):
"""
redirect_uri = 'http://localhost:8000/auth/login/'
response = self.client.post(f'/auth/get_token/?code={self.AUTH_CODE}&redirect_uri={redirect_uri}')
self.assertEqual(response.status_code, 201)
print(response.json())
self.assertEqual(response.status_code, 201)

@unittest.skipIf(SKIP_TEST == 'True', "Skip Login Refresh Test")
def test_refresh_token(self):
Expand Down Expand Up @@ -53,6 +53,7 @@ def test_refresh_token(self):
response = self.client.post(target_uri, data=data, content_type='application/json')
self.assertEqual(response.status_code, 400)

@unittest.skipIf(SKIP_TEST == 'True', "Skip Login Test")
def test_login(self):
"""
해당 함수는 flutter sdk로 발급받은 액세스 토큰과 아이디 토큰을 활용하여 로그인 혹은 회원가입 진행이 되는지 확인합니다.
Expand Down
10 changes: 6 additions & 4 deletions authenticate/urls.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from django.urls import path
from .views import kakao_callback, KakaoRefreshTokens, LoginRegisterView
from .views import kakao_callback, KakaoRefreshTokens, LoginRegisterView, CustomTokenRefreshView
from rest_framework_simplejwt.views import TokenRefreshView

urlpatterns = [
path('login/', LoginRegisterView.as_view({
'post': 'create',
}), name='login_register'),
path('get_token/', kakao_callback, name='login'), # 로그인 url 매핑
path('refresh/', KakaoRefreshTokens.as_view({
'post': 'create',
}), name='refresh_tokens'),
# path('refresh/', KakaoRefreshTokens.as_view({
# 'post': 'create',
# }), name='refresh_tokens'),
path('refresh/', CustomTokenRefreshView.as_view())
]
111 changes: 68 additions & 43 deletions authenticate/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,27 @@
from rest_framework.response import Response
import requests
from services.kakao_token_service import KakaoTokenService
from services.kakao_error_handler import KakaoRequestError
from rest_framework_simplejwt.views import TokenRefreshView
from services.exception_handler import *

from usr.services import UserService
from rest_framework_simplejwt.tokens import RefreshToken

from config.settings import KAKAO_REST_API_KEY # 환경변수를 가져옵니다.
from config.settings import KAKAO_REAL_NATIVE_API_KEY, KAKAO_REST_API_KEY, APP_LOGGER # 환경변수를 가져옵니다.
import logging
logger = logging.getLogger(APP_LOGGER)

# Create your views here.

def get_tokens_for_user(user):
refresh = RefreshToken.for_user(user)

return {
'refresh': str(refresh),
'access': str(refresh.access_token),
}


def kakao_callback(request):
"""
Expand All @@ -23,33 +37,17 @@ def kakao_callback(request):
if code is None:
return JsonResponse({"Error": "인가 코드 추출 실패"}, status=status.HTTP_400_BAD_REQUEST)
# 토큰을 발급받기위한 클래스 선언
token_service = KakaoTokenService()
# 요청 body
data = {
'grant_type': 'authorization_code',
'client_id': KAKAO_REST_API_KEY,
'redirect_uri': redirect_uri,
'code': code,
}
# 토큰 발급을 요청합니다.
token_service.get_kakao_token_response(data)
if token_service.status_code == 200:
id_token = token_service.id_token
# 아이디 토큰이 존재하지 않는다면 -> 예외처리
if id_token is None:
return JsonResponse({"Error": "id 토큰이 존재하지 않습니다.", "ErrorResponse": token_service.response}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
# TODO 유저 생성하여 회원가입 처리 or 로그인 처리
user_service = UserService(id_token)
user, is_new = user_service.get_or_register_user() # 로그인 혹은 회원가입을 처리합니다.
# data 딕셔너리 객체를 생성하여 액세스, 리프레시 토큰만 골라서 추출
data = dict()
data['access_token'] = token_service.access_token # 액세스 토큰 추가
data['token_type'] = token_service.token_type # token 타입 정보 추가
data['refresh_token'] = token_service.refresh_token # 리프레시 토큰 정보 추가
data['is_new'] = is_new # 신규 유저인지 알려주는 플래그 입니다.
# return JsonResponse(data, status=201) # post 요청을 보내줬기 때문에 201 create를 보내줍니다.
return JsonResponse(token_service.response, status=status.HTTP_201_CREATED) # 모든 정보를 보내줍니다.
return JsonResponse({"Error": token_service.response}, status=status.HTTP_400_BAD_REQUEST)
token_service = KakaoTokenService(KAKAO_REST_API_KEY)
tokens = token_service.get_tokens(code, redirect_uri)
user_service = UserService(tokens.id_token)
user, is_new = user_service.get_or_register_user() # 로그인 혹은 회원가입을 처리합니다.
data = dict()
data['access_token'] = tokens.access_token # 액세스 토큰 추가
data['token_type'] = tokens.token_type # token 타입 정보 추가
data['refresh_token'] = tokens.refresh_token # 리프레시 토큰 정보 추가
data['id_token'] = tokens.id_token
data['is_new'] = is_new # 신규 유저인지 알려주는 플래그 입니다.
return JsonResponse(data, status=201) # post 요청을 보내줬기 때문에 201 create를 보내줍니다.

class KakaoRefreshTokens(viewsets.ViewSet):
"""
Expand All @@ -62,23 +60,18 @@ def create(self, request):
if refresh_token is None:
return Response({"Error": "Refresh token is missing"}, status=400)
# 리프레시 토큰이 있는경우
token_service = KakaoTokenService()
data = {
'grant_type': 'refresh_token',
'client_id': KAKAO_REST_API_KEY,
'refresh_token': refresh_token,
}
token_service.get_kakao_token_response(data) # 카카오 토큰을 재발급 받습니다.
# 헤더와 정보를 조합하여 정보를 보냅니다.
# 올바른 정보가 넘어왔다면
if token_service.status_code == 200:
# data 딕셔너리 객체를 생성하여 액세스, 리프레시 토큰만 골라서 추출
token_service = KakaoTokenService(KAKAO_REAL_NATIVE_API_KEY)
try:
tokens = token_service.get_new_tokens(refresh_token) # 카카오 토큰을 재발급 받습니다.
data = dict()
data['access_token'] = token_service.access_token # 액세스 토큰 추가
data['token_type'] = token_service.token_type # token 타입 정보 추가
data['access_token'] = tokens.access_token # 액세스 토큰 추가
data['token_type'] = tokens.token_type # token 타입 정보 추가
data['refresh_token'] = tokens.refresh_token # 리프레시 추가 None 가능
return Response(data, status=status.HTTP_201_CREATED)
# 만일 토큰 정보가 잘못되었거나, refresh_token마저 만료 된경우, 혹은 카카오 측 오류인 경우
return Response(token_service.response, status=status.HTTP_400_BAD_REQUEST)
except KakaoRequestError as e:
return Response({"Error": str(e)}, status=status.HTTP_400_BAD_REQUEST)
except Exception as e:
return Response({"Error": str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

class LoginRegisterView(viewsets.ViewSet):
"""
Expand All @@ -101,6 +94,10 @@ def create(self, request):
except Exception as e:
return Response({"Error": str(e)}, status=status.HTTP_400_BAD_REQUEST)

tokens = get_tokens_for_user(user)
accessToken = tokens['access']
refreshToken = tokens['refresh']

return Response({
"message": "login or register success",
"is_new": is_new,
Expand All @@ -110,6 +107,34 @@ def create(self, request):
"profile_image_url": user.profile_image_url,
"age_range": user.age_range,
"gender": user.gender,
},
"tokens": {
"access_token": accessToken,
"refresh_token": refreshToken,
}
}, status=status.HTTP_201_CREATED)

class CustomTokenRefreshView(TokenRefreshView):
def post(self, request, *args, **kwargs):
data = request.data.copy()
refresh_token = data.pop('refresh_token', None)
if refresh_token is None:
raise NoRequiredParameterException(
'NO_PARAMETER',
'refresh_token 키 값이 존재하지 않습니다.'
)
data['refresh'] = refresh_token
serializer = self.get_serializer(data=data)
try:
serializer.is_valid(raise_exception=True)
except Exception as e:
raise ExceptionHandler(
'TOKEN_VALIDATION_ERROR',
e
)

return Response({
'access_token': serializer.validated_data['access'],
'token_type': 'Bearer',
'refresh_token': serializer.validated_data['refresh'],
}, status=status.HTTP_200_OK)
28 changes: 20 additions & 8 deletions config/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@
KAKAO_REAL_NATIVE_API_KEY = env('KAKAO_REAL_NATIVE_API_KEY') # 카카오 실제 native api 키
# 아래는 매 실행마다 코드를 변경해줘야하는 테스트 코드를 임의로 차단하기 위한 환경변수 입니다.
SKIP_TEST = env('SKIP_TEST')
GEOCODER_API_KEY = env('GEOCODER_API_KEY')
KAKAO_REAL_JAVASCRIPT_KEY = env('KAKAO_REAL_JAVASCRIPT_KEY')
REFRESH_TOKEN = env('REFRESH_TOKEN')


# Quick-start development settings - unsuitable for production
Expand Down Expand Up @@ -192,6 +195,7 @@
'DEFAULT_AUTHENTICATION_CLASSES': (
'authenticate.authentications.CustomAuthentication',
),
'EXCEPTION_HANDLER': 'services.exception_handler.custom_exception_handler'
}

# 아래는 celery setting을 담당합니다.
Expand Down Expand Up @@ -272,6 +276,9 @@
}

# 아래는 로그 설정입니다.
LOG_DIR = './logs'
os.makedirs(LOG_DIR, exist_ok=True)

LOGGING = {
'version': 1,
'disable_existing_loggers': False, # 기본 로거 설정 유지
Expand All @@ -281,7 +288,7 @@
'style': '{', # str.format
},
'simple': {
'format': '{name} {levelname} {asctime} {message}',
'format': '[{levelname}] | {asctime} | {message}',
'style': '{',
},
'logstash': {
Expand All @@ -291,22 +298,24 @@
'handlers': { # 로그 핸들러 설정
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': 'info.log',
'formatter': 'verbose',
'encoding': 'utf-8'
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': os.path.join(LOG_DIR, 'app.log'),
'formatter': 'simple',
'encoding': 'utf-8',
'when': 'midnight', # 자정마다 새 로그파일 생성
'backupCount': 7, # 일주일치만 저장
},
'logstash': {
'level': 'INFO',
'class': 'config.tcp_log_handler.TCPLogstashHandler',
'host': env('LOGSTASH_HOST'),
'port': 5000,
'port': 3306,
'formatter': 'logstash'
}
},
'loggers': { # 로거 설정, 실제 get_logger를 이용하여 로그 설정 가져옴
'django': { # 실제 배포 환경에서 사용하는 로거
'handlers': ['logstash'],
'handlers': ['file'],
'level': 'INFO',
'propagate': True,
},
Expand All @@ -319,4 +328,7 @@
}

# 앱 기본 로거 설정
APP_LOGGER='django'
APP_LOGGER='django'

# YOLO 모델 디렉터리 설정
MODEL_DIR = os.path.join(BASE_DIR, "mission", "yolomodels")
Loading