Django 기초 주차가 끝나고 내용에 대한 이해도를 보기 위해서 테스트를 진행했다.
객관식
- Django 프로젝트에서 다양한 관리 명령을 실행할 수 있게 하는 파일은 무엇인가요?
- D) manage.py
- 다음 중 Django에서 제공하는 기본적인 데이터베이스는 무엇인가요?
- C) SQLite
- Django의 QuerySet 메서드 중 데이터베이스에서 특정 조건에 맞는 모든 레코드를 반환하는 메서드는 무엇인가요?
- A) filter()
- Django 템플릿 시스템에서 변수의 값을 출력할 때 사용하는 문법은 무엇인가요?
- A) {{ 변수 }}
- 웹 어플리케이션에서 쿠키(Cookie)의 주요 목적은 무엇인가요?
- B) 사용자의 브라우저에 데이터를 저장하여 다음 방문시 사용하기 위해
- Django에서 특정URL에 대한 요청을 처리할 뷰(View)와 연결할 때 주로 사용하는 함수는 무엇인가요?
- A) path()
- 다음 중 Django의 ModelForm을 사용하는 이유로 가장 적절한 것은 무엇인가요?
- A) 폼을 통해 입력된 데이터를 데이터베이스에 자동으로 저장하기
객관식은 솔직하게 틀리면 안되는 난이도가 나왔다고 생각한다.
다른 선택지를 봐도 헷갈릴만한 내용은 거의 없었다.
주관식
- Django의 MTV 패턴에서 각 요소(Model, Template, View)의 역할을 간단히 설명하세요.
- Model: 데이터베이스 구조를 정의하고, 데이터를 관리하는 역할을 합니다. 데이터베이스 테이블과 매핑되며, 데이터를 저장, 조회, 수정, 삭제하는 기능을 제공합니다.
(데이터 관련된 로직을 처리해준다고만 적음) - Template: 사용자에게 보여지는 화면을 담당합니다. HTML 파일과 같은 템플릿을 통해 데이터를 시각적으로 표현하며, 동적인 웹 페이지를 생성하는 데 사용됩니다.
(사용자에게 보여지는 HTML페이지를 정의한다고 적음) - View: 사용자의 요청을 처리하고, 적절한 데이터를 가져와서 템플릿과 결합하여 응답을 생성하는 역할을 합니다. View는 Model과 Template 사이에서 중개자 역할을 합니다.
(여기는 좀 비슷하게 썼다. 잘 쓴것같다.) - 전체적으로 괜찮게 쓴 것 같으면서도 좀 더 자세하게 적을 수 있었을까? 라는 생각이 든다.
- Model: 데이터베이스 구조를 정의하고, 데이터를 관리하는 역할을 합니다. 데이터베이스 테이블과 매핑되며, 데이터를 저장, 조회, 수정, 삭제하는 기능을 제공합니다.
- Django에서 settings.py 파일의 주요 역할을 구체적인 예시를 들어 설명하세요.
- settings.py 파일은 Django 프로젝트의 설정을 관리하는 파일입니다. 데이터베이스 설정, 설치된 앱, 미들웨어, 정적 파일 경로, 템플릿 설정, 국제화 설정, 보안 키 등의 다양한 프로젝트 설정이 이 파일에 포함됩니다. 프로젝트 전반의 동작을 조정하고, 필요한 외부 리소스나 라이브러리를 연결하는 역할을 합니다.
- 적은 정답
settings.py 파일은 프로젝트의 설정을 관리하는 곳이다.
예를 들어, settings.py의 INSTALLED_APPS의 안에는 프로젝트에서 활성화된 앱들을 정의하고 있으며, Django가 이 앱들의 모델, 템플릿, 뷰를 인식하고 사용할 수 있다. 추가적인 앱 등록시에도 INSTALLED_APPS안에 추가하기만 하면 된다. - 예시를 들어 설명하는 부분에 대한 이해를 잘못한 것 같다. 다양한 프로젝트 설정이 있는데 답과 비교해보니 설명이 많이 부족한 것 같다.
- Django ORM이란 무엇이며, 왜 사용하는지 설명하세요.
- Django ORM(Object-Relational Mapping) : Python 객체를 데이터베이스의 테이블과 매핑하여 데이터베이스 조작을 간단하고 직관적으로 수행할 수 있게 해주는 도구입니다. SQL 쿼리를 작성하지 않고도 Python 코드만으로 데이터베이스와 상호 작용할 수 있게 해줍니다. 이를 통해 데이터베이스 독립성을 유지할 수 있으며, 데이터베이스 작업을 더 안전하고 효율적으로 수행할 수 있습니다.
- 적은 정답
Django ORM은 Django에서 데이터베이스와 상호작용하기 위해 사용하는 도구다.
ORM은 데이터베이스 작업을 추상화하여, 복잡한 SQL 쿼리를 직접 작성하지 않고도 데이터베이스를 조작할 수 있고, 보안이나 유지보수 측면에서도 장점이 있기 때문에 사용한다. - Django ORM이니까 Python코드로 상호작용한다는 점을 강조하는게 좋았을 것 같다.
- Django의 Custom UserModel을 사용하는 이유와 장점을 설명하세요.
- Django의 기본 User 모델을 사용하는 대신 Custom UserModel을 사용하면, 사용자 모델을 확장하거나 수정할 수 있어 프로젝트의 요구사항에 맞게 사용자 정보를 관리할 수 있습니다. 예를 들어, 추가적인 사용자 필드가 필요하거나 로그인 방식(예: 이메일로 로그인)을 변경하고 싶을 때 유용합니다. Custom UserModel을 사용하면 향후 확장성도 더 좋아지고, 프로젝트 시작 시 이러한 커스터마이징을 도입하면 나중에 구조 변경이 필요할 때 발생할 수 있는 문제를 예방할 수 있습니다.
- 적은 정답
대부분의 프로젝트에서 user Model은 더 많은 기능이 필요한데 확장성 측면에서 장점이 있고,
프로젝트의 요구사항에 맞게 자유롭게 모델을 설계할 수 있다는 점 때문에 사용한다. - 예시를 들어 설명하는 점이 좋은 것 같다. 문제에 없어도 면접이라고 생각하고 설명하는 습관을 길러야겠다.
- Django에서 Model 클래스는 데이터베이스 테이블과 매핑됩니다. Django ORM에서 모델을 정의할 때 필드를 정의할 수 있는 다양한 옵션 중 ManyToManyField에 대해 구체적인 사용 사례를 들어 설명하세요.
- Django의 ManyToMany는 두 모델간의 다대다 관계를 정의할 때 사용됩니다. 다대다 관계란 한 모델의 여러 인스턴스가 다른 모델의 여러 인스턴스와 연결될 수 있는 경우를 말합니다. 예를 들어, 하나의 학생이 여러 과목을 수강할 수 있고, 동시에 하나의 과목을 여러 학생이 수강할 수 있는 상황이 있을 수 있습니다.
- Django는 이러한 관계를 처리하기 위해 자동으로 중간 테이블을 생성하며 이 테이블에는 두 모델의 외래 키가 저장되어 있습니다.
- 적은 정답
ManyToManyField는 두 모델 간의 다대다 관계를 정의하는데 사용된다.
예를 들어, "좋아요" 기능은 사용자가 여러 게시물에 좋아요를 누를 수 있고, 게시물도 여러 사용자에게 좋아요를 받을 수 있기 때문에 ManyToManyField를 이용해서 구현할 수 있다. - 중개 테이블에 대한 내용을 추가했으면 좋았을 것이라는 생각이 든다.
전체적으로 주관식에 대한 평가는 나는 문제를 푼다는 식으로 답을 써서 제출했는데,
저 내용들이 실제 면접 질문이라고 생각하고 내가 어떻게 답하면 좋은지를 생각하면서 적었으면 더 도움이 되었을 것 같다.
코드 작성
코드 작성은 솔직하게 어려운 부분이 없었다고 생각했지만 틀린 부분이 있어서 거기에 대한 설명을 적도록 하겠다.
Django에서 사용자가 로그인할 수 있는 간단한 로그인 뷰를 작성하세요.
- 사용자가 로그인 폼을 제출했을 때, 해당 사용자를 인증하고, 성공적으로 로그인할 경우 'home' 페이지로 리디렉션합니다.
- 로그인 실패 시 다시 로그인 페이지로 리디렉션하며, 실패 메시지를 출력하세요.
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
def login_view(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('home')
else:
messages.error(request, 'Invalid username or password')
return redirect('login')
return render(request, 'login.html')
auth_login을 쓰다가 authenticate와 login으로 나누어 쓰는 것은 처음 봤는데
원래 쓰던 폼을 기억하면서 인증 부분에서 DB에 유저가 있는지 확인하고
있다면 로그인 처리를, 없다면 다시 로그인 페이지로 돌리면 된다고 생각했다.
그렇지만 messages.error()를 몰라서 실패시 메세지 출력하는 부분을 작성하지 못했는데(프론트에게 맡긴다고 적음)
messages.error(request, message="에러 메세지")와 같은 형식으로 쓰이며
messages.debug(request, message="디버그 메시지")
messages.info(request, message="정보 메시지")
messages.success(request, message="성공 메시지")
messages.warning(request, message="경고 메시지")
messages.error(request, message="에러 메시지")
장고의 메세지 레벨은 위와 같이 5개로 분류되며 django.contrib.messages 에서 가져올 수 있다고 한다.
https://docs.djangoproject.com/en/4.2/ref/contrib/messages/
메세지에 대한 내용은 역시나 공식 문서를 보며(위에가 4.2 messages 공식 문서 주소) 필요할 때 또 찾아봐야 겠다.
'etc' 카테고리의 다른 글
5분 보드를 이용해서 취업 준비하기 (1) | 2024.09.23 |
---|---|
기술면접 관련 내용 정리 - 2 (0) | 2024.08.08 |
기술면접 관련 내용 정리 - 1 (0) | 2024.08.08 |
AI 웹 개발 부트캠프 스타터 노트 (0) | 2024.06.24 |