내일배움캠프 참여 전의 나

전공과는 무관한 분야에서 일하던 저는 개발 경험이 전혀 없었습니다. 하지만 요즘 AI 산업의 발전 가능성과 전망이 좋다고 느끼며, 이 분야에 도전해 보고 싶었습니다. IT 지식이 부족한 상태에서 내일배움캠프를 알게 되었고, 비전공자도 쉽게 접근할 수 있는 교육과정을 통해 개발에 도전할 수 있겠다는 자신감을 얻게 되었습니다.

 

 

 

내일배움캠프를 선택한 이유

내일배움캠프를 선택한 가장 큰 이유는, AI와 개발에 대한 장기적인 비전을 실현하기 위한 교육과 시스템이 잘 갖춰져 있다는 것입니다. 비전공자도 쉽게 접근할 수 있도록 친절하고 꼼꼼하게 가이드를 해주고, 실무 중심의 프로젝트와 현업에 계신 튜터님의 조언을 통해 빠르게 실력을 키울 수 있다는 점이 매력적이었습니다.  ‘단기간에 실력을 키울 수 있을까?’ 하는 불안감도 있었지만, 커리큘럼과 멘토링 시스템을 믿고 도전해보기로 결심했습니다.

 

 

 

내일배움캠프의 장점

  1. 체계적인 사전캠프와 수준별 맞춤 학습 캠프가 시작되기 전 사전캠프를 통해 기본기를 다질 수 있었고, 입문자들도 부담 없이 시작할 수 있도록 안내해 주셔서 큰 도움이 되었습니다. 캠프 진행 중에도 실력에 맞춘 맞춤형 학습이 제공되어 각자의 속도에 맞춰 공부할 수 있었습니다.
  2. 최고의 강의력과 체계적인 멘토링 내일배움캠프의 가장 큰 장점 중 하나는 뛰어난 강의력과 멘토링 시스템입니다. 각 챕터에 따라 튜터님들이 직접 준비해 주시는 특강 덕분에 강의 전 사전 학습을 할 수 있어 이해도를 높일 수 있었습니다. 현업에서 일하시는 튜터님과 1:1 상담을 통해 현실적인 조언을 얻을 수 있었고, 참고할 수 있는 레퍼런스를 공유받아 학습에 큰 도움이 되었습니다.
    강의력도 뛰어나셨고, 수업 중 질문에 실시간으로 답변을 해주셔서 궁금증을 빠르게 해결할 수 있었습니다. 또한, 프로젝트는 튜터님들이 직접 고안해 주시고 가이드라인을 제시해 주셔서 프로젝트에 대한 큰 부담 없이 지금까지 배웠던 학습 내용을 다시 점검하고 활용할 수 있는 시간이어서 좋았습니다.
  3. 다양한 학습 컨텐츠로 몰입도 UP 캠프 기간 동안 무료하지 않게 다양한 활동과 컨텐츠가 마련되어 있어 집중력을 유지하는 데 큰 도움이 되었습니다. 예를 들어 아침 알고리즘 코드카타 시간을 통해 코딩에 익숙해질 수 있었고, 스쿼드라는 맞춤형 학습 스터디 그룹에서는 학생 눈높이에 맞춘 튜터의 지도를 받을 수 있었습니다.
    그 외에도 퀴즈, 모의면접, 밍글데이 등 다양한 활동이 준비되어 있어, 즐겁고 효율적으로 학습할 수 있었습니다.
  4. 담당 매니저님의 세심한 관리 캠프 기간 동안 담당 매니저님이 상주하며, 출결과 학습 관리뿐 아니라 멘탈 관리까지 책임져 주셔서 캠프에 잘 참여할 수 있었습니다. 개인적으로 맞춤형 지원을 받을 수 있어, 학습과 취업 준비 과정에서 큰 힘이 되었습니다.

 

 

내일배움캠프 이전과 이후, 무엇이 가장 달라졌나요?

캠프를 통해 프로그래밍이라는 새로운 분야에 도전할 수 있는 용기문제 해결 사고력을 얻었습니다. 캠프 이전에는 프론트엔드나 백엔드와 같은 용어조차 몰랐지만, 내일배움캠프를 통해 프로그래밍 세계를 새롭게 알게 되었고, 직접 프로젝트를 만들어 보면서 두려움 대신 자신감을 얻게 되었습니다. 특히, 어려움이 있을 때마다 도움을 주신 튜터님들 덕분에 포기하지 않고 끝까지 완주할 수 있었습니다.

 

 

내일배움캠프 생활 중 가장 기억에 남는 순간

가장 기억에 남는 순간은 캠프에서 만난 다양한 사람들입니다. 서로 다른 분야에서 온 사람들이 함께 같은 목표로 공부하며, 서로에게 많은 인사이트를 주고 배움을 얻을 수 있었습니다. 특히 팀프로젝트를 통해 각자의 역할을 맡아 협업하며, 다양한 의견을 조율하고 결과물을 만들어낸 경험은 저에게 큰 성장의 기회가 되었습니다.
최종 프로젝트로 한 달 동안 함께 만든 팀 프로젝트가 우수상을 받았을 때는 이루 말할 수 없는 성취감을 느꼈습니다. 최종에서 만든 서비스를 더 보완하고 확장시켜 실제로 많은 사람들이 유용하게 사용할 수 있으면 좋겠다는 생각이 들 정도로 캠프의 경험은 저에게 의미 있는 시간이었습니다.

 

 

내일배움캠프를 고민하는 분들에게 한마디

만약 개발 공부를 시작할 엄두를 내지 못하고 있다면, 내일배움캠프는 도전을 위한 아주 좋은 선택지가 될 것입니다. 체계적인 가이드와 든든한 멘토가 있기 때문에 AI와 개발 분야에 관심이 있다면 걱정 말고 도전해 보세요. 부트캠프는 짧지만 그 속에서 배우는 것은 정말 값지며, 캠프 이후에 취업까지도 연결될 수 있으니 큰 힘이 될 것입니다.

Form


역할

  • 폼 클래스의 데이터를 렌더링하여 입력폼 HTML 생성
  • 입력폼 값에 대한 유효성 검증 (Validation) 및 값 변환
  • 검증을 통과한 값들을 dict 형태로 제공 ›› form.cleaned_data 으로 제공

+ CSRF (Cross Site Request Forgery)

데이터를 변경하는 HTTP 폼은 언제타 CSRF 보안 (사이트 간 위조 요청 방지) 을 이용하자. 개발 단계에서 잊어버리고 이용하지 않았을 경우 보안 위험성이 있을 수 있다는 친절한 안내 메시지를 보여주기도 한다.
django-rest-framework 같은 API 프레임워크에서는 이러한 처리를 자동으로 다 해준다.

# forms.py
...

<form action="" method="post>
	{% csrf_token %}
    ...
</form>



ModelForm


보통 Model 에 맞춰서 Form을 구성하기 때문에, Model이 바뀌면 Form도 그에 따라 의존되는 코드들을 변갱해 줘야하므로 유지보수가 귀찮다. 그러나 ModelForm을 사용하면 Model에서 사용할 Field만 정의하면 그 정보를 가져와 formField 를 자동으로 구성해주기 때문에 편하다.

특징

  • 장고 Form 상속 (forms.ModelForm)
  • 지정된 모델로부터 필드정보를 읽어들여, 자동으로 폼 필드를 세팅
  • 내부적으로 Model Instance 유지
  • 유효성 검증에 통과한 값들로 지정 Model Instance로의 저장(save) 지원

 

+ Form 과 ModelForm 의 차이

  • Form : 직접 필드 정의, 위젯 설정이 필요
  • ModelForm : 지정된 모델로부터 필드정보를 읽어들여, 자동으로 폼 필드를 세팅
# forms.py
from django import forms

# Form
class PostForm(forms.Form):
	title = forms.CharField()
	content = forms.CharField(widget=form.Textarea)
    
# ModelForm 
from .models import Post

class PostForm(forms.ModelForm):
	class Meta:
		model = Post
		fields = '__all__'	# 모든 필드를 불러온다.

 

+ form.save(commit=False)

🚀 (Django) The save() method

모델폼 데이터는 폼에 먼저 저장된 이후 모델 인스턴스에 저장된다.
ModelForm에서 폼 데이터는 두 가지 각기 다른 단계를 통해 저장된다.

  • 첫 번째로 폼 데이터가 폼 인스턴스에 저장된다.
  • 그 다음에 폼 데이터가 모델 인스턴스에 저장된다.

ModelForm 클래스에는 form.save(self, commit=True) 메서드가 구현되어 있는데, DB 저장 여부를 commit flag를 통해서 결정한다.

commit=False 를 사용하면 함수 호출을 지연시켜 DB에 바로 저장하지 않는다(임시 저장 상태).

DB에 실제 데이터를 저장하기 전에 따로 일련의 작업을 하고 싶을 때 사용하기 유용하다. form.save() 메서드에 의해 적용되기 전까지는 ModelForm이 모델 인스턴스로 저장되지 않는 분리된 특징 자체를 장점으로 이용할 수 있는 것이다.

# views.py
from django.shortcuts import render, redirect
from .models import Post
from .forms import PostForm

def post_new(request):
	if request.method == 'POST':
		form = PostForm(request.POST, request.FILES)
		if form.is_valid():
   			# 필수필드인 ip필드 값을 아직 채우지 않았으므로 
   			# DB 세이브를 지연시켜 오류를 방지한다.
			post = form.save(commit=False)  
			post.ip = request.META['REMOTE_ADDR']	# 유저로부터 ip 필드를 입력받음.
 			post.save()
			return redirect('/dojo/')
	else:
		form = PostForm()
 	return render(request, 'dojo/post_form.html', {'form': form,})

+ form.cleaned_data 사용하기

🚀 (Django) Accessing “clean” data

form.is_valid() 를 통해서 검증을 통화한 값들은 dict 형태로 form.cleaned_data 변수명으로 제공된다.

 폼의 입력값을 얻고 싶은 경우는form.cleaned_data 로 접근하도록 하자.

➔ Avoid code : request.POST[] 로 접근

# views.py
...
form = CommentForm(request.POST)

if form.is_valid():
	# request.POST 데이터는 폼 인스턴스 초기 데이터를 가져 오므로 	
	# `form.clean()` 메서드를 통해 변경될 가능성이 있어
	# 나쁜 접근이다.
	message = request.POST['message']
	comment = Comment(message=message)
	comment.save()
return redirect(post)

➔ Good code : from.cleaned_data[] 로 접근

# views.py
...
form = CommentForm(request.POST)

if form.is_valid():
	# 폼 인스턴스 내에서 clean함수를 통해 변환되었을 수도 있는 데이터를 가져오므로
	# 좋은 접근이다.
	message = form.cleaned_data['message']
	comment = Comment(message=message)
	comment.save()
return redirect(post)



Form Validation


장고 폼은 파이썬 딕셔너리의 유효성을 검사하는 최상의 도구이다.
유효성 검사를 수행하는데는 2가지의 방법이 있다.

1. validator 함수를 통한 유효성 검사

  • 값이 원하는 조건에 맞지 않을 때 ValidationError 예외를 발생시킨다.
  • 리턴값은 사용되지 않는다.
  • 모델필드 또는 폼필드 정의 시에 지정한다.
  • ⚡ 사용자 정의 Validator 보다 빌트인 Validator 사용을 추천한다.

2. Form 클래스 내의 clean , clean_ 멤버함수를 통한 유효성 검사 및 값 변경

  • 값이 원하는 조건에 맞지 않을 때 ValidationError 예외를 발생시킨다.
  • 리턴값을 통해 값을 반환한다.
  • ⚡ 원하는 포맷으로 값 변경을 원할 때 사용

 

+ 유효성 검사 호출 로직

유효성 검사는 form.is_valid() 가 호출되는 시점에서 수행된다.
보통 from.is_valid() 가 호출될 때 다음과 같은 절차가 진행된다.

# views.py
def post_new(request):
	if request.method == 'POST':
		form = PostForm(request.POST, request:FILES)
		if form.is_valid():		# 유효성 검사 수행
			form.save()
			# SUCESS 후 처리
	else:
    	form = PostForm()
	# ...
  1. 폼이 데이터를 받으면 form.is_valid()  form.full_clean() 메서드를 호출한다.
  2. form.full_clean() 은 폼 필드들과 각각의 필드 유효성을 하나하나 검사하면서 다음과 같은 유효성 검사를 수행한다.
    ㅤ- 필드에 들어온 데이터에 대해 파이썬 형식으로 변환하거나, 변환할 때 문제가 생기면 ValidationError를 일으킨다.
    ㅤ- 커스텀 유효성 검사기(validator)를 포함한 각 필드에 특별한 유효성을 검사한다. 문제가 있을 때 ValidationError를 일으킨다.
    ㅤ- 폼에 clean_() 메서드가 있으면 이를 실행한다.

  3. form.full_clean()  form.clean() 메서드를 실행한다.
  4. ModelForm 인스턴스의 경우 form.post_clean() 이 다음 작업을 한다.
    ㅤ- form.is_valid() 가 True나 False로 설정되어 있는 것과 관계없이 ModelForm의 데이터를 모델 인스턴스로 설정한다.
    ㅤ- 모델의 clean() 메서드를 호출한다.

 

+ form 필드 별로 유효성 검사 함수 추가 적용

(1) forms.py 에 적용

›› form 에서는 리턴값을 따로 처리하지 않고, forms.ValidationError 예외 발생 유무로 처리

# forms.py
import re
from django import forms
from django.forms import ValidationError
  
def phone_number_validator(value):
	if not re.match(r'^010[1-9]\d{7}$'):
		raise forms.ValidationError('3글자 이상 입력하시오.')
                      
class ProfileForm(forms.Form):
	phone_number = forms.CharField(validators=[phone_number_validator])

(2) models.py 에 적용

›› model 클래스 정의 시에 validators 옵션 적용. (권장!! 로직이 분산되지 않는다.)
›› 가급적이면 모든 validators 는 모델에 정의하고, ModelForm 을 통해 모델의 validators 정보를 가져오도록 하자.

# models.py
import re
from django import forms
from django import models
  
def phone_number_validator(value):
	if not re.match(r'^010[1-9]\d{7}$'):
		raise forms.ValidationError('3글자 이상 입력하시오.')
                      
class Profile(forms.Model):
	phone_number = forms.CharField(validators=[phone_number_validator]) 
# forms.py 
from django import forms
from .models import Profile
  
class ProfileForm(forms.ModelForm):
	class Meta:
		model = Profile
  		fields = '__all__'

'Django' 카테고리의 다른 글

장고 심화  (0) 2024.09.02
Django_template  (0) 2024.08.27
Django_MTV Pattern  (0) 2024.08.23
Django App  (0) 2024.08.23
장고_개발 환경 구성 및, 장고 설치  (0) 2024.08.20

 

장고 팀 프로젝트(SpartaNews)

S.A문서

 

1. 개요

프로젝트 이름: Sparta News

목적: IT 산업 뉴비들을 위한 뉴스 및 커뮤니티 플랫폼을 제공합니다. 사용자들은 크롤링된 IT 관련 뉴스를 확인하고, 질문 게시판과 자유 게시판에서 글을 작성하거나 소통할 수 있습니다.

 

 

 


2. 요구 사항

 

기능적 요구사항:

  • 회원가입 없이 뉴스 열람 가능
  • 회원가입 후 뉴스, 질문, 자유게시판에 글 작성 및 댓글 작성 가능
  • 뉴스 크롤링&업로드 (관리자만 가능)
  • 사용자별 역할(관리자, 마스터, 뉴비)에 따른 권한 관리
  • 게시글에 '좋아요', '북마크' 기능 제공
  • 게시글 조회수에 따른 인기 게시글 표시

 

비기능적 요구사항:

  • 확장성: 향후 새로운 게시판 추가 가능하도록 설계
  • 보안: JWT 기반 인증 및 권한 관리
  • 성능: 대규모 트래픽을 처리할 수 있는 구조
  • 유지보수성: 코드가 쉽게 확장 및 유지보수 가능해야 함

 

 


3. 시스템 아키텍처

 

백엔드 구성:

  • Django REST Framework: API 설계를 위한 프레임워크
  • SQLite3: 데이터베이스
  • BeautifulSoup: 뉴스 크롤링을 위한 라이브러리
  • JWT: 사용자 인증을 위한 토큰 방식 인증 시스템

 

API 엔드포인트:

Tutor's Feedback
엔드포인트 기준으로 API를 작성하는 것이 좋다.
ex. Articles에서 목록조회와 게시글 작성과 같이 같은 url 엔드포인트라면 같이 나열해서 작성해주면 한눈에 보기 좋다.

 

 

 


4. 데이터 아키텍처 (ERD)

주요 테이블:

Articles와 NBCNs 테이블을 구분한 이유,
user의 권한을 구분하여 Articles를 사용할 수 있는 user가 있고, NBCNs 을 사용할 수 있는 user을 구분하기 위해 테이블을 나누었다.

Tutor's Feedback
비슷한 필드를 가지고 있는 테이블일 경우, 나누지 않고 같은 테이블을 사용하는 것이 좋다.
같은 테이블을 사용할 경우, API 작업이나 메소드 작업하기 용이하기 때문에 같은 필드의 테이블은 하나로 묶는 것이 좋다.
그러나 작업 상황에 따라 구분이 필요하다면 그렇게 진행해보고, 이렇게 작업했을 때의 장단점을 기억하고 추후 프로젝트 작업 시, 기호에 따라 필요한 작업을 진행해보면 된다.

 

 

 

 


5. 애플리케이션 아키텍처

  • 프론트엔드: 현재 구현하지 않음. 백엔드 중심의 API 설계 및 통신에 집중.
  • 백엔드:
    • API 엔드포인트를 통한 CRUD 처리
    • 회원 등급에 따라 접근 권한이 나뉘는 구조
    • 크롤링된 뉴스는 주기적으로 데이터베이스에 저장

 

 


6. 통합 및 인터페이스 (Integration & Interfaces)

  • 크롤링 통합: BeautifulSoup을 통해 IT 관련 뉴스 데이터를 주기적으로 크롤링
  • REST API: 프론트엔드와의 통신은 JSON 형식으로 데이터를 주고받음

 

 


7. 보안 (Security)

  • 인증: JWT 토큰을 이용한 사용자 인증
  • 비밀번호 암호화: 사용자 비밀번호는 해시화하여 저장
  • 역할 기반 권한 관리: 관리자만 뉴스 크롤링 및 관리 기능 사용 가능

 

 


와이어프레임

다음은 Sparta News 프로젝트의 백엔드 중심 와이어프레임입니다. API의 구조 및 주요 기능을 보여줍니다.

 

Tutor's Feedback
페이지별로 여러 와이어프레임을 만드는 것이 좋다.
각 페이지의 기능을 쉽게 알아볼 수 있고, 여러 와이어프레임으로 구분해두어야 작업할 때 서로 의견 충돌이 없다.

'Project' 카테고리의 다른 글

Spartamarket_DRF 장고 개인 과제  (1) 2024.09.10

 

트러블슈팅 (Troubleshooting)

 

1. 의존성 설치 오류

 

문제:

pip install -r requirements.txt 명령어 실행 시 특정 패키지 설치 실패.

 

 

원인:

  • Python 버전 불일치
  • 특정 패키지 버전 충돌
  • 네트워크 연결 문제

 

해결 방법:

  • Python 버전 확인: 프로젝트와 호환되는 Python 버전(예: Python 3.8 이상)이 설치되어 있는지 확인합니다.
    Python 버전이 다를 경우, 호환되는 버전을 설치한 후 가상환경을 재설정합니다.
python --version
 
  • 의존성 버전 문제 해결:
    • 문제 발생 시 오류 메시지에서 문제가 되는 패키지를 확인한 후 requirements.txt에서 해당 패키지의 버전을 조정하거나 최신 버전으로 업데이트합니다.
    • 예를 들어, Django 패키지의 설치 문제가 있다면:
pip install Django==4.2 # 특정 버전 설치
 

 

  • 네트워크 연결 문제:
    • 네트워크 연결이 불안정할 경우, 안정적인 인터넷 연결을 확인한 후 재시도합니다.

 

  • 가상 환경 재설정:
    • 가상 환경을 삭제하고 새로 만들고 다시 설치합니다.
rm -rf venv # 가상 환경 삭제
python -m venv venv # 가상 환경 생성

# 가상 환경 활성화
source venv\Scripts\activate # Windows 
source venv/bin/activate # macOS/Linux 

pip install -r requirements.txt # 패키지 재설치
 

 

 


2. 데이터베이스 마이그레이션 오류

문제:

python manage.py migrate 명령어 실행 시 마이그레이션 오류가 발생하거나 테이블이 생성되지 않음.

 

원인:

  • models.py의 변경 사항을 적용하지 않음.
  • 마이그레이션 파일 충돌 또는 손상.
  • 데이터베이스 파일 손상 또는 누락.

 

해결 방법:

  • 마이그레이션 파일 생성 및 적용:
    • makemigrations 명령어를 사용하여 모델 변경 사항을 마이그레이션 파일로 생성한 후, migrate 명령어로 적용합니다.
python manage.py makemigrations
python manage.py migrate
 
 
  • 마이그레이션 초기화:
    • 문제가 계속될 경우 마이그레이션을 초기화하고 데이터베이스를 다시 생성합니다. (주의: 데이터 손실 가능성이 있으므로, 백업을 권장합니다.)
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
python manage.py makemigrations
python manage.py migrate
 
 
 
  • 데이터베이스 파일 삭제 및 재생성:
    • SQLite와 같은 파일 기반 데이터베이스를 사용하는 경우, db.sqlite3 파일을 삭제하고 다시 마이그레이션을 수행합니다.
rm db.sqlite3
python manage.py migrate
 
 
 
 
 

3. JWT 인증 관련 문제

문제:

로그인 후 올바른 토큰이 발급되지 않거나, 로그아웃 후에도 액세스 토큰이 유효한 상태로 남아 있음.

 

원인:

  • JWT 토큰 발급 및 유효성 검사 로직 오류.
  • 토큰 블랙리스트 관리 문제.

 

해결 방법:

  • 토큰 만료 시간 설정:
    • settings.py에서 SIMPLE_JWT 설정을 확인하고 ACCESS_TOKEN_LIFETIME과 REFRESH_TOKEN_LIFETIME을 적절하게 설정합니다.
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'ROTATE_REFRESH_TOKENS':True,
'BLACKLIST_AFTER_ROTATION':True,
}
 
 
 
 
  • 로그아웃 시 토큰 블랙리스트 처리:
    • 로그아웃 API 구현 시 RefreshToken을 블랙리스트에 추가하여 더 이상 사용하지 못하도록 합니다.
from rest_framework_simplejwt.tokens import RefreshToken

def logout(request):
try:
refresh_token = request.data["refresh"]
token = RefreshToken(refresh_token)
token.blacklist()
return Response({"message": "Successfully logged out."}, status=200)

except Exception as e:
return Response({"error":str(e)}, status=400)
 
 
 
 
 
 

4. 정적 파일 로드 오류

문제:

CSS, JavaScript 등의 정적 파일이 로드되지 않거나 404 오류가 발생함.

 

원인:

  • Django에서 STATIC_ROOT 또는 STATICFILES_DIRS 설정이 올바르지 않거나, 정적 파일 수집이 이루어지지 않음.

 

해결 방법:

  • 정적 파일 설정 확인:
    • settings.py에서 STATIC_URL, STATICFILES_DIRS, STATIC_ROOT 설정을 확인합니다.
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
 
  • 정적 파일 수집:
python manage.py collectstatic

 

 

 

 

 

위의 트러블슈팅 가이드를 통해 프로젝트 사용 중 발생할 수 있는 문제를 예방하고, 발생한 문제를 해결하는 데 도움을 줄 수 있습니다.

'Project' 카테고리의 다른 글

SA문서 피드백  (2) 2024.09.11

 

1. 자바스크립트 기본 문법

 

1.1. 변수와 데이터 타입 (중요도 🌟🌟)

  • 변수 선언 방식:
    • var: 함수 스코프를 가지며, 중복 선언이 가능. 단, 변수 호이스팅과 같은 문제로 인해 현재는 let이나 const가 주로 사용.
    • let: 블록 스코프를 가지며 중복 선언이 불가능. 변수를 선언할 때 일반적으로 사용.
    • const: 블록 스코프를 가지며 상수로 취급. 한 번 값이 할당되면 변경 불가능.

 

참고 사항:
const 로 선언된 객체나 배열은 그 내용물을 수정할 수 있지만, 변수 자체를 다른 객체나 배열로 재할당 불가능.

 

  • 데이터 타입:
    • 기본 타입: string, number, boolean, null, undefined, symbol
    • 참조 타입: object, array, function . 이러한 타입들은 메모리의 참조를 통해 값을 다룸

 


1.2. 조건문과 반복문 (중요도 🌟🌟)

  • 조건문:
    • if, else if, else 문을 사용하여 다양한 조건에 따라 코드를 실행. 조건이 참이면 그에 해당하는 블록이 실행.
    • 삼항 연산자: 간단한 조건 처리에 사용.
    • 조건이 참일 때 실행할 코드 : 거짓일 때 실행할 코드 형식으로 작성.

 

  • 반복문:
    • for, while, do...while 문을 사용하여 반복 작업을 처리.
    • for 루프: 특정 횟수만큼 반복할 때 사용. 반복 변수 초기화, 조건, 증감식을 포함.
    • for...of 루프: 배열과 같은 반복 가능한 객체의 요소를 순회할 때 사용.
    • for...in 루프: 객체의 속성을 순회할 때 사용.

 

 

 


1.3. 함수와 객체 (중요도 🌟🌟)

  • 함수:
    • 함수는 특정 작업을 수행하는 코드 블록. 필요할 때마다 호출할 수 있으며, 입력으로 매개변수를 받고, 결과를 반환 가능.
    • 함수 선언 방식:
      • 함수 선언: function 키워드를 사용하여 선언하며, 함수 이름을 가짐.
      • 함수 표현식: 함수를 변수에 할당하여 사용 가능.
      • 화살표 함수: ES6에서 도입된 간결한 함수 표현 방식으로, this 바인딩이 기존 함수와 다름.

 

  • 객체:
    • 객체는 여러 개의 값을 하나로 묶어 관리하는 구조. 속성(키-값 쌍)으로 구성되며, 메서드를 포함.
    • 속성 접근 방법: 점(.) 표기법대괄호([ ]) 표기법을 사용하여 객체의 속성에 접근.
    • 메서드: 객체의 속성으로 포함된 함수. this 키워드를 사용해 객체의 다른 속성에 접근.

 

 

 


1.4. 기타 중요한 문법 요소 (중요도 🌟)

  • 배열 메서드: 자바스크립트 배열의 다양한 메서드를 활용하여 데이터를 조작하는 방법을 다룸.
    • push: 배열 끝에 요소를 추가.
    • pop: 배열 끝의 요소를 제거.
    • map, filter, reduce: 배열의 각 요소를 변환, 필터링, 집계하는 고차 함수.

 

  • 비동기 처리:
    • 콜백 함수: 함수가 다른 함수의 인자로 전달되어, 특정 작업이 완료된 후 호출되는 방식.
    • Promise: 비동기 작업의 완료 또는 실패를 처리하는 객체.

 

 

 


2. 자바스크립트를 활용한 서버 통신

 

2.1. HTTP

  • HTTP 프로토콜:
    • 역할: 클라이언트와 서버 간의 요청과 응답을 처리하는 규칙. HTTP는 텍스트 기반의 프로토콜로, 웹 브라우저와 서버 간에 데이터를 주고받기 위해 사용.
    • 요청과 응답:
      • HTTP 요청: 클라이언트에서 서버로 데이터를 요청할 때 사용. HTTP 메서드(GET, POST, PUT, DELETE)와 함께 요청이 이루어짐.
      • HTTP 응답: 서버가 클라이언트의 요청에 응답할 때 사용. 상태 코드(예: 200, 404)를 통해 요청이 성공했는지 여부를 알 수 있음.
    • 예제:
      • 요청: 클라이언트에서 서버로 "GET /users" 요청을 보내 사용자의 정보를 가져올 수 있음.
      • 응답: 서버는 "200 OK" 상태 코드와 함께 사용자의 정보를 JSON 형식으로 반환.

 

 


2.2. API (Application Programming Interface) (중요도🌟🌟🌟)

API는 소프트웨어 애플리케이션 간에 상호작용할 수 있도록 정의된 규칙방법을 의미. API를 통해 다른 애플리케이션이 특정 기능을 사용할 수 있도록 허용하며, 이를 통해 애플리케이션 간에 데이터나 서비스를 주고받을 수 있음.

예시:

  • Google Maps API: 개발자들이 자신의 애플리케이션에 구글 지도를 임베드하고, 경로 검색, 장소 정보를 제공하는 기능을 사용할 수 있도록 하는 API.
  • Twitter API: 개발자들이 트위터의 기능을 활용하여 트윗을 읽고, 작성하거나 특정 해시태그로 검색 가능.

API의 기본 구성:

  • 요청(Request): API는 특정 요청을 받아 데이터를 처리. 요청은 클라이언트가 서버에 보낸 데이터.
  • 응답(Response): 요청을 처리한 후 API는 서버에서 처리된 결과를 반환. 일반적으로 데이터는 JSON 또는 XML 형식으로 전달.

 

 

기본 동작 원리 :
1. 클라이언트가 API 서버에 요청을 보냄
2. 서버는 요청을 처리하고 데이터베이스에서 데이터를 가져오거나, 특정 기능을 수행한 뒤 응답을 반환
3. 클라이언트는 응답받은 데이터 활용하여 필요한 작업을 수행

 

 

 


2.3. RESTful API (중요도🌟🌟🌟)

RESTful API는 REST(Representational State Transfer)라는 아키텍처 스타일을 따르는 API를 의미.

REST는 클라이언트-서버 간에 데이터를 교환하는 방식 중 하나로, HTTP 프로토콜을 기반으로 동작.

RESTful API는 리소스를 URI로 정의하고, 이를 HTTP 메서드로 조작할 수 있도록 설계.

 

 

REST의 기본 개념:

  1. 리소스(Resource): RESTful AP에서 다루는 기본 단위는 “리소스”. 예를 들어, 사용자 목록, 게시글, 상품 정도 등
  2. HTTP 메서드: RESTful API는 HTTP 메서드를 사용하여 리소스를 조작. 주로 사영되는 메서드는 다음과 같음
    • GET: 리소스를 조회
    • POST: 새로운 리소스를 생성
    • PUT: 기존 리소스를 수정
    • DELETE: 리소스를 삭제

예시:

사용자 RESTful API

  • GET /users: 모든 사용자 목록 조회
  • GET /users/1: ID가 1인 사용자의 정보
  • POST /users: 새로운 사용자 생성
  • PUT /users/1: ID가 1인 사용자의 정보를 업데이트
  • DELETE /users/1: ID가 1인 사용자를 삭제

 

RESTful API 특징:

  1. 무상태성 (Statelessness): 각 요청은 독립적이며 요청 간의 상태가 저장되지 않음
  2. URI 기반 리소스: RESTful API는 리소스를 URI로 표현
  3. 다양한 포맷 지원: RESTful API는 JSON, XML 등 다양한 데이터 형식을 지원. 주로 JSON이 사용됨
  4. 클라이언트-서버 구조: 클라이언트는 리소스를 요청하고, 서버는 리소스를 관리.

RESTful API 사용시 주의사항:

  • 정확한 HTTP 메서드 사용: 리소스 조회는 GET, 데이터 생성은 POST, 업데이트는 PUT, 삭제는 DELETE와 같이 HTTP 메서드를 정확히 구분하여 사용
  • 일관된 리소스 URL: API의 엔드포인트 설계는 명확하고 일관성이 있어야 함. 예를 들어, /users/123은 사용자를 나타내고, /product/456은 제품을 나타내도록 일관되게 구성
  • 보안: API 사용 시 인증 및 권한 부여를 위해 OAuth, JWT 같은 인증 방식을 사용하여 데이터를 안전하게 보호

 

 


2.4. API 문서 (API Documentation) (중요도🌟🌟🌟)

API 문서는 개발자들이 API를 올바르게 사용하기 위해 작성된 설명서. API의 사용 방법, 엔드포인트, 요청 형식, 응답 형식, 오류 코드 등을 포함하여 API 사용에 필요한 모든 정보를 제공

 

주요 구성 요소:

  1. 엔드포인트 (Endpoints): API에서 사용 가능한 URL 경로와 그에 맞는 HTTP 메서드가 설명
  2. 요청 형식 (Request Format): 클라이언트가 요청할 때 사용해야 하는 데이터 형식, 헤더, 파라미터 등
  3. 응답 형식 (Response Format): 서버가 클라이언트에게 반환하는 데이터 형식 (JSON, XML 등)
  4. 상태 코드 (Status Codes): 요청이 성공했는지, 오류가 발생했는지를 나타내는 HTTP 상태 코드
    • 200 OK: 성공적인 요청
    • 404 Not Found: 요청한 리소스를 찾을 수 없음
    • 500 Internal Server Error: 서버에서 발생한 내부 오류
  5. 예제 코드: 다양한 프로그래밍 언어에서 API를 사용하는 방법을 보여주는 예시 코드

 

예시:

사용자 관리 API 문서

  • 엔드포인트:
    • GET /users: 사용자 목록을 반환
    • POST /users: 새로운 사용자를 생성
    • GET /users/{id}: 특정 사용자의 상세 정보를 반환
    • PUT /users/{id}: 특정 사용자의 정보를 수정
    • DELETE /users/{id}: 특정 사용자를 삭제

 

 

 


2.5. fetch API 소개 및 사용법 (중요도🌟🌟🌟)

  • fetch API 개요:
    • 역할: fetch API는 네트워크 요청을 보내고, 그 결과를 처리하는 최신 자바스크립트 내장 함수. 이 API는 Promise를 반환하여 비동기 처리의 편리함을 제공.
    • 특징:
      • 비동기적 처리: fetch는 요청을 보내고 기다리지 않고 바로 다음 코드를 실행
      • 간단한 문법: fetch는 기존의 XMLHttpRequest보다 훨씬 간결하게 요청을 처리
      • Promise 기반: Promise를 반환하기 때문에 .then(), .catch()로 응답을 처리
      • fetch() 함수 반환:
        • Response 객체:
          • fetch() 함수가 반환하는 첫 번째 결과로 Response 객체를 나타냄
          • 서버로부터 받은 전체 HTTP 응답
          • HTTP 상태 코드, 헤더, 본문(body) 등을 포함
            • response.ok: 응답이 성공(상태 코드 200~209)이면 true를 반환
            • response.status: HTTP 상태 코드를 반환 (예: 200, 204)
            • response.header: 응답의 HTTP 헤더를 반환
            • response.body: 서버 응답의 본문을 나타내지만 아직 처리되지 않은 상태. 데이터를 읽으려면 body를 변환해야 함

 

  • Data 객체:
    • response.json()은 서버 응답의 본문을 JSON 형태로 파싱한 데이터를 반환
    • 응답의 **본문(body)**만 추출한 값으로 서버에서 실제로 전달하려는 데이터
    • response.json()은 비동기적으로 동작하며, JSON 형식의 데이터를 자바스크립트 객체로 변환

 

  • 기본 사용법:
    • GET 요청: 데이터를 가져올 때 사용.
    • POST 요청: 서버에 데이터를 전송할 때 사용.
  • fetch API의 다양한 옵션:
    • 헤더 추가: 요청에 필요한 헤더 정보를 추가.
    • 메서드 지정: 요청 메서드를 지정 가능(기본값은 GET).
    • 바디 추가: POST 요청 시 데이터를 바디에 추가하여 전송.

 

 

  • Promise와 함께 사용하기:
    • .then(): 성공적으로 응답을 받았을 때 호출.
    • .catch(): 요청이 실패했을 때 호출.
    • .finally(): 성공과 실패 여부에 관계없이 항상 실행되는 코드를 작성 가능.

 

 

 

 


2.6. XMLHttpRequest API 소개 및 사용법

  • XMLHttpRequest API 개요:
    • 역할: fetch 이전에 서버와 비동기 통신을 하기 위해 사용된 오래된 방법.
    • 특징:
      • 콜백 기반: 비동기 요청을 처리할 때 콜백 함수를 사용
      • 복잡한 문법: fetch보다 많은 코드가 필요
      • 동기적 사용 가능: 비동기 외에도 동기적으로 요청을 처리

'특강' 카테고리의 다른 글

웹 심화 이해  (0) 2024.08.14
웹 기본 이해  (0) 2024.08.12
기술면접_CS, SQL 내용정리  (0) 2024.08.08
CS 특강(소프트웨어 설계)  (0) 2024.07.26
CS 특강(컴퓨터 구조와 운영체계)  (0) 2024.07.25

 

 

📍객관식 (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

 



+ Recent posts