처음 나만의 사이트를 배포했다는 기쁨도 잠시...
디자인 패턴에 대하여 공부를 하다가 내가 작성한 코드를 보니,
"아! 이거 잘못 되었구나"를 깨달았다.
현재 이미 배포한 사이트의 모델을 변경해야 해서 고려해야 할 사항이 많아서,
정리를 한 다음에 시행하기로 했다. (오래 안 써서 잊어 버린 것도 많고...)
배포한 사이트의 모델을 바꾸기 위해 다음과 같은 과정을 거칠 계획입니다:
- 브랜치 바꾸기
- 모델 수정하기 (추상 팩토리 적용 계획)
- MySQL을 이용해 데이터 바꾸어 보기
1. 브랜치 바꾸는 법 및 병합하는 방법
브랜치 바꾸는 이유는,
모델을 바꾸는 작업이기 때문에 잘못되더라도 복구가 가능해야 합니다.
그래서 브랜치를 바꾸어 진행할 계획입니다.
명령어 정리:
$ git branch # (현재 브랜치 목록을 알 수 있습니다.)
$ git branch search # (search라는 브랜치 생성)
$ git checkout search # (작업 브랜치를 변경합니다.)(search는 이름입니다)
$ git merge search # (작업이 완료된 브랜치를 병합합니다)
$ git branch -d search # (브랜치를 삭제합니다)
$ git checkout -b search # search를 생성하고 이동합니다. (동시에 하고 싶으면 -b를 붙이세요! git branch name이 노력을 아껴줍니다)
$ git status # 여기서는 충돌난 파일을 알려줍니다
우선 브랜치를 새로 만들고 이동해 주세요:
$ git checkout -b 새로운브랜치이름
여기서 작업을 하면 됩니다.
...
작업이 문제없이 완료되었다면 원래 브랜치로 돌아와 주세요:
$ git checkout master
그러면 작업하기 이전 상황으로 돌아옵니다.
여기서 머지(병합 작업)를 해 주세요:
$ git merge 새로운브랜치이름
기존의 브랜치(master)에 바뀐 사항이 없다면 충돌은 일어나지 않을 거예요.
마무리:
$ git branch -d 새로운브랜치이름
병합이 끝났으면 이전 브랜치는 삭제해 주세요. (나중에 하면 까먹어요)
2. 모델 수정하기.
추상 팩토리 패턴이란?
추상팩토리 패턴은 서로 관련있는 여러 객체를 만들어주는 인터페이스를 제공하는 패턴입니다.
즉, 관련성 있는 여러 종류의 객체를 일관된 방식으로 생성하는 경우 사용됩니다.
나의 문제점:
면접에서 나올 거 같은 질문을 올리는 곳이 있고
그 중 내가 선택한 질문만 보는 곳이 있는데.
이 두 모델을 따로 만들어 코드 중복 문제가 있었습니다.
이 문제를 추상 팩토리를 이용하여 해결 할 수 있겠다고 생각했습니다.
```
# 기존 모델
```
당시에 Questions라는 공용 질문이 있고 사용자가 질문을 선택해 가져오는 형태로 만들어서 ForeignKey를 사용하여 구현을 했는데. Questions이 삭제 되더라도 SellectedQuestion을 남기고 싶었기 때문에 description을 두개나 만들었었다.
```
# 공용 질문
# 개인 질문
```
이걸 Quetion이라는 추상화 클래스를 상속을 통해 관리하니 코드 가독성도 좋아지고, 코드 재활용성도 높일 수 있었다.
3. MySQL데이터 보존하기.
모델을 수정하다가 보면 데이터 베이스에 문제가 생기는 경우가 있다.
저 같은 경우 두번째 모델 SellectedQuestion 의 위치를 바꾸었고(앱을 2개로 만들었는데. 1개로 합치는 작업을 했습니다.)
question = models.ForeignKey 필드를 한개 지웠습니다.
DB에 데이터가 얼마 없다면 지우고 새로 하는 것이 편하겠지만, 배포된 서비스를 가정하면 데이터 값을 유지해야 할 거 같아서 방법을 알아 봤습니다.
우선 데이터 베이스 모델을 Export를 해 주었습니다.
[MySQL] DB 데이터 이전 및 백업
mysql를 이용해 만든 DB 데이터를 다른 서버나 컴퓨터로 옮기는 방법은 여러가지가 있다. 대표적인 예시로는 콘솔을 이용하는 방법과 workbench에서 하는 방법이 있으며, 이번에 다루는 방법은 workben
wishml.tistory.com
(클래스 변경없이 그대로 쓴다면 바로 import를 해 주면 되지면 모델이 변경 되어서 그대로는 해 주지 못하였습니다. )
저는 필드 한개를 삭제를 했기 때문에 필드를 한개 삭제 후에 Export해 주었습니다.
그러면 파일이 생기는데. 더블클릭 해서 들어가서 아래로 가면
INSERT INTO `questions_questions` VALUES (1,'2023-05-15 03:21:42.472656','2023-05-23 10:00:01.989652','직접 배포를 해 보시면서 어떤점이 가장 힘들었나요?',2,4),.........
이런 SQL문이 있습니다.
이걸 두가지 사항을 바꾸어 사용 하겠습니다.
첫째, 이름을 바꾸어 주어야 합니다.
ex) `questions_questions` => DB_random_question.questions_questions
둘째, 순서를 신경 써야 합니다.
클래스를 변경하는 과정에서 필드 위치가 변경이 되었으면 값이 다른 위치에 들어가게 됩니다.
(id, created_at, updated_at, description, authon_id)
INSERT INTO DB_random_question.questions_sellectedquestions (id, created_at, updated_at, description, authon_id) VALUES (1,'2023-05-15 03:21:42.472656','2023-05-23 10:00:01.989652','직접 배포를 해 보시면서 어떤점이 가장 힘들었나요?',2,4),.........
이제 이 명령어를 MySQL에 적용해 주시면 데이터 이전까지 완료!!!
관련 자료
디자인패턴 추상팩토리란
'개발' 카테고리의 다른 글
카카오 소셜 로그인 (0) | 2023.07.05 |
---|---|
배포된 웹 사이트 새로운 모델 필드 추가하기 (0) | 2023.06.19 |