⚙️ 오류 해결 모음집
🐛 마이페이지 기능 구현 중 겪은 오류 해결 모음
code.with.siyeon
2025. 5. 25. 19:51
✅ 구현 기능 요약
- GET /api/users/mypage/ : 사용자 정보 조회
- PUT /api/users/mypage/ : 닉네임, 자기소개, 프로필 이미지 수정
- 인증 필요(JWT 기반)
# views.py
class MyPageView(APIView):
permission_classes = [IsAuthenticated]
def get(self, request):
serializer = UserDetailSerializer(request.user)
return Response(serializer.data)
def put(self, request):
serializer = UserUpdateSerializer(request.user, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response({'message': '정보가 수정되었습니다.'})
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
🐛 1. 오류: django.db.utils.ProgrammingError: Table 'bees_db.users_user' doesn't exist
📌 상황
- 회원가입도 잘 되고 로그인도 되는데 마이페이지 요청 시 위 오류 발생
🧾 로그 일부
ProgrammingError: (1146, "Table 'bees_db.users_user' doesn't exist")
🔍 원인
- makemigrations 후 migrate를 제대로 하지 않아 테이블이 생성되지 않음
- 혹은 docker-compose로 MySQL 컨테이너를 올렸지만, Django에서 연결 시점에 DB가 준비되지 않아서 발생
✅ 해결 방법
- docker-compose exec web bash
- python manage.py migrate 로 수동 마이그레이션
- 또는 docker-compose up --build 전에 depends_on 설정 확인
🐛 2. 오류: RuntimeError: 'cryptography' package is required
📌 상황
- 로그인은 잘 되는데, 로그인 직후 마이페이지 접근 시 발생
🧾 로그 일부
RuntimeError: 'cryptography' package is required for sha256_password
🔍 원인
- pymysql이 MySQL 8.0의 caching_sha2_password 방식으로 접속하려고 할 때 cryptography 미설치
✅ 해결 방법
- requirements.txt에 cryptography 추가
- Dockerfile에서 패키지 설치하도록 수정 후 rebuild
RUN pip install --no-cache-dir cryptography
🐛 3. 오류: 마이페이지에서 PUT 요청 후 변경 내용 반영이 안 됨
📌 상황
- 닉네임이나 자기소개를 수정했는데, 새로고침하면 원래대로 돌아감
🔍 원인
- UserUpdateSerializer에 fields가 명시되지 않았거나, update() 메서드를 오버라이딩하지 않음
✅ 해결 방법
- UserUpdateSerializer를 아래처럼 수정
class UserUpdateSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['nickname', 'introduction', 'profile_image']
✨ 느낀 점
마이페이지처럼 사소해 보이는 기능도 인증 흐름, 마이그레이션, 시리얼라이저, DB 연결 등 많은 요소가 연결되어 있었다. 특히 Docker 환경에서는 DB 준비 상태나 컨테이너 간 의존성에서 예기치 않은 문제가 쉽게 발생할 수 있다는 걸 체감했다.
이번 오류 해결을 통해:
- migrate를 게을리하면 큰일 난다는 교훈 📌
- requirements.txt와 Dockerfile은 항상 함께 관리해야 함 🔧
- 오류가 발생해도 로그를 잘 읽고 차근차근 디버깅하면 해결할 수 있다는 자신감 💪