From 3c7c9b2f579e12ecca7cd845dc217ea4dc36ef4f Mon Sep 17 00:00:00 2001 From: Seonghun Jeong <119427233+zzoe2346@users.noreply.github.com> Date: Thu, 14 Nov 2024 14:21:48 +0900 Subject: [PATCH 01/19] =?UTF-8?q?docs:=20=ED=94=84=EB=A1=A0=ED=8A=B8=20REA?= =?UTF-8?q?DME=20=EA=B0=80=EC=A0=B8=EC=99=94=EA=B3=A0=20ERD=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 288 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..9625e8f --- /dev/null +++ b/README.md @@ -0,0 +1,288 @@ +# 나만의 작은 시니또 + +![Sinitto main banner](https://github.com/user-attachments/assets/555957c8-b2aa-4797-8660-8e404962da01) + +## 목차 +- [🤔 시니또가 무엇인가요?](#시니또가-무엇인가요) +- [🧑🏻‍💻 어떤 서비스인가요?](#어떤-서비스인가요) +- [💬 핵심 기능 간략한 설명](#핵심-기능-간략한-설명) + - [콜백 서비스](#콜백-서비스) + - [안부 전화 서비스](#안부-전화-서비스) +- [💡 핵심 기능 상세 설명](#핵심-기능-상세-설명) + - [1. 공통](#1-공통) + - [2. 포인트](#2-포인트) + - [3. 콜백 서비스](#3-콜백-서비스) + - [4. 안부 전화 서비스](#4-안부-전화-서비스) + +## 🚀 배포 주소 +### Client +[https://sinitto.life/](https://sinitto.life/) + +### Dummy Data Login +[https://sinitto.site/dummy](https://sinitto.site/dummy) + +**비밀번호** `1234` + +### Server +[https://sinitto.site/](https://sinitto.site/) + +## 👥 팀원 + +|Frontend|Frontend|Frontend| +|:------:|:------:|:------:| +|[](https://github.com/Dobbymin)|[](https://github.com/Diwoni)|[](https://github.com/JYN523)| +|[김강민](https://github.com/Dobbymin)|[정지원](https://github.com/Diwoni)|[제유나](https://github.com/JYN523)| + +|Backend|Backend|Backend|Backend| +|:------:|:------:|:------:|:------:| +|[](https://github.com/zzoe2346)|[](https://github.com/GitJIHO)|[](https://github.com/2iedo)|[](https://github.com/eunsoni)| +|[정성훈](https://github.com/zzoe2346)|[이지호](https://github.com/GitJIHO)|[이도훈](https://github.com/2iedo)|[김은선](https://github.com/eunsoni)| + +## ⚒️ 기술 스텍 + +### Frontend +image + + +### Backend +image + +## 서비스 아키텍처 + +![Service Architecture](https://github.com/user-attachments/assets/d54fa701-2065-4492-8c47-2511f5137c14) + +## ERD +![image](https://github.com/user-attachments/assets/d638bf78-4adc-4a43-96f2-e30cd04ea7b3) + + +## 🤔 시니또가 무엇인가요? + +‘시니또’는 어르신을 뜻하는 ‘시니어’와 비밀 친구를 뜻하는 ‘마니또’를 합친 단어로, +디지털 서비스를 이용하기 어려운 어르신들과 디지털 서비스를 이용하는데 익숙한 +젊은 세대를 이어주기 위한 ‘시니또’라는 명칭을 사용해보았습니다. + +또한 ‘시니또’는 세대 간의 소통을 강조하며, 서로의 필요를 이해하고 지원하는 +관계를 형성하고자 하는 취지를 담고 있습니다. + +## 🧑🏻‍💻 어떤 서비스인가요? + +과거에는 시니어들이 전화를 통해 배달 주문이나 서비스 이용을 비교적 쉽게 할 수 +있었습니다. 그러나 스마트폰이 발달한 현재, 대부분의 서비스가 스마트폰 +애플리케이션 기반으로 제공되고있어, 시니어들이 이러한 디지털 서비스를 이용하는 +데 많은 어려움을 겪고 있습니다. + +실제로 저희 조원 중 한 분의 할아버지께서는 스마트폰 사용에 어려움을 느끼셨고, +주로 조원분들에게 전화를 하여 도움을 요청하셨습니다. 이러한 문제점을 바탕으로 +저희는 ‘어르신들이 예전에 자주 사용하시던 **전화**를 통해 디지털 서비스를 쉽게 +이용할 수는 없을까?’ 라는 생각을 하게 되었고, 이를 ‘시니또’ 서비스의 핵심 +기능으로 자리 잡게 되었습니다. + +이 서비스는 어르신들이 보다 쉽게 디지털 서비스를 이용할 수 있도록 돕는 동시에, +젊은 세대가 그들과 소통하고 지원할 수 있는 기회를 제공하고자 합니다. + +## 💬 핵심 기능 간략한 설명 + +> ‘시니또‘는 크게 두 가지의 핵심 기능이 있습니다. + +### 콜백 서비스 + +어르신들이 전화 한 통으로 디지털 서비스를 이용할 수 있게 합니다. + +이 서비스를 원활하게 이용할 수 있도록 보호자는 사전에 시니또 서비스에 시니어를 +등록하고, 시니어가 요청할 내용이 담긴 가이드라인을 제공합니다. + +### 안부 전화 서비스 + +평소 업무 등의 활동으로 인해 시니어분들과 연락할 시간이 부족한 보호자들을 위한 +서비스입니다. + +보호자는 사전에 웹사이트에 안부전화 서비스를 이용할 기간, 시간대, 전화 시간 및 +전화로 확인했으면 하는 내용을 작성하고, 시니또는 해당 요청사항을 확인한 후 수락 +버튼을 눌러 안부 전화 서비스를 수행하게 됩니다. + +## 💡 핵심 기능 상세 설명 + +### 1. 공통 + +> **로그인** + +image-1 + +’카카오톡 로그인’ 버튼을 눌러 로그인을 진행합니다. 이전에 로그인을 한 적이 있을 +경우 바로 로그인이 완료되며, 처음 이용할 경우 회원가입 창으로 이동하게 됩니다. + +> **회원가입** + +image-2 + +사용자는 가입 유형인 ‘**시니또**‘와 ’**보호자**‘ 중 한 가지 유형을 선택합니다. + +여기서 ’시니또‘는 시니어의 디지털 서비스를 수행하는 사람이며, ’보호자‘는 디지털 +서비스를 필요로 하는 시니어를 등록하는 사람입니다. + +사용자는 가입 유형을 선택한 후 이름 및 연락처를 입력하고, 아래의 서약서를 읽은 +후 ’서약서의 내용에 동의합니다‘를 체크한 후에 ’가입하기‘ 버튼을 눌러 회원가입을 +완료합니다. + +### **2. 포인트** + +> **포인트 충전 (보호자)** + +image-4 + +‘보호자’는 포인트를 충전하여 시니어가 제공받는 서비스의 값을 제공합니다. + +‘충전하기’ 버튼을 누른 후, 충전 금액을 입력하면 충전 요청이 완료되며, 이러한 +요청은 관리자에게 전달됩니다. + +그 후 카카오톡의 ‘나에게 보낸 메시지’를 확인하여 금액을 입금할 은행계좌와 +입금자명을 확인하고, 해당 양식에 맞추어 입금을 진행합니다. + +관리자는 입금 내역을 확인한 후 포인트를 지급합니다. + +> **포인트 출금 (시니또)** + +image-3 + +‘시니또’는 콜백 서비스 및 안부전화 서비스를 통해 받은 포인트를 현금으로 환전할 +수 있습니다. + +최소 5000포인트 이상이 있어야 출금이 가능하며, 출금할 포인트를 입력한 후, ‘출금 +신청’ 버튼을 눌러 출금 요청을 관리자에게 전송합니다. + +관리자는 이를 확인한 후, 등록된 계좌번호로 수수료를 제외한 금액을 송금합니다. + +### 3. 콜백 서비스 + +> **시니어 등록 (보호자)** + +image-5 + +‘보호자’는 디지털 서비스를 이용할 시니어를 등록합니다. 마이페이지의 ‘시니어 +등록하기’버튼을 눌러 시니어를 등록합니다. + +시니어를 등록하기 위해 시니어의 성함 및 전화번호를 입력해야 합니다. + +> **가이드라인 등록 (보호자)** + +image-6 + +‘보호자’는 시니어를 등록한 후, 각 목록에 대한 가이드라인을 등록하여야 합니다. +`택시 호출하기` , `음식 배달 주문하기` , `병원 접수 대행` , +`여행 및 문화 생활 예약 대행` 에 대한 가이드라인을 추가할 수 있으며, 가이드라인 +제목 및 가이드라인 내용을 입력하여야 합니다. + +‘시니또’가 이 내용을 확인한 후 디지털 서비스를 수행하기 때문에, 가능한 내용을 +상세히 적어야 원할한 서비스 진행이 가능합니다. + +> **전화를 통한 등록 (시니어)** + +image-7 + +‘시니어’는 메인 페이지에 적혀있는 번호로 전화를 하여 콜백 서비스를 요청합니다. +등록이 성공했을 경우 ‘감사합니다. 잠시만 기다려주세요.’ 라는 기계음이 들리며, +‘시니또’가 요청을 수락할 때까지 기다리고 있으면 됩니다. + +> **콜백 요청 확인 (시니또)** + +image-8 + +‘시니또’는 시니어가 요청한 콜백 서비스의 리스트를 확인할 수 있습니다. 여러 +요청들 중 하나를 선택하여 상세한 내용을 확인할 수 있습니다. + +> **콜백 요청 수락 & 수행 (시니또)** + +image-9 + +‘시니또’는 시니어가 요청한 콜백 서비스의 리스트 중 하나를 선택하여 ‘요청 +상세페이지’로 이동할 수 있습니다. + +각 목록마다 버튼을 클릭하여 상세한 내용을 확인할 수 있으며, 내용을 확인하고 +서비스를 수행할 수 있을 경우 ‘전화걸기 및 수락하기’ 버튼을 클릭하여 서비스를 +시작합니다. + +> **콜백 요청 완료 대기 (시니또)** + +image-10 + +‘시니또’가 ‘전화걸기 및 수락하기’ 버튼을 누르면 아래에 ‘시니어 전화번호’가 +뜨게됩니다. + +‘시니또’는 해당 전화번호로 전화를 걸어 시니어가 어떤 요청을 하는지 확인하고, +해당 서비스를 수행합니다. + +이 때, 가이드라인과 벗어나는 내용을 부탁하거나, ‘시니또’가 수행할 수 없는 부탁을 +할 경우 ‘도움 포기’ 버튼을 눌러 해당 요청을 거부할 수 있습니다. + +요청을 완료한 후 ‘도움 완료’버튼을 눌러 완료 대기 상태로 전환할 수 있습니다. + +> **콜백 요청 완료 (보호자)** + +image-12 + +'보호자'는 '시니또'가 완료 버튼을 누른 후, 시니어에게 해당 요청이 제대로 +완료되었는지 확인합니다. 그 다음 '서비스 이용내역' 화면에서 완료 대기 상태인 +콜백 서비스를 완료 상태로 변경할 수 있습니다. + +만약 보호자가 이틀 동안 이 버튼을 누르지 않으면, 서비스는 자동으로 완료 상태로 +변경됩니다. + +### 4. 안부 전화 서비스 + +> **시니어 등록 (보호자)** + +image-13 + +‘보호자’는 디지털 서비스를 이용할 시니어를 등록합니다. + +마이페이지의 ‘시니어 등록하기’버튼을 눌러 시니어를 등록합니다. + +시니어를 등록하기 위해 시니어의 성함 및 전화번호를 입력해야 합니다. + +> **안부전화 서비스 등록 (보호자)** + +image-14 + +‘보호자’는 안부전화 서비스를 받을 시니어를 선택하고, 서비스 이용 시간대 및 이용 +시간을 선택합니다. + +그 후 서비스 이용 기간을 선택하고, 아래의 ‘포인트 계산하기’ 버튼을 클릭하여 +비용을 확인합니다. + +그 후 ‘시니또’ 가 시니어와 나눌 대화의 주제를 입력하고, ‘신청하기’ 버튼을 +클릭하여 안부전화 서비스 신청을 완료합니다. + +> **안부전화 서비스 확인 (시니또)** + +image-15 + +‘시니또’는 ‘안부전화 서비스’에서 현재 대기 중인 안부전화 서비스 목록을 확인할 수 +있습니다. + +여러 목록들 중 하나를 선택하여 안부전화 서비스를 진행할 시간대를 확인하며, +아래의 ‘서비스 상세 확인하기’버튼을 클릭하여 시니어의 번호를 확인합니다. + +> **안부전화 서비스 수락 & 수행 (시니또)** + +image-16 + +‘시니또’는 시니어의 전화번호 및 요청사항을 확인한 후, ‘서비스 수락하기’ 버튼을 +클릭하여 안부전화 서비스를 수행합니다. + +> **안부전화 서비스 완료 대기 (시니또)** + +image-17 +image-18 + +‘시니또’는 지정된 기간 동안 안부전화 서비스를 수행하고, 서비스 수행기간이 끝나는 +날짜 이후에 ‘안부전화 서비스 보고서‘를 작성할 수 있습니다. + +보고서에는 안부전화 서비스 기간 동안 시니어와 나누었던 대화를 작성해야 하며, +내용을 작성한 후 ’보고서 제출하기‘ 버튼을 클릭하여 보고서를 제출합니다. + +> **안부전화 서비스 완료 (보호자)** + +image-18 + +’보호자‘는 ’서비스 이용내역‘ 페이지에서 완료 대기 상태인 안부전화 서비스를 +완료상태로 변경할 수 있습니다. From 7a62c76b997e381e8395f0f269c0c84c3be9635d Mon Sep 17 00:00:00 2001 From: Seonghun Jeong <119427233+zzoe2346@users.noreply.github.com> Date: Thu, 14 Nov 2024 14:28:22 +0900 Subject: [PATCH 02/19] =?UTF-8?q?docs:=20=EC=9C=A0=EC=A6=88=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EB=8B=A4=EC=9D=B4=EC=96=B4=EA=B7=B8?= =?UTF-8?q?=EB=9E=A8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 9625e8f..f9d5bf6 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,13 @@ ## ERD ![image](https://github.com/user-attachments/assets/d638bf78-4adc-4a43-96f2-e30cd04ea7b3) +## Use Case Diagram +![image](https://github.com/user-attachments/assets/0259f679-b13f-496a-8261-6e6df0abed50) +![image](https://github.com/user-attachments/assets/71999d87-3d83-4019-b46b-1c2abc54ccc3) +![image](https://github.com/user-attachments/assets/03da2737-f945-4803-b325-3ca831720b56) +![image](https://github.com/user-attachments/assets/d1ed5366-3bdb-4c85-8b6b-2747b2d8f210) + + ## 🤔 시니또가 무엇인가요? From dd5bc191e7462d9def293bad3e8bab7a1dfc83b9 Mon Sep 17 00:00:00 2001 From: Seonghun Jeong <119427233+zzoe2346@users.noreply.github.com> Date: Thu, 14 Nov 2024 14:53:22 +0900 Subject: [PATCH 03/19] =?UTF-8?q?docs:=20=EA=B4=80=EB=A6=AC=EC=9E=90?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80,=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20?= =?UTF-8?q?=EB=B0=B0=ED=8F=AC=20=EC=A3=BC=EC=86=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index f9d5bf6..ed6db46 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,14 @@ ### Server [https://sinitto.site/](https://sinitto.site/) +### Swagger +https://sinitto.site/swagger-ui/index.html +### Admin Page +https://sinitto.site/admin/login + +**이메일** `admin@kakao.com` + +**비밀번호** `admin123` ## 👥 팀원 From f00c10cd4c0874be976c54243d7c2ee6e9256e8a Mon Sep 17 00:00:00 2001 From: Seonghun Jeong <119427233+zzoe2346@users.noreply.github.com> Date: Thu, 14 Nov 2024 16:51:35 +0900 Subject: [PATCH 04/19] =?UTF-8?q?docs:=20=EB=82=B4=EB=B6=80=20=EC=89=98?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=84=A4=EB=AA=85=20?= =?UTF-8?q?=EB=A7=81=ED=81=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ed6db46..4fcfbfe 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,13 @@ # 나만의 작은 시니또 +
+ + -![Sinitto main banner](https://github.com/user-attachments/assets/555957c8-b2aa-4797-8660-8e404962da01) + ### "디지털시대?! 나도 이제 두렵지 않아!" + 👦🏻 세대와 👨🏻‍🦳세대를 이어주는 따뜻한 전화 📞 + + 나만의 작은 시니또 +
## 목차 - [🤔 시니또가 무엇인가요?](#시니또가-무엇인가요) @@ -15,25 +22,27 @@ - [4. 안부 전화 서비스](#4-안부-전화-서비스) ## 🚀 배포 주소 -### Client +### ✔️ Client [https://sinitto.life/](https://sinitto.life/) -### Dummy Data Login +### ✔️ Dummy Data Login [https://sinitto.site/dummy](https://sinitto.site/dummy) **비밀번호** `1234` -### Server +### ✔️ Server [https://sinitto.site/](https://sinitto.site/) -### Swagger +### ✔️ Swagger https://sinitto.site/swagger-ui/index.html -### Admin Page +### ✔️ Admin Page https://sinitto.site/admin/login **이메일** `admin@kakao.com` **비밀번호** `admin123` +> [!NOTE] +> 백엔드 내부 쉘스크립트 모음 https://www.notion.so/3ce05a49e06046469bde14c12b8b9c00 ## 👥 팀원 |Frontend|Frontend|Frontend| @@ -55,6 +64,8 @@ https://sinitto.site/admin/login ### Backend image + + ## 서비스 아키텍처 ![Service Architecture](https://github.com/user-attachments/assets/d54fa701-2065-4492-8c47-2511f5137c14) From 9a780fd3ef066ea6326843b775e1248a5e153d38 Mon Sep 17 00:00:00 2001 From: Seonghun Jeong <119427233+zzoe2346@users.noreply.github.com> Date: Thu, 14 Nov 2024 17:36:36 +0900 Subject: [PATCH 05/19] =?UTF-8?q?docs:=20=EC=89=98=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=20=EB=AA=A8=EC=9D=8C=20=EB=A7=81=ED=81=AC=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4fcfbfe..8a28d69 100644 --- a/README.md +++ b/README.md @@ -41,8 +41,7 @@ https://sinitto.site/admin/login **비밀번호** `admin123` -> [!NOTE] -> 백엔드 내부 쉘스크립트 모음 https://www.notion.so/3ce05a49e06046469bde14c12b8b9c00 + ## 👥 팀원 |Frontend|Frontend|Frontend| @@ -64,7 +63,8 @@ https://sinitto.site/admin/login ### Backend image - +> [!NOTE] +> 백엔드 내부 쉘스크립트 모음 https://www.notion.so/3ce05a49e06046469bde14c12b8b9c00 ## 서비스 아키텍처 From 359ea9ab39ded24d28eff4a9ffa0c991d0dfac0c Mon Sep 17 00:00:00 2001 From: Seonghun Jeong <119427233+zzoe2346@users.noreply.github.com> Date: Thu, 14 Nov 2024 18:42:49 +0900 Subject: [PATCH 06/19] =?UTF-8?q?docs:=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=B5=9C=EC=8B=A0=ED=99=94(=EC=95=84=ED=82=A4=ED=85=8D?= =?UTF-8?q?=EC=B3=90,=20=EC=96=B4=EB=93=9C=EB=AF=BC=20=EC=9C=A0=EC=A6=88?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8a28d69..0e9fc91 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ https://sinitto.site/admin/login ## 서비스 아키텍처 -![Service Architecture](https://github.com/user-attachments/assets/d54fa701-2065-4492-8c47-2511f5137c14) +![Service Architecture](https://github.com/user-attachments/assets/a9ad53f3-9b63-433d-b4a7-1afbbfd21e90) ## ERD ![image](https://github.com/user-attachments/assets/d638bf78-4adc-4a43-96f2-e30cd04ea7b3) @@ -77,7 +77,7 @@ https://sinitto.site/admin/login ![image](https://github.com/user-attachments/assets/0259f679-b13f-496a-8261-6e6df0abed50) ![image](https://github.com/user-attachments/assets/71999d87-3d83-4019-b46b-1c2abc54ccc3) ![image](https://github.com/user-attachments/assets/03da2737-f945-4803-b325-3ca831720b56) -![image](https://github.com/user-attachments/assets/d1ed5366-3bdb-4c85-8b6b-2747b2d8f210) +![image](https://github.com/user-attachments/assets/bc12fbc3-4111-4072-a62d-682360e5a186) From 65d7908c1ae9ee96170fcdd90c3a8270f6de85d0 Mon Sep 17 00:00:00 2001 From: gitjiho Date: Thu, 14 Nov 2024 18:55:43 +0900 Subject: [PATCH 07/19] =?UTF-8?q?DOCS:=20=EC=A3=BC=EC=9D=98=EC=82=AC?= =?UTF-8?q?=ED=95=AD=20=EB=B0=8F=20=EA=B0=95=EC=A1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0e9fc91..fecaef0 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,8 @@ ### ✔️ Dummy Data Login [https://sinitto.site/dummy](https://sinitto.site/dummy) +[주의: 더미데이터 유저는 카카오메시지가 오지 않습니다] + **비밀번호** `1234` ### ✔️ Server @@ -112,10 +114,10 @@ https://sinitto.site/admin/login ### 콜백 서비스 -어르신들이 전화 한 통으로 디지털 서비스를 이용할 수 있게 합니다. +어르신들이 **전화 한 통**으로 디지털 서비스를 이용할 수 있게 합니다. 이 서비스를 원활하게 이용할 수 있도록 보호자는 사전에 시니또 서비스에 시니어를 -등록하고, 시니어가 요청할 내용이 담긴 가이드라인을 제공합니다. +등록하고, **시니어가 요청할 내용이 담긴 가이드라인**을 제공합니다. ### 안부 전화 서비스 From 819e28f854a5b12b64b918802aa2b30f8d6933f3 Mon Sep 17 00:00:00 2001 From: 2iedo <162278702+2iedo@users.noreply.github.com> Date: Thu, 14 Nov 2024 20:00:40 +0900 Subject: [PATCH 08/19] =?UTF-8?q?docs=20:=20=EB=94=94=EB=A0=89=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=20=EB=B0=8F=20=ED=98=91=EC=97=85?= =?UTF-8?q?=20=EA=B3=BC=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 549 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 549 insertions(+) diff --git a/README.md b/README.md index fecaef0..2b3f331 100644 --- a/README.md +++ b/README.md @@ -314,3 +314,552 @@ https://sinitto.site/admin/login ’보호자‘는 ’서비스 이용내역‘ 페이지에서 완료 대기 상태인 안부전화 서비스를 완료상태로 변경할 수 있습니다. + +## 디렉토리 구조 + +```c +Team8_BE +├── build +│   ├── classes +│   │   └── java +│   │   └── main +│   │   └── com +│   │   └── example +│   │   └── sinitto +│   │   ├── SinittoApplication.class +│   │   ├── auth +│   │   │   ├── controller +│   │   │   │   └── AuthController.class +│   │   │   ├── dto +│   │   │   │   ├── KakaoTokenResponse.class +│   │   │   │   ├── KakaoUserResponse$KakaoAccount$Profile.class +│   │   │   │   ├── KakaoUserResponse$KakaoAccount.class +│   │   │   │   ├── KakaoUserResponse.class +│   │   │   │   ├── LoginResponse.class +│   │   │   │   ├── TokenRefreshRequest.class +│   │   │   │   └── TokenResponse.class +│   │   │   ├── entity +│   │   │   │   └── KakaoToken.class +│   │   │   ├── repository +│   │   │   │   └── KakaoTokenRepository.class +│   │   │   └── service +│   │   │   ├── KakaoApiService.class +│   │   │   ├── KakaoTokenService.class +│   │   │   └── TokenService.class +│   │   ├── callback +│   │   │   ├── controller +│   │   │   │   └── CallbackController.class +│   │   │   ├── dto +│   │   │   │   ├── CallbackForSinittoResponse.class +│   │   │   │   ├── CallbackResponse.class +│   │   │   │   └── CallbackUsageHistoryResponse.class +│   │   │   ├── entity +│   │   │   │   ├── Callback$Status.class +│   │   │   │   └── Callback.class +│   │   │   ├── repository +│   │   │   │   └── CallbackRepository.class +│   │   │   ├── service +│   │   │   │   └── CallbackService.class +│   │   │   └── util +│   │   │   └── TwilioHelper.class +│   │   ├── common +│   │   │   ├── config +│   │   │   │   ├── RedisConfig.class +│   │   │   │   ├── RestTemplateResponseErrorHandler.class +│   │   │   │   ├── SwaggerConfig.class +│   │   │   │   └── WebConfig.class +│   │   │   ├── dummy +│   │   │   │   └── InitialData.class +│   │   │   ├── exception +│   │   │   │   ├── AccessTokenExpiredException.class +│   │   │   │   ├── BadRequestException.class +│   │   │   │   ├── ConflictException.class +│   │   │   │   ├── ForbiddenException.class +│   │   │   │   ├── GlobalExceptionHandler.class +│   │   │   │   ├── InvalidJwtException.class +│   │   │   │   ├── NotFoundException.class +│   │   │   │   ├── RefreshTokenStolenException.class +│   │   │   │   └── UnauthorizedException.class +│   │   │   ├── interceptor +│   │   │   │   └── JwtInterceptor.class +│   │   │   ├── properties +│   │   │   │   ├── AdminProperties.class +│   │   │   │   ├── DummyProperties.class +│   │   │   │   └── KakaoProperties.class +│   │   │   └── service +│   │   │   ├── KakaoMessageService.class +│   │   │   └── SlackMessageService.class +│   │   ├── guard +│   │   │   ├── controller +│   │   │   │   └── GuardController.class +│   │   │   ├── dto +│   │   │   │   ├── GuardRequest.class +│   │   │   │   ├── GuardResponse.class +│   │   │   │   ├── SeniorRequest.class +│   │   │   │   └── SeniorResponse.class +│   │   │   ├── repository +│   │   │   │   └── SeniorRepository.class +│   │   │   └── service +│   │   │   └── GuardService.class +│   │   ├── guardGuideline +│   │   │   ├── controller +│   │   │   │   └── GuardGuidelineController.class +│   │   │   ├── dto +│   │   │   │   ├── GuardGuidelineRequest.class +│   │   │   │   └── GuardGuidelineResponse.class +│   │   │   ├── entity +│   │   │   │   ├── GuardGuideline$Type.class +│   │   │   │   └── GuardGuideline.class +│   │   │   ├── repository +│   │   │   │   └── GuardGuidelineRepository.class +│   │   │   └── service +│   │   │   └── GuardGuidelineService.class +│   │   ├── helloCall +│   │   │   ├── controller +│   │   │   │   └── HelloCallController.class +│   │   │   ├── dto +│   │   │   │   ├── HelloCallDetailResponse$TimeSlot.class +│   │   │   │   ├── HelloCallDetailResponse.class +│   │   │   │   ├── HelloCallDetailUpdateRequest$TimeSlot.class +│   │   │   │   ├── HelloCallDetailUpdateRequest.class +│   │   │   │   ├── HelloCallPriceRequest$TimeSlot.class +│   │   │   │   ├── HelloCallPriceRequest.class +│   │   │   │   ├── HelloCallPriceResponse.class +│   │   │   │   ├── HelloCallReportRequest.class +│   │   │   │   ├── HelloCallReportResponse.class +│   │   │   │   ├── HelloCallRequest$TimeSlot.class +│   │   │   │   ├── HelloCallRequest.class +│   │   │   │   ├── HelloCallResponse.class +│   │   │   │   ├── HelloCallTimeLogResponse.class +│   │   │   │   └── StringMessageResponse.class +│   │   │   ├── entity +│   │   │   │   ├── HelloCall$Status.class +│   │   │   │   ├── HelloCall.class +│   │   │   │   ├── HelloCallTimeLog.class +│   │   │   │   └── TimeSlot.class +│   │   │   ├── repository +│   │   │   │   ├── HelloCallRepository.class +│   │   │   │   ├── HelloCallTimeLogRepository.class +│   │   │   │   └── TimeSlotRepository.class +│   │   │   └── service +│   │   │   ├── HelloCallPriceService.class +│   │   │   └── HelloCallService.class +│   │   ├── member +│   │   │   ├── controller +│   │   │   │   ├── MemberAdminController.class +│   │   │   │   └── MemberController.class +│   │   │   ├── dto +│   │   │   │   ├── RegisterResponse.class +│   │   │   │   └── SignupRequest.class +│   │   │   ├── entity +│   │   │   │   ├── Member.class +│   │   │   │   └── Senior.class +│   │   │   ├── repository +│   │   │   │   └── MemberRepository.class +│   │   │   └── service +│   │   │   ├── MemberService.class +│   │   │   └── MemberTokenService.class +│   │   ├── point +│   │   │   ├── controller +│   │   │   │   ├── PointAdminController.class +│   │   │   │   └── PointController.class +│   │   │   ├── dto +│   │   │   │   ├── PointChargeResponse.class +│   │   │   │   ├── PointLogResponse.class +│   │   │   │   ├── PointLogWithBankInfo.class +│   │   │   │   ├── PointLogWithDepositMessage.class +│   │   │   │   ├── PointRequest.class +│   │   │   │   └── PointResponse.class +│   │   │   ├── entity +│   │   │   │   ├── Point.class +│   │   │   │   ├── PointLog$Content.class +│   │   │   │   ├── PointLog$Status.class +│   │   │   │   └── PointLog.class +│   │   │   ├── repository +│   │   │   │   ├── PointLogRepository.class +│   │   │   │   └── PointRepository.class +│   │   │   └── service +│   │   │   ├── PointAdminService.class +│   │   │   └── PointService.class +│   │   ├── review +│   │   │   ├── controller +│   │   │   │   └── ReviewController.class +│   │   │   ├── dto +│   │   │   │   ├── ReviewRequest.class +│   │   │   │   └── ReviewResponse.class +│   │   │   ├── entity +│   │   │   │   └── Review.class +│   │   │   ├── repository +│   │   │   │   └── ReviewRepository.class +│   │   │   └── service +│   │   │   └── ReviewService.class +│   │   └── sinitto +│   │   ├── controller +│   │   │   └── SinittoController.class +│   │   ├── dto +│   │   │   ├── SinittoBankRequest.class +│   │   │   ├── SinittoBankResponse.class +│   │   │   ├── SinittoRequest.class +│   │   │   └── SinittoResponse.class +│   │   ├── entity +│   │   │   └── SinittoBankInfo.class +│   │   ├── repository +│   │   │   └── SinittoBankInfoRepository.class +│   │   └── service +│   │   └── SinittoService.class +│   ├── generated +│   │   └── sources +│   │   ├── annotationProcessor +│   │   │   └── java +│   │   │   └── main +│   │   └── headers +│   │   └── java +│   │   └── main +│   ├── libs +│   │   ├── Team8_BE-0.0.1-SNAPSHOT-plain.jar +│   │   └── Team8_BE-0.0.1-SNAPSHOT.jar +│   ├── resolvedMainClassName +│   ├── resources +│   │   └── main +│   │   ├── application-dev.properties +│   │   ├── application.properties +│   │   ├── keystore.p12 +│   │   ├── static +│   │   │   └── css +│   │   │   ├── dummy.css +│   │   │   ├── header.css +│   │   │   ├── login.css +│   │   │   └── point.css +│   │   └── templates +│   │   ├── dummy +│   │   │   └── login.html +│   │   └── point +│   │   ├── charge.html +│   │   ├── header.html +│   │   ├── login.html +│   │   └── withdraw.html +│   └── tmp +│   ├── bootJar +│   │   └── MANIFEST.MF +│   ├── compileJava +│   │   └── previous-compilation-data.bin +│   └── jar +│   └── MANIFEST.MF +├── build.gradle +├── gradle +│   └── wrapper +│   ├── gradle-wrapper.jar +│   └── gradle-wrapper.properties +├── gradlew +├── gradlew.bat +├── settings.gradle +└── src + ├── main + │   ├── java + │   │   └── com + │   │   └── example + │   │   └── sinitto + │   │   ├── SinittoApplication.java + │   │   ├── auth + │   │   │   ├── controller + │   │   │   │   └── AuthController.java + │   │   │   ├── dto + │   │   │   │   ├── KakaoTokenResponse.java + │   │   │   │   ├── KakaoUserResponse.java + │   │   │   │   ├── LoginResponse.java + │   │   │   │   ├── TokenRefreshRequest.java + │   │   │   │   └── TokenResponse.java + │   │   │   ├── entity + │   │   │   │   └── KakaoToken.java + │   │   │   ├── repository + │   │   │   │   └── KakaoTokenRepository.java + │   │   │   └── service + │   │   │   ├── KakaoApiService.java + │   │   │   ├── KakaoTokenService.java + │   │   │   └── TokenService.java + │   │   ├── callback + │   │   │   ├── controller + │   │   │   │   └── CallbackController.java + │   │   │   ├── dto + │   │   │   │   ├── CallbackForSinittoResponse.java + │   │   │   │   ├── CallbackResponse.java + │   │   │   │   └── CallbackUsageHistoryResponse.java + │   │   │   ├── entity + │   │   │   │   └── Callback.java + │   │   │   ├── repository + │   │   │   │   └── CallbackRepository.java + │   │   │   ├── service + │   │   │   │   └── CallbackService.java + │   │   │   └── util + │   │   │   └── TwilioHelper.java + │   │   ├── common + │   │   │   ├── config + │   │   │   │   ├── RedisConfig.java + │   │   │   │   ├── RestTemplateResponseErrorHandler.java + │   │   │   │   ├── SwaggerConfig.java + │   │   │   │   └── WebConfig.java + │   │   │   ├── dummy + │   │   │   │   └── InitialData.java + │   │   │   ├── exception + │   │   │   │   ├── AccessTokenExpiredException.java + │   │   │   │   ├── BadRequestException.java + │   │   │   │   ├── ConflictException.java + │   │   │   │   ├── ForbiddenException.java + │   │   │   │   ├── GlobalExceptionHandler.java + │   │   │   │   ├── InvalidJwtException.java + │   │   │   │   ├── NotFoundException.java + │   │   │   │   ├── RefreshTokenStolenException.java + │   │   │   │   └── UnauthorizedException.java + │   │   │   ├── interceptor + │   │   │   │   └── JwtInterceptor.java + │   │   │   ├── properties + │   │   │   │   ├── AdminProperties.java + │   │   │   │   ├── DummyProperties.java + │   │   │   │   └── KakaoProperties.java + │   │   │   └── service + │   │   │   ├── KakaoMessageService.java + │   │   │   └── SlackMessageService.java + │   │   ├── guard + │   │   │   ├── controller + │   │   │   │   └── GuardController.java + │   │   │   ├── dto + │   │   │   │   ├── GuardRequest.java + │   │   │   │   ├── GuardResponse.java + │   │   │   │   ├── SeniorRequest.java + │   │   │   │   └── SeniorResponse.java + │   │   │   ├── repository + │   │   │   │   └── SeniorRepository.java + │   │   │   └── service + │   │   │   └── GuardService.java + │   │   ├── guardGuideline + │   │   │   ├── controller + │   │   │   │   └── GuardGuidelineController.java + │   │   │   ├── dto + │   │   │   │   ├── GuardGuidelineRequest.java + │   │   │   │   └── GuardGuidelineResponse.java + │   │   │   ├── entity + │   │   │   │   └── GuardGuideline.java + │   │   │   ├── repository + │   │   │   │   └── GuardGuidelineRepository.java + │   │   │   └── service + │   │   │   └── GuardGuidelineService.java + │   │   ├── helloCall + │   │   │   ├── controller + │   │   │   │   └── HelloCallController.java + │   │   │   ├── dto + │   │   │   │   ├── HelloCallDetailResponse.java + │   │   │   │   ├── HelloCallDetailUpdateRequest.java + │   │   │   │   ├── HelloCallPriceRequest.java + │   │   │   │   ├── HelloCallPriceResponse.java + │   │   │   │   ├── HelloCallReportRequest.java + │   │   │   │   ├── HelloCallReportResponse.java + │   │   │   │   ├── HelloCallRequest.java + │   │   │   │   ├── HelloCallResponse.java + │   │   │   │   ├── HelloCallTimeLogResponse.java + │   │   │   │   └── StringMessageResponse.java + │   │   │   ├── entity + │   │   │   │   ├── HelloCall.java + │   │   │   │   ├── HelloCallTimeLog.java + │   │   │   │   └── TimeSlot.java + │   │   │   ├── repository + │   │   │   │   ├── HelloCallRepository.java + │   │   │   │   ├── HelloCallTimeLogRepository.java + │   │   │   │   └── TimeSlotRepository.java + │   │   │   └── service + │   │   │   ├── HelloCallPriceService.java + │   │   │   └── HelloCallService.java + │   │   ├── member + │   │   │   ├── controller + │   │   │   │   ├── MemberAdminController.java + │   │   │   │   └── MemberController.java + │   │   │   ├── dto + │   │   │   │   ├── RegisterResponse.java + │   │   │   │   └── SignupRequest.java + │   │   │   ├── entity + │   │   │   │   ├── Member.java + │   │   │   │   └── Senior.java + │   │   │   ├── repository + │   │   │   │   └── MemberRepository.java + │   │   │   └── service + │   │   │   ├── MemberService.java + │   │   │   └── MemberTokenService.java + │   │   ├── point + │   │   │   ├── controller + │   │   │   │   ├── PointAdminController.java + │   │   │   │   └── PointController.java + │   │   │   ├── dto + │   │   │   │   ├── PointChargeResponse.java + │   │   │   │   ├── PointLogResponse.java + │   │   │   │   ├── PointLogWithBankInfo.java + │   │   │   │   ├── PointLogWithDepositMessage.java + │   │   │   │   ├── PointRequest.java + │   │   │   │   └── PointResponse.java + │   │   │   ├── entity + │   │   │   │   ├── Point.java + │   │   │   │   └── PointLog.java + │   │   │   ├── repository + │   │   │   │   ├── PointLogRepository.java + │   │   │   │   └── PointRepository.java + │   │   │   └── service + │   │   │   ├── PointAdminService.java + │   │   │   └── PointService.java + │   │   ├── review + │   │   │   ├── controller + │   │   │   │   └── ReviewController.java + │   │   │   ├── dto + │   │   │   │   ├── ReviewRequest.java + │   │   │   │   └── ReviewResponse.java + │   │   │   ├── entity + │   │   │   │   └── Review.java + │   │   │   ├── repository + │   │   │   │   └── ReviewRepository.java + │   │   │   └── service + │   │   │   └── ReviewService.java + │   │   └── sinitto + │   │   ├── controller + │   │   │   └── SinittoController.java + │   │   ├── dto + │   │   │   ├── SinittoBankRequest.java + │   │   │   ├── SinittoBankResponse.java + │   │   │   ├── SinittoRequest.java + │   │   │   └── SinittoResponse.java + │   │   ├── entity + │   │   │   └── SinittoBankInfo.java + │   │   ├── repository + │   │   │   └── SinittoBankInfoRepository.java + │   │   └── service + │   │   └── SinittoService.java + │   └── resources + │   ├── application-dev.properties + │   ├── application.properties + │   ├── keystore.p12 + │   ├── static + │   │   └── css + │   │   ├── dummy.css + │   │   ├── header.css + │   │   ├── login.css + │   │   └── point.css + │   └── templates + │   ├── dummy + │   │   └── login.html + │   └── point + │   ├── charge.html + │   ├── header.html + │   ├── login.html + │   └── withdraw.html + └── test + └── java + └── com + └── example + └── sinitto + ├── SinittoApplicationTests.java + ├── auth + │   ├── entity + │   │   └── KakaoTokenTest.java + │   ├── repository + │   │   └── KakaoTokenRepositoryTest.java + │   └── service + │   ├── KakaoApiServiceTest.java + │   ├── KakaoTokenServiceTest.java + │   └── TokenServiceTest.java + ├── callback + │   ├── entity + │   │   └── CallbackTest.java + │   ├── repository + │   │   └── CallbackRepositoryTest.java + │   ├── service + │   │   └── CallbackServiceTest.java + │   └── util + │   └── TwilioHelperTest.java + ├── guard + │   ├── entity + │   │   └── SeniorTest.java + │   ├── repository + │   │   └── SeniorRepositoryTest.java + │   └── service + │   └── GuardServiceTest.java + ├── guardGuideline + │   ├── entity + │   │   └── GuardGuidelineTest.java + │   ├── repository + │   │   └── GuardGuidelineRepositoryTest.java + │   └── service + │   └── GuardGuildelineServiceTest.java + ├── hellocall + │   ├── entity + │   │   ├── HelloCallTest.java + │   │   ├── HelloCallTimeLogTest.java + │   │   └── TimeSlotTest.java + │   ├── repository + │   │   ├── HelloCallRepositoryTest.java + │   │   ├── HelloCallTimeLogRepositoryTest.java + │   │   └── TimeSlotRepositoryTest.java + │   └── service + │   └── HelloCallServiceTest.java + ├── member + │   ├── entity + │   │   └── MemberTest.java + │   ├── repository + │   │   └── MemberRepositoryTest.java + │   └── service + │   ├── MemberServiceTest.java + │   └── MemberTokenServiceTest.java + ├── point + │   ├── entity + │   │   ├── PointLogTest.java + │   │   └── PointTest.java + │   └── service + │   ├── PointAdminServiceTest.java + │   └── PointServiceTest.java + ├── review + │   ├── entity + │   │   └── ReviewTest.java + │   └── service + │   └── ReviewServiceTest.java + └── sinitto + ├── entity + │   └── SinittoBankInfoTest.java + ├── repository + │   └── SinittoBankInfoRepositoryTest.java + └── service + └── SinittoServiceTest.java + +``` + +## 협업 과정 + +프론트엔드-백엔드 간 협업 과정 중 제공된 api를 연결하는 과정에서 소통에 어려움이 있었습니다. + +학업과 병행할 수 있는 카카오테크캠퍼스의 특성 상 조원들마다 개발을 진행하는 시간이 달라 실시간으로 +문제를 해결하기 어려운 문제점이 있었습니다. 또한 프론트엔드에서 백엔드 서버로 api를 통해 요청을 보냈을 때, +에러가 발생했을 경우 자세한 오류 메시지가 응답을 통해 나타나지 않았으며, 실제 오류 내용은 +백엔드 서버에 기록되는 문제가 있었습니다. + +또한 백엔드 담당 조원에게 질문을 하더라도 답변을 받기 전까지는 그동안 하던 작업을 +진행하지 못하는 문제가 생겨, 전체적인 개발 속도가 느려지는 문제가 있었습니다. + +이러한 방법을 어떻게 해결할 수 있을까 고민해보던 중, 가장 먼저 떠오른 방법은 '에러 코드가 생기면 +Slack의 채널에 전송을 하는 것' 이었습니다. + +백엔드 서버에서 자바 파일을 실행할 경우 nohup 명렬어를 통해 실행하는데, 이 때 자바 파일을 실행한 기록이 +out 확장자 파일에 남게 됩니다. 이 중에서 에러가 발생한 경우 'ERROR' 라는 단어가 포함이 되는데, +이러한 패턴을 확인하여 'ERROR'이 포함된 단어가 out 확장자 파일에 기록되면 Slack의 '서버-로그' 채널에 +전송되도록 하였습니다. 이를 통해 프론트엔드 개발자분들이 어떠한 오류인지 확인할 수 있게 하였습니다. + +그러나 한 가지 문제가 더 있었습니다. 개발 언어가 다르기 때문에 프론트엔드의 경우 자바에서 발생하는 +에러코드를 읽는데 어려움이 있다는 것이었습니다. 실제로 프론트엔드 개발자분들께 해당 에러코드에 대해 +이해가 되는지 물어봤을 때, 이해하기가 어려워 ChatGPT와 같은 LLM 모델에 에러코드를 복사하여 질문을 +한다는 답변을 받았습니다. + +이러한 불편함을 해결하기 위해, 현재 무료로 이용할 수 있는 LLM 모델인 Upstage의 'Solar-pro' 모델과 +연결을 하여 이를 해결하였습니다. 기존의 에러코드를 Slack에 바로 전송하는 대신, 해당 메시지를 +rest 요청을 통해 LLM 모델에 답변을 받고, 해당 답변을 포함하여 에러코드와 같이 보내도록 변경하였습니다. + +이러한 과정을 통하여 개발 과정에서의 소통의 어려움을 해결할 수 있었습니다. + +아래는 실제 개발 과정에서 사용된 내역입니다. 해당 내용과 관련된 쉘 스크립트는 백엔드 내부 쉘스크립트 모음 +(https://www.notion.so/3ce05a49e06046469bde14c12b8b9c00) 중 '서버에러 자동 공지 관련코드' 에서 +확인할 수 있습니다. +![image](https://github.com/user-attachments/assets/0f7ee6d3-f468-4f48-9e5f-91beaaeefb8a) + + From 62abaa68587640a43500312dffe33259a3024938 Mon Sep 17 00:00:00 2001 From: 2iedo <162278702+2iedo@users.noreply.github.com> Date: Thu, 14 Nov 2024 20:08:09 +0900 Subject: [PATCH 09/19] =?UTF-8?q?docs=20:=20=EB=AA=A9=EC=B0=A8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b3f331..934b337 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,8 @@ - [2. 포인트](#2-포인트) - [3. 콜백 서비스](#3-콜백-서비스) - [4. 안부 전화 서비스](#4-안부-전화-서비스) - +- [📂 디렉토리 구조](#디렉토리-구조) +- [👩‍👩‍👧‍👧 협업 과정](#협업-과정) ## 🚀 배포 주소 ### ✔️ Client [https://sinitto.life/](https://sinitto.life/) From d30221a31b3179e7cc6281c0201d5f2a1079f11b Mon Sep 17 00:00:00 2001 From: 2iedo <162278702+2iedo@users.noreply.github.com> Date: Thu, 14 Nov 2024 20:17:36 +0900 Subject: [PATCH 10/19] =?UTF-8?q?docs=20:=20=EB=94=94=EB=A0=89=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=20=EA=B0=84=EC=86=8C=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 388 ------------------------------------------------------ 1 file changed, 388 deletions(-) diff --git a/README.md b/README.md index 934b337..793c3f9 100644 --- a/README.md +++ b/README.md @@ -320,510 +320,122 @@ https://sinitto.site/admin/login ```c Team8_BE -├── build -│   ├── classes -│   │   └── java -│   │   └── main -│   │   └── com -│   │   └── example -│   │   └── sinitto -│   │   ├── SinittoApplication.class -│   │   ├── auth -│   │   │   ├── controller -│   │   │   │   └── AuthController.class -│   │   │   ├── dto -│   │   │   │   ├── KakaoTokenResponse.class -│   │   │   │   ├── KakaoUserResponse$KakaoAccount$Profile.class -│   │   │   │   ├── KakaoUserResponse$KakaoAccount.class -│   │   │   │   ├── KakaoUserResponse.class -│   │   │   │   ├── LoginResponse.class -│   │   │   │   ├── TokenRefreshRequest.class -│   │   │   │   └── TokenResponse.class -│   │   │   ├── entity -│   │   │   │   └── KakaoToken.class -│   │   │   ├── repository -│   │   │   │   └── KakaoTokenRepository.class -│   │   │   └── service -│   │   │   ├── KakaoApiService.class -│   │   │   ├── KakaoTokenService.class -│   │   │   └── TokenService.class -│   │   ├── callback -│   │   │   ├── controller -│   │   │   │   └── CallbackController.class -│   │   │   ├── dto -│   │   │   │   ├── CallbackForSinittoResponse.class -│   │   │   │   ├── CallbackResponse.class -│   │   │   │   └── CallbackUsageHistoryResponse.class -│   │   │   ├── entity -│   │   │   │   ├── Callback$Status.class -│   │   │   │   └── Callback.class -│   │   │   ├── repository -│   │   │   │   └── CallbackRepository.class -│   │   │   ├── service -│   │   │   │   └── CallbackService.class -│   │   │   └── util -│   │   │   └── TwilioHelper.class -│   │   ├── common -│   │   │   ├── config -│   │   │   │   ├── RedisConfig.class -│   │   │   │   ├── RestTemplateResponseErrorHandler.class -│   │   │   │   ├── SwaggerConfig.class -│   │   │   │   └── WebConfig.class -│   │   │   ├── dummy -│   │   │   │   └── InitialData.class -│   │   │   ├── exception -│   │   │   │   ├── AccessTokenExpiredException.class -│   │   │   │   ├── BadRequestException.class -│   │   │   │   ├── ConflictException.class -│   │   │   │   ├── ForbiddenException.class -│   │   │   │   ├── GlobalExceptionHandler.class -│   │   │   │   ├── InvalidJwtException.class -│   │   │   │   ├── NotFoundException.class -│   │   │   │   ├── RefreshTokenStolenException.class -│   │   │   │   └── UnauthorizedException.class -│   │   │   ├── interceptor -│   │   │   │   └── JwtInterceptor.class -│   │   │   ├── properties -│   │   │   │   ├── AdminProperties.class -│   │   │   │   ├── DummyProperties.class -│   │   │   │   └── KakaoProperties.class -│   │   │   └── service -│   │   │   ├── KakaoMessageService.class -│   │   │   └── SlackMessageService.class -│   │   ├── guard -│   │   │   ├── controller -│   │   │   │   └── GuardController.class -│   │   │   ├── dto -│   │   │   │   ├── GuardRequest.class -│   │   │   │   ├── GuardResponse.class -│   │   │   │   ├── SeniorRequest.class -│   │   │   │   └── SeniorResponse.class -│   │   │   ├── repository -│   │   │   │   └── SeniorRepository.class -│   │   │   └── service -│   │   │   └── GuardService.class -│   │   ├── guardGuideline -│   │   │   ├── controller -│   │   │   │   └── GuardGuidelineController.class -│   │   │   ├── dto -│   │   │   │   ├── GuardGuidelineRequest.class -│   │   │   │   └── GuardGuidelineResponse.class -│   │   │   ├── entity -│   │   │   │   ├── GuardGuideline$Type.class -│   │   │   │   └── GuardGuideline.class -│   │   │   ├── repository -│   │   │   │   └── GuardGuidelineRepository.class -│   │   │   └── service -│   │   │   └── GuardGuidelineService.class -│   │   ├── helloCall -│   │   │   ├── controller -│   │   │   │   └── HelloCallController.class -│   │   │   ├── dto -│   │   │   │   ├── HelloCallDetailResponse$TimeSlot.class -│   │   │   │   ├── HelloCallDetailResponse.class -│   │   │   │   ├── HelloCallDetailUpdateRequest$TimeSlot.class -│   │   │   │   ├── HelloCallDetailUpdateRequest.class -│   │   │   │   ├── HelloCallPriceRequest$TimeSlot.class -│   │   │   │   ├── HelloCallPriceRequest.class -│   │   │   │   ├── HelloCallPriceResponse.class -│   │   │   │   ├── HelloCallReportRequest.class -│   │   │   │   ├── HelloCallReportResponse.class -│   │   │   │   ├── HelloCallRequest$TimeSlot.class -│   │   │   │   ├── HelloCallRequest.class -│   │   │   │   ├── HelloCallResponse.class -│   │   │   │   ├── HelloCallTimeLogResponse.class -│   │   │   │   └── StringMessageResponse.class -│   │   │   ├── entity -│   │   │   │   ├── HelloCall$Status.class -│   │   │   │   ├── HelloCall.class -│   │   │   │   ├── HelloCallTimeLog.class -│   │   │   │   └── TimeSlot.class -│   │   │   ├── repository -│   │   │   │   ├── HelloCallRepository.class -│   │   │   │   ├── HelloCallTimeLogRepository.class -│   │   │   │   └── TimeSlotRepository.class -│   │   │   └── service -│   │   │   ├── HelloCallPriceService.class -│   │   │   └── HelloCallService.class -│   │   ├── member -│   │   │   ├── controller -│   │   │   │   ├── MemberAdminController.class -│   │   │   │   └── MemberController.class -│   │   │   ├── dto -│   │   │   │   ├── RegisterResponse.class -│   │   │   │   └── SignupRequest.class -│   │   │   ├── entity -│   │   │   │   ├── Member.class -│   │   │   │   └── Senior.class -│   │   │   ├── repository -│   │   │   │   └── MemberRepository.class -│   │   │   └── service -│   │   │   ├── MemberService.class -│   │   │   └── MemberTokenService.class -│   │   ├── point -│   │   │   ├── controller -│   │   │   │   ├── PointAdminController.class -│   │   │   │   └── PointController.class -│   │   │   ├── dto -│   │   │   │   ├── PointChargeResponse.class -│   │   │   │   ├── PointLogResponse.class -│   │   │   │   ├── PointLogWithBankInfo.class -│   │   │   │   ├── PointLogWithDepositMessage.class -│   │   │   │   ├── PointRequest.class -│   │   │   │   └── PointResponse.class -│   │   │   ├── entity -│   │   │   │   ├── Point.class -│   │   │   │   ├── PointLog$Content.class -│   │   │   │   ├── PointLog$Status.class -│   │   │   │   └── PointLog.class -│   │   │   ├── repository -│   │   │   │   ├── PointLogRepository.class -│   │   │   │   └── PointRepository.class -│   │   │   └── service -│   │   │   ├── PointAdminService.class -│   │   │   └── PointService.class -│   │   ├── review -│   │   │   ├── controller -│   │   │   │   └── ReviewController.class -│   │   │   ├── dto -│   │   │   │   ├── ReviewRequest.class -│   │   │   │   └── ReviewResponse.class -│   │   │   ├── entity -│   │   │   │   └── Review.class -│   │   │   ├── repository -│   │   │   │   └── ReviewRepository.class -│   │   │   └── service -│   │   │   └── ReviewService.class -│   │   └── sinitto -│   │   ├── controller -│   │   │   └── SinittoController.class -│   │   ├── dto -│   │   │   ├── SinittoBankRequest.class -│   │   │   ├── SinittoBankResponse.class -│   │   │   ├── SinittoRequest.class -│   │   │   └── SinittoResponse.class -│   │   ├── entity -│   │   │   └── SinittoBankInfo.class -│   │   ├── repository -│   │   │   └── SinittoBankInfoRepository.class -│   │   └── service -│   │   └── SinittoService.class -│   ├── generated -│   │   └── sources -│   │   ├── annotationProcessor -│   │   │   └── java -│   │   │   └── main -│   │   └── headers -│   │   └── java -│   │   └── main -│   ├── libs -│   │   ├── Team8_BE-0.0.1-SNAPSHOT-plain.jar -│   │   └── Team8_BE-0.0.1-SNAPSHOT.jar -│   ├── resolvedMainClassName -│   ├── resources -│   │   └── main -│   │   ├── application-dev.properties -│   │   ├── application.properties -│   │   ├── keystore.p12 -│   │   ├── static -│   │   │   └── css -│   │   │   ├── dummy.css -│   │   │   ├── header.css -│   │   │   ├── login.css -│   │   │   └── point.css -│   │   └── templates -│   │   ├── dummy -│   │   │   └── login.html -│   │   └── point -│   │   ├── charge.html -│   │   ├── header.html -│   │   ├── login.html -│   │   └── withdraw.html -│   └── tmp -│   ├── bootJar -│   │   └── MANIFEST.MF -│   ├── compileJava -│   │   └── previous-compilation-data.bin -│   └── jar -│   └── MANIFEST.MF -├── build.gradle -├── gradle -│   └── wrapper -│   ├── gradle-wrapper.jar -│   └── gradle-wrapper.properties -├── gradlew -├── gradlew.bat -├── settings.gradle └── src ├── main │   ├── java │   │   └── com │   │   └── example │   │   └── sinitto - │   │   ├── SinittoApplication.java │   │   ├── auth │   │   │   ├── controller - │   │   │   │   └── AuthController.java │   │   │   ├── dto - │   │   │   │   ├── KakaoTokenResponse.java - │   │   │   │   ├── KakaoUserResponse.java - │   │   │   │   ├── LoginResponse.java - │   │   │   │   ├── TokenRefreshRequest.java - │   │   │   │   └── TokenResponse.java │   │   │   ├── entity - │   │   │   │   └── KakaoToken.java │   │   │   ├── repository - │   │   │   │   └── KakaoTokenRepository.java │   │   │   └── service - │   │   │   ├── KakaoApiService.java - │   │   │   ├── KakaoTokenService.java - │   │   │   └── TokenService.java │   │   ├── callback │   │   │   ├── controller - │   │   │   │   └── CallbackController.java │   │   │   ├── dto - │   │   │   │   ├── CallbackForSinittoResponse.java - │   │   │   │   ├── CallbackResponse.java - │   │   │   │   └── CallbackUsageHistoryResponse.java │   │   │   ├── entity - │   │   │   │   └── Callback.java │   │   │   ├── repository - │   │   │   │   └── CallbackRepository.java │   │   │   ├── service - │   │   │   │   └── CallbackService.java │   │   │   └── util - │   │   │   └── TwilioHelper.java │   │   ├── common │   │   │   ├── config - │   │   │   │   ├── RedisConfig.java - │   │   │   │   ├── RestTemplateResponseErrorHandler.java - │   │   │   │   ├── SwaggerConfig.java - │   │   │   │   └── WebConfig.java │   │   │   ├── dummy - │   │   │   │   └── InitialData.java │   │   │   ├── exception - │   │   │   │   ├── AccessTokenExpiredException.java - │   │   │   │   ├── BadRequestException.java - │   │   │   │   ├── ConflictException.java - │   │   │   │   ├── ForbiddenException.java - │   │   │   │   ├── GlobalExceptionHandler.java - │   │   │   │   ├── InvalidJwtException.java - │   │   │   │   ├── NotFoundException.java - │   │   │   │   ├── RefreshTokenStolenException.java - │   │   │   │   └── UnauthorizedException.java │   │   │   ├── interceptor - │   │   │   │   └── JwtInterceptor.java │   │   │   ├── properties - │   │   │   │   ├── AdminProperties.java - │   │   │   │   ├── DummyProperties.java - │   │   │   │   └── KakaoProperties.java │   │   │   └── service - │   │   │   ├── KakaoMessageService.java - │   │   │   └── SlackMessageService.java │   │   ├── guard │   │   │   ├── controller - │   │   │   │   └── GuardController.java │   │   │   ├── dto - │   │   │   │   ├── GuardRequest.java - │   │   │   │   ├── GuardResponse.java - │   │   │   │   ├── SeniorRequest.java - │   │   │   │   └── SeniorResponse.java │   │   │   ├── repository - │   │   │   │   └── SeniorRepository.java │   │   │   └── service - │   │   │   └── GuardService.java │   │   ├── guardGuideline │   │   │   ├── controller - │   │   │   │   └── GuardGuidelineController.java │   │   │   ├── dto - │   │   │   │   ├── GuardGuidelineRequest.java - │   │   │   │   └── GuardGuidelineResponse.java │   │   │   ├── entity - │   │   │   │   └── GuardGuideline.java │   │   │   ├── repository - │   │   │   │   └── GuardGuidelineRepository.java │   │   │   └── service - │   │   │   └── GuardGuidelineService.java │   │   ├── helloCall │   │   │   ├── controller - │   │   │   │   └── HelloCallController.java │   │   │   ├── dto - │   │   │   │   ├── HelloCallDetailResponse.java - │   │   │   │   ├── HelloCallDetailUpdateRequest.java - │   │   │   │   ├── HelloCallPriceRequest.java - │   │   │   │   ├── HelloCallPriceResponse.java - │   │   │   │   ├── HelloCallReportRequest.java - │   │   │   │   ├── HelloCallReportResponse.java - │   │   │   │   ├── HelloCallRequest.java - │   │   │   │   ├── HelloCallResponse.java - │   │   │   │   ├── HelloCallTimeLogResponse.java - │   │   │   │   └── StringMessageResponse.java │   │   │   ├── entity - │   │   │   │   ├── HelloCall.java - │   │   │   │   ├── HelloCallTimeLog.java - │   │   │   │   └── TimeSlot.java │   │   │   ├── repository - │   │   │   │   ├── HelloCallRepository.java - │   │   │   │   ├── HelloCallTimeLogRepository.java - │   │   │   │   └── TimeSlotRepository.java │   │   │   └── service - │   │   │   ├── HelloCallPriceService.java - │   │   │   └── HelloCallService.java │   │   ├── member │   │   │   ├── controller - │   │   │   │   ├── MemberAdminController.java - │   │   │   │   └── MemberController.java │   │   │   ├── dto - │   │   │   │   ├── RegisterResponse.java - │   │   │   │   └── SignupRequest.java │   │   │   ├── entity - │   │   │   │   ├── Member.java - │   │   │   │   └── Senior.java │   │   │   ├── repository - │   │   │   │   └── MemberRepository.java │   │   │   └── service - │   │   │   ├── MemberService.java - │   │   │   └── MemberTokenService.java │   │   ├── point │   │   │   ├── controller - │   │   │   │   ├── PointAdminController.java - │   │   │   │   └── PointController.java │   │   │   ├── dto - │   │   │   │   ├── PointChargeResponse.java - │   │   │   │   ├── PointLogResponse.java - │   │   │   │   ├── PointLogWithBankInfo.java - │   │   │   │   ├── PointLogWithDepositMessage.java - │   │   │   │   ├── PointRequest.java - │   │   │   │   └── PointResponse.java │   │   │   ├── entity - │   │   │   │   ├── Point.java - │   │   │   │   └── PointLog.java │   │   │   ├── repository - │   │   │   │   ├── PointLogRepository.java - │   │   │   │   └── PointRepository.java │   │   │   └── service - │   │   │   ├── PointAdminService.java - │   │   │   └── PointService.java │   │   ├── review │   │   │   ├── controller - │   │   │   │   └── ReviewController.java │   │   │   ├── dto - │   │   │   │   ├── ReviewRequest.java - │   │   │   │   └── ReviewResponse.java │   │   │   ├── entity - │   │   │   │   └── Review.java │   │   │   ├── repository - │   │   │   │   └── ReviewRepository.java │   │   │   └── service - │   │   │   └── ReviewService.java │   │   └── sinitto │   │   ├── controller - │   │   │   └── SinittoController.java │   │   ├── dto - │   │   │   ├── SinittoBankRequest.java - │   │   │   ├── SinittoBankResponse.java - │   │   │   ├── SinittoRequest.java - │   │   │   └── SinittoResponse.java │   │   ├── entity - │   │   │   └── SinittoBankInfo.java │   │   ├── repository - │   │   │   └── SinittoBankInfoRepository.java │   │   └── service - │   │   └── SinittoService.java │   └── resources │   ├── application-dev.properties │   ├── application.properties │   ├── keystore.p12 │   ├── static │   │   └── css - │   │   ├── dummy.css - │   │   ├── header.css - │   │   ├── login.css - │   │   └── point.css │   └── templates │   ├── dummy - │   │   └── login.html │   └── point - │   ├── charge.html - │   ├── header.html - │   ├── login.html - │   └── withdraw.html └── test └── java └── com └── example └── sinitto - ├── SinittoApplicationTests.java ├── auth │   ├── entity - │   │   └── KakaoTokenTest.java │   ├── repository - │   │   └── KakaoTokenRepositoryTest.java │   └── service - │   ├── KakaoApiServiceTest.java - │   ├── KakaoTokenServiceTest.java - │   └── TokenServiceTest.java ├── callback │   ├── entity - │   │   └── CallbackTest.java │   ├── repository - │   │   └── CallbackRepositoryTest.java │   ├── service - │   │   └── CallbackServiceTest.java │   └── util - │   └── TwilioHelperTest.java ├── guard │   ├── entity - │   │   └── SeniorTest.java │   ├── repository - │   │   └── SeniorRepositoryTest.java │   └── service - │   └── GuardServiceTest.java ├── guardGuideline │   ├── entity - │   │   └── GuardGuidelineTest.java │   ├── repository - │   │   └── GuardGuidelineRepositoryTest.java │   └── service - │   └── GuardGuildelineServiceTest.java ├── hellocall │   ├── entity - │   │   ├── HelloCallTest.java - │   │   ├── HelloCallTimeLogTest.java - │   │   └── TimeSlotTest.java │   ├── repository - │   │   ├── HelloCallRepositoryTest.java - │   │   ├── HelloCallTimeLogRepositoryTest.java - │   │   └── TimeSlotRepositoryTest.java │   └── service - │   └── HelloCallServiceTest.java ├── member │   ├── entity - │   │   └── MemberTest.java │   ├── repository - │   │   └── MemberRepositoryTest.java │   └── service - │   ├── MemberServiceTest.java - │   └── MemberTokenServiceTest.java ├── point │   ├── entity - │   │   ├── PointLogTest.java - │   │   └── PointTest.java │   └── service - │   ├── PointAdminServiceTest.java - │   └── PointServiceTest.java ├── review │   ├── entity - │   │   └── ReviewTest.java │   └── service - │   └── ReviewServiceTest.java └── sinitto ├── entity - │   └── SinittoBankInfoTest.java ├── repository - │   └── SinittoBankInfoRepositoryTest.java └── service - └── SinittoServiceTest.java ``` From 99afb577caa842934193595020a379ec133f7bbf Mon Sep 17 00:00:00 2001 From: gitjiho Date: Thu, 14 Nov 2024 21:12:49 +0900 Subject: [PATCH 11/19] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=8B=A4=ED=96=89=20=EA=B0=80=EC=9D=B4=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) diff --git a/README.md b/README.md index fecaef0..fe2ac6c 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,115 @@ https://sinitto.site/admin/login ![image](https://github.com/user-attachments/assets/03da2737-f945-4803-b325-3ca831720b56) ![image](https://github.com/user-attachments/assets/bc12fbc3-4111-4072-a62d-682360e5a186) +## **프로젝트 실행 가이드** + +아래의 단계를 따라 프로젝트를 실행할 수 있습니다. +> 우분투 기준으로 작성되었습니다. + +### **필수 소프트웨어** + +- **Java 21** +- **Gradle** +- **Redis** +- **Git** + +### **1. 프로젝트 클론** + +GitHub에서 프로젝트를 클론합니다 + +``` +git clone https://github.com/kakao-tech-campus-2nd-step3/Team8_BE.git +cd Team8_BE +``` + +### **2. 환경 설정** + +**`application-dev.properties`** 파일에 아래와 같은 설정을 추가해야 합니다: + +- **Kakao API 설정**: Kakao 로그인 및 결제 URL 관련 정보 +- **Redis 설정**: Redis 서버 연결 정보 +- **MySQL 설정**: 데이터베이스 연결 정보 +- **JWT 설정**: 비밀 키 등 인증 관련 정보 +- **SSL 설정**: 서버 SSL 인증서 경로 및 설정 +- **Slack 설정**: 알림 관련 설정 +- **Admin 설정**: 어드민 계정 설정 + +**`application-dev.properties`** 예시: + +``` +# Kakao API 설정 +kakao.clientId=YOUR_KAKAO_CLIENT_ID +kakao.devRedirectUri=YOUR_LOCAL_REDIRECT_URI +kakao.redirectUri=YOUR_PROD_REDIRECT_URI +kakao.frontUri=YOUR_FRONT_URI +kakao.Pay-url=YOUR_KAKAO_PAY_URL + +# JWT 설정 +jwt.secret=YOUR_JWT_SECRET_KEY + +# Redis 설정 +spring.data.redis.host=YOUR_REDIS_HOST +spring.data.redis.port=YOUR_REDIS_PORT +spring.data.redis.password=YOUR_REDIS_PASSWORD + +# MySQL 설정 +spring.datasource.url=YOUR_MYSQL_URL +spring.datasource.username=YOUR_DB_USERNAME +spring.datasource.password=YOUR_DB_PASSWORD +spring.jpa.hibernate.ddl-auto=update + +# SSL 설정 +server.ssl.key-store=YOUR_SSL_KEYSTORE_PATH +server.ssl.key-store-password=YOUR_KEYSTORE_PASSWORD +server.ssl.key-store-type=PKCS12 + +# Slack 설정 +slack.notice.webhook.url=YOUR_SLACK_WEBHOOK_URL +slack.charge.request.url=YOUR_SLACK_CHARGE_REQUEST_URL +slack.withdraw.request.url=YOUR_SLACK_WITHDRAW_REQUEST_URL + +# Admin 설정 +admin.adminEmail=YOUR_ADMIN_EMAIL +admin.adminPassword=YOUR_ADMIN_PASSWORD + +# 기타 설정 +kakao.bank-name=YOUR_BANK_NAME +kakao.account-number=YOUR_ACCOUNT_NUMBER +kakao.name=YOUR_KAKAO_NAME +kakao.front-uri-without-https=YOUR_FRONT_URI_WITHOUT_HTTPS +``` + +### **3. 의존성 설치** + +프로젝트 의존성을 설치합니다. + +``` +./gradlew build +``` + +### **4. Redis 서버 실행** + +Redis 서버를 실행합니다. + +``` +redis-server +``` + +### **5. 애플리케이션 실행** + +애플리케이션을 실행하는 방법에는 두 가지가 있습니다. + +1. **Gradle로 애플리케이션 실행** + ``` + ./gradlew bootRun + ``` + +2. **JAR 파일을 실행** + + ``` + ./gradlew bootJar + java -jar build/libs/Team8_BE-0.0.1-SNAPSHOT.jar + ``` ## 🤔 시니또가 무엇인가요? From 8c7960f87ee9b59e4135d986a90ccb18577a8b27 Mon Sep 17 00:00:00 2001 From: gitjiho Date: Thu, 14 Nov 2024 21:23:23 +0900 Subject: [PATCH 12/19] =?UTF-8?q?fix:=20=EB=B0=B0=ED=8F=AC=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EC=BD=94=EB=93=9C=20=EB=A7=81=ED=81=AC=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f369936..755cf54 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ https://sinitto.site/admin/login image > [!NOTE] -> 백엔드 내부 쉘스크립트 모음 https://www.notion.so/3ce05a49e06046469bde14c12b8b9c00 +> 백엔드 내부 쉘스크립트 모음 https://curse-plastic-d90.notion.site/3ce05a49e06046469bde14c12b8b9c00 ## 서비스 아키텍처 From 2775b64ffb8dc161e52769f231e2e02df12160b4 Mon Sep 17 00:00:00 2001 From: JIHO LEE <161289673+GitJIHO@users.noreply.github.com> Date: Thu, 14 Nov 2024 22:07:29 +0900 Subject: [PATCH 13/19] =?UTF-8?q?DOCS:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=8B=A4=ED=96=89=EA=B0=80=EC=9D=B4=EB=93=9C=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 78 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 755cf54..e71c83e 100644 --- a/README.md +++ b/README.md @@ -44,44 +44,6 @@ https://sinitto.site/admin/login **비밀번호** `admin123` - -## 👥 팀원 - -|Frontend|Frontend|Frontend| -|:------:|:------:|:------:| -|[](https://github.com/Dobbymin)|[](https://github.com/Diwoni)|[](https://github.com/JYN523)| -|[김강민](https://github.com/Dobbymin)|[정지원](https://github.com/Diwoni)|[제유나](https://github.com/JYN523)| - -|Backend|Backend|Backend|Backend| -|:------:|:------:|:------:|:------:| -|[](https://github.com/zzoe2346)|[](https://github.com/GitJIHO)|[](https://github.com/2iedo)|[](https://github.com/eunsoni)| -|[정성훈](https://github.com/zzoe2346)|[이지호](https://github.com/GitJIHO)|[이도훈](https://github.com/2iedo)|[김은선](https://github.com/eunsoni)| - -## ⚒️ 기술 스텍 - -### Frontend -image - - -### Backend -image - -> [!NOTE] -> 백엔드 내부 쉘스크립트 모음 https://curse-plastic-d90.notion.site/3ce05a49e06046469bde14c12b8b9c00 - -## 서비스 아키텍처 - -![Service Architecture](https://github.com/user-attachments/assets/a9ad53f3-9b63-433d-b4a7-1afbbfd21e90) - -## ERD -![image](https://github.com/user-attachments/assets/d638bf78-4adc-4a43-96f2-e30cd04ea7b3) - -## Use Case Diagram -![image](https://github.com/user-attachments/assets/0259f679-b13f-496a-8261-6e6df0abed50) -![image](https://github.com/user-attachments/assets/71999d87-3d83-4019-b46b-1c2abc54ccc3) -![image](https://github.com/user-attachments/assets/03da2737-f945-4803-b325-3ca831720b56) -![image](https://github.com/user-attachments/assets/bc12fbc3-4111-4072-a62d-682360e5a186) - ## **프로젝트 실행 가이드** 아래의 단계를 따라 프로젝트를 실행할 수 있습니다. @@ -193,6 +155,46 @@ redis-server ``` + + +## 👥 팀원 + +|Frontend|Frontend|Frontend| +|:------:|:------:|:------:| +|[](https://github.com/Dobbymin)|[](https://github.com/Diwoni)|[](https://github.com/JYN523)| +|[김강민](https://github.com/Dobbymin)|[정지원](https://github.com/Diwoni)|[제유나](https://github.com/JYN523)| + +|Backend|Backend|Backend|Backend| +|:------:|:------:|:------:|:------:| +|[](https://github.com/zzoe2346)|[](https://github.com/GitJIHO)|[](https://github.com/2iedo)|[](https://github.com/eunsoni)| +|[정성훈](https://github.com/zzoe2346)|[이지호](https://github.com/GitJIHO)|[이도훈](https://github.com/2iedo)|[김은선](https://github.com/eunsoni)| + +## ⚒️ 기술 스텍 + +### Frontend +image + + +### Backend +image + +> [!NOTE] +> 백엔드 내부 쉘스크립트 모음 https://curse-plastic-d90.notion.site/3ce05a49e06046469bde14c12b8b9c00 + +## 서비스 아키텍처 + +![Service Architecture](https://github.com/user-attachments/assets/a9ad53f3-9b63-433d-b4a7-1afbbfd21e90) + +## ERD +![image](https://github.com/user-attachments/assets/d638bf78-4adc-4a43-96f2-e30cd04ea7b3) + +## Use Case Diagram +![image](https://github.com/user-attachments/assets/0259f679-b13f-496a-8261-6e6df0abed50) +![image](https://github.com/user-attachments/assets/71999d87-3d83-4019-b46b-1c2abc54ccc3) +![image](https://github.com/user-attachments/assets/03da2737-f945-4803-b325-3ca831720b56) +![image](https://github.com/user-attachments/assets/bc12fbc3-4111-4072-a62d-682360e5a186) + + ## 🤔 시니또가 무엇인가요? ‘시니또’는 어르신을 뜻하는 ‘시니어’와 비밀 친구를 뜻하는 ‘마니또’를 합친 단어로, From d1c429d1497601f1fa2a9c9080913539b8bbecac Mon Sep 17 00:00:00 2001 From: JIHO LEE <161289673+GitJIHO@users.noreply.github.com> Date: Thu, 14 Nov 2024 22:08:22 +0900 Subject: [PATCH 14/19] =?UTF-8?q?DOCS:=20=EB=B3=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e71c83e..bcf9057 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ https://sinitto.site/admin/login **비밀번호** `admin123` -## **프로젝트 실행 가이드** +## ✨ **프로젝트 실행 가이드** 아래의 단계를 따라 프로젝트를 실행할 수 있습니다. > 우분투 기준으로 작성되었습니다. From 7e91a09c93b59380d4717d7e2e58c88deb069a2d Mon Sep 17 00:00:00 2001 From: JIHO LEE <161289673+GitJIHO@users.noreply.github.com> Date: Thu, 14 Nov 2024 22:34:00 +0900 Subject: [PATCH 15/19] =?UTF-8?q?=08DOCS:=20=EA=B4=80=EB=A6=AC=EC=9E=90=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B0=9C=EB=B0=9C=EC=9E=90=20=ED=8E=B8=EC=9D=98?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bcf9057..c69e989 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,9 @@ https://sinitto.site/admin/login **이메일** `admin@kakao.com` **비밀번호** `admin123` +### ✔️ Slack +[https://join.slack.com/t/sinitto/shared_invite](https://join.slack.com/t/sinitto/shared_invite/zt-2uqws45gg-bsPq8cuH2iQV6Jk1Y3Zglw) + ## ✨ **프로젝트 실행 가이드** @@ -549,8 +552,32 @@ Team8_BE └── service ``` +## 관리자 및 개발자 편의기능 + +### 1. 서버 업데이트(무중단 배포)시 Slack 채널을 통한 알림기능 +> Github Action을 통해 서버 업데이트 트리거가 발생하면, 서버 무중단배포 쉘스크립트가 작동하며 +슬랙 페이지 서버-로그 채널에서 백엔드 서버 재부팅 로그 (하단 50줄), 무중단 배포 관련 결과를 제공합니다. +> #### 슬랙 초대링크 : [https://join.slack.com/t/sinitto/shared_invite](https://join.slack.com/t/sinitto/shared_invite/zt-2uqws45gg-bsPq8cuH2iQV6Jk1Y3Zglw) + +![image](https://github.com/user-attachments/assets/c5202037-a313-443a-b0fa-700e372344b6) + +### 2. 사용자의 포인트 충전 및 출금 요청시, Slack 채널을 통한 알림기능 +> 보호자의 충전, 시니또의 출금 요청이 들어오면 관리자의 원활한 확인을 위해 슬랙에 메시지를 전송하고, 버튼을 통해 어드민페이지로 접속할 수 있습니다. +> #### 슬랙 초대링크 : [https://join.slack.com/t/sinitto/shared_invite](https://join.slack.com/t/sinitto/shared_invite/zt-2uqws45gg-bsPq8cuH2iQV6Jk1Y3Zglw) + +![image](https://github.com/user-attachments/assets/b5927b13-08a8-4345-b31a-cb0e42896075) + +### 3. 더미데이터 로그인기능 +> 개발 과정에서의 개발자들의 실제 더미데이터 기반 웹 사용 및 테스트를 위해, Server Side Rendering 방식의 더미데이터 로그인 페이지를 구현하였습니다. +서버에 저장된 더미데이터로만 로그인이 가능하며, 개발환경(로컬환경에서 프론트 서버가 열려있을 시) 및 배포서버로 로그인이 가능하고, +로그인시 해당 더미데이터 유저의 JWT(AccessToken 및 RefreshToken)을 발급하여 함께 전송합니다 +> #### 더미데이터 로그인 페이지 : https://sinitto.site/dummy [비밀번호 : 1234] + +![image](https://github.com/user-attachments/assets/2784c5df-d42b-4aae-8067-ff84148e35f7) +![image](https://github.com/user-attachments/assets/c0cac5df-2214-4004-b7dd-043971fe4274) + -## 협업 과정 +## 협업 효율 프론트엔드-백엔드 간 협업 과정 중 제공된 api를 연결하는 과정에서 소통에 어려움이 있었습니다. From 99508040db8a07c43af7b8293fc8081d5a190998 Mon Sep 17 00:00:00 2001 From: JIHO LEE <161289673+GitJIHO@users.noreply.github.com> Date: Thu, 14 Nov 2024 22:38:47 +0900 Subject: [PATCH 16/19] =?UTF-8?q?DOCS:=20=EC=B2=A8=EB=B6=80=EC=82=AC?= =?UTF-8?q?=EC=A7=84=20=EC=82=AC=EC=9D=B4=EC=A6=88=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c69e989..f1ac0f2 100644 --- a/README.md +++ b/README.md @@ -572,9 +572,9 @@ Team8_BE 서버에 저장된 더미데이터로만 로그인이 가능하며, 개발환경(로컬환경에서 프론트 서버가 열려있을 시) 및 배포서버로 로그인이 가능하고, 로그인시 해당 더미데이터 유저의 JWT(AccessToken 및 RefreshToken)을 발급하여 함께 전송합니다 > #### 더미데이터 로그인 페이지 : https://sinitto.site/dummy [비밀번호 : 1234] - -![image](https://github.com/user-attachments/assets/2784c5df-d42b-4aae-8067-ff84148e35f7) -![image](https://github.com/user-attachments/assets/c0cac5df-2214-4004-b7dd-043971fe4274) +> +image-3 +image-3 ## 협업 효율 From 33a8930e248aa1498209e33c84188566998d32f1 Mon Sep 17 00:00:00 2001 From: JIHO LEE <161289673+GitJIHO@users.noreply.github.com> Date: Thu, 14 Nov 2024 22:56:18 +0900 Subject: [PATCH 17/19] =?UTF-8?q?DOCS:=20=EB=AA=A9=EC=B0=A8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f1ac0f2..8f11a0c 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,8 @@ - [3. 콜백 서비스](#3-콜백-서비스) - [4. 안부 전화 서비스](#4-안부-전화-서비스) - [📂 디렉토리 구조](#디렉토리-구조) -- [👩‍👩‍👧‍👧 협업 과정](#협업-과정) +- [🧑‍💻 관리자 및 개발자 편의기능](#관리자-및-개발자-편의기능) +- [👩‍👩‍👧‍👧 협업 효율](#협업-효율) ## 🚀 배포 주소 ### ✔️ Client [https://sinitto.life/](https://sinitto.life/) @@ -430,7 +431,7 @@ redis-server ’보호자‘는 ’서비스 이용내역‘ 페이지에서 완료 대기 상태인 안부전화 서비스를 완료상태로 변경할 수 있습니다. -## 디렉토리 구조 +## 📂 디렉토리 구조 ```c Team8_BE @@ -552,7 +553,7 @@ Team8_BE └── service ``` -## 관리자 및 개발자 편의기능 +## 🧑‍💻 관리자 및 개발자 편의기능 ### 1. 서버 업데이트(무중단 배포)시 Slack 채널을 통한 알림기능 > Github Action을 통해 서버 업데이트 트리거가 발생하면, 서버 무중단배포 쉘스크립트가 작동하며 @@ -577,7 +578,7 @@ Team8_BE image-3 -## 협업 효율 +## 👩‍👩‍👧‍👧 협업 효율 프론트엔드-백엔드 간 협업 과정 중 제공된 api를 연결하는 과정에서 소통에 어려움이 있었습니다. From 62a806cecee59b19581e31cf4cef31cb56e051d5 Mon Sep 17 00:00:00 2001 From: JIHO LEE <161289673+GitJIHO@users.noreply.github.com> Date: Thu, 14 Nov 2024 22:58:26 +0900 Subject: [PATCH 18/19] =?UTF-8?q?DOCS:=20=EB=AA=A9=EC=B0=A8=20=ED=95=98?= =?UTF-8?q?=EC=9D=B4=ED=8D=BC=EB=A7=81=ED=81=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8f11a0c..dcb4318 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,9 @@ - [2. 포인트](#2-포인트) - [3. 콜백 서비스](#3-콜백-서비스) - [4. 안부 전화 서비스](#4-안부-전화-서비스) -- [📂 디렉토리 구조](#디렉토리-구조) -- [🧑‍💻 관리자 및 개발자 편의기능](#관리자-및-개발자-편의기능) -- [👩‍👩‍👧‍👧 협업 효율](#협업-효율) +- [📂 디렉토리 구조](#-디렉토리-구조) +- [🧑‍💻 관리자 및 개발자 편의기능](#-관리자-및-개발자-편의기능) +- [👩‍👩‍👧‍👧 협업 효율](#-협업-효율) ## 🚀 배포 주소 ### ✔️ Client [https://sinitto.life/](https://sinitto.life/) From acddb532d07926257b03a752be328d192edf16cf Mon Sep 17 00:00:00 2001 From: Seonghun Jeong <119427233+zzoe2346@users.noreply.github.com> Date: Thu, 14 Nov 2024 23:56:20 +0900 Subject: [PATCH 19/19] =?UTF-8?q?docs:=20=EB=94=94=EB=A0=89=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EA=B5=AC=EC=A1=B0=20=EC=95=84=EB=9E=98=EB=A1=9C=20?= =?UTF-8?q?=EC=98=AE=EA=B9=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 126 +++++++++++++++++++++++++++--------------------------- 1 file changed, 64 insertions(+), 62 deletions(-) diff --git a/README.md b/README.md index dcb4318..e0ac9ba 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,10 @@ - [2. 포인트](#2-포인트) - [3. 콜백 서비스](#3-콜백-서비스) - [4. 안부 전화 서비스](#4-안부-전화-서비스) -- [📂 디렉토리 구조](#-디렉토리-구조) - [🧑‍💻 관리자 및 개발자 편의기능](#-관리자-및-개발자-편의기능) - [👩‍👩‍👧‍👧 협업 효율](#-협업-효율) +- [📂 디렉토리 구조](#-디렉토리-구조) + ## 🚀 배포 주소 ### ✔️ Client [https://sinitto.life/](https://sinitto.life/) @@ -431,6 +432,68 @@ redis-server ’보호자‘는 ’서비스 이용내역‘ 페이지에서 완료 대기 상태인 안부전화 서비스를 완료상태로 변경할 수 있습니다. + +## 🧑‍💻 관리자 및 개발자 편의기능 + +### 1. 서버 업데이트(무중단 배포)시 Slack 채널을 통한 알림기능 +> Github Action을 통해 서버 업데이트 트리거가 발생하면, 서버 무중단배포 쉘스크립트가 작동하며 +슬랙 페이지 서버-로그 채널에서 백엔드 서버 재부팅 로그 (하단 50줄), 무중단 배포 관련 결과를 제공합니다. +> #### 슬랙 초대링크 : [https://join.slack.com/t/sinitto/shared_invite](https://join.slack.com/t/sinitto/shared_invite/zt-2uqws45gg-bsPq8cuH2iQV6Jk1Y3Zglw) + +![image](https://github.com/user-attachments/assets/c5202037-a313-443a-b0fa-700e372344b6) + +### 2. 사용자의 포인트 충전 및 출금 요청시, Slack 채널을 통한 알림기능 +> 보호자의 충전, 시니또의 출금 요청이 들어오면 관리자의 원활한 확인을 위해 슬랙에 메시지를 전송하고, 버튼을 통해 어드민페이지로 접속할 수 있습니다. +> #### 슬랙 초대링크 : [https://join.slack.com/t/sinitto/shared_invite](https://join.slack.com/t/sinitto/shared_invite/zt-2uqws45gg-bsPq8cuH2iQV6Jk1Y3Zglw) + +![image](https://github.com/user-attachments/assets/b5927b13-08a8-4345-b31a-cb0e42896075) + +### 3. 더미데이터 로그인기능 +> 개발 과정에서의 개발자들의 실제 더미데이터 기반 웹 사용 및 테스트를 위해, Server Side Rendering 방식의 더미데이터 로그인 페이지를 구현하였습니다. +서버에 저장된 더미데이터로만 로그인이 가능하며, 개발환경(로컬환경에서 프론트 서버가 열려있을 시) 및 배포서버로 로그인이 가능하고, +로그인시 해당 더미데이터 유저의 JWT(AccessToken 및 RefreshToken)을 발급하여 함께 전송합니다 +> #### 더미데이터 로그인 페이지 : https://sinitto.site/dummy [비밀번호 : 1234] +> +image-3 +image-3 + + +## 👩‍👩‍👧‍👧 협업 효율 + +프론트엔드-백엔드 간 협업 과정 중 제공된 api를 연결하는 과정에서 소통에 어려움이 있었습니다. + +학업과 병행할 수 있는 카카오테크캠퍼스의 특성 상 조원들마다 개발을 진행하는 시간이 달라 실시간으로 +문제를 해결하기 어려운 문제점이 있었습니다. 또한 프론트엔드에서 백엔드 서버로 api를 통해 요청을 보냈을 때, +에러가 발생했을 경우 자세한 오류 메시지가 응답을 통해 나타나지 않았으며, 실제 오류 내용은 +백엔드 서버에 기록되는 문제가 있었습니다. + +또한 백엔드 담당 조원에게 질문을 하더라도 답변을 받기 전까지는 그동안 하던 작업을 +진행하지 못하는 문제가 생겨, 전체적인 개발 속도가 느려지는 문제가 있었습니다. + +이러한 방법을 어떻게 해결할 수 있을까 고민해보던 중, 가장 먼저 떠오른 방법은 '에러 코드가 생기면 +Slack의 채널에 전송을 하는 것' 이었습니다. + +백엔드 서버에서 자바 파일을 실행할 경우 nohup 명렬어를 통해 실행하는데, 이 때 자바 파일을 실행한 기록이 +out 확장자 파일에 남게 됩니다. 이 중에서 에러가 발생한 경우 'ERROR' 라는 단어가 포함이 되는데, +이러한 패턴을 확인하여 'ERROR'이 포함된 단어가 out 확장자 파일에 기록되면 Slack의 '서버-로그' 채널에 +전송되도록 하였습니다. 이를 통해 프론트엔드 개발자분들이 어떠한 오류인지 확인할 수 있게 하였습니다. + +그러나 한 가지 문제가 더 있었습니다. 개발 언어가 다르기 때문에 프론트엔드의 경우 자바에서 발생하는 +에러코드를 읽는데 어려움이 있다는 것이었습니다. 실제로 프론트엔드 개발자분들께 해당 에러코드에 대해 +이해가 되는지 물어봤을 때, 이해하기가 어려워 ChatGPT와 같은 LLM 모델에 에러코드를 복사하여 질문을 +한다는 답변을 받았습니다. + +이러한 불편함을 해결하기 위해, 현재 무료로 이용할 수 있는 LLM 모델인 Upstage의 'Solar-pro' 모델과 +연결을 하여 이를 해결하였습니다. 기존의 에러코드를 Slack에 바로 전송하는 대신, 해당 메시지를 +rest 요청을 통해 LLM 모델에 답변을 받고, 해당 답변을 포함하여 에러코드와 같이 보내도록 변경하였습니다. + +이러한 과정을 통하여 개발 과정에서의 소통의 어려움을 해결할 수 있었습니다. + +아래는 실제 개발 과정에서 사용된 내역입니다. 해당 내용과 관련된 쉘 스크립트는 백엔드 내부 쉘스크립트 모음 +(https://www.notion.so/3ce05a49e06046469bde14c12b8b9c00) 중 '서버에러 자동 공지 관련코드' 에서 +확인할 수 있습니다. +![image](https://github.com/user-attachments/assets/0f7ee6d3-f468-4f48-9e5f-91beaaeefb8a) + ## 📂 디렉토리 구조 ```c @@ -553,65 +616,4 @@ Team8_BE └── service ``` -## 🧑‍💻 관리자 및 개발자 편의기능 - -### 1. 서버 업데이트(무중단 배포)시 Slack 채널을 통한 알림기능 -> Github Action을 통해 서버 업데이트 트리거가 발생하면, 서버 무중단배포 쉘스크립트가 작동하며 -슬랙 페이지 서버-로그 채널에서 백엔드 서버 재부팅 로그 (하단 50줄), 무중단 배포 관련 결과를 제공합니다. -> #### 슬랙 초대링크 : [https://join.slack.com/t/sinitto/shared_invite](https://join.slack.com/t/sinitto/shared_invite/zt-2uqws45gg-bsPq8cuH2iQV6Jk1Y3Zglw) - -![image](https://github.com/user-attachments/assets/c5202037-a313-443a-b0fa-700e372344b6) - -### 2. 사용자의 포인트 충전 및 출금 요청시, Slack 채널을 통한 알림기능 -> 보호자의 충전, 시니또의 출금 요청이 들어오면 관리자의 원활한 확인을 위해 슬랙에 메시지를 전송하고, 버튼을 통해 어드민페이지로 접속할 수 있습니다. -> #### 슬랙 초대링크 : [https://join.slack.com/t/sinitto/shared_invite](https://join.slack.com/t/sinitto/shared_invite/zt-2uqws45gg-bsPq8cuH2iQV6Jk1Y3Zglw) - -![image](https://github.com/user-attachments/assets/b5927b13-08a8-4345-b31a-cb0e42896075) - -### 3. 더미데이터 로그인기능 -> 개발 과정에서의 개발자들의 실제 더미데이터 기반 웹 사용 및 테스트를 위해, Server Side Rendering 방식의 더미데이터 로그인 페이지를 구현하였습니다. -서버에 저장된 더미데이터로만 로그인이 가능하며, 개발환경(로컬환경에서 프론트 서버가 열려있을 시) 및 배포서버로 로그인이 가능하고, -로그인시 해당 더미데이터 유저의 JWT(AccessToken 및 RefreshToken)을 발급하여 함께 전송합니다 -> #### 더미데이터 로그인 페이지 : https://sinitto.site/dummy [비밀번호 : 1234] -> -image-3 -image-3 - - -## 👩‍👩‍👧‍👧 협업 효율 - -프론트엔드-백엔드 간 협업 과정 중 제공된 api를 연결하는 과정에서 소통에 어려움이 있었습니다. - -학업과 병행할 수 있는 카카오테크캠퍼스의 특성 상 조원들마다 개발을 진행하는 시간이 달라 실시간으로 -문제를 해결하기 어려운 문제점이 있었습니다. 또한 프론트엔드에서 백엔드 서버로 api를 통해 요청을 보냈을 때, -에러가 발생했을 경우 자세한 오류 메시지가 응답을 통해 나타나지 않았으며, 실제 오류 내용은 -백엔드 서버에 기록되는 문제가 있었습니다. - -또한 백엔드 담당 조원에게 질문을 하더라도 답변을 받기 전까지는 그동안 하던 작업을 -진행하지 못하는 문제가 생겨, 전체적인 개발 속도가 느려지는 문제가 있었습니다. - -이러한 방법을 어떻게 해결할 수 있을까 고민해보던 중, 가장 먼저 떠오른 방법은 '에러 코드가 생기면 -Slack의 채널에 전송을 하는 것' 이었습니다. - -백엔드 서버에서 자바 파일을 실행할 경우 nohup 명렬어를 통해 실행하는데, 이 때 자바 파일을 실행한 기록이 -out 확장자 파일에 남게 됩니다. 이 중에서 에러가 발생한 경우 'ERROR' 라는 단어가 포함이 되는데, -이러한 패턴을 확인하여 'ERROR'이 포함된 단어가 out 확장자 파일에 기록되면 Slack의 '서버-로그' 채널에 -전송되도록 하였습니다. 이를 통해 프론트엔드 개발자분들이 어떠한 오류인지 확인할 수 있게 하였습니다. - -그러나 한 가지 문제가 더 있었습니다. 개발 언어가 다르기 때문에 프론트엔드의 경우 자바에서 발생하는 -에러코드를 읽는데 어려움이 있다는 것이었습니다. 실제로 프론트엔드 개발자분들께 해당 에러코드에 대해 -이해가 되는지 물어봤을 때, 이해하기가 어려워 ChatGPT와 같은 LLM 모델에 에러코드를 복사하여 질문을 -한다는 답변을 받았습니다. - -이러한 불편함을 해결하기 위해, 현재 무료로 이용할 수 있는 LLM 모델인 Upstage의 'Solar-pro' 모델과 -연결을 하여 이를 해결하였습니다. 기존의 에러코드를 Slack에 바로 전송하는 대신, 해당 메시지를 -rest 요청을 통해 LLM 모델에 답변을 받고, 해당 답변을 포함하여 에러코드와 같이 보내도록 변경하였습니다. - -이러한 과정을 통하여 개발 과정에서의 소통의 어려움을 해결할 수 있었습니다. - -아래는 실제 개발 과정에서 사용된 내역입니다. 해당 내용과 관련된 쉘 스크립트는 백엔드 내부 쉘스크립트 모음 -(https://www.notion.so/3ce05a49e06046469bde14c12b8b9c00) 중 '서버에러 자동 공지 관련코드' 에서 -확인할 수 있습니다. -![image](https://github.com/user-attachments/assets/0f7ee6d3-f468-4f48-9e5f-91beaaeefb8a) -