문제 상황
VS Code에서 프로젝트의 ESLint 설정 파일을 인식하는 부분에서 에러 발생
해결 방법
하단의 코드를 VS Code의 settings.json에 추가
VS Code에서 프로젝트의 ESLint 설정 파일을 인식하는 부분에서 에러 발생
하단의 코드를 VS Code의 settings.json에 추가
<div id="app"></div>
<script>
var div = document.querySelector("#app");
var viewModel = {};
// Object.defineProperty(대상 객체, 객체의 속성, {
// 정의할 내용
// });
// 즉시 실행 함수
(function () {
function init() {
Object.defineProperty(viewModel, "str", {
get: function () {
console.log("접근");
},
set: function (newValue) {
console.log("할당", newValue);
render(newValue);
},
});
}
function render(value) {
div.innerHTML = value;
}
init();
})();
</script>
속성
new Vue({
el: ,
template: ,
data: ,
methods: ,
created: ,
watch: ,
});
전역 컴포넌트
// Vue.component('컴포넌트 이름', 컴포넌트 내용);
// 전역 컴포넌트 - 거의 안씀
Vue.component("app-header", {
template: "<h1>Header</h1>",
});
Vue.component("app-content", {
template: "<div>content</div>",
});
지역 컴포넌트
new Vue({
el: "#app",
// 지역 컴포넌트 등록 방식
components: {
// '컴포넌트 이름': 컴포넌트 내용
"app-footer": {
template: "<footer>footer</footer>",
},
},
});
컴포넌트와 인스턴스의 관계
사용 방법
<script src="[https://cdn.jsdelivr.net/npm/vue/dist/vue.js](https://cdn.jsdelivr.net/npm/vue/dist/vue.js)"></script>
<script src="[https://unpkg.com/vue-router@3/dist/vue-router.js](https://unpkg.com/vue-router@3/dist/vue-router.js)"></script>
옵션
설치
<script src="[https://unpkg.com/axios/dist/axios.min.js](https://unpkg.com/axios/dist/axios.min.js)"></script>
npm install axios
사용방법
<div id="app">
<button v-on:click="fetchData">get data</button>
</div>
new Vue({
el: '#app',
methods: {
fetchData: function() {
axios.get('https://jsonplaceholder.typicode.com/users/')
.then(function(response) {
console.log(response);
})
.catch(function(error) {
console.log(error);
});
}
}
})
get data 버튼을 클릭했을 때 사용자 정보를 받아오는 코드
실행하면 사용자 정보가 콘솔에 출력됨
뷰 인스턴스에서 정의한 속성들을 화면에 표시하는 방법
<div>{{ message }}</div>
new Vue({
data: {
message: 'Hello Vue.js'
}
})
뷰로 화면의 요소를 더 쉽게 조작하기 위한 문법
특정 데이터의 변화를 감지하여 자동으로 특정 로직을 수행하는 속성
값을 계속 추적, 이전 값과 바뀐 값을 받을 수 있음, 데이터 요청
new Vue({
data() {
return {
message: 'Hello'
}
},
watch: {
message: function(value, oldValue) {
console.log(value);
}
}
})
message의 데이터가 변할 때마다 watch 속성에 정의한 message 함수가 실행되면서 콘솔에 변한 데이터 출력
바뀐 값에 대해서 모름, 빠름, 캐시 같은 느낌, validation이나 간단한 연산 가능, 가독성 향상
computed: {
reverseMessage() {
return this.message.split('').reverse().join('');
}
}
<div>{{ reverseMessage }}</div>
<!-- .vue 파일 구조 -->
<template>
<!-- html (뷰 컴포넌트의 표현단, 템플릿 문법) -->
</template>
<script>
// 자바스크립트 (뷰 컴포넌트 내용)
</script>
<style>
/* CSS (뷰 템플릿의 스타일링) */
</style>
동작 원리
Download | Node.js
Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.
nodejs.org
Vue.js devtools
Browser DevTools extension for debugging Vue.js applications.
chrome.google.com
뷰로 빠르게 프로젝트를 구성하고 프로토 타이핑 하고 싶을 때 사용하는 CLI 도구
✅ 공식문서
https://cli.vuejs.org/guide/installation.html
sudo npm install -g @vue/cli
# 버전 확인
vue --version
vue create [프로젝트명]
❗️ 진행 시 주의할 점
vuetify 추천 버전을 사용하기 위해서는 vue2를 설치해야 한다.
설치 완료라고 예쁘게 뜬 메시지를 확인할 수 있다.
npm run serve
vue add vuetify
❗️ 진행 시 주의할 점
vuetify3는 프리뷰 버전이기 때문에, 추천 버전인 vuetify2를 사용하기 위해서는 vue2를 설치해야 함!
vue3를 설치한 경우 아래와 같은 에러가 발생한다.
Error: You cannot call "get" on a collection with no paths. Instead, check the "length" property first to verify at least 1 path exists.
아래와 같은 메시지가 출력되면 잘 설치된 것이다!
npm run serve
Reference
프론트엔드 개발을 쉽게 하기 위한 자바스크립트 프레임워크
MVVM 패턴의 뷰모델(ViewModel) 레이어에 해당하는 화면(View)단 라이브러리
💡 Virtual DOM
화면에 변화가 있을 때 변경사항을 실시간으로 수정하지 않고, Virtual DOM을 이용해 메모리에서 처리하고 DOM을 한번만 수정한다. 결과적으로 브라우저는 렌더링을 한번만 하게 되기 때문에 렌더링 성능을 높인다.
Reference
Django는 설치할 때 기본적으로 SQLite가 연동됩니다.
하지만 실제 프로젝트를 위해 MySQL 연동 작업을 진행해보겠습니다.
1. 커넥터 설치
mysqlclient 라는 라이브러리를 설치하면 파이썬과 MySQL 통신이 가능합니다.
pip install mysqlclient
2. settings.py 설정
DATABASES = {
'default' : {
'ENGINE': 'django.db.backends.mysql',
'NAME': '연동할 데이터베이스 이름',
'USER': 'DB 접속 계정명',
'PASSWORD': 'DB 접속 비밀번호',
'HOST': '실제 DB 주소',
'PORT': '3306', # 기본 포트 주소
}
}
3. DB 감지
해당 DB에 존재하는 테이블들을 model로 만들어줌
# 앱 안에 models.py에 바로 저장하기
python manage.py inspectdb > [앱이름]/models.py
# 앱 안에 models.py에 바로 저장하기 (멀티 DB)
python manage.py inspectdb --database 'db명' > [앱이름]/models.py
# 출력만 하기
python manage.py inspectdb
4. 테이블 생성
모델이 변경되었으니 마이그레이션 적용하기
python manage.py makemigrations
python manage.py migrate
Django 공식문서를 참조했습니다.
기본으로 설치되어 있는 SQLite를 사용할 수 있다.
# db.sqlite3 가 있는 위치에서
sqlite3 db.sqlite3
모델이란, 부가적인 메타데이터를 가진 데이터베이스 구조!
1. polls/models.py에서 모델 작성
Question과 Choice 테이블을 만든다.
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
모델을 통해 장고는 다음과 같은 일을 한다.
2. mysite/settings.py 수정
프로젝트에 polls 앱이 있다는 것을 알려야 한다.
INSTALLED_APPS에 PollsConfig 클래스 추가
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
3. 변경사항에 대한 마이그레이션 생성
모델에 대한 변경사항을 장고에 알리는 것
python manage.py makemigrations
💡 마이그레이션이란? Migrations
장고에서 모델에 대한 변경사항을 데이터베이스 스키마에 전파하는 방법
장고는 ORM을 사용하는데 DB 스키마를 git처럼 버전 관리 할 수 있도록 함
하나의 마이그레이션 파일은 해당 마이그레이션이 생성된 시점의 구조를 가짐
4. 변경사항을 데이터베이스에 적용
모델과 관련된 테이블을 생성한다.
python manage.py migrate
🧐 마이그레이션을 만드는 명령과 적용하는 명령이 분리된 이유는 무엇일까?
버전 관리 시스템에 마이그레이션을 커밋하고 앱과 함께 출시할 수 있도록 하기 위해서이다.
✅ 공식문서
https://docs.djangoproject.com/en/4.1/
⬇️ Django 설치 전이라면 아래 글을 참고해보세요!
맥(Mac)에서 Django 개발환경 구축 및 설치하기
개발환경 macbook pro (2019) macOS Monterey 12.6.2 python 3.9.6 django 4.1.6 python3 설치 1. 설치 여부 확인 python3 --version 2. 설치가 되어있지 않다면 설치 python 공식 다운로드 (3.9.6으로 설치함) https://www.python.org/do
myminju.tistory.com
django-admin startproject mysite
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
python manage.py runserver
python manage.py startapp polls
💡 프로젝트 vs 앱
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
1. polls/views.py에 아래 코드 추가
# polls/views.py
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
2. polls/urls.py에 URL 매핑
뷰를 호출하려면 이와 연결된 URL이 있어야 하고, 이를 위해 URLConf가 사용된다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
3. mysite/urls.py에서 모듈 가리키기
최상위 URLConf에서 polls.urls 모듈을 바라보게 설정한다.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
💡 include()
다른 URLConf를 참조하도록 함
URL이 일치하는 부분까지 잘라내고 남은 부분을 included URLConf로 보냄
💡 path()
필수 파라미터 : route, view
선택 파라미터 : kwargs, name
4. http://localhost:8000/polls/ 에 접속하여 연결 확인하기
index 뷰가 URLConf에 연결되어 잘 나오는 것을 확인할 수 있다!