Skip to content
 
 

Latest commit

 

History

28 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🗯️ WAY : 익명 질문 커뮤니티 사이트

WAY 사이트

📅 개발 기간

2024.07.23 ~ 2024.09.06

🖥️ 프로젝트 개요

❔기획 배경❔

현대 사회에서 익명성을 활용한 커뮤니티 사이트를 통해, 고백이나 친해지기 등의 용기 부족으로 표현하지 못한 감정을 솔직하게 전하고, 새로운 인간관계를 형성할 수 있는 안전한 소통 공간을 제공하고자 WAY 라는 익명 질문 커뮤니티 서비스를 만들게 되었습니다.

⭐기대 효과 및 차별성⭐

익명성을 통해 사용자는 민감한 주제나 개인적인 문제에 대해 자유롭게 질문하고 답변할 수 있으며, 다양한 사람들과의 소통을 통해 풍부한 의견을 얻을 수 있습니다.
질문을 받은 사람은 1:1 채팅 요청을 통해 실명으로 전환할 기회를 가질 수 있으며, 이를 통해 커뮤니케이션 능력과 자신감을 회복할 수 있습니다. 또한, 익명 질문과 답변이 게시글로 공개되어 사용자의 영향력을 자연스럽게 드러낼 수 있는 기회를 제공합니다.

🍄 개발 환경

📚 STACKS







😉 설치 및 실행 방법

  • spring boot + jdk 21
  • docker docker-compose.yml 모음
  • 로컬의 git bash 에서 깃허브 링크를 복사하여 클론합니다.
    git clone https://github.com/Like-Lion-Team-WAY/WAY.git
    
  • "/src/main/resources/application.yml” 경로로 yml 파일을 추가해줍니다.
    spring:
      profiles:
        active: prod
      servlet:
        multipart:
          max-file-size: 50MB
          max-request-size: 50MB
      elasticsearch:
        uris: ${ELASTIC_URIS}
        username: ${ELASTIC_USERNAME}
        password: ${ELASTIC_PASSWORD}
    
      application:
        name: WAY
      datasource:
        url: ${DB_URL}
        username: ${DB_USERNAME}
        password:  ${DB_PASSWORD}
        driver-class-name: com.mysql.cj.jdbc.Driver
        hikari:
          max-lifetime: 150000
          idle-timeout: 100000
      jpa:
        hibernate:
          ddl-auto: update
        properties:
          hibernate:
            format_sql: true
            enable_lazy_load_no_trans: true
        open-in-view: false
    
      security:
        oauth2:
          client:
            registration:
              google:
                client-id: ${GOOGLE_ID}
                client-secret: ${GOOGLE_SECRET}
                scope:
                  - profile
                  - email
              naver:
                client-id: ${NAVER_ID}
                client-secret: ${NAVER_SECRET}
                client-name: Naver
                redirect-uri: http://localhost:8080/login/oauth2/code/naver
                authorization-grant-type: authorization_code
                scope:
                  - name
                  - email
              kakao:
                client-id: ${KAKAO_ID}
                client-secret: ${KAKAO_SECRET}
                client-name: Kakao
                client-authentication-method: client_secret_post
                redirect-uri: http://localhost:8080/login/oauth2/code/kakao
                authorization-grant-type: authorization_code
                scope:
                  - account_email
                  - profile_nickname
            provider:
              kakao:
                authorizationUri: https://kauth.kakao.com/oauth/authorize
                tokenUri: https://kauth.kakao.com/oauth/token
                userInfoUri: https://kapi.kakao.com/v2/user/me
                user-name-attribute: id
              naver:
                authorization-uri: https://nid.naver.com/oauth2.0/authorize
                token-uri: https://nid.naver.com/oauth2.0/token
                user-info-uri: https://openapi.naver.com/v1/nid/me
                user-name-attribute: response
      data:
        mongodb:
          uri: ${MONGO_URI}
    
      kafka:
        bootstrap-servers: ${KAFKA_SERVER}
        consumer:
          group-id: chat-group
          auto-offset-reset: earliest
          key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
          value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
        producer:
          key-serializer: org.apache.kafka.common.serialization.StringSerializer
          value-serializer: org.apache.kafka.common.serialization.StringSerializer
    
    server:
      port: 8080
      serverName: ${SERVER_NAME}
    jwt:
      secretKey: ${JWT_SECRET_KEY}
      refreshKey: ${JWT_REFRESH_KEY}
    
    cloud:
      aws:
        credentials:
          access-key: ${AWS_ACCESS_KEY}
          secret-key: ${AWS_SECRET_KEY}
    
        s3:
          bucketName: ${AWS_BUCKET_NAME}
    
        region:
          static: ${AWS_REGION}
          auto: false
    
    

🔠 컨벤션

컨벤션

  • 커밋 메시지 : type: commit title (#이슈번호)
  • 브랜치 이름 : type/이슈번호-branch-name
  • 이슈 제목 : [Category] issue title
  • PR
    • 제목 : [Category] issue title (이슈 번호 제외)
    • 본문 : close #이슈번호
    • 머지 스타일 : squash and merge

🗃️ ERD

erd

🛠️ 기능

  • 로그인
    • oauth2를 이용한 kakao, google, naver 로그인
  • 피드
    • 피드 작성 (비로그인 사용자) 작성된 피드를 구경할 수 있는 권한 가짐 (로그인 사용자) 피드 작성 & 수정 & 삭제 & 대글 (대댓글) & 좋아요 & 스크랩 등
    • 사용자 피드 조회
      • Elastic Search 사용하여 user 검색
      • 관심사 검색을 통해 사용자 찾을 수 있음
  • 질문
    • 로그인 & 비로그인 사용자가 익명 & 실명으로 질문
  • 커뮤니티
    • 게시판 조회 & 생성 & 수정 & 삭제
    • 게시글 조회 & 생성 & 수정 & 삭제
    • 게시글 좋아요 & 스크랩 & 댓글(대댓글)
    • 게시판 & 게시글 검색
  • 알림
    • SSE - 이벤트 발행해서 알림
      • 새 질문, 내가 단 질문의 답변
      • 내 피드의 댓글, 내 댓글의 대댓글
      • 채팅
  • 채팅
    • Mongo + kafka + websocket을 이용한 채팅
    • 질문을 통한 유저간의 1:1 채팅 가능
    • 신고, 실명 공개, 채팅방 명 변경, 나가기 기능 제공
  • 관리자
    • 유저로 부터 받은 신고 (질문, 피드, 댓글, 채팅) 처리
    • 유저에게 블루체크 권한 제공

👩‍💻 개발자

팀원 역할 주 담당 기능
이나연 팀장 채팅
변혜빈 팀원 알림
이유준 팀원 커뮤니티
정호현 팀원 유저 + CI/CD
최혜진 팀원 질문 + 피드

🌳 프로젝트 구조

way
  ├───admin
  │   ├───controller
  │   ├───domain
  │   ├───dto
  │   ├───repository
  │   └───service
  │       └───Impl
  ├───alarm
  │   ├───controller
  │   ├───domain
  │   ├───dto
  │   ├───event
  │   ├───repository
  │   └───service
  │       ├───kafka
  │       └───serviceImpl
  ├───board
  │   ├───controller
  │   │   └───request
  │   ├───domain
  │   ├───dto
  │   │   ├───request
  │   │   └───response
  │   ├───repository
  │   └───service
  │       └───Impl
  ├───chat
  │   ├───constant
  │   ├───controller
  │   │   └───rest
  │   ├───domain
  │   ├───dto
  │   ├───repository
  │   └───service
  │       ├───impl
  │       └───kafka
  │           └───imple
  ├───config
  ├───els
  │   ├───controller
  │   ├───domain
  │   ├───repository
  │   └───service
  │       └───serviceimpl
  ├───exception
  ├───feed
  │   ├───controller
  │   ├───domain
  │   ├───dto
  │   ├───repository
  │   ├───service
  │   │   └───imp
  │   └───util
  ├───file
  │   ├───controller
  │   └───service
  │       └───impl
  ├───jwt
  │   ├───exception
  │   ├───filter
  │   ├───service
  │   ├───token
  │   └───util
  └───user
      ├───controller
      │   └───restcontroller
      ├───domain
      ├───dto
      ├───oauth2
      │   ├───dto
      │   ├───handler
      │   └───service
      ├───repository
      ├───security
      └───service

🔗 라이센스

이 프로젝트에서 아래 라이브러리를 사용했습니다:

👌 문제 해결 (Troubleshooting) 및 FAQ

[트러블슈팅] SSE

[트러블슈팅] header요소 클릭에 따라 다른 aside요소 보여주기

[트러블슈팅] AWS RDS 현재 활동

[트러블슈팅] nginx - 카카오 로그인

😙 향후 계획

  • 코드 리펙토링
  • 나쁜 말 필터링
  • 배포 환경에서 Google 로그인 구현

😎 발표 자료

1차 기획 발표
1차 중간 발표
2차 기획 발표
2차 최종 발표
2차 최종 발표_요약

🎥 데모

Video Label

About

[KDT] 멋쟁이 사자처럼 백엔드 스쿨 10기 최종 프로젝트

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages