220209 TIL

klucas·2022년 2월 9일
0

TIL DAY 174

오늘 배운 일

✔️ Django 웹 개발

1. 초기에 필요한 데이터가 있다면?

이번에는 여러가지 테스트 데이터를 추가하는 방법에 대해 알아보겠다.

그러기 위해서 우리는 과거에 작성했던 글들을 모두 삭제해준다.

http://127.0.0.1:8000/posts/

삭제 완료!

지금 이 상태에서 포스트 목록 페이지가 날 나오는지 테스트를 하고 싶다면 어떻게 해야 할까?

현재 아무런 게시글이 없기 때문에 글쓰기 버튼을 눌러서 밑에 처럼 글을 써주면 된다.

결과는?

이렇게 우리가 추가한 게시글이 잘 나타난다.

그런데 만약에 글이 50개가 넘어도 잘 나오는지 테스트를 하고 싶다면 지금 우리가 한 것처럼 하나씩 글을 써서 테스트 하기에는 힘들것이다.

왜냐하면 아까 했던 글쓰기 작업을 50번이나 반복을 해야하기 때문이다.

이렇게 우리 서비스에서 사용할 데이터를 데이터베이스에 추가하는 걸 시딩이라고 한다.

시딩이란?

  • seed 즉 심다는 뜻을 가진 단어에서 유추할 수 있듯이 간단히 말하면 데이터베이스에 데이터를 심어주는 것을 말한다.

지금처럼 테스트에 필요한 데이터를 준비하거나, 서비스에 필요한 초기 데이터를 입력해야 하는 경우에 유용한 방법이다.

django 에서 시딩은 하나의 파일에 데이터를 두고 manage.py 에 loaddata 명령어를 이용해서 실행할 수 있다.

출처 : 코드잇

이 때 시딩을 위해 데이터가 들어있는 파일이 필요한데 이러한 seed_file 은 JSON, XML 등의 파일 형식을 사용할 수 있다.

우리는 JSON 형식을 사용해보자!

그럼 먼저 시딩에 사용할 JSON 형식의 데이터 파일을 만들어야 한다.

JSON 은?

  • 데이터를 표현하기 위해 사용하는 대표적인 포맷 중 하나로 파이썬의 사전형과 비슷하게 name 과 value 로 데이터를 표현한다.

예를 들어 우리가 사용했던 글을 JSON 형식으로 간단하게 만들어본다면 중괄호를 쓰고 사전형과 비슷하게 name 을 적어주고, 그 다음에 name 에 해당하는 값을 적어주면 된다.

출처 : 코드잇

그러면 위의 코드에서 title 이라는 name 으로 value 에 접근을 할 수 있게 되는 것이다.

그리고 글 내용도 이렇게 name 과 value 형식으로 적을 수 있다.

그런데 이런 데이터를 중첩을 이용해서 이런 식으로 적을 수 있다.

출처 : 코드잇

data_01 이라는 name 에 또다시 사전형 데이터로 title 과 content 를 넣을 수 있다.

출처 : 코드잇

그리고 위의 코드처럼 접근을 하면 data_01 이라는 값을 얻을 수 있다.
이런 식으로 같은 데이터라고 해도 다양한 형태와 계층으로 JSON 을 표현할 수 있다.

내용물은 같지만 구조가 다른 것이다.

정리해보자면...

  • django 의 시딩에 필요한 데이터 파일은 JSON 형식을 사용할 수 있는데 JSON 은 name 과 value 로 이루어진 데이터 형식이고 같은 데이터도 다양한 구조의 JSON 으로 표현할 수 있다는 것까지 배워봤다.

그러면 한 번 생각해보면 작성하는 사람마다 다른 형식으로 데이터를 작성하면 django 가 어떤 구조로 작성된 JSON 형식인지 모르기 때문에 데이터를 파악하기 힘들 것이다.

그리하여 django 가 읽을 수 있는 구조로 JSON 을 작성해야 되는데 구조를 알아보는 가장 좋은 방법은...

django 로부터 데이터 하나를 JSON 형식으로 추출해보는 것이다.

그러면 우리도 한 번 해보자!

우선 포스트 페이지에서 게시글을 다 삭제해주고 새롭게 글을 하나 써준다.

제목은...

title_data_01

내용은...

content_data_01

이렇게 적어준다.

다음에 VSCode 로 가서 새로운 터미널을 켜주고 다음과 같이 커맨드를 입력해준다.

python3 manage.py dumpdata

그리고 끝에 posts 한 다음에 > 하나 넣어주고 posts_data.json 을 넣어준다.

python3 manage.py dumpdata posts > posts_data.json

이 명령어는 django 프로젝트의 데이터를 파일로 추출하는 명령어인 dumpdata 를 이용해서 데이터를 JSON 파일로 추출하는 것인데...

실행을 하면...

이런 식으로 JSON 파일이 하나 생긴다.

파일을 열어보면 데이터가 들어있기는 한데 조금 구조가 불편하게 생겼다.

posts_data.json

여기에 읽기 편하게 들여 쓰기를 넣어주도록 해준다.

그러면 다시 터미널로 가서 똑같이 dumpdata 까지 작성해주고...

python3 manage.py dumpdata

끝으 posts 한 다음에 대시 두 개를 넣어주고 indent=2 한 다음에 아까와 마찬가지로 > 를 하고 posts_data.json 을 작성해준다.

python3 manage.py dumpdata posts --indent=2 > posts_data.json

그러면 이번에는 이런 식으로 이쁘게 들여 쓰기가 두 칸씩 돼서 출력이되었다.

데이터를 살펴보면 이 큰 리스트 안에...

이런 식으로 데이터가 들어가 있다.

이 형식을 지켜서 우리가 데이터베이스에 넣어줄 데이터를 적어주면 된다.

데이터를 두 개더 만들어준다.

리스트이니까 반점을 찍어주고 밑에처럼 두 개를 복사해서 붙여넣어준다.

posts_data.json

그 다음에 하나씩 수정을 할 것인데 pk 같은 경우에는 게시글이 가지고 있는 고유한 번호니까 1씩 늘려주고...

제목과 내용 또한 숫자 1씩 올려준다.

다음에 생성일이란 생성 시간도 조금 수정해주면...

이렇게 임의로 넣어주도록 해준다.

데이터파일이 준비가 되었다면 이 데이터 파일을 데이터베이스에 넣어주면 된다.

한 번 해보자!

새로운 터미널을 켜주고 이번에는 다른 커맨드를 입력해준다.

python3 manage.py loaddata

그리고 끝에 파일의 이름인 posts_data.json 을 넣어주고 엔터를 누르면...

python3 manage.py loaddata posts_data.json

이렇게 세 개의 데이터가 들어갔다고 알려준다.

다음에 개발 서버를 키고 확인을 해본다.

웹 페이지로 돌아가보면 우리가 입력한 데이터가 이런 식으로 잘 들어가 있는 것을 알 수 있다.

끝으로 :

  • 이번 시간에는 웹 서비스의 테스트를 위해 필요한 데이터나 서비스에 필요한 초기 데이터를 추가하는 방법인 시딩에 대해 알아보았다.

  • 그리고 django 가 다룰 수 있는 데이터 포맷 중 하나인 JSON 에 대해 알아보고 dumpdata 와 loaddata 를 이용해서 데이터를 추출하고 추가도 해보았다.

  • 이제 우리는 관리자 도구나 웹 서비스에서 하나씩 추가하지 않아도 배운 시딩을 이용해서 원하는 데이터를 마음대로 추가할 수 있다.

profile
하루를 의미있게 살자!

0개의 댓글