Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
eb68ecf
[UNI-73] refactor : 길찾기 로직 응답형태 리팩토링 (#25)
thdgustjd1 Feb 1, 2025
49c08b6
[UNI-86] feat : 길 추가 로직 - 4단계 (노드의 z좌표를 Google Map API를 호출하여 가져오기) (#28)
thdgustjd1 Feb 1, 2025
0f5e58d
[UNI-21] feat : 제보 폼 관련 Utility 생성
jpark0506 Feb 2, 2025
f240f30
[UNI-88] feat : 공통 로딩 컴포넌트 작성 (#30)
jpark0506 Feb 2, 2025
1f2535f
[UNI-84] feat: 마커 등장 애니메이션 구현 (#31)
jpark0506 Feb 2, 2025
1248cef
[UNI-81] feat : 새로운 길 제보 페이지 생성 및 길 생성 로직 구현 (#32)
dgfh0450 Feb 2, 2025
6bbe9d8
[UNI-96] fix : RoutePoint Enum 중복 선언 제거 (#33)
dgfh0450 Feb 3, 2025
72371df
[UNI-97] fix : Loading 컴포넌트 빌드 환경 사진 로딩 문제 해결 (#34)
jpark0506 Feb 3, 2025
0301f1b
[UNI-19] feat : 불편한 길 제보 페이지 생성 및 제보 로직 구현 (#35)
dgfh0450 Feb 3, 2025
447a81c
[UNI-30] 어드민 페이지 개발 (#37)
jpark0506 Feb 3, 2025
cadf33d
[UNI-98] feat : Tanstack Query 도입 및 커스텀 Fetch 모듈 생성 (#38)
dgfh0450 Feb 3, 2025
47dac10
[UNI-100] refactor : 코어 루트 삭제에 따른 조회 로직 수정 (#36)
thdgustjd1 Feb 4, 2025
5afc19d
[UNI-95] feat : 공통 에러 컴포넌트(SearchNull, Error, Offline) 컴포넌트 생성 (#41)
dgfh0450 Feb 4, 2025
ca68e91
[UNI-104] chore : document title 변경 및 Favicon 추가 (#40)
dgfh0450 Feb 4, 2025
1d957b7
[UNI-22] feat: 길 추가 로직 1,2,3 단계 구현 (#39)
mikekks Feb 4, 2025
6c4a3df
[UNI-105] feat : 예외 처리 로직 구현 (#42)
dgfh0450 Feb 4, 2025
55801f0
[UNI-108] feat : 페이지간 라우터 연결 및 뒤로가기 공통 컴포넌트 생성 (#43)
dgfh0450 Feb 4, 2025
545c8e7
[UNI-99] feat : Suspense 적용하기 (#44)
jpark0506 Feb 4, 2025
baf1ae4
[UNI-110] fix : 전역 Suspense 페이지 전환 시 fallback 없이 freeze 되는 현상 (#46)
jpark0506 Feb 5, 2025
43a1aa2
[UNI-111] fix, feat, refactor : QA 문제 해결 (지도 페이지 뷰포트, 마커 동적 스타일 변경, …
dgfh0450 Feb 5, 2025
64f63a2
[UNI-65] feat: ci-cd 구축 (#45)
mikekks Feb 5, 2025
c8eda44
[UNI-117] fix : 길찾기 결과 바텀 시트 아래로 내릴 시 스크롤 끝까지 안되는 현상 해결 (#51)
jpark0506 Feb 5, 2025
d169ad0
[UNI-120] feat : Tanstack-Query Dev Tools 설치 및 적용 (#52)
dgfh0450 Feb 5, 2025
57d1d74
[UNI-23] 노드,루트 버전화 코드 작성 및 버전 목록 조회 API 개발 (#49)
thdgustjd1 Feb 5, 2025
bd2cc39
[UNI-118] chore : CORS 설정 추가 (#53)
thdgustjd1 Feb 5, 2025
fb10722
[UNI-121] chore : 서비스 라우터 변경 (#54)
dgfh0450 Feb 5, 2025
c68ead1
[UNI-65] chore: ddl-auto 수정 (#55)
mikekks Feb 5, 2025
7c304be
[UNI-126] chore: 스웨거 cors 오류 해결 (#56)
mikekks Feb 5, 2025
c6d71c5
[UNI-128] feat : API 공통 타입 선언 및 fetch 디렉토리 정리 (#57)
jpark0506 Feb 5, 2025
0bf4ead
[UNI-87] 길추가 로직 4,5단계 구현 (리팩토링 예정) (#47)
thdgustjd1 Feb 6, 2025
848a504
[UNI-131] fix: FE 요청에 따른 수정 (#58)
mikekks Feb 6, 2025
2a63bae
[UNI-132] fix : 빌딩 노드 조회 로직 SQL 오류 해결 (#59)
thdgustjd1 Feb 6, 2025
4e6bc58
[UNI-136] fix: 위도, 경도 수정 (#62)
mikekks Feb 6, 2025
992757e
[UNI-137] fix : 모든 길 조회 중 코어노드가 없는 예외상황에서 발생하는 오류 해결 (#63)
thdgustjd1 Feb 6, 2025
87fcc4d
[UNI-66] feat: 로깅 aop 구현 (#61)
mikekks Feb 6, 2025
fc4bb91
[UNI-123] feat : 대학 리스트 조회, 지도 건물, 위험 주의 요소 조회 API 연결 및 Enum, type 재정…
dgfh0450 Feb 6, 2025
cbbc288
[UNI-134] fix : 분기문 오류로 인한 잘못된 응답 수정 (#60)
thdgustjd1 Feb 6, 2025
1118bb9
[UNI-140] feat : 제보 Form API 연결 (#65)
jpark0506 Feb 6, 2025
31d27cc
[UNI-134] fix : sql문 오류 해결 - 대소문자 (#66)
thdgustjd1 Feb 6, 2025
c5563c6
[UNI-141] feat : 길 조회 1차 적용, 테스트 전 (#67)
jpark0506 Feb 6, 2025
aa4ae76
[UNI-143] fix : 스크린 사이즈 dvh로 통일하기 (#68)
jpark0506 Feb 6, 2025
02c8fe7
[UNI-135] fix: 길 추가 API 오류 수정 (#69)
mikekks Feb 7, 2025
e515c9e
[UNI-142] feat : 전체 경로 생성 로직 변경, 새로운 길 제보하기 API 연결, 불편한 길 제보하기 Global…
dgfh0450 Feb 7, 2025
f0a5015
[UNI-148] fix : 라우터 연결 오류 수정 (#71)
dgfh0450 Feb 7, 2025
940fba4
[UNI-149] fix : 중복 포인트 삽입 문제 해결 (1, 2, 3, 4, 5, 5, 6, 7, 8) 문제 (#72)
dgfh0450 Feb 7, 2025
2bcd7eb
[BE] 스프린트 2 개발 산출물
mikekks Feb 7, 2025
381fd30
[UNI-127] feat : 길찾기 페이지 API 연결 (#74)
jpark0506 Feb 7, 2025
b25408b
[UNI-150] fix : 길찾기 캐시 클리어 (#77)
jpark0506 Feb 7, 2025
1aec36c
[FE] 스프린트 2 개발 산출물
dgfh0450 Feb 7, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
Binary file added .github/.DS_Store
Binary file not shown.
70 changes: 70 additions & 0 deletions .github/workflows/be-cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: Uniro-server CD

on:
push:
branches:
- be

jobs:
uniro-ci:
name: Build & Push Docker Image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'

- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}

- name: Create application.properties from secret
run: |
echo "${{ secrets.BE_SPRING_APPLICATION_SECRET }}" > ./uniro_backend/src/main/resources/application.properties
shell: bash

- name: Build Spring Boot Application
run: |
cd uniro_backend
./gradlew clean build -x test

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Docker Hub Login
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_LOGIN_USERNAME }}
password: ${{ secrets.DOCKERHUB_LOGIN_ACCESSTOKEN }}

- name: Build & Push Multi-Arch Docker Image
run: |
cd uniro_backend
docker buildx create --use
docker buildx build --platform linux/amd64,linux/arm64 -t uniro5th/uniro-docker-repo:develop --build-arg SPRING_PROFILE=dev --push .

deploy-run:
name: Deploy to Server
needs: uniro-ci
runs-on: ubuntu-latest
steps:
- name: Run Docker Container on Server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.BE_SERVER_IP }}
username: ${{ secrets.BE_SERVER_USER }}
key: ${{ secrets.BE_SERVER_KEY }}
script: |
cd ~/myapp
chmod +x ./deploy.sh
./deploy.sh
42 changes: 42 additions & 0 deletions .github/workflows/be-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Uniro-server CI

on:
pull_request:
branches:
- be

jobs:
build-springboot:
name: Build and analyze (SpringBoot)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0

- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: 17
distribution: 'temurin'

- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}

- name: Create application.properties from secret
run: |
echo "${{ secrets.BE_SPRING_APPLICATION_SECRET }}" > ./uniro_backend/src/main/resources/application.properties
shell: bash

- name: Debug application.properties
run: cat ./uniro_backend/src/main/resources/application.properties

- name: Build and analyze (SpringBoot)
run: |
cd uniro_backend
./gradlew clean build -x test
66 changes: 66 additions & 0 deletions .github/workflows/fe-admin-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: FE ADMIN CI / CD

on:
push:
branches:
- fe

jobs:
CI:
runs-on: ubuntu-latest

env:
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
IMAGE_NAME: uniro-backoffice
IMAGE_TAG: ${{ github.sha }}

steps:
- name: 코드 체크아웃
uses: actions/checkout@v4

- name: Google Cloud SDK 설정
uses: "google-github-actions/auth@v2"
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}

- name: Docker를 위한 gcloud 인증 설정
run: gcloud auth configure-docker --quiet

- name: Create .env from secret
run: |
echo "${{ secrets.FE_ENV }}" > uniro_admin_frontend/.env

- name: Docker 이미지 빌드 및 푸시
run: |
docker build -t gcr.io/${{ env.GCP_PROJECT_ID }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} -f uniro_admin_frontend/Dockerfile .
docker push gcr.io/${{ env.GCP_PROJECT_ID }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}

CD:
runs-on: ubuntu-latest
needs: CI

env:
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
IMAGE_NAME: uniro-backoffice
IMAGE_TAG: ${{ github.sha }}
DEPLOY_PATH: ${{ secrets.DEPLOY_SERVER_PATH }}

steps:
- name: 배포 서버에 SSH로 연결하여 배포
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.DEPLOY_SERVER_HOST }}
username: ${{ secrets.DEPLOY_SERVER_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
envs: GCP_PROJECT_ID, IMAGE_NAME, IMAGE_TAG, DEPLOY_PATH, TEST
script: |
cd ${DEPLOY_PATH}
sudo docker ps -a --format '{{.ID}} {{.Names}}' \
| egrep -v 'nginx-container|uniro-fe' \
| awk '{print $1}' \
| xargs -r sudo docker stop || true
sudo docker rm $(sudo docker ps -a -q) || true
sudo docker login -u _json_key --password-stdin https://gcr.io <<< '${{ secrets.GCP_SA_KEY }}'
sudo docker pull gcr.io/${GCP_PROJECT_ID}/${IMAGE_NAME}:${IMAGE_TAG}
sudo docker run -d --name ${IMAGE_NAME} -p 3001:3000 gcr.io/${GCP_PROJECT_ID}/${IMAGE_NAME}:${IMAGE_TAG}
sudo docker network connect nginx_app-network ${IMAGE_NAME}
104 changes: 52 additions & 52 deletions .github/workflows/fe-deploy.yml
Original file line number Diff line number Diff line change
@@ -1,66 +1,66 @@
name: FE CI / CD

on:
push:
branches:
- fe
push:
branches:
- fe

jobs:
CI:
runs-on: ubuntu-latest
CI:
runs-on: ubuntu-latest

env:
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
IMAGE_NAME: uniro-fe
IMAGE_TAG: ${{ github.sha }}
env:
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
IMAGE_NAME: uniro-fe
IMAGE_TAG: ${{ github.sha }}

steps:
- name: 코드 체크아웃
uses: actions/checkout@v4
steps:
- name: 코드 체크아웃
uses: actions/checkout@v4

- name: Google Cloud SDK 설정
uses: "google-github-actions/auth@v2"
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
- name: Google Cloud SDK 설정
uses: "google-github-actions/auth@v2"
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}

- name: Docker를 위한 gcloud 인증 설정
run: gcloud auth configure-docker --quiet
- name: Docker를 위한 gcloud 인증 설정
run: gcloud auth configure-docker --quiet

- name: Create .env from secret
run: |
echo "${{ secrets.FE_ENV }}" > uniro_frontend/.env
- name: Create .env from secret
run: |
echo "${{ secrets.FE_ENV }}" > uniro_frontend/.env

- name: Docker 이미지 빌드 및 푸시
run: |
docker build -t gcr.io/${{ env.GCP_PROJECT_ID }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} -f uniro_frontend/Dockerfile .
docker push gcr.io/${{ env.GCP_PROJECT_ID }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
- name: Docker 이미지 빌드 및 푸시
run: |
docker build -t gcr.io/${{ env.GCP_PROJECT_ID }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} -f uniro_frontend/Dockerfile .
docker push gcr.io/${{ env.GCP_PROJECT_ID }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}

CD:
runs-on: ubuntu-latest
needs: CI
CD:
runs-on: ubuntu-latest
needs: CI

env:
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
IMAGE_NAME: uniro-fe
IMAGE_TAG: ${{ github.sha }}
DEPLOY_PATH: ${{ secrets.DEPLOY_SERVER_PATH }}
env:
GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
IMAGE_NAME: uniro-fe
IMAGE_TAG: ${{ github.sha }}
DEPLOY_PATH: ${{ secrets.DEPLOY_SERVER_PATH }}

steps:
- name: 배포 서버에 SSH로 연결하여 배포
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.DEPLOY_SERVER_HOST }}
username: ${{ secrets.DEPLOY_SERVER_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
envs: GCP_PROJECT_ID, IMAGE_NAME, IMAGE_TAG, DEPLOY_PATH, TEST
script: |
cd ${DEPLOY_PATH}
sudo docker ps -a --format '{{.ID}} {{.Names}}' \
| grep -v 'nginx-container' \
| awk '{print $1}' \
| xargs -r sudo docker stop || true
sudo docker rm $(sudo docker ps -a -q) || true
sudo docker login -u _json_key --password-stdin https://gcr.io <<< '${{ secrets.GCP_SA_KEY }}'
sudo docker pull gcr.io/${GCP_PROJECT_ID}/${IMAGE_NAME}:${IMAGE_TAG}
sudo docker run -d --name ${IMAGE_NAME} -p 3000:3000 gcr.io/${GCP_PROJECT_ID}/${IMAGE_NAME}:${IMAGE_TAG}
sudo docker network connect nginx_app-network ${IMAGE_NAME}
steps:
- name: 배포 서버에 SSH로 연결하여 배포
uses: appleboy/ssh-action@v0.1.5
with:
host: ${{ secrets.DEPLOY_SERVER_HOST }}
username: ${{ secrets.DEPLOY_SERVER_USER }}
key: ${{ secrets.DEPLOY_SSH_KEY }}
envs: GCP_PROJECT_ID, IMAGE_NAME, IMAGE_TAG, DEPLOY_PATH, TEST
script: |
cd ${DEPLOY_PATH}
sudo docker ps -a --format '{{.ID}} {{.Names}}' \
| egrep -v 'nginx-container|uniro-backoffice' \
| awk '{print $1}' \
| xargs -r sudo docker stop || true
sudo docker rm $(sudo docker ps -a -q) || true
sudo docker login -u _json_key --password-stdin https://gcr.io <<< '${{ secrets.GCP_SA_KEY }}'
sudo docker pull gcr.io/${GCP_PROJECT_ID}/${IMAGE_NAME}:${IMAGE_TAG}
sudo docker run -d --name ${IMAGE_NAME} -p 3000:3000 gcr.io/${GCP_PROJECT_ID}/${IMAGE_NAME}:${IMAGE_TAG}
sudo docker network connect nginx_app-network ${IMAGE_NAME}
26 changes: 26 additions & 0 deletions uniro_admin_frontend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

.env
15 changes: 15 additions & 0 deletions uniro_admin_frontend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM node:22-slim AS build

WORKDIR /app
COPY ./uniro_admin_frontend .

RUN npm install --legacy-peer-deps --no-audit && npm run build

FROM nginx

COPY uniro_admin_frontend/nginx/nginx.conf /etc/nginx/nginx.conf
COPY --from=build /app/dist /usr/share/nginx/html

EXPOSE 3000

CMD ["nginx", "-g", "daemon off;"]
50 changes: 50 additions & 0 deletions uniro_admin_frontend/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh

## Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type aware lint rules:

- Configure the top-level `parserOptions` property like this:

```js
export default tseslint.config({
languageOptions: {
// other options...
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
},
})
```

- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked`
- Optionally add `...tseslint.configs.stylisticTypeChecked`
- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config:

```js
// eslint.config.js
import react from 'eslint-plugin-react'

export default tseslint.config({
// Set the react version
settings: { react: { version: '18.3' } },
plugins: {
// Add the react plugin
react,
},
rules: {
// other rules...
// Enable its recommended rules
...react.configs.recommended.rules,
...react.configs['jsx-runtime'].rules,
},
})
```
Loading