더보기
72일 차 회고.
어제 늦게 잤더니 아침에 너무 졸려서 점심을 건너뛰고 잠을 잤다. 그리고 하루 종일 집중이 되지 않고 산만한 기분이라 수업에 집중하기 힘들었다.
1. JavaScript
1-1. 프로미스
비동기 처리
- 특정 코드의 연산이 끝날 때까지 기다리지 않고, 다음 코드를 먼저 실행하는 방식
async
- async 키워드를 사용하면 해당 함수는 항상 프로미스를 반환한다.
- 프로미스가 아닌 값을 반환하더라도 자동으로 이행된 프로미스로 감싸진다.
async function f() {
return 1;
}
f().then(console.log); // 1
await
- 프로미스가 처리될 때까지 기다린 후, 결과를 반환된다.
- async 함수 내에서만 사용할 수 있다.
async function f() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("Success"), 1000)
});
let result = await promise;
console.log(result); // Success
}
f();
프로미스
- JavaScript에서 비동기 작업을 처리하기 위해 사용되는 객체
- Pending(대기)
- 비동기 작업이 아직 완료되지 않은 상태
let promise = new Promise(function(resolve, reject) {
// Processing
});
- Fulfilled(이행)
- 작업이 성공적으로 완료된 상태
let promise = new Promise(function(resolve, reject) {
setTimeout(() => resolve("Success"), 1000);
});
- Rejected(거부)
- 작업이 실패한 상태
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("Error")), 1000);
});
then()
- 프로미스가 이행(Fullfilled)되면 첫 번째 콜백 함수가 실행된다.
- 프로미스가 거부(Rejected)되면 두 번째 콜백 함수가 실행된다.
let promise = new Promise(function(resolve, reject) {
setTimeout(() => resolve("Success"), 1000);
});
promise.then(
result => alert(result), // Fullfilled
error => alert(error) // Rejected
);
catch()
- 에러(Rejected)를 처리하는 전용 메서드
- then()의 두 번째 인수 대신 사용할 수 있다.
let promise = new Promise((resolve, reject) => {
setTimeout(() => reject(new Error("Error")), 1000);
});
promise.catch(alert);
2. Django
2-1. Django
Django
- Python 기반의 오픈 소스 웹 애플리케이션 프레임워크
- Django를 활용하면 UI/UX, 프론트엔드, 백엔드 개발이 모두 가능하다.
MTV 패턴
- Model
- 데이터에 대한 구조 및 비즈니스 로직을 정의한다.
- 데이터베이스와의 상호작용을 담당한다.
- Template
- 사용자에게 보여지는 화면을 정의한다.
- HTML 파일에 Django 템플릿 언어를 사용하여 데이터를 렌더링한다.
- View
- 사용자 요청에 대한 처리 로직을 담당한다.
- 어떤 데이터를 어떤 템플릿에 전달할지를 결정하고, HTTP 응답을 반환한다.
동작 원리
- Client
- 브라우저에서 사용자가 요청을 보낸다.
- Web Server
- 정적 파일을 전달하거나 WAS로 위임한다.
- WAS Server(Django)
- 비즈니스 로직을 처리하고, Database와 통신한다.
- Database
- 실제 데이터를 저장한다.
2-2. Create Django
가상환경 생성
- .venv 폴더 생성
uv venv .venv -p 3.13
.\.venv\Scripts\activate
uv pip install -r .\requirements.txt
# requirements.txt
django
Django 프로젝트 생성
- config 폴더 및 manage.py 생성
django-admin startproject config .
Django 앱 생성
- user 폴더 생성
python manage.py startapp user
# config/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user' # 추가
]
templates 생성
- templates 폴더 생성
- base, user 폴더 생성
mkdir templates
cd .\templates\
mkdir base
mkdir user
# config/settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['templates'], # 추가
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
static 설정
cd ..
mkdir static
cd static
mkdir css
mkdir js
# config/settings.py
import os # 추가
STATIC_URL = 'static/'
STATIC_PATH = os.path.join(BASE_DIR, 'static') # 추가
STATICFILES_DIRS = (STATIC_PATH,) # 추가
코드 작성
/* static/css/index.css */
p {
color: lightseagreen;
}
// static/js/index.js
alert("Hello, World!");
<!--templates/user/index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
{% load static %}
<link rel="stylesheet" href="{% static 'css/index.css' %}">
</head>
<body>
<h1>User File</h1>
<p>Welcome to the user file page!</p>
<p>Here you can manage your user files.</p>
{% load static %}
<script type="text/javascript" src="{% static 'js/index.js' %}"></script>
</body>
</html>
# config/urls.py
from django.contrib import admin
from django.urls import path, include # 추가
urlpatterns = [
path('admin/', admin.site.urls),
path('user/', include('user.urls')) # 추가
]
# user/urls.py
from django.urls import path
from .views import index
urlpatterns = [
path('index/', index)
]
# user/views.py
from django.shortcuts import render
def index(request):
return render(request, 'user/index.html')
서버 실행
cd ..
python manage.py runserver


파일 구조
1_CREATE_DJANGO/
├── .venv/
├── config/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
│ ├── css/
│ │ └── index.css
│ └── js/
│ └── index.js
├── templates/
│ ├── base/
│ └── user/
│ └── index.html
├── user/
│ ├── migrations/
│ │ └── __init__.py
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── db.sqlite3
├── manage.py
└── requirements.txt
'SK네트웍스 Family AI캠프 10기 > Daily 회고' 카테고리의 다른 글
| 74일차. Django (0) | 2025.04.25 |
|---|---|
| 73일차. Django (0) | 2025.04.24 |
| 71일차. JavaScript (0) | 2025.04.22 |
| 70일차. HTML & CSS (0) | 2025.04.21 |
| 69일차. Linux (0) | 2025.04.18 |