작년에 spring을 사용하여 게시판 프로젝트를 진행했지만 블로그를 쓰지 않아 이번에 새롭게 시작한 프로젝트부터 블로그를 쓰려고 한다. (게시판 프로젝트는 나중에 완성하여 다시 블로그 작성할 예정.)
프로젝트의 주제는 맛집 공유 SNS로 spring framework를 이용한 웹 프로젝트이다. 화면 설계는 인스타를 참고할 계획이며, 카카오맵 API를 사용할 것이다. 구현을 하기에 앞서, 요구사항 정리 및 테이블 정의서, 화면정의서를 작성하였다.
DB관리를 하기 위해 cmd를 사용할 수도 있지만 조금 더 쉽게 SQLYog툴을 이용할 예정이다. 전에 이미 SQLYog를 설치해놨기 때문에 설치는 건너뛰겠다.
왼쪽 상단에 파일>새 연결 을 클릭하면 다음과 같은 팝업이 뜬다.

연결 이름은 마음대로 설정하면 되지만 보통은 '계정이름@별칭'을 사용한다고 한다.
MySQL Host Address: 서버 IP
사용자 이름, 비밀번호: MySQL 계정 정보
포트: 3306(MySQL 기본 포트)
root 계정은 관리자 계정이기 때문에 모든 권한이 허용된 상태이다. 따라서 원래는 용도에 따라 권한 설정을 다르게 하여 생성된 계정을 사용하는 것이 좋지만 나는 아직 그럴 필요는 없어서 root 계정을 사용할 것이다.
이렇게 하고 연결 버튼을 누르면 다음과 같은 화면이 나온다.

여기에 내가 설계한 테이블의 쿼리문을 넣어주겠다.

원래는 위와 같은 방법으로 하면 되겠지만 나는 전에 했던 스터디에서도 root를 사용했고 이번에도 root를 사용했기 때문에 데이터베이스를 새로 생성해서 거기에다가 테이블을 만들어야했다. 따라서 데이터베이스를 생성해보겠다.

왜 잘려서 나오는건지는 모르겠지만 두번째 칸은 database characterset, 세번째 칸은 database collation을 의미한다. 데이터 베이스 생성 시 위와 같이 세팅하고 생성한다.
테이블 설계 과정에서 했던 고민
테이블을 설계하면서 가장 고민했던 부분은 댓글테이블과 북마크 및 좋아요 테이블이다.
내가 설계한 프로젝트는 게시글에 댓글을 달 수 있으며 해당 댓글에 대한 답글까지만 가능하다. 댓글의 답글에는 답글을 달 수 없다는 소리이다. 그래서 테이블을 하나로 두고 댓글 그룹을 묶고, 계층을 나눌 수 있도록 할지 아니면 댓글 테이블과 답글 테이블을 따로 만들지 고민했었다. 나는 그 중에 댓글 테이블과 답글 테이블을 나누는 방식이 뭔가 관리도 더 편할 것 같고, 효율적일 것 같아 테이블을 따로 두었지만 어떤 것이 더 좋은 선택인지는 조금 더 공부해봐야 알 수 있을 것 같다.
내가 구현하고자 한 프로젝트에는 게시글 북마크 기능과 장소 북마크 기능이 있는데 북마크 테이블을 설계하는 과정에서 북마크 테이블을 하나로 둘지 아니면 두개로 나눌지 많이 고민했었다. 사실 상 둘 다 북마크 기능이기 때문에 테이블을 하나로 만드는 것이 테이블 관리에는 더 좋을 것 같으면서도 또 기능적으로는 너무 다른 부분에 쓰이기 때문에 분리하는게 오히려 데이터를 조회할 때 효율적일 것 같아서 고민이 됐었다. 또한 '좋아요'기능이 '게시물 북마크' 기능과 거의 똑같아 차라리 이 둘을 합치는 게 더 낫지 않을까 하는 고민도 했었다.
결론적으로 나는 게시물 북마크 기능과 장소 북마크 기능을 합친 테이블을 만들기로 선택했고 좋아요 기능 테이블은 따로 두기로 결정했다. 주변에 '테이블을 생성할 때 테이블 관리가 용이하도록 만드는 게 좋은건지, 아니면 데이터를 불러올 때 효율적인 것이 더 중요한 건지' 조언을 구했는데 답은 테이블의 확장성이 제일 중요하다는 것이었다. 그리고 만약 비슷한 여러 기능을 합친 테이블에서 어떤 한 타입의 정보가 업데이트되는 수가 너무 크다면 그것 또한 고려하여 테이블을 생성하는 것이 중요하다고 했다. 따라서, 비록 내가 프로젝트를 완성해봤자 저장할 데이터의 수가 많지 않다는 것을 알아 세 개의 항목을 합쳐서 테이블을 하나로 만들까 했지만 그래도,,, 좋아요는 따로 만들기로 했다 ㅎㅎ
| 맛집 공유 SNS 프로젝트#02_01. 게시글 리스트 구현 (0) | 2024.02.03 |
|---|---|
| 맛집 공유 SNS 프로젝트#01_2. 회원가입 기능 구현(주소api) (0) | 2024.01.16 |
| 맛집 공유 SNS 프로젝트#01_2. 회원가입 기능 구현 (0) | 2024.01.16 |
| 맛집 공유 SNS 프로젝트#01_1 로그인 기능 구현 (1) | 2024.01.13 |
| 맛집 공유 SNS 프로젝트#0_2. SPRING 환경설정 및 xml 파일 작성 (0) | 2024.01.09 |