kakao-tech-campus-2nd-step3 / Team13_BE

πŸ‘¨β€πŸ‘©β€πŸ‘¦λ³΄ν˜ΈμžλŠ” κ°€μ‘±μ˜ μƒνƒœλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ, πŸ‘©β€βš•οΈμš”μ–‘λ³΄ν˜Έμ‚¬λŠ” 손쉽고 κ°„νŽΈν•˜κ²Œ κΈ°λ‘ν•˜λŠ” "λŒλ΄„λ‹€λ¦¬"
19 stars 5 forks source link

🀝 [Team 13] λŒλ΄„λ‹€λ¦¬ - μš”μ–‘μ› 관리 μ„œλΉ„μŠ€

care_bridge_logo



λͺ©μ°¨

πŸ§‘β€πŸ’» Collaborators

### πŸ—“οΈ 개발 κΈ°κ°„ 2024.09 ~ 2024.11 (카카였 ν…Œν¬ 캠퍼슀 2κΈ° - Step3)



Backend

| **ν…Œν¬ 리더** | **기획 리더** | **λ¦¬μ•‘μ…”λ„ˆ** | **λ¦¬λ§ˆμΈλ”** | **λ¦¬λ§ˆμΈλ”** | | ------------- | ------------- | ------------ | ------------ | ------------ | |
[μ΄μ˜μ€€](https://github.com/20jcode)
|
[κΉ€νƒœμœ€](https://github.com/pykido)
|
[유경미](https://github.com/yooookm)
|
[λ°•ν˜œμ—°](https://github.com/hyyyh0x)
|
[이진솔](https://github.com/mogld)
| |
|
|
|
|
|

Frontend

| **μ‘°μž₯** | **νƒ€μž„ 킀퍼** | | ------------- | ------------- | |
[λ¬Έμ •μœ€](https://github.com/nnoonjy)
|
[μ΄μ§€μˆ˜](https://github.com/dlwltn0430)
| |
|
|




βš™οΈ 개발 μŠ€νƒ

![java 17](https://img.shields.io/badge/-Java%2017-ED8B00?style=flat-square&logo=java&logoColor=white) ![spring boot 3.3](https://img.shields.io/badge/Spring%20boot%203.3-6DB33F?style=flat-square&logo=springboot&logoColor=white) ![spring security](https://img.shields.io/badge/spring%20security-6DB33F?style=flat-square&logo=spring&logoColor=white) ![mysql 8.0](https://img.shields.io/badge/MySQL%208.0-005C84?style=flat-square&logo=mysql&logoColor=white) ![Redis](https://img.shields.io/badge/Redis-DC382D?style=flat-square&logo=Redis&logoColor=white) ![AWS S3](https://img.shields.io/badge/AWS%20S3-569A31?style=flat-square&logo=amazons3&logoColor=white) ![AWS EC2](https://img.shields.io/badge/AWS%20EC2-FF9900?style=flat-square&logo=amazonec2&logoColor=white) ![Amazon sqs](https://img.shields.io/badge/Amazon%20sqs-FF9900?style=flat-square&logo=amazon&logoColor=white) ![Naver cloud](https://img.shields.io/badge/naver%20cloud-03C75A?style=flat-square&logo=naver&logoColor=white) ![openAI](https://img.shields.io/badge/openAI-FF6C37?style=flat-square&logo=openai&logoColor=white) ![poi](https://img.shields.io/badge/poi-3F6EB5?style=flat-square&logo=apache&logoColor=white) ![line api](https://img.shields.io/badge/line%20api-00C300?style=flat-square&logo=line&logoColor=white) ![coolSms](https://img.shields.io/badge/coolSms-FF6C37?style=flat-square&logo=coolSms&logoColor=white) ![React](https://img.shields.io/badge/-React%2018-4894FE?style=flat-square&logo=react&logoColor=white) ![Vite](https://img.shields.io/badge/-Vite%205-646CFF?style=flat-square&logo=vite&logoColor=white) ![TypeScript](https://img.shields.io/badge/-TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white) ![Chakra UI](https://img.shields.io/badge/-Chakra%20UI-319795?style=flat-square&logo=chakraui&logoColor=white) ![Emotion](https://img.shields.io/badge/-Emotion-FF69B4?style=flat-square&logo=emotion&logoColor=white) ![Styled Components](https://img.shields.io/badge/-Styled%20Components-DB7093?style=flat-square&logo=styledcomponents&logoColor=white) ![React Query](https://img.shields.io/badge/-React%20Query-FF4154?style=flat-square&logo=reactquery&logoColor=white) ![Axios](https://img.shields.io/badge/-Axios-5A29E4?style=flat-square&logo=axios&logoColor=white) ![Tesseract.js](https://img.shields.io/badge/-Tesseract.js-3D348B?style=flat-square&logo=tesseract&logoColor=white)



πŸ”— ν”„λ‘œμ νŠΈ κ΄€λ ¨ μ£Όμ†Œ

| λ¬Έμ„œ | |:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:| | [λ°±μ—”λ“œ 배포 μ£Όμ†Œ](https://dbdr-servcie.com) | | [ν”„λ‘ νŠΈμ—”λ“œ 배포 μ£Όμ†Œ](https://dbdari.vercel.app/) | | [API λ¬Έμ„œ](https://dolbomdari.netlify.app/) | | [λ””μžμΈ ν”Όκ·Έλ§ˆ](https://www.figma.com/design/RvPegHAoDLITbqAxexEok7/%EB%B6%80%EC%82%B0%EB%8C%80-13%EC%A1%B0-%EB%81%9D%EB%82%B4%EC%A3%BC%EC%A1%B0?node-id=19-3&node-type=canvas&t=IzVl1agbkGalr8SU-0) | | [ν”„λ‘œμ νŠΈ λ…Έμ…˜](https://yoookm.notion.site/13-fc918782c8684baab30d46f8c05939f2?pvs=4) | | [λŒλ΄„λ‹€λ¦¬ 라인 채널](https://lin.ee/F4hbz9m) |




🀩 μƒ˜ν”Œ 아이디 & λΉ„λ°€λ²ˆν˜Έ

κ΄€λ¦¬μž


🌟 λŒλ΄„λ‹€λ¦¬λž€?

μš”μ–‘λ³΄ν˜Έμ‚¬λŠ” κ°„νŽΈν•˜κ²Œ 차트λ₯Ό μž‘μ„±ν•˜κ³ ,
λ³΄ν˜ΈμžλŠ” 이λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ 확인할 수 μžˆλŠ” 디지털 차트 μ„œλΉ„μŠ€

➑️ 신뒰와 νŽΈλ¦¬μ„±μ„ μ œκ³΅ν•˜λŠ” μ†Œν†΅ ν”Œλž«νΌ



🧐 μ„œλΉ„μŠ€μ˜ ν•„μš”μ„±

πŸ“ 문제 상황 1. 정보 곡유의 λ‹¨μ ˆ

보호자의 μš”κ΅¬ - κ°€μ‘±μ˜ μƒνƒœλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ 확인할 수 μžˆλŠ” κ°„νŽΈν•œ 정보 μ ‘κ·Ό λ°©μ•ˆμ΄ ν•„μš”ν•˜λ‹€.

➑️ λ³΄ν˜Έμžκ°€ μ–΄λ””μ„œλ“  κ°€μ‘±μ˜ μƒνƒœλ₯Ό μ‰½κ²Œ 확인할 수 μžˆλŠ” μ‹œμŠ€ν…œμ΄ ν•„μš”ν•˜λ‹€!

🎯 ν•΄κ²° λ°©μ•ˆ


πŸ“ 문제 상황 2. μš”μ–‘λ³΄ν˜Έμ‚¬μ˜ 차트 μž‘μ„± 어렀움

caregiver_difficulty

μš”μ–‘λ³΄ν˜Έμ‚¬μ˜ μš”κ΅¬ - λ³΅μž‘ν•˜μ§€ μ•Šκ³  κ°„λ‹¨ν•œ 차트 μž‘μ„± 방식이 ν•„μš”ν•˜λ‹€.

➑️ μš”μ–‘λ³΄ν˜Έμ‚¬κ°€ μ‰½κ²Œ 차트λ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ ν•˜λŠ” κ°„νŽΈν•œ 기둝 μ‹œμŠ€ν…œμ΄ ν•„μš”ν•˜λ‹€!

🎯 ν•΄κ²° λ°©μ•ˆ




🧩 μ„œλΉ„μŠ€ 핡심 κΈ°λŠ₯

보호자

| πŸ“ **λŒλ΄„λŒ€μƒμž 차트 확인** | πŸ“ **차트 μš”μ•½** | |:-------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------------------------------------------:| | **ν•˜λ£¨ μƒνƒœ 기둝 확인**
사진과 차트 μž‘μ„± μ‹œ **μ•Œλ¦Ό μˆ˜μ‹ ** | κΈ΄ 차트λ₯Ό **핡심 λ‚΄μš© μš”μ•½**
μ£Όμš” 사항을 **κ°„κ²°ν•˜κ²Œ 확인** | | recipient_today | chart_summary_feature |

μš”μ–‘λ³΄ν˜Έμ‚¬

| πŸ–‹οΈ **μš”μ–‘ 일지 μž‘μ„±** | πŸŽ™οΈ **μŒμ„± 인식 차트 μž‘μ„±** | |:--------------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------------:| | **μŒμ„±/사진 인식**, 직접 μž‘μ„± 지원
**λ‹€μ–‘ν•œ λ°©μ‹μœΌλ‘œ κ°„νŽΈ μž‘μ„±** | **μŒμ„± 인식**을 톡해 주관식 μž…λ ₯
μŒμ„±μ„ ν…μŠ€νŠΈλ‘œ **μžλ™ λ³€ν™˜** | | create_chart | voice_recognition | | πŸ“· **OCR 차트 μž‘μ„±** | πŸ“‘ **차트 μš”μ•½ κΈ°λŠ₯** | πŸ”” **μ•Œλ¦Ό κΈ°λŠ₯** | |:-----------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------:| | **차트 양식 ν”„λ¦°νŠΈ ν›„ 사진 인식**
사진 ν•œ μž₯으둜 **μžλ™ 기둝 μ™„μ„±** | **ν™˜μž μƒνƒœ μš”μ•½ 제곡**
μ—¬λŸ¬ ν™˜μžμ˜ **ν•˜λ£¨ μƒνƒœ κ°„νŽΈ 확인** | μ‚¬μš©μžκ°€ μ˜ˆμ•½ν•œ μ‹œκ°„λ§ˆλ‹€
문자/라인 λ©”μ‹œμ§€λ‘œ 차트 μž‘μ„± μ•Œλ¦Ό | | ocr_chart | chart_summary_feature | care_message |

μš”μ–‘μ›

| πŸ–₯️ **μš”μ–‘μ‚¬, 보호자, λŒλ΄„λŒ€μƒμž 관리** | πŸ“Š **μ—‘μ…€ μ—…λ‘œλ“œ** | |:------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------:| | **μ›Ήμ‚¬μ΄νŠΈλ‘œ 정보 관리**
μš”μ–‘μ‚¬, 보호자, λŒ€μƒμž 정보 **μˆ˜μ • κ°€λŠ₯** | μ—‘μ…€ 파일둜 **λŒ€λŸ‰ 데이터 μ—…λ‘œλ“œ**
제곡된 ν…œν”Œλ¦Ώ 파일둜 **κ°„νŽΈ 등둝** | | admin_management | excel_upload |




πŸ”§ 곡톡 핡심 개발 μ˜μ—­

πŸ™†β€ νšŒμ›κ°€μž…


πŸ”§ BE 핡심 개발 μ˜μ—­

πŸ”“ 둜그인 / νšŒμ›κ°€μž…

  spring security와 JWTλ₯Ό ν™œμš©ν•˜μ—¬ statelessν•œ 인증방식을 μ„ νƒν•˜μ—¬ μ„œλ²„ ν™•μž₯성에 이점을 κ°€μ§€κ³ μž ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ˜ν•œ κΆŒν•œ 검사λ₯Ό μ§€μ›ν•˜κΈ° μœ„ν•œ μ»€μŠ€ν…€ λ©”μ†Œλ“œ μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 κΆŒν•œ 검사뢀뢄을 λΆ„λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€. μ€‘μ μ μœΌλ‘œ μƒκ°ν•œ 뢀뢄은 μ„œλ‘œ λ‹€λ₯Έ table에 μ†ν•΄μžˆλŠ” νšŒμ›λ“€μ„ λŒ€μƒμœΌλ‘œ 인증과 인가가 ν•„μš”ν•œ μƒν™©μ΄μ˜€μœΌλ©°, 이λ₯Ό μœ„ν•΄ μ„œλΉ„μŠ€μ— μ•Œλ§žμ€ AuthenticationProvider와 UserDetails, UserDetailsServiceλ₯Ό κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

πŸͺ™ λ¦¬ν”„λ ˆμ‹œ 토큰

  저희 μ„œλΉ„μŠ€λŠ” λ―Όκ°ν•œ 의료 데이터λ₯Ό 닀루기에, 토큰 λ³΄μ•ˆμ΄ μ€‘μš”ν–ˆμŠ΅λ‹ˆλ‹€. 둜그인 μ‹œ μ•‘μ„ΈμŠ€ 토큰과 λ¦¬ν”„λ ˆμ‹œ 토큰을 λ°œκΈ‰ν•˜κ³ , λ¦¬ν”„λ ˆμ‹œ ν† ν°μœΌλ‘œ μž¬λ°œκΈ‰ μ‹œ 두 토큰을 λͺ¨λ‘ μƒˆλ‘œ λ°œκΈ‰ν•˜λŠ” RTR 방식을 μ μš©ν•΄ λ³΄μ•ˆμ„ κ°•ν™”ν–ˆμŠ΅λ‹ˆλ‹€. λ‘œκ·Έμ•„μ›ƒ μ‹œμ—λŠ” Redis에 μ €μž₯된 λ¦¬ν”„λ ˆμ‹œ 토큰을 μ‚­μ œν•˜κ³ , μ•‘μ„ΈμŠ€ 토큰은 λΈ”λž™λ¦¬μŠ€νŠΈμ— 등둝해 μœ νš¨μ„±μ„ μ°¨λ‹¨ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 λ‘œκ·Έμ•„μ›ƒ μ‹œ μ‹€μ‹œκ°„μœΌλ‘œ 토큰 만료λ₯Ό 효과적으둜 μ²˜λ¦¬ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

πŸ“· OCR κΈ°λŠ₯

  μš”μ–‘λ³΄ν˜Έμ‚¬κ°€ μž‘μ„±ν•œ λŒλ΄„ λŒ€μƒμž 차트λ₯Ό 효율적으둜 λ””μ§€ν„Έν™”ν•˜κΈ° μœ„ν•΄ Naver Clova OCR API와 AWS S3의 presigned URL을 μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

  presigned URL을 톡해 이미지 νŒŒμΌμ„ S3에 μ—…λ‘œλ“œν•˜κ³ , λ°±μ—”λ“œ μ„œλ²„μ—λŠ” objectKey κ°’λ§Œ μ „λ‹¬ν•˜μ—¬ OCR을 μˆ˜ν–‰ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ„œλ²„ κ³ΌλΆ€ν•˜λ₯Ό λ°©μ§€ν•˜κ³  μ„±λŠ₯을 μ΅œμ ν™”ν–ˆμŠ΅λ‹ˆλ‹€. 이둜써 μ„œλ²„ λ¦¬μ†ŒμŠ€λ₯Ό μ ˆμ•½ν•˜λ©΄μ„œλ„ λ³΄μ•ˆμ„±μ„ μœ μ§€ν•œ μƒνƒœμ—μ„œ 차트λ₯Ό μ•ˆμ „ν•˜κ²Œ OCR μ²˜λ¦¬ν•  수 μžˆλ„λ‘ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

care_bridge_logo

πŸ€– AI μš”μ•½ κΈ°λŠ₯ - 파인 νŠœλ‹

  1. κ³ λ € 사항

    • λ³΄ν˜Έμžλ“€μ΄ 차트 정보λ₯Ό λͺ¨λ‘ 보면 λ„ˆλ¬΄ λ§Žμ€ μ •λ³΄λ‘œ 인해 λŒλ΄„ λŒ€μƒμžμ˜ μƒνƒœλ₯Ό νŒŒμ•…ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 차트 정보λ₯Ό κ°„κ²°ν•˜κ²Œ μš”μ•½ν•˜μ—¬ λ³΄μ—¬μ£ΌλŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
  2. 기술 선택 이유(νŒŒμΈνŠœλ‹)

    • λͺ¨λΈ νŒŒμΈνŠœλ‹: 기쑴의 ChatGPTλ₯Ό μ‚¬μš©ν•  λ•Œ μ›ν•˜λŠ” ν˜•μ‹μœΌλ‘œ κ²°κ³Όκ°€ λ‚˜μ˜€μ§€ μ•Šκ±°λ‚˜ λΆˆν•„μš”ν•œ 정보가 ν¬ν•¨λ˜λŠ” κ²½μš°κ°€ μžˆμ–΄, λͺ¨λΈμ„ νŒŒμΈνŠœλ‹ν•˜λŠ” 방법을 μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€. νŒŒμΈνŠœλ‹μ„ ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ 맀번 JSON ν˜•μ‹μœΌλ‘œ νŠΉμ • λ°©μ‹μ˜ 값을 μš”κ΅¬ν•΄μ•Ό ν–ˆκ² μ§€λ§Œ, μ΄μ œλŠ” 차트 데이터λ₯Ό JSON ν˜•μ‹μœΌλ‘œ μž…λ ₯ν•˜λ©΄ μ›ν•˜λŠ” ν˜•μ‹μ˜ κ²°κ³Όλ₯Ό λ°”λ‘œ 받을 수 μžˆμŠ΅λ‹ˆλ‹€.
  3. κ΅¬ν˜„ 방식

    • νŒŒμΈνŠœλ‹: 차트 μš”μ•½κ³Ό κ΄€λ ¨λœ 데이터셋이 μ—†μ–΄ AI-Hub의 ν•œκ΅­μ–΄ λŒ€ν™” μš”μ•½ 데이터셋을 ν™œμš©ν•˜μ—¬ νŒŒμΈνŠœλ‹μ„ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. conditionDisease, bodyManagement, nursingManagement, recoveryTraining, cognitiveManagement와 같은 ν•­λͺ©λ³„λ‘œ μš”μ•½ν•˜λ„λ‘ λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.

    • νƒœκ·Έ μš”μ•½ 적용: ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μ‚¬μš©ν•  μ„Έ 가지 νƒœκ·Έλ₯Ό μš”μ•½ν•˜λ„λ‘ νŒŒμΈνŠœλ‹μ„ μΆ”κ°€λ‘œ μ§„ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. ν”„λ‘ νŠΈμ—”λ“œμ™€μ˜ 연동 κ³Όμ •μ—μ„œ νƒœκ·Έλ₯Ό μΆ”κ°€ν•˜λŠ” 것이 μœ μš©ν•  κ²ƒμ΄λΌλŠ” μ˜κ²¬μ„ λ°˜μ˜ν•˜μ—¬ 이λ₯Ό κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. 차트 데이터λ₯Ό μ€€λΉ„ν•˜λŠ” 데 μ‹œκ°„μ΄ 많이 μ†Œμš”λ˜μ—ˆκΈ° λ•Œλ¬Έμ— νƒœκ·Έλ₯Ό μΆ”κ°€ν•˜μ—¬ λ‹€μ‹œ νŒŒμΈνŠœλ‹ν•˜λŠ” 것이 μ–΄λ ΅λ‹€κ³  νŒλ‹¨ν–ˆκ³ , λŒ€μ‹  νƒœκ·Έλ₯Ό μœ„ν•œ νŒŒμΈνŠœλ‹μ„ λ³„λ„λ‘œ μ§„ν–‰ν•˜λŠ” κ²ƒμœΌλ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€.

  4. 문제 ν•΄κ²°

    • 가끔 AIκ°€ null 값을 λ°˜ν™˜ν•˜λŠ” λ¬Έμ œκ°€ μžˆμ—ˆμ§€λ§Œ, λŒ€λΆ€λΆ„ ν•œ 번 더 μ‹œλ„ν•˜λ©΄ μ •μƒμ μœΌλ‘œ λ™μž‘ν–ˆμŠ΅λ‹ˆλ‹€. 이에 따라 λ°±μ—”λ“œ μ„œλΉ„μŠ€μ—μ„œ 첫 번째 μ‹œλ„μ— μ„±κ³΅ν•˜μ§€ μ•Šμ„ 경우 μ΅œλŒ€ μ„Έ λ²ˆκΉŒμ§€ μž¬μ‹œλ„ν•˜λ„λ‘ μˆ˜μ •ν•˜μ˜€κ³ , μ„Έ 번 μ‹œλ„ 후에도 응닡이 없을 경우 κ·Έλ•Œ ν”„λ‘ νŠΈμ—”λ“œμ— μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό 보내도둝 λ³€κ²½ν–ˆμŠ΅λ‹ˆλ‹€.

⏰ μ•Œλ¦Ό μ„œλΉ„μŠ€

  1. κ΅¬ν˜„ 방법

    • Spring μŠ€μΌ€μ€„λŸ¬λ₯Ό ν™œμš©ν•˜μ—¬ λ§€λΆ„λ§ˆλ‹€ μ•Œλ¦Ό μ‹œκ°„μ΄ λ„λž˜ν•œ μš”μ–‘λ³΄ν˜Έμ‚¬μ™€ 보호자λ₯Ό μ°Ύμ•„ ν•„μš”ν•œ μ•Œλ¦Ό λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•©λ‹ˆλ‹€.
    • μ•Œλ¦Ό λ©”μ‹œμ§€λŠ” 미리 μ •μ˜λœ ν…œν”Œλ¦Ώμ„ 기반으둜 κ΅¬μ„±ν•˜λ©°, μ‚¬μš©μžκ°€ μ„ νƒν•œ μ•Œλ¦Ό μˆ˜λ‹¨(Line λ˜λŠ” SMS)에 맞좰 λ°œμ†‘λ©λ‹ˆλ‹€.
    • μ‚¬μš©μž 편의λ₯Ό μœ„ν•΄ β€˜λ§ˆμ΄νŽ˜μ΄μ§€β€™μ—μ„œ Line μ•Œλ¦Ό μ„œλΉ„μŠ€μ™€ SMS μ•Œλ¦Ό μ„œλΉ„μŠ€λ₯Ό 선택할 수 μžˆλŠ” μ˜΅μ…˜μ„ μ œκ³΅ν–ˆμŠ΅λ‹ˆλ‹€.
  2. 문제 ν•΄κ²°

    • λ©”μ‹œμ§€ 전솑 쀑볡 및 전솑 μ‹€νŒ¨ μ‹œ 였λ₯˜ μ²˜λ¦¬κ°€ μ–΄λ €μ› λ˜ 뢀뢄은 Amazon SQSλ₯Ό 톡해 λ©”μ‹œμ§€ 큐 관리 κΈ°λŠ₯을 μΆ”κ°€ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.
    • 카카였 λΉ„μ¦ˆλ‹ˆμŠ€ 채널 κ°€μž…μ— ν•„μš”ν•œ μ„œλ₯˜ μ‹¬μ‚¬μ—μ„œ λ°˜λ €λ˜μ—ˆμœΌλ‚˜, μž₯기적으둜 카카였 μ•Œλ¦Όν†‘ λ„μž… κ°€λŠ₯성을 염두에 두고, ν˜„μž¬λŠ” Lineκ³Ό SMS APIλ₯Ό λŒ€μ²΄ μˆ˜λ‹¨μœΌλ‘œ ν™œμš©ν–ˆμŠ΅λ‹ˆλ‹€.

πŸ“Š μ—‘μ…€ 파일 관리 κΈ°λŠ₯

  μ—‘μ…€ 파일 관리 κΈ°λŠ₯을 톡해 μš”μ–‘μ›μ—μ„œ λ‹€μˆ˜μ˜ μš”μ–‘λ³΄ν˜Έμ‚¬, 보호자, λŒλ΄„λŒ€μƒμž 정보λ₯Ό ν•œ λ²ˆμ— 효율적으둜 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€. μš”μ–‘μ›μ€ 제곡된 μ—‘μ…€ ν…œν”Œλ¦Ώ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•΄ 데이터λ₯Ό μΌκ΄„μ μœΌλ‘œ μž…λ ₯ν•˜κ³  μ—…λ‘œλ“œν•˜μ—¬ κ°œλ³„ μž…λ ₯보닀 μ‹œκ°„μ„ μ ˆκ°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  μ—…λ‘œλ“œλœ νŒŒμΌμ€ μ„œλ²„μ—μ„œ μœ νš¨μ„± 검사와 쀑볡 검사λ₯Ό 거쳐 ν˜•μ‹μ΄ λ§žμ§€ μ•Šκ±°λ‚˜ μ€‘λ³΅λœ λ°μ΄ν„°λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 검사λ₯Ό ν†΅κ³Όν•œ λ°μ΄ν„°λ§Œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯되며, 검사에 ν†΅κ³Όν•˜μ§€ λͺ»ν•œ 였λ₯˜ λ°μ΄ν„°λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯λ˜μ§€ μ•Šμ•„, 정상 λ°μ΄ν„°λ§Œ μ•ˆμ „ν•˜κ²Œ κ΄€λ¦¬λ©λ‹ˆλ‹€.

🧩 ERD

caregiver_difficulty



🌌 λ°±μ—”λ“œ 전체 ꡬ상도

caregiver_difficulty



πŸ“„ νŒ€ κ·ΈλΌμš΄λ“œ κ·œμΉ™ μ„€λͺ…

πŸ“‘ νŒ€ κ·ΈλΌμš΄λ“œ λ£°

πŸ˜€ PR ν…œν”Œλ¦Ώ & 이슈 ν…œν”Œλ¦Ώ

⛳️ 컀밋 μ»¨λ²€μ…˜

πŸ›οΈ ν”„λ‘œμ νŠΈ ꡬ쑰

β””β”€β”€β”€πŸ“‚src
    β”œβ”€β”€β”€πŸ“‚main
    β”‚   β”œβ”€β”€β”€πŸ“‚java.dbdr
    β”‚   β”‚               β”œβ”€β”€β”€ πŸ“domain 
    β”‚   β”‚               β”‚    β”œβ”€β”€β”€πŸ“admin
    β”‚   β”‚               β”‚    β”œβ”€β”€β”€πŸ“careworker
    β”‚   β”‚               β”‚    β”œβ”€β”€β”€πŸ“chart
    β”‚   β”‚               β”‚    β”œβ”€β”€β”€πŸ“core
    β”‚   β”‚               β”‚    β”‚   β”œβ”€β”€β”€πŸ“alarm
    β”‚   β”‚               β”‚    β”‚   β”œβ”€β”€β”€πŸ“base
    β”‚   β”‚               β”‚    β”‚   β”œβ”€β”€β”€πŸ“messaging
    β”‚   β”‚               β”‚    β”‚   β”œβ”€β”€β”€πŸ“ocr
    β”‚   β”‚               β”‚    β”‚   β””β”€β”€β”€πŸ“s3
    β”‚   β”‚               β”‚    β”‚
    β”‚   β”‚               β”‚    β”œβ”€β”€β”€πŸ“excel
    β”‚   β”‚               β”‚    β”œβ”€β”€β”€πŸ“guardian
    β”‚   β”‚               β”‚    β”œβ”€β”€β”€πŸ“institution
    β”‚   β”‚               β”‚    β””β”€β”€β”€πŸ“recipient
    β”‚   β”‚               β”œβ”€β”€β”€πŸ“global
    β”‚   β”‚               β”‚   β”œβ”€β”€β”€πŸ“configuration
    β”‚   β”‚               β”‚   β”œβ”€β”€β”€πŸ“exception
    β”‚   β”‚               β”‚   β””β”€β”€β”€πŸ“util
    β”‚   β”‚               β”œβ”€β”€β”€πŸ“openai
    β”‚   β”‚               β””β”€β”€β”€πŸ“security
    β”‚   β””β”€β”€β”€πŸ“‚resources
    β”‚       
    β””β”€β”€β”€πŸ“‚test
        β”œβ”€β”€β”€πŸ“‚java.dbdr
        β”‚     β”œβ”€β”€β”€πŸ“careworker
        β”‚     β”œβ”€β”€β”€πŸ“chart
        β”‚     β”œβ”€β”€β”€πŸ“e2etest
        β”‚     β”œβ”€β”€β”€πŸ“global
        β”‚     β”œβ”€β”€β”€πŸ“messaging
        β”‚     β”œβ”€β”€β”€πŸ“openAi
        β”‚     β”œβ”€β”€β”€πŸ“security
        β”‚     β””β”€β”€β”€πŸ“testhelper
        β””β”€β”€β”€πŸ“‚resources

πŸ•ΉοΈ How to start

  1. ν”„λ‘œμ νŠΈλ₯Ό ν΄λ‘ ν•©λ‹ˆλ‹€.

    $ git clone https://github.com/kakao-tech-campus-2nd-step3/Team13_BE.git
  2. Temp13_BE/src/resources νŒŒμΌμ— application-secret.yml을 λ„£μ–΄μ€λ‹ˆλ‹€.

      $ cd Team13_BE/src/resources                        # 디렉토리 이동
      $ vi application-seceret.yml                       # application-secret.yml 파일 μˆ˜μ • 및 μ €μž₯ μ§„ν–‰ν•˜κΈ°

    λ‹€μŒκ³Ό 같은 ꡬ쑰에 ν‚€ 값듀을 κΌ­ λ„£μ–΄μ£ΌκΈ°!! (단, port의 경우 localκ³Ό 배포 μ„œλ²„μ— μ„€μ •λ˜λŠ” 값이 λ‹€λ¦…λ‹ˆλ‹€)

        data: 
            redis:
                port: # redis port
                host: # redis host
        datasoruce:
            url: # mysql rds url
            username: # mysql username
            password: # mysql password 
            driver-class-name: # mysql driver class name
        secret:  # jwt secret key
        line:
          channelAccessToken: # line channel access token
          channelSecret: # line channel secret
        aws:
            accessKey: # aws access key
            secretKey: # aws secret key
            region: # aws region
        openai: 
            apiKey: # openai api key
        naver:
            api-url: # naver clova api url
            secret-key: # naver clova secret key
  3. 2.의 방법과 λ™μΌν•˜κ²Œ ν…ŒμŠ€νŠΈ ν™˜κ²½μ— λ§žλŠ” application-test.yml도 λ„£μ–΄μ€λ‹ˆλ‹€.

  4. ci/cd ν˜Ήμ€ scriptλ₯Ό 톡해 배포λ₯Ό μ§„ν–‰ν•©λ‹ˆλ‹€.