Pill-Buddy는 사용자가 매일 복용해야 할 약이나 영양제를 관리하고, 복용 시간에 맞춰 알림을 받을 수 있도록 돕는 서비스입니다.
사용자는 보호자를 추가하여 약 복용 여부를 확인하고 관리할 수 있으며, 식품의약품안전처의 공공 API 를 통해 약의 주요 정보들을 조회할 수 있습니다.
Backend | Backend | Backend | Backend | Backend |
---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
이진우 (팀장) | 안홍제 | 김성겸 | 신현우 | 양소희 |
프로젝트 총괄 관리 팀원 간 소통 조율 보호자 기능 구현 |
Github 관리 회원 관리 기능 구현 JWT 인증 로직 구현 |
프로젝트 기획 사용자 기능 구현 |
프로젝트 기획 e약은요 API를 통해 약 정보 검색 기능 구현 |
프로젝트 기획 coolsms API를 통해 알림 기능 구현 |
![image](https://private-user-images.githubusercontent.com/143621515/375198784-a0c99fad-cd33-4f11-bf06-46573784e48f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk3NzY4NjYsIm5iZiI6MTczOTc3NjU2NiwicGF0aCI6Ii8xNDM2MjE1MTUvMzc1MTk4Nzg0LWEwYzk5ZmFkLWNkMzMtNGYxMS1iZjA2LTQ2NTczNzg0ZTQ4Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxN1QwNzE2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03MzZiNGUyOTIwNGNhOTlhMmRkMmVkZGFkOWQ5MTJjZDA2ODJiODczOTMzNmZiOTE2YTZiZDc5NjhlZmRlNDNhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.hFLQVU8LF7jjFLyRU-X2nvTKPqGIYpigDmRM0F6rJ74)
프로젝트 구조 보기(눌러서 보기)
├── java
│ └── com
│ └── medinine
│ └── pillbuddy
│ ├── PillBuddyApplication.java
│ ├── domain
│ │ |
│ │ ├── medicationApi # 약 정보 검색
│ │ │ ├── controller
│ │ │ │ └── MedicationApiController.java
│ │ │ ├── dto
│ │ │ │ ├── JsonForm.java
│ │ │ │ ├── MedicationDTO.java
│ │ │ │ └── MedicationForm.java
│ │ │ ├── entity
│ │ │ │ └── Medication.java
│ │ │ ├── repository
│ │ │ │ └── MedicationApiRepository.java
│ │ │ └── service
│ │ │ └── MedicationApiService.java
│ │ │
│ │ │
│ │ ├── notification # 알림
│ │ │ ├── controller
│ │ │ │ └── NotificationController.java
│ │ │ ├── dto
│ │ │ │ ├── NotificationDTO.java
│ │ │ │ └── UserNotificationDTO.java
│ │ │ ├── entity
│ │ │ │ └── Notification.java
│ │ │ ├── provider
│ │ │ │ └── SmsProvider.java
│ │ │ ├── repository
│ │ │ │ └── NotificationRepository.java
│ │ │ └── service
│ │ │ └── NotificationService.java
│ │ │
│ │ │
│ │ ├── record # 복용 기록
│ │ │ ├── dto
│ │ │ │ └── RecordDTO.java
│ │ │ ├── entity
│ │ │ │ ├── Record.java
│ │ │ │ └── Taken.java
│ │ │ ├── repository
│ │ │ │ └── RecordRepository.java
│ │ │ └── service
│ │ │ ├── RecordService.java
│ │ │ └── RecordServiceImpl.java
│ │ │
│ │ │
│ │ ├── user # 회원
│ │ │ ├── caregiver # 보호자
│ │ │ │ ├── controller
│ │ │ │ │ └── CaregiverController.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Caregiver.java
│ │ │ │ ├── repository
│ │ │ │ │ └── CaregiverRepository.java
│ │ │ │ └── service
│ │ │ │ └── CaregiverService.java
│ │ │ |
│ │ │ |
│ │ │ ├── caretaker # 사용자
│ │ │ │ ├── controller
│ │ │ │ │ └── CaretakerController.java
│ │ │ │ ├── dto
│ │ │ │ │ └── CaretakerCaregiverDTO.java
│ │ │ │ ├── entity
│ │ │ │ │ ├── Caretaker.java
│ │ │ │ │ └── CaretakerCaregiver.java
│ │ │ │ ├── repository
│ │ │ │ │ ├── CaretakerCaregiverRepository.java
│ │ │ │ │ └── CaretakerRepository.java
│ │ │ │ └── service
│ │ │ │ ├── CaretakerService.java
│ │ │ │ └── CaretakerServiceImpl.java
│ │ │ |
│ │ │ |
│ │ │ ├── controller
│ │ │ │ ├── AuthController.java
│ │ │ │ └── UserController.java
│ │ │ ├── dto
│ │ │ │ ├── JoinDto.java
│ │ │ │ ├── LoginDto.java
│ │ │ │ ├── UserDto.java
│ │ │ │ ├── UserPasswordUpdateDto.java
│ │ │ │ ├── UserType.java
│ │ │ │ └── UserUpdateDto.java
│ │ │ ├── entity # 회원 공통
│ │ │ │ ├── Role.java
│ │ │ │ └── User.java
│ │ │ |
│ │ │ |
│ │ │ ├── profile # 프로필 이미지 관련
│ │ │ │ ├── controller
│ │ │ │ │ └── ProfileController.java
│ │ │ │ ├── dto
│ │ │ │ │ └── ProfileUploadDto.java
│ │ │ │ ├── entity
│ │ │ │ │ └── Image.java
│ │ │ │ ├── repository
│ │ │ │ │ └── ImageRepository.java
│ │ │ │ └── service
│ │ │ │ ├── ProfileService.java
│ │ │ │ └── uploader
│ │ │ │ ├── CaregiverProfileUploader.java
│ │ │ │ ├── CaretakerProfileUploader.java
│ │ │ │ └── ProfileUploader.java
│ │ │ └── service
│ │ │ ├── AuthService.java
│ │ │ ├── CustomUserDetails.java
│ │ │ ├── MyUserDetailsService.java
│ │ │ └── UserService.java
│ │ │
│ │ │
│ │ └── userMedication # 사용자 약 정보
│ │ ├── controller
│ │ │ └── UserMedicationController.java
│ │ ├── dto
│ │ │ └── UserMedicationDTO.java
│ │ ├── entity
│ │ │ ├── Frequency.java
│ │ │ ├── MedicationType.java
│ │ │ └── UserMedication.java
│ │ ├── repository
│ │ │ └── UserMedicationRepository.java
│ │ └── service
│ │ ├── UserMedicationService.java
│ │ └── UserMedicationServiceImpl.java
│ │
│ │
│ └── global
│ ├── advice # 예외 처리
│ │ └── GlobalExceptionHandler.java
│ │
│ ├── config # 설정 관련
│ │ ├── RedisConfig.java
│ │ ├── SecurityConfig.java
│ │ └── SwaggerConfig.java
│ │
│ ├── entity # 공통 엔티티
│ │ └── BaseTimeEntity.java
│ │
│ ├── exception # 예외 관련
│ │ ├── ErrorCode.java
│ │ ├── ErrorResponse.java
│ │ └── PillBuddyCustomException.java
│ │
│ ├── jwt # JWT 관련
│ │ ├── JwtAccessDeniedHandler.java
│ │ ├── JwtAuthenticationEntryPoint.java
│ │ ├── JwtAuthenticationFilter.java
│ │ ├── JwtToken.java
│ │ └── JwtTokenProvider.java
│ │
│ ├── redis
│ │ └── RedisUtils.java
│ │
│ └── util
│ └── UploadUtils.java
│
└── resources
├── application-db.yml
└── application.yml
![ERD](https://private-user-images.githubusercontent.com/143621515/375182592-a643e7fe-787c-48e1-ac56-33ba4c9d1914.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk3NzY4NjYsIm5iZiI6MTczOTc3NjU2NiwicGF0aCI6Ii8xNDM2MjE1MTUvMzc1MTgyNTkyLWE2NDNlN2ZlLTc4N2MtNDhlMS1hYzU2LTMzYmE0YzlkMTkxNC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxN1QwNzE2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05NzUxNWVmZDcwMjk5NzdkYWY0NDA5N2I3ODIwZjg2YWZhODBhZmYyZDJkMjJiOGQyMTE2YWE5ZDI2ODhkODk5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.igouNtKQYtsMV2rH_p4LU_JU9jHmnLBP2qIEyR1sT3U)
![image](https://private-user-images.githubusercontent.com/143621515/375185120-c2af143a-bb44-40f8-b5fe-beec11be6533.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk3NzY4NjYsIm5iZiI6MTczOTc3NjU2NiwicGF0aCI6Ii8xNDM2MjE1MTUvMzc1MTg1MTIwLWMyYWYxNDNhLWJiNDQtNDBmOC1iNWZlLWJlZWMxMWJlNjUzMy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxN1QwNzE2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02NWJkNDQ3NzZkMzFlNjU5MTQ4M2NkOWUzMzE2ZjMwNTE5ZTAyM2M0ZDFmMzg3MzUxOTI4NDA3OWFlZDc3NTNlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.DxcfI-duPrU1WA1ZBGlrx_hCb3UAPzFZWNsC0pJh3q0)
![로그인시퀀스](https://private-user-images.githubusercontent.com/143621515/375185767-08db32d9-0fe0-4f63-87a3-dcfdc72271fc.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk3NzY4NjYsIm5iZiI6MTczOTc3NjU2NiwicGF0aCI6Ii8xNDM2MjE1MTUvMzc1MTg1NzY3LTA4ZGIzMmQ5LTBmZTAtNGY2My04N2EzLWRjZmRjNzIyNzFmYy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxN1QwNzE2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT05OTBiZTRmMGRiYmFiNmU3MTkyNjg2NmUwZjRlZTVmMGU1MTllMDAyMmNhZTI5ZTk0MzJjMmNmNDFjMDY2ZjU1JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.CJR7zZMYotly-XBRIjk5ajJhP2uoNH3Pn5UaRk2roCw)
![재발급시퀀스](https://private-user-images.githubusercontent.com/143621515/375185798-9afa4ff9-86b8-482b-9c17-bcad349e289b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk3NzY4NjYsIm5iZiI6MTczOTc3NjU2NiwicGF0aCI6Ii8xNDM2MjE1MTUvMzc1MTg1Nzk4LTlhZmE0ZmY5LTg2YjgtNDgyYi05YzE3LWJjYWQzNDllMjg5Yi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxN1QwNzE2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03MGY3NThkYWI5ZjI3MjNiMzM1ZDc5Y2Y0MGI2YjE5NTJiYmJhNGZjYTA5ZTA5NWE3Mjk1NmNjZjgzMGZkMDQyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.zz4ORTWMHTSXhxktRA2biOb_IHl8pcv8Nczl1mFP50M)
![알림시퀀스](https://private-user-images.githubusercontent.com/143621515/375185854-240e999c-7156-4d40-9485-ee35c06c20c6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk3NzY4NjYsIm5iZiI6MTczOTc3NjU2NiwicGF0aCI6Ii8xNDM2MjE1MTUvMzc1MTg1ODU0LTI0MGU5OTljLTcxNTYtNGQ0MC05NDg1LWVlMzVjMDZjMjBjNi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxN1QwNzE2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0xN2I0ZmM4ZjI1MjBhNTM5MTFkY2U3ZjlmNWMzNDFlNDZmYTQ5YjY4Y2Y0ZWEwZDAxZTlhZjZhYzM3MzI3MjFmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.xCBDuaeoC7jUPkRVNPqFh2oj689OyKwkBqtF9eg4fxc)
![약검색시퀀스](https://private-user-images.githubusercontent.com/143621515/375185875-8d620c59-19e3-420b-aba6-04f9398cd45c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk3NzY4NjYsIm5iZiI6MTczOTc3NjU2NiwicGF0aCI6Ii8xNDM2MjE1MTUvMzc1MTg1ODc1LThkNjIwYzU5LTE5ZTMtNDIwYi1hYmE2LTA0ZjkzOThjZDQ1Yy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjE3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxN1QwNzE2MDZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0zOGZiMjViOWMyMGQwODJmYjE3ZGIzNzYzNjVkMjI4N2IwOTA1NjEzMTcyZmIzMGY4NWFkN2JjMTcwNzI5ZWJlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.Js6avJC7EZ4HfwY1fTaF8htPVD-q7M6i2adTuRVWAB8)