Skip to content

Commit

Permalink
[RELEASE] v1.1.0 (#298)
Browse files Browse the repository at this point in the history
* refactor: API 명세에 따른 에러 메세지 상수화 #230

* feat: Sentry 에러 추적 로그 ErrorBoundary에 적용 #230

* chore: 에러 응답 타입 인터페이스 상속 #230

* refactor: NetworkError 메세지를 필드로 관리 #230

* feat: ErrorBoundary에 홈으로 가는 버튼 추가 및 에러 메세지 출력 #230

* refactor: 게임 페이지에서balanceContentQuery에 suspense 적용 #230

* refactor: Header에서 API를 호출하여 응답이 올 때까지 화면이 넘어가지 않는 문제 해결 #230

* feat: 게임 페이지 로딩 상태일 때  skeleton UI 적용 #230

* fix: ToastProvider 추가 #230

* fix: body를 null로 보낼 경우 res.json에서 오류 발생하는 문제 해결 #230

* fix: Deprecated된 dialect설정 제거 후 새로운 버전으로 변경 #256

* refactor: prod 환경은 Polling 메서드 로깅하지 않도록 수정 #251

* refactor: 로깅 공통 로직 부모 클래스에서 하나의 메서드로 관리하여 유지보수성 향상 #251

* docs: README 서비스 소개  및 기능 소개 추가 #259

* docs: README 피드백 반영 #259

* refactor: 하위에서 사용하지 않는 protected 메서드 private로 변경 #251

* refactor: 상위 클래스에 이미 존재하는 애노테이션 제거 #251

* refactor: 상위 클래스에서 Component 애노테이션 제거 #251

* refactor: Aspect 애노테이션과 PointCut 설정을 하위 클래스에서 다루되 공통로직은 상위 클래스에서 가지도록 수정 #251

* chore: customRender 에러 바운더리 적용 #230

* test: balanceContent 못 불러올 경우 에러 폴백 UI 테스트 코드 작성 #230

* chore: 테스트 코드 wrapper 함수 인자로 recoil과 로딩 UI 입력받도록 개선 #230

* refactor: 오타 수정 및 skeleton UI 테스트 코드 추가 #230

* refactor: initializeState를 인자로 받으면서 불필요한 RecoilRoot 제거 #230

* fix: 방설정 msw handler 수정 #230

* refactor: SelectButton 쿼리 호출 제거하고 props로 받기 #261

* refactor: SelectContainer hooks 디렉토리로 분리 #261

* refactor: 라운드 타이머가 바뀔 때마다 실행하지 않고, 타이머가 끝날 때만 clearTimeout #261

* refactor: test시 worker 수 증가 #262

* refactor: test시 transpiler babel에서 swc로 변경 #262

* chore: docker 설정 제거 및 artifact Action 설정 #81

* chore: 배포 스크립트 위치 수정 #81

* fix: 로직 순서 오류 수정 및 JAR_FILE명 변수로 등록 #81

* chore: artifact 파일명 설정 로직 작성 #81

* chore: artifact 경로 수정 #81

* chore: artifact 파일 위치 절대경로 사용 #81

* chore: deploy 동작 별로 네임 분리 #81

* refactor: border radius theme으로 적용 #252

* refactor: 정책과 관련된 상수 config 파일로 분리 #252

* refactor: 한글 입력 오류 로직 수정 #252

* feat: 알림이 필요없는 에러 핸들링 실시 #265

* refactor: jest maxWorker 제거 #262

* fix: swc 설정 충돌 해결 #262

* refactor: front-CI self hosted 취소 #262

* refactor: 선택된 카테고리를 filter 대신 find 로 대체 #230

* style: 시작 버튼 텍스트 수정 #230

* feat: skeleton 스토리북 구현 #230

* refactor: 스토리북 폴더로 분리 #230

* refactor: 불필요해진 폴백 텍스트 제거 #230

* chore: queryClient 를 새로 생성해 테스트가 독립적으로 동작하도록 수정 #230

* fix: GameSkeleton aria-label 추가 #230

* test: 로딩 UI 테스트 분리 #230

* fix: self-hosted 대신 github actions 서버 사용 #230

* refactor: Timer hooks 디렉토리로 분리 #261

* refactor: 쿼리 발생 개수 저하되도록 만료된 방 마이그레이션 로직 수정 #268

* refactor: deleteAllInBatch -> deleteAll 사용 #268

* refactor: resetRoom 로직에서 roomBalanceBote migrate와 delete 로직 분리 #268

* refactor: 타임아웃되도 선택 API를 호출하도록 구조 리팩토링 #261

* refactor: 미사용 메서드 제거 #268

* test: 게임 화면 UI 테스트를 위해 storybook 작성 #261

* design: timer 구조 변경으로 인한 스타일 수정 #261

* design: 대기 화면 공통 레이아웃 적용 #261

* refactor: 시간 재는 타이머 관련 로직을 API 로직과 분리 #261

* refactor: 투표 시간 측정 타이머에 맞게 voteTimer로 이름 수정 #261

* refactor: 선택 완료 버튼 클릭 이벤트리스너명 vote로 수정 #261

* test: 타이머가 종료되었을 때 선택된 옵션이 있으면 투표 테스트 코드 작성 #261

* refactor: 투표 종료 여부를 Timer 컴포넌트가 가지면서 리렌더링 최적화 #261

* refactor: roundVoteIsFinished 네이밍을 voteIsFinished로 수정 #261

* refactor: Timer를 SelectContainer 하위 디렉토리로 위치 수정 #261

* feat: 게임 시작 전 카운트다운 구현 #270

* test: Countdown 스토리북 구현 #270

* refactor: 벌크 삭제 시 deleteAllInBatch() 사용하도록 변경 #268

* refactor: Countdown dimmed 영역 추가 #270

* design: Countdown 텍스트가 잘 안보인다는 피드백 반영 #270

* design: Countdown 땅콩이 카운트에 따라 점점 커지도록 구현 #270

* test: 게임 대기 화면 스토리북 구현 #270

* feat: 카운트 다운 끝난 후 게임 화면 라우팅 #270

* refactor: 게임 대기 화면 스토리북 폴더 수정 #270

* refactor: 타이머 관련 방어코드 작성 #270

* style: 버튼과 모달 가까이 위치 #270

* refactor: 게임 시작과 관련된 로컬 상태를 방정보 커스텀 훅과 분리 #270

* refactor: 카운트다운에 aria-label 추가 #270

* refactor: 시작 버튼을 isMaster로 관리 #270

* test: 게임 시작 버튼을 클릭하면 카운트 다운을 시작하는 테스트 코드 작성 #270

* test: 카운트 다운이 시작되고 3초 후 게임 화면으로 넘어가는 테스트 코드 작성 #270

* refactor: 카운트다운 관련 로직 커스텀 훅 분리 #270

* refactor: Countdown 폴더 위치 수정 #270

* refactor: useTimer 의존성 배열 수정 #261

* refactor: timer 유틸함수 분리 #261

* refactor: 불필요한 패키지 제거 #262

* refactor: 불필요한 옵션 제거 #262

* refactor: 모호한 함수명 수정 #261

* refactor: sudo로 변경하여 logback 쓰기권한 흭득 #81

* fix: HttpMediaTypeNotSupportedException를 415 Unsupported Media Type으로 처리하도록 수정

* fix: ClientErrorCode를 이전 버전으로 수정 및 새로운 코드 추가

* chore: build는 ubuntu 환경에서 처리하도록 변경 #81

* refactor: 불필요한 리스트 생성 제거 #268

* refactor: 미사용 메서드 제거 #268

* fix: 테스트용 메서드 제거 #268

* fix: 임시 사용 로직 제거 #268

* fix: EntityManger 로직 제거 #268

* fix: 테스트에서 트랜잭션 제거 #268

* refactor: refetchInterval 및 refetchIntervalInBackground 를 통해 게임 화면으로 안넘어간 오류 개선 #261

* refactor: 초대하기 버튼 위치 변경 #274

* fix: 투표를 한 상태여도 타이머가 끝난 후 투표 API 요청을 하는 오류 해결 #261

* test: 타이머가 종료되었을 때 이미 투표를 했다면 또 투표를 하지 않는 테스트 코드 구현 #261

* feat: category mouse cursor pointer 추가 #274

* feat: 매칭 결과로 제목 수정 및 설명 추가 #273

* refactor: Modal을 context로 관리 #272

* test: Modal 리팩토링을 위한 게임 시작 테스트 코드 작성 #272

* refactor: 방장 여부 recoil 값을 넣어 렌더링하는 테스트 유틸 함수 공용화 #272

* refactor: customRenderWithIsMaster 테스트코드 적용 #272

* refactor: 시작 버튼을 isMaster로 관리 #272

* refactor: Modal Context 게임 시작 부분 적용 #272

* refactor: Modal Context 투표 부분 적용 #272

* refactor: Modal UI 역할이 사라져 StartButtonContainer 제거 #272

* refactor: 게임 결과에도 Modal Context 적용 #272

* feat: 카테고리 클릭 시 방 설정 모달 #274

* refactor: RoomSettingHeader에 Modal Context 적용 #272

* refactor: 다른 모달도 적용할 수 있도록 Modal props 설정 #272

* fix: modal에서 toast를 사용하므로 toast를 modal 부모 요소로 수정 #272

* refactor: 다음 라운드 안내 모달 Modal Context 적용 #272

* refactor: 초대하기 모달 Modal Context 적용 #272

* refactor: 방 생성 및 참가 에러 모달 Modal Context 적용 #272

* fix: onConfirm 함수가 동작하지 않는 문제 해결 #272

* refactor: 중복된 모달 하나로 합치기 #272

* fix: Modal storybook 에 Provider 추가 #272

* refactor: webpack 설정 추가 #274

* style: 변수명 수정 #270

* feat: categoryContainer에 방 정보 추가 #274

* refactor: modal close 후 스크롤이 다시 생기는 버그 해결 #274

* feat: resize 시 버튼 위치 변경 #274

* refactor: RoomBalanceVote 삭제 로직 ExpiredRoomMigrator에서 RoomBalanceVoteService로 이동 #268

* refactor: migrate 로직 메서드 분리 #268

* refactor: 종료된 방 마이그레이션 로직도 RoomMigrator에서 관리 #268

* style: 만료된 방뿐만 아니라 종료된 방도 마이그레이션 하므로 ExpiredRoomMigrator에서 RoomMigrator로 네이밍 변경 #268

* test: 종료된 방 마이그레이션 로직 관련 테스트 코드 수정 #268

* test: 종료된 방 투표 마이그레이션 테스트 작성 #268

* style: 방 투표로 전체 투표 생성하여 저장하는 메서드 네이밍 구체적으로 변경 #268

* refactor: 멤버 투표 마이그레이션하는 로직 네이밍 구체적으로 변경 #268

* test: 만료된 방 정보 마이그레이션 테스트 작성 #268

* refactor: 방 종료 검증 로직 위치 Migrator에서 RoomFacade.resetRoom() 으로 수정 #268

* style: migrator에서 룸의 상태에 대한 정보 제거 #268

* feat: nickname input focus에 따라 button 위치 변경 #274

* feat: SpringActuator 의존성 추가 #279

* chore: prod 환경은 health check만 가능하도록 설정 #279

* feat: random nickname 컴포넌트 외부에서 생성 #274

* chore: CI/CD 스크립트에 분산 prod 환경 (prod-a, prod-b) 설정 적용 #281

* chore: 운영환경 AZ에 따른 스크립트 네이밍 수정 #281

* feat: categoryContainer 테스트 코드 when given 추가 #274

* refactor: isFinalPage 이름을 isMatchingPage로 수정 #273

* refactor: 최대 인원, 최대 닉네임 글자를 테스트 하기 위해 mock data 수정 #273

* refactor: 헤더 컴포넌트에 매칭 결과 화면 헤더 추가 #273

* fix: Modal에서 navigate 사용하지 못하는 오류 해결 #272

* fix: 브라우저 환경과 Provider 구조가 다른 문제 해결 #272

* fix: 매칭 인원이 8명 이상인 경우 화면에 다 보이지 않는 문제 해결 #273

* refactor: 카운트다운을 스크린 리더가 읽도록 aria-live 추가 #270

* design: 카운트다운이 시작버튼 위로 오도록 z-index 설정 #270

* design: 매칭도 바의 길이보다 닉네임이 긴 경우 바 영역 밖으로 나오도록 수정 #273

* refactor: 배열 생성 자체를 막도록 조건문 추가 #270

* design: 매칭 순위가 두 자리인 경우 정렬 어긋남 개선 #273

* feat: resize 이벤트로 모바일 키보드 여부 판단 기능 추가 #274

* test: CategoryContainer 컴포넌트 테스트 추가 #274

* chore: prod 환경 application-prod.yml DB Replication 로직 설정 #287

* feat: Replication DB DataSource Routing 로직 작성 #287

* chore: 변경된 secret property key name 반영 #287

* feat: 매칭 결과가 정해진 크기 이상인 경우 스크롤, 플로팅 버튼으로 위 아래 이동 할 수 있는 기능 #273

* fix: Source DB 라우팅 네이밍 오류 수정 #287

* design: 위/아래 플로팅 버튼 스타일 추가 #273

* fix: url properties 이름 jdbc-url로 변경 #287

* refactor: 스크롤 관련 비즈니스 코드 별도의 커스텀 훅으로 분리 #273

* refactor: 스크롤 상태와 스크롤 제어 로직을 분리 #273

* refactor: 매칭 결과가 있는 경우에만 플로팅 버튼이 뜨도록 수정 #273

* refactor: 라운드 결과의 투표 현황 탭에서 투표 현황을 확인할 수 있도록 수정 #290

* refactor: 라운드 결과 페이지에서 빈 헤더 영역 차지하지 않도록 수정 #290

* refactor: 라운드 결과 레이아웃 수정 및 불필요한 컴포넌트 삭제 #290

* style: master, slave 네이밍 source, replica로 변경 #287

* style: RoutingReplicas <> 추가   #287

* feat: 투표 결과에 대한 동률 여부 및 우세한 선택지를 반환하는 유틸 함수 구현 #290

* feat: 해당 문항의 전체 응답 데이터를 요약해서 보여주는 기능 #290

* fix: 방장이 아닌 사용자가 카운트다운 후 게임 시작 안되는 오류 해결 #293

* feat: 투표 현황에서 나의 닉네임을 강조하여 표시하는 기능 #290

* refactor: 라운드 결과 탭 이름을 투표 결과, 투표 현황으로 수정 #290

* refactor: 탭이 방의 퍼센트와 전체 퍼센트에서 투표 결과 퍼센트와 투표 현황으로 수정됨에 따라 불 필요한 코드 삭제 #290

* fix: 카운트다운 테스트 코드 오류 해결 #293

* feat: 라운드 결과 페이지에 라운드 헤더 추가 #290

* refactor: 탭 안에 토픽이 위치하도록 로직 수정 #290

* design: 라운드 페이지 스타일 수정 #290

* refactor: 라운드 결과 탭 이름을 투표 결과에서 투표 통계로 수정 #290

* refactor: 투표 현황 페이지 삭제 #290

* refactor: 사용하지 않는 스타일 삭제 #290

* refactor: 라운드 결과 탭에서 그룹 관련된 코드 투표 통계로 수정 #290

* refactor: TabContentContainer 스토리북 수정 #290

* refactor: RoundVoteContainer 테스트 코드 수정 #290

* refactor: TabContentContainer 프로퍼티 이름 수정 #290

* refactor: 불 필요한 코드 삭제 #290

* refactor: CategoryContainer test 코드 명시적으로 변경 #274

* refactor: 불필요한 코드 제거 #274

* refactor: useKeyboard hook export -> default export로 변경 #274

* refactor: 불필요한 useState 제거 #274

* refactor: CategoryContainer 테스트 코드 오류 수정 #274

* merge: conflict 해결 #272

* refactor: 매칭 결과 높이 주석 추가 #273

* refactor: 초대 버튼 글씨 굵기 변경 #274

* refactor: 불필요한 코드 제거 #274

* refactor: 타입 단언을 통해 스크롤 로직 개선 #273

* design: 매칭 결과 설명 텍스트 진하기 수정 #273

* refactor: 내 닉네임인지 여부 변수명 수정 #290

* refactor: 선택지 두 개가 수치가 동등한지 여부를 나타내는 변수명 수정 #290

* refactor: nickname을 표시하는 컴포넌트의 prop에 알맞게 수정 #290

* refactor: 불 필요한 타임 아웃 코드 삭제 #290

* refactor: 선택지의 퍼센트보다 멤버수로 투표 여부를 판단하도록 로직 수정 #290

* refactor: TabContentContainer에서 사용되는 util 파일 이름 수정 #290

* refactor: 투표 현황 페이지 삭제됨에 따라 불필요한 코드 삭제 #290

* style: DB Routing log 설정 #287

* style: TODO 제거 #287

* style: 다중 개행 제거 #287

* style: RoutingDataSource에서 Slf4j 설정 제거 #287

* chore: prod 환경 자원을 아끼기 위해 be-ci-prod 스크립트 Git Actions 서버 사용하도록 변경 #287

---------

Co-authored-by: rbgksqkr <rbgks1937@naver.com>
Co-authored-by: novice0840 <magnolia0840@gmail.com>
Co-authored-by: DESKTOP-E5VRH4Q\cnddk <cnddkscndgus@naver.com>
Co-authored-by: useon <roqkftjs@gmail.com>
Co-authored-by: novice0840 <111696934+novice0840@users.noreply.github.com>
Co-authored-by: 커찬 <44027393+leegwichan@users.noreply.github.com>
Co-authored-by: jhon3242 <rldotnr2@gmail.com>
Co-authored-by: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
  • Loading branch information
9 people authored Sep 26, 2024
1 parent 2a8085f commit fbff41c
Show file tree
Hide file tree
Showing 179 changed files with 3,690 additions and 1,120 deletions.
77 changes: 18 additions & 59 deletions .github/workflows/be-cd-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,8 @@ on:

jobs:
build:
timeout-minutes: 3
timeout-minutes: 2
runs-on: ubuntu-latest
env:
DOCKER_REPOSITORY_NAME: ddangkong/ddangkong-api-dev

defaults:
run:
Expand All @@ -27,77 +25,38 @@ jobs:
run: |
echo "${{ secrets.APPLICATION_DEV_YML }}" > ./src/main/resources/application-dev.yml
- name: Setting SSL/TLS Key
run: |
mkdir -p ./src/main/resources/ssl
echo "${{ secrets.SSL_KEY_BASE64 }}" | base64 -d > ./src/main/resources/ssl/keystore.p12
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
- name: bootJar with Gradle
run: ./gradlew bootJar -PcreateRestDocs

- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_GMAIL }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Build Docker image
run: |
docker compose -f deploy/docker-compose-dev.yml build
docker tag deploy-ddangkong-api-dev:latest $DOCKER_REPOSITORY_NAME:latest
- name: Change artifact file name
run: mv build/libs/*.jar build/libs/app.jar

- name: Push Docker image
run: docker push $DOCKER_REPOSITORY_NAME:latest
- name: Upload artifact file
uses: actions/upload-artifact@v4
with:
name: app-artifact
path: ./backend/build/libs/app.jar

deploy:
needs: build
timeout-minutes: 2
runs-on: [ self-hosted, linux, ARM64, dev ] # Self hosted runner 사용
env:
DOCKER_REPOSITORY_NAME: ddangkong/ddangkong-api-dev
CONTAINER_NAME: ddangkong-api-dev
runs-on: [ self-hosted, linux, ARM64, dev ]

steps:
- name: Log in to Docker Hub
uses: docker/login-action@v3
- name: Download artifact file
uses: actions/download-artifact@v4
with:
username: ${{ secrets.DOCKER_GMAIL }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Stop and Remove previous Docker container
run: |
CONTAINER_ID=$(sudo docker ps -aqf name=$CONTAINER_NAME)
if [ -n "${CONTAINER_ID}" ]; then
sudo docker rm -f ${CONTAINER_ID}
echo "Container ${CONTAINER_ID} is stopped and removed."
else
echo "No previous container found with name. Skipping removal."
fi
- name: Remove previous Docker image
run: |
IMAGE_ID=$(sudo docker images --filter=reference=ddangkong/ddangkong-api-dev --format "{{.ID}}")
if [ -n "${IMAGE_ID}" ]; then
sudo docker rmi ${IMAGE_ID}
echo "Image ${IMAGE_ID} is removed."
else
echo "No previous image found with repository name. Skipping removal."
fi
name: app-artifact
path: ~/app

- name: Pull docker image
run: sudo docker pull $DOCKER_REPOSITORY_NAME:latest
- name: Replace application to latest
run: sudo sh ~/scripts/replace-new-version.sh

- name: Run new Docker container
run: |
docker run -d -p 443:8080 --name $CONTAINER_NAME \
-v /home/ubuntu/app-logs:/logs \
$DOCKER_REPOSITORY_NAME:latest
- name: Health check latest application
run: sudo sh ~/scripts/health-check.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: BE CD for Prod
name: BE CD for Prod-A

on:
workflow_dispatch:
Expand All @@ -11,7 +11,7 @@ on:
jobs:
deploy:
timeout-minutes: 3
runs-on: [ self-hosted, linux, ARM64, prod ]
runs-on: [ self-hosted, linux, ARM64, prod-a ]

defaults:
run:
Expand Down
44 changes: 44 additions & 0 deletions .github/workflows/be-cd-prod-b.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: BE CD for Prod-B

on:
workflow_dispatch:

push:
branches: [ "main" ]
paths:
- backend/**

jobs:
deploy:
timeout-minutes: 3
runs-on: [ self-hosted, linux, ARM64, prod-b ]

defaults:
run:
working-directory: ./backend

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setting prod-secret.yml
run: |
echo "${{ secrets.PROD_SECRET_YML }}" > ./src/main/resources/prod-secret.yml
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew bootJar

- name: Stop existing Java Application
run: ps -ef | grep 'java -jar' | awk '{print $2}' | xargs sudo kill -15 || true

- name: Start Java Application
run: sudo nohup java -jar -Dspring.profiles.active=prod ./build/libs/ddangkong-0.0.1-SNAPSHOT.jar &
2 changes: 1 addition & 1 deletion .github/workflows/be-ci-prod.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ on:
jobs:
build:
timeout-minutes: 4
runs-on: [ self-hosted, linux, ARM64, dev ]
runs-on: ubuntu-latest

defaults:
run:
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/fe-ci-dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@ on:

jobs:
build-and-test:
timeout-minutes: 4
runs-on: [self-hosted, linux, ARM64, dev]
runs-on: ubuntu-latest

defaults:
run:
Expand Down
61 changes: 60 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,60 @@
# 땅콩 🥜
<div align="center">
<h3><a href="https://ddangkong.kr/">땅콩 바로가기</a></h3>
<img src="https://github.com/user-attachments/assets/f47b6023-fc55-4072-92b4-0551135a95d0" width="100" height="150" />
<h4>심심풀이 땅콩처럼 가벼운 주제로 친구들과 즐기는 단체 대화주제 제공 서비스 🥜</h4>
</div>

# 서비스 소개

`심심풀이 땅콩` 이라는 말을 들어보신 적 있으신가요? 이 표현은 일부러라도 먹는 일을 만들어 무료함을 잊으려는 심리에서 유래되었습니다. 이처럼, 땅콩 서비스는 **가볍게 대화를 시작하고 이어나가고자 하는 사람들을 위해 만들어졌습니다.**

함께 모인 자리에서 대화 주제가 부족하진 않으신가요? 친해지고 싶은 사람들과 더 많은 대화를 나누고 싶지는 않으신가요?
대화를 하다보면 어색한 침묵이 흐르는 경우가 있습니다. 땅콩은 음식, MBTI, 연애, 만약에 등 `다양한 카테고리의 대화 주제를 제공` 하여 이를 해결하려고 합니다.

> [카테고리별 질문 예시]
>
> `음식` : 개구리 맛 초콜릿 vs 초콜릿 맛 개구리
>
> `MBTI` : 내가 '이번주 토요일에 뭐해?'라고 물어볼 때는 : 약속을 잡으려고 물어본다 vs 단지 뭐하는지 궁금해서 물어본다
>
> `연애` : 외모 빼고 모든 것이 안 맞는 애인 vs 외모 빼고 모든 것이 잘 맞는 애인
>
> `만약에` : 전애인 친구랑 사귀기 vs 친구 전애인이랑 사귀기
이 주제들을 통해 서로의 생각을 공유하고, 자연스럽게 즐거운 대화를 이어나갈 수 있습니다. 땅콩과 함께라면, 더 이상 대화의 시작을 고민하지 않아도 됩니다. 누구나 쉽고 즐겁게 소통할 수 있는 기회를 제공하는 땅콩, **지금 당장 회원가입 없이 [땅콩](https://ddangkong.kr/)을 사용해보세요.**

# 주요 기능 소개

### 1. 다양한 대화 주제 제공

![대화주제_제공](https://github.com/user-attachments/assets/cfe966ea-698f-42b6-94f5-628d4e15e0e3)

### 2. `실시간 데이터 통신` 을 통해 시끄러운 오프라인 공간에서도 `멀티 플레이` 로 재밌게 즐길 수 있음

![멀티플레이](https://github.com/user-attachments/assets/046422a7-a389-4469-b8f0-cb72339946e9)

### 3. 게임 내에서 나와 같은 선택을 한 사람과의 `매칭도 순위` 를 통해 공감대 형성

![매칭도](https://github.com/user-attachments/assets/019f0779-df57-444b-842a-37fe6d970e07)

# 인프라

<img src="https://github.com/user-attachments/assets/d010f50c-4662-40ac-b06b-46b1b2b2fadf" width="400" height="600"/>

# 팀원 소개

### 프론트엔드

| <img src="https://avatars.githubusercontent.com/u/63959171?v=4" width="100" height="100"/> | <img src="https://avatars.githubusercontent.com/u/74897720?v=4" width="100" height="100"/> | <img src="https://avatars.githubusercontent.com/u/111696934?v=4" width="100" height="100"/> |
| :----------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------: |
| [마루](https://github.com/rbgksqkr) | [썬데이](https://github.com/useon) | [포메](https://github.com/novice0840) |

### 백엔드

| <img src="https://avatars.githubusercontent.com/u/84304802?v=4" width="100" height="100"/> | <img src="https://avatars.githubusercontent.com/u/44027393?v=4" width="100" height="100"/> | <img src="https://avatars.githubusercontent.com/u/78288539?v=4" width="100" height="100"/> | <img src="https://avatars.githubusercontent.com/u/101033262?v=4" width="100" height="100"/> |
| :----------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------: |
| [이든](https://github.com/PgmJun) | [커찬](https://github.com/leegwichan) | [타칸](https://github.com/jhon3242) | [프린](https://github.com/GIVEN53) |

# 그라운드 룰

<img width="800" alt="image" src="https://github.com/user-attachments/assets/cb7a1016-e7be-4cec-b4eb-39327eef3ef9">
7 changes: 0 additions & 7 deletions backend/Dockerfile

This file was deleted.

1 change: 1 addition & 0 deletions backend/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ ext {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.h2database:h2'
Expand Down
14 changes: 0 additions & 14 deletions backend/deploy/docker-compose-dev.yml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ddangkong.aop.logging;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Aspect
@Component
@Profile({"dev", "local"})
public class DevRequestLoggingAspect extends RequestLoggingAspect {
@Before("allController()")
public void logController(JoinPoint joinPoint) {
super.logController(joinPoint);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ddangkong.aop.logging;


import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;

@Aspect
@Component
@Profile("prod")
public class ProdRequestLoggingAspect extends RequestLoggingAspect {
@Before("allControllerWithoutPolling()")
public void logController(JoinPoint joinPoint) {
super.logController(joinPoint);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,14 @@
import java.lang.reflect.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

@Aspect
@Component
@Slf4j
public class RequestLoggingAspect {
abstract class RequestLoggingAspect {

@Pointcut("execution(* ddangkong.controller..*Controller.*(..))")
public void allController() {
Expand All @@ -32,8 +27,11 @@ public void polling() {
public void allControllerWithoutPolling() {
}

@Before("allController()")
public void logController(JoinPoint joinPoint) {
protected void logController(JoinPoint joinPoint) {
logRequest(joinPoint);
}

private void logRequest(JoinPoint joinPoint) {
HttpServletRequest request = getHttpServletRequest();
String uri = request.getRequestURI();
String httpMethod = request.getMethod();
Expand Down
Loading

0 comments on commit fbff41c

Please sign in to comment.