ALL-CON Refactoring 5일차 - Articles 테이블 스키마 수정(1)
⚒️ Refactoring
-
어제~오후까지 어제부터 이어온 Task인 로그인이 검증이 필요한 API 요청시 유효하지 않은 로그인 상태라면 메인페이지로 강제 이동 후 로그인 창 팝업으로 다시 로그인을 유도하는 로직으로 서버와 클라이언트를 다시 설계하였다.
-
생각보다 로그인 검증이 필요한 API 요청이 많아서 작업시간이 오래걸렸다..
-
===main page===
-
알람 요청 : [post] concert/:concertid/alarm
-
알람 취소 : [delete] concert/:concertid/alarm
-
알람 조회 : [get] concert/alarm
-
콘서트 댓글 작성 : [post] concert/:concertid/comment
-
콘서트 댓글 수정 : [patch] concert/:concertid/comment/:commentid
-
콘서트 댓글 삭제 : [delete] concert/:concertid/comment/:commentid
-
-
-
===concert page===
- 없음
-
===conchin page===
-
게시글 작성 : [post] concert/:concertid/article
-
게시글 수정 : [patch] concert/:concertid/article/:articleid
-
게시글 삭제 : [delete] concert/:concertid/article/:articleid
-
게시글 댓글 작성 : [post] concert/:concertid/article/:articleid/comment
-
게시글 댓글 수정 : [patch] concert/:concertid/article/:articleid/comment/:commentid
-
게시글 댓글 삭제 : [delete] concert/:concertid/article/:articleid/comment/:commentid
-
-
===my page===
-
마이페이지 진입 : [get] user/me
-
개인정보 수정 : [patch] user/me
-
닉네임 중복 확인 : [post] user/username
-
프로필사진 수정 : [patch] user/picture
-
콘친 인증 : [patch] user/safe
-
콘친 인증코드 요청 : [post] user/safe
-
콘친 인증코드 입력 : [post] user/safe/confirm
-
회원탈퇴 : [delete] user/me
-
내가 쓴 게시글 : [get] user/myarticle
-
내가 쓴 댓글 : [get] user/mycomment
-
1. 추가적인 보완이 필요한 사항
-
클라이언트를 담당하는 팀원분께서 현재 ALL-CON 프로젝트 스키마를 수정해달라는 요청을 해주셨다.
현재 콘친찾기 게시글 작성시 총 멤버수는
2
현재원 수는1
값으로 항상 고정을 해두었다.처음부터 멤버수를 고정하기보다는 게시글 작성때부터 유연하게 멤버수를 수정할 수 있게 스키마를 수정해달라는 요청을 해주셨다.
-
사실 민감정보 암호화 리팩토링을 할 때도
sequelize
문법중 특정 컬럼만 추가하여migration
하는 방법도 열심히 구글링하여 찾아보았는데, 이번 스키마 구조 수정 후 자주쓰는sequelize
문법은 다시 한번 복습할 겸 블로그에 학습한 내용을 남겨봐야겠다.(매번 스키마 수정할 때마다 구글링 중..)우선 클라이언트를 담당하는 팀원분께서 요청한 부분은 다음과 같다.
-
해당
Articles
테이블 컬럼중 두가지값을 수정 요청하셨다.-
member_count
디폴트값 삭제 -
total_member
디폴트값 삭제
-
2. 문제 해결
2-1. Sequelize Model 파일 스키마 수정
- 현재
Articles
테이블의 모델구조는 다음과 같다.
-
member_count
와total_member
컬럼은INTEGER
타입의 데이터이며,NULL
이 허용되지 않고 기본값들이 각각1
과2
로 설정이 되어 있다.아래와 같이 불필요한 데이터 속성들을 삭제했다.
2-2. changeColumn() 함수로 컬럼 데이터 속성값 변경
-
우선 아래 명령어로 migration 파일을 생성해 준다.
# using npm npx sequelize-cli migration:generate --name 생성할 migration 이름 # using yarn yarn sequelize-cli migration:generate --name 생성할 migration 이름
-
그 뒤, 컬럼 안 데이터 속성값을 변경할 예정이기 때문에
changeColumn()
함수를 사용한다.함수의 사용 방법은 아래와 같다.
// await queryInterface.changeColumn(테이블명, 컬럼명, { // 컬럼 데이터 속성, // 컬럼 옵션 // }) await queryInterface.changeColumn('Articles', 'member_count', { type: Sequelize.INTEGER, defaultValue: null, allowNull: true, });
-
두가지 속성이 비동기로 처리되어야 하므로 아래와 같이 작성하였다.
-
해당 스키마 수정외에
controller
부분에서도member_count
와total_member
는 고정값이 DB에 저장되므로 따로req.body
로 입력값을 전달받아 DB에 저장하지 않는 구조였다.게시글 작성
controller
까지 수정하여 게시글 작성시 멤버수를 유연하게 적용할 수 있게끔 리팩토링하였다.
3. 결과
-
Articles
테이블 스키마가 다음과같이 변경되었다.이제 게시글 최초 작성시에도 멤버수를 유연하게 적용하여 게시글 생성이 가능하다.