2024.07.23 ~ 2024.09.06
현대 사회에서 익명성을 활용한 커뮤니티 사이트를 통해, 고백이나 친해지기 등의 용기 부족으로 표현하지 못한 감정을 솔직하게 전하고, 새로운 인간관계를 형성할 수 있는 안전한 소통 공간을 제공하고자 WAY 라는 익명 질문 커뮤니티 서비스를 만들게 되었습니다.
익명성을 통해 사용자는 민감한 주제나 개인적인 문제에 대해 자유롭게 질문하고 답변할 수 있으며, 다양한 사람들과의 소통을 통해 풍부한 의견을 얻을 수 있습니다.
질문을 받은 사람은 1:1 채팅 요청을 통해 실명으로 전환할 기회를 가질 수 있으며, 이를 통해 커뮤니케이션 능력과 자신감을 회복할 수 있습니다.
또한, 익명 질문과 답변이 게시글로 공개되어 사용자의 영향력을 자연스럽게 드러낼 수 있는 기회를 제공합니다.
- spring boot + jdk 21
- docker
docker-compose.yml 모음
- kafka + zookeeper
- elasticsearch
- mongo
- mysql
DB 쿼리문
- 로컬의 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
- 제목 :
- 로그인
- oauth2를 이용한 kakao, google, naver 로그인
- 피드
- 피드 작성 (비로그인 사용자) 작성된 피드를 구경할 수 있는 권한 가짐 (로그인 사용자) 피드 작성 & 수정 & 삭제 & 대글 (대댓글) & 좋아요 & 스크랩 등
- 사용자 피드 조회
- Elastic Search 사용하여 user 검색
- 관심사 검색을 통해 사용자 찾을 수 있음
- 질문
- 로그인 & 비로그인 사용자가 익명 & 실명으로 질문
- 커뮤니티
- 게시판 조회 & 생성 & 수정 & 삭제
- 게시글 조회 & 생성 & 수정 & 삭제
- 게시글 좋아요 & 스크랩 & 댓글(대댓글)
- 게시판 & 게시글 검색
- 알림
- SSE - 이벤트 발행해서 알림
- 새 질문, 내가 단 질문의 답변
- 내 피드의 댓글, 내 댓글의 대댓글
- 채팅
- 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
이 프로젝트에서 아래 라이브러리를 사용했습니다:
- Font Awesome - Licensed under CC BY 4.0
- Bootstrap - Licensed under MIT License
[트러블슈팅] header요소 클릭에 따라 다른 aside요소 보여주기
- 코드 리펙토링
- 나쁜 말 필터링
- 배포 환경에서 Google 로그인 구현

