2021-WISET-jobsearching-mentoring-GCDAC / dev-community

0 stars 1 forks source link

[weekly] 7월달 첫번째 주간보고 #2

Open tlsdhsdb opened 3 years ago

tlsdhsdb commented 3 years ago

팀원 별 분담 파트 및 파트별 진행상황

client

_2021-07-11__1 14 44 _2021-07-11__1 14 29

server

소셜로그인

→스프링부트의 경우 SpringSecurity와 SpringOAuth를 사용해 github와 google에 대한 간단한 설정으로 연동 가능함

스프링 시큐리티는 막강한 인증(Authentication)과 인가(Authorization) 기능을 가진 프레임워크임


이슈

Untitled 3

1. 사용자 테이블 

    이름 - 사용자 직접 설정 or github에서 설정한 username

    이메일 - github나 google 계정에서 설정한 이메일로 자동 설정

    imageURL - github나 google에서 설정한 이미지 가져오기 or 직접 설정 가능

    한 줄 소개 - 사용자 직접 설정

2. 활동 및 개발언어 테이블

    활동(알고리즘, 공모전, 스터디 등) / 개발언어(C, Java, C++ 등)

**질문사항** 

1. 활동과 개발언어 테이블을 따로 나눠서 구성하는게 적절한지 궁금합니다. (둘을 합칠 수 있는지?!)
2. 사용자별로 여러 활동과 언어들을 선택할텐데 그러면 관심활동 테이블과 관심언어 테이블의 크기가 너무 커질 것 같은데 저렇게 db를 구성한 것이 아닌 다른 방법이 있는지 궁금합니다.

<커뮤니티 - 그룹 - 게시판 ERD 설계>

image

  1. 사용자가 어떤 그룹에 속하는 지 정보를 갖고 있고 한 사용자가 여러 그룹에 속해 있을 수 있기 때문에 User 테이블에서 여러 개의 그룹 id를 하나의 문자열로 합쳐서 저장하되, ';'을 이용하여 그룹 id를 구분합니다.

  2. 커뮤니티에 허용된 그룹 정보를 얻기 위해 Community 테이블에서 그룹 id를 저장합니다. 이때, 그룹 id가 0이라면 전체 커뮤니티를 의미합니다. 또한 그 커뮤니티 안에는 어떠한 카테고리가 있는지 확인하기 위해 Category 테이블과 관계 설정을 합니다.

  3. 하나의 게시글이 어떠한 커뮤니티의 카테고리에 들어 있는 지를 알기 위해 Post 테이블에서 category_id에 대한 정보를 갖고 있습니다.

  4. 게시글에는 댓글을 달 수 있는데 대댓글 기능을 위해 Comment 테이블에 추가적으로 comment_group_id 정보를 넣어주어 댓글을 그룹지어 주고, 첫번째 시작 댓글을 기준으로 작성 시간 순서로 나열합니다.

KENNYSOFT commented 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를 넣어주는 방법도 고려 해보세요.