📍객관식 (1~7번)
1. Django 프로젝트에서 다양한 관리 명령을 실행할 수 있게 하는 파일은 무엇인가요?
manage.py
2. 다음 중 Django에서 제공하는 기본적인 데이터베이스는 무엇인가요?
SQLite
3. Django의 QuerySet 메서드 중 데이터베이스에서 특정 조건에 맞는 모든 레코드를 반환하는 메서드는 무엇인가요?
filter()
4. Django 템플릿 시스템에서 변수의 값을 출력할 때 사용하는 문법은 무엇인가요?
{{ 변수 }}
5. 웹 어플리케이션에서 쿠키(Cookie)의 주요 목적은 무엇인가요?
사용자의 브라우저에 데이터를 저장하여 다음 방문시 사용하기 위해
6. Django에서 특정URL에 대한 요청을 처리할 뷰(View)와 연결할 때 주로 사용하는 함수는 무엇인가요?
path()
7. 다음 중 Django의 ModelForm을 사용하는 이유로 가장 적절한 것은 무엇인가요?
폼을 통해 입력된 데이터를 데이터베이스에 자동으로 저장하기 위해
📍주관식 (8~12번) (내가 쓴 답안 / 정답)
8. Django의 MTV 패턴에서 각 요소(Model, Template, View)의 역할을 간단히 설명하세요.
Model : 데이터와 관련된 로직 처리(데이터 구조 정의, 데이터 베이스 기록) Template : 레이아웃과 화면상의 로직 처리 (UI와 레이아웃을 다룸) View : 메인 비지니스 로직 담당, 클라이언트의 요청에 대한 처리를 분기하는 역할. (응답을 만들어서 클라이언트에게 전달) MTV패턴은 MVC 패턴을 변형한 것으로, Model은 MVC에서의 Model Template은 MVC에서의 View View는 MVC에서의 Controller |
Model: 데이터베이스 구조를 정의하고, 데이터를 관리하는 역할을 합니다. 데이터베이스 테이블과 매핑되며, 데이터를 저장, 조회, 수정, 삭제하는 기능을 제공합니다.
Template: 사용자에게 보여지는 화면을 담당합니다. HTML 파일과 같은 템플릿을 통해 데이터를 시각적으로 표현하며, 동적인 웹 페이지를 생성하는 데 사용됩니다.
View: 사용자의 요청을 처리하고, 적절한 데이터를 가져와서 템플릿과 결합하여 응답을 생성하는 역할을 합니다. View는 Model과 Template 사이에서 중개자 역할을 합니다.
9. Django에서 settings.py 파일의 주요 역할을 구체적인 예시를 들어 설명하세요.
settings.py 프로젝트의 설정을 관리하는 곳. 1. 장고 프로젝트를 생성한 후, 앱을 만들게 되는데 이때 만들어진 앱은 settings.py에 명시해줘야 함. (앱의 경로를 찾을 수 있도록) [INSTALLED_APPS] 에 생성한 앱을 등록해야 앱을 실행할 수 있게 된다. 이때 명시된 순서대로 장고가 읽기 때문에, 1. 장고에서 기본으로 설치된 앱, 2. 추가적으로 설치한 앱(ex. django-extensions), 3. 내가 생성 앱 순으로 작성하는 것이 좋다. 2. 웹을 만들 때 회원관리 기능을 위해, 장고에서 제공하는 USER 를 사용할 수 있는데, 이때 USER를 재정의할 수 있다. 재정의한 USER를 사용하기 위해선 settings.py에 AUTH_USER_MODEL = 'accounts.User' 를 명시해줘야 내가 설정한 User를 사용할 수 있다. 3. STATIC_URL을 통해 정적 파일의 URL을 설정할 수 있다. image , JavaScript, CSS 등과 같은 파일을 static file이라고 하는데, 이때 파일 경로를 지정하여, 장고가 찾을 수 있도록 설정합니다. 4. MIDDLEWARE는 클라이언트가 요청하고 응답을 반환하는 과정에서 미들웨어가 중간처리를 진행한다. 그 밖에도 DB 관련 설정, DB password/secret-key 분리, 언어/시간대 설정 등을 다룬다. |
settings.py
파일은 Django 프로젝트의 설정을 관리하는 파일입니다. 데이터베이스 설정, 설치된 앱, 미들웨어, 정적 파일 경로, 템플릿 설정, 국제화 설정, 보안 키 등의 다양한 프로젝트 설정이 이 파일에 포함됩니다. 프로젝트 전반의 동작을 조정하고, 필요한 외부 리소스나 라이브러리를 연결하는 역할을 합니다.
10. Django ORM이란 무엇이며, 왜 사용하는지 설명하세요.
ORM은 Object-Relational-Mapping의 약자이다. 객체 지향 프로그래밍 언어를 사용하여 호환되지 않는 유형의 시스템 간에 데이터를 변환하는 프로그래밍 기술을 의미한다. 즉, 객체와 관계형 데이터베이스의 데이터를 매핑하는 것을 의미한다. ORM을 사용하면 SQL 쿼리 없이 Python으로 쉽게 데이터베이스를 저장하고 관리할 수 있다. ORM은 파이썬을 사용하여 데이터베이스 테이블을 정의한다. 복잡한 SQL쿼리도 간단한 Python메서드로 표현할 수 있다. 예를 들어 데이터 필터링, 정렬, 집계 등을 쉽게 작성할 수 있음. 또, 데이터베이스가 독립적으로 존재하기 때문에, 코드를 수정할 때 용이하다.(유지보수하기 좋음) ORM를 사용하여 쿼리를 작성하면, 사용자 입력이 자동으로 이스케이프 처리되어 SQL 인젝션과 같은 공격을 예방할 수 있다. |
Django ORM(Object-Relational Mapping)
은 Python 객체를 데이터베이스의 테이블과 매핑하여 데이터베이스 조작을 간단하고 직관적으로 수행할 수 있게 해주는 도구입니다. SQL 쿼리를 작성하지 않고도 Python 코드만으로 데이터베이스와 상호 작용할 수 있게 해줍니다. 이를 통해 데이터베이스 독립성을 유지할 수 있으며, 데이터베이스 작업을 더 안전하고 효율적으로 수행할 수 있습니다.
11. Django의 Custom UserModel을 사용하는 이유와 장점을 설명하세요.
장고는 기본적으로 사용자 모델을 제공한다. 하지만 정의된 모델보다 더 다양한 정보를 필요할 수 있기 때문에 Custom UserModel을 사용할 수 있다. (이때 사용자 정의 모델을 사용하기 위해선 BaseUserManager, AbstractBaseUser 클래스가 있다.) Django의 Custom UserModel을 사용하는 이유는 크게 4가지로 말할 수 있다. 1. 프로젝트 요구사항에 맞는 사용자 모델 확장 (ex. 프로필사진, 전화번호 등 추가적인 사용자 정보 저장 가능) 2. 유지 보수 및 관리 용이성 (필드를 수정해야 할 때, 코드 수정 작업을 줄일 수 있음) 3. 이메일을 기본 인증 수단으로 사용 4. 고유한 사용자 속성과 메서드 정의 가능 (5. 장고 공식 문서에서도 user model을 프로젝트에 맞게 커스텀하기를 권장함.) 장점 : 필요에 따라 사용자 모델을 재정의하거나 확장할 수 있고, 사용자 모델을 프로젝트 요구에 맞게 조정할 수 있어 유연하다는 장점이 있다. Custom User Model을 통해 사용자 데이터를 일괄적으로 관리할 수 있다. 사용자와 관려된 모든 정보가 하나의 모델에 들어가있고, 독립적이기 때문에 데이터베이스 관리가 용이하다. 인증 방식이나 비밀번호 관리 정책 등에 로직을 강화할 수 있어 보안성을 높일 수 있다. 예를 들어 "2단계 인증"과 같은 추가적인 보안 필드를 추가하여, 보안성을 높일 수 있다. 이때 주의할 점은 프로젝트는 장고와 내부적으로 연결되어 있기 때문에 migration을 하기 전, 즉 프로젝트 초기 단계에서, 회원관리 앱을 생성하고 유저 모델을 커스텀하여 개발하는 것이 좋다. |
Django의 기본 User 모델을 사용하는 대신 Custom UserModel을 사용하면, 사용자 모델을 확장하거나 수정할 수 있어 프로젝트의 요구사항에 맞게 사용자 정보를 관리할 수 있습니다. 예를 들어, 추가적인 사용자 필드가 필요하거나 로그인 방식(예: 이메일로 로그인)을 변경하고 싶을 때 유용합니다. Custom UserModel을 사용하면 향후 확장성도 더 좋아지고, 프로젝트 시작 시 이러한 커스터마이징을 도입하면 나중에 구조 변경이 필요할 때 발생할 수 있는 문제를 예방할 수 있습니다.
12. Django에서 Model 클래스는 데이터베이스 테이블과 매핑됩니다. Django ORM에서 모델을 정의할 때 필드를 정의할 수 있는 다양한 옵션 중 ManyToManyField에 대해 구체적인 사용 사례를 들어 설명하세요.
ManyToManyField는 Django ORM에서 모델 간의 다대다(Many-to-Many) 관계를 정의하는 데 사용되는 필드를 말함. 특히 ManyToManyField는 중개 테이블(중간 테이블)을 따로 생성하여 두 모델 간의 관계를 관리함. 중개 테이블이 따로 생성되기 때문에 두 객체서 모두 사용 가능하다. (코드를 어디 적어도 상관없음) (이때 related_name을 사용하여 소스 모델을 참조할 때 사용한다. 마치, Foreign Key의 related_name(역참조할 때 사용)과 동일하다.) ManyToManyField 사용 사례는 인스타에 "팔로우/팔로잉"과 같은 기능, 블로그에서 "게시물과 태그"(해시태그)와 같은 기능을 말할 수 있다. 인스타에서 서로 팔로우를 할 때, 다대다의 관계로 말할 수 있다. 블로그에서 포스트 또는 기사 등에 여러 해시태그를 추가하는 것을 다대다의 관계로 말할 수 있다. 다른 예시로는 학생과 강의 관계를 생각해볼 수 있는데 학생이 여러 강의를 수강하고, 각 강의에도 여러 학생이 수강할 수 있을 경우 다대다 관계로 말할 수 있다. |
Django의 ManyToMany는 두 모델간의 다대다 관계를 정의할 때 사용됩니다. 다대다 관계란 한 모델의 여러 인스턴스가 다른 모델의 여러 인스턴스와 연결될 수 있는 경우를 말합니다. 예를 들어, 하나의 학생이 여러 과목을 수강할 수 있고, 동시에 하나의 과목을 여러 학생이 수강할 수 있는 상황이 있을 수 있습니다.
Django는 이러한 관계를 처리하기 위해 자동으로 중간 테이블을 생성하며 이 테이블에는 두 모델의 외래 키가 저장되어 있습니다.
📍코드작성 (13~15번)
13. Django 모델을 작성하세요. "BlogPost"라는 이름의 모델을 만들고, 제목(title), 내용(content), 작성일(created_at), 수정일(updated_at) 필드를 추가하세요.
- 제목은 문자열(CharField), 내용은 텍스트(TextField), 작성일과 수정일은 날짜/시간(DateTimeField) 필드로 정의합니다.
- created_at과 updated_at 필드는 각각 자동으로 생성되도록 설정하세요.
CharField는 django에서 max_length 가 반드시 있어야 함.
생성일자는 DateTimeField(auto_now_add=True) "add"가 있어야 함.
auto_now는 장고에서 자동으로 날짜를 입력해주는 기능임.
14. Django에서 사용자가 로그인할 수 있는 간단한 로그인 뷰를 작성하세요.
- 사용자가 로그인 폼을 제출했을 때, 해당 사용자를 인증하고, 성공적으로 로그인할 경우 'home' 페이지로 리디렉션합니다.
- 로그인 실패 시 다시 로그인 페이지로 리디렉션하며, 실패 메시지를 출력하세요.
15. 다음의 Post에 대해 CRUD를 하는 코드의 일부입니다. 아래 내용을 참고하여 코드를 완성해 주세요.
Post 모델은 다음과 같은 필드를 가진다고 가정합니다.
- title: CharField(max_length=100)
- content: TextField()
- created_at: DateTimeField(auto_now_add=True)
🧁Read
💡 objects는 ORM의 매니저 이름임. 매니저를 통해 쉽게 처리할 수 있음.
🧁Create
💡 뷰에서 템플릿 파일을 변환하기 위해 사용하는 함수는 render 이다.
🧁Update
💡 id 또는 pk라고 적어도 무방함. (혼용해서 사용가능)
form = PostForm(request.POST, instance=post) 을 통해 기존 객체를 수정하는 폼을 생성함.
🧁Delete
📁 추가내용
django에서 max_lehgth 속성이 사용되는 필드는?
char
뷰에서 템플릿 파일을 변환하기 위해 사용하는 함수는?
render (from django.shortcuts)
save(commit=False)를 사용하는 이유는?
데이터를 DB에 저장하기 전에 추가적인 작업을 하기 위함
프로젝트와 앱의 차이점을 설명하세요.
프로젝트 : 어플리케이션의 집합체
앱 : 각각의 기능 단위 모듈
URL 패턴과 맵핑에 관해 설명하세요.
url-patten은 실제 서블릿 매핑 이름을 의미합니다. 서블릿 매핑 시 사용되는 가상의 이름과 서버가 서버에 있을 때 사용할 수 있도록 ' / '(슬래시)로 시작
서블릿 매핑으로 이름이 사용되는 URL 유형의 종류는 정확히 이름까지 일치하는지, 카펫까지 일치하는지, 확장자만 일치하는지 여부 확인함
URL Mapping은 웹 어플리케이션에서 요청된 URL을 특정한 리소스나 기능으로 연결시키는 프로세스를 가리킵니다. 간단하게 말하면, 어떤 URL이 어떤 기능이나 리소스와 연결되는지를 정의하는 것입니다. 이는 주로 웹 프레임워크나 서버에서 사용되며, 다양한 목적으로 활용됩니다
폼의 역할은 무엇이며 유효성 검사를 하기 위해 사용하는 매서드는 무엇입니까?
form.is_valid()
서버사이드 랜더링이란?
SSR은 서버쪽에서 렌더링을 하여 화면을 보여주는 방식을 말함. 서버로부터 완전하게 만들어진 html 파일을 받아와 화면을 그리기 때문에 첫 화면 로딩 속도가 빠르다.
서버사이드렌더링은 클라이언트(브라우저)가 서버에 매번 데이터를 요청하고 서버에서 처리하는 방식이다. 요청이 들어올 때마다 서버에서 새로운 화면을 만들어서 제공한다. 화면을 그리는(렌더링) 주체가 서버
장점 : 첫페이지 로딩속도 빠름, 검색엔진 최적화가 가능
단점 : 초기 로딩 이후 속도 CSR에 비해 느림, 새로고침 계속 일어남, 서버 과부하, TTV와 TTI의 공백시간
페이지를 보여주는 과정
HttpRequest → URLs → View→ Template → View → HttpResponse