Open tlsdhsdb opened 3 years ago
client 테마 예쁘네요 ㅎ
활동이랑 개발언어는 완전히 layer가 동일해서 굳이 나누는게 큰 의미는 없는 것 같고, 통합해서 어떤 tag? 정도에 속성을 넣어주면 어떨까 싶습니다.
ex. ("Java", "개발언어"), ("C++", "개발언어"), ("알고리즘", "활동")
중계 테이블이 커지는 것은 어쩔 수 없는 현상이기는 합니다만 완전히 N × M이 다 생길 것은 아니라서 (모든 사람이 Java도 하고 C++도 하고 C도 하면서 알고리즘 공모전 스터디에 다 관심 있지는 않을 것... 이라고 믿겠습니다) index 걸려 있으니 적당히 속도 나올 것이라고 생각합니다.
결국 trade-off를 찾아야 하는데, 여러 그룹 표현 방식처럼 ;로 join하여 표현한다면 해당 언어를 사용하는 사람을 찾고 싶을 때 굉장히 오래 걸리게 되는 점 등이 있어서요, column으로 다 펼쳐 놓는 것도 아무래도 무리고요. (언어가 추가될 때마다 alter를 쳐야 할테니... 😱)
참고로 MySQL이나 MariaDB 계열이라면 저는 그냥 JSON column을 사용하는 것을 더 추천합니다. insert시 validation도 있고 extract shorthand 등이 있어서 사용하기 편리합니다.
대댓글 표현 방식에는 그룹 id도 가능은 하지만 매번 새로 번호를 부여해야 하는 점이 있어서, parent 댓글 id를 넣어주는 방법도 고려 해보세요.
팀원 별 분담 파트 및 파트별 진행상황
client
신온유
회원가입
server
박세원
역할) 회원가입 db 구성, 소셜로그인(github, google) 리서치
소셜로그인
→스프링부트의 경우 SpringSecurity와 SpringOAuth를 사용해 github와 google에 대한 간단한 설정으로 연동 가능함
스프링 시큐리티는 막강한 인증(Authentication)과 인가(Authorization) 기능을 가진 프레임워크임
일반 로그인 대신 소셜 로그인을 사용하는 이유
일반 로그인을 사용할 경우)
로그인 시 보안, 비밀번호 찾기, 회원가입 시 이메일 혹은 전화번호 인증, 비밀번호 변경, 회원정보 변경을 직접 구현해야 함
스프링부트 1.5와 스프링부트 2.0에서의 차이점
→ 스프링부트 1.5 방식에서는 url주소를 모두 명시해야 하지만, 2.0 방식에서는 client 인증 정보만 입력하면 됨
→ 1.5에서는 직접 입력했던 값들을 2.0의 경우 모두 enum으로 대체됨
→ CommonOAuth2Provider라는 enum이 새로 추가되어 구글, 깃허브, 페이스북, 옥타(Okta)의 기본 설정값을 여기서 모두 제공함
https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/config/oauth2/client/CommonOAuth2Provider.html → Spring docs
이슈
이슈1 - DB 구성에 대한 질문
상황) 사용자 테이블과 나머지 테이블들의 관계를 ManyToMany라고 생각하여 중개테이블인 관심활동과 관심언어를 만들었습니다.
<커뮤니티 - 그룹 - 게시판 ERD 설계>
사용자가 어떤 그룹에 속하는 지 정보를 갖고 있고 한 사용자가 여러 그룹에 속해 있을 수 있기 때문에 User 테이블에서 여러 개의 그룹 id를 하나의 문자열로 합쳐서 저장하되, ';'을 이용하여 그룹 id를 구분합니다.
커뮤니티에 허용된 그룹 정보를 얻기 위해 Community 테이블에서 그룹 id를 저장합니다. 이때, 그룹 id가 0이라면 전체 커뮤니티를 의미합니다. 또한 그 커뮤니티 안에는 어떠한 카테고리가 있는지 확인하기 위해 Category 테이블과 관계 설정을 합니다.
하나의 게시글이 어떠한 커뮤니티의 카테고리에 들어 있는 지를 알기 위해 Post 테이블에서 category_id에 대한 정보를 갖고 있습니다.
게시글에는 댓글을 달 수 있는데 대댓글 기능을 위해 Comment 테이블에 추가적으로 comment_group_id 정보를 넣어주어 댓글을 그룹지어 주고, 첫번째 시작 댓글을 기준으로 작성 시간 순서로 나열합니다.