EveryCare는 스마트 약봉투 OCR, 의약품 정보 조회, 병원 정보 추천을 하나의 플랫폼에서 제공합니다.
사용자가 손쉽게 약봉투 이미지를 업로드하면, OCR을 통해 약품명을 자동 인식하고, 관련 의약품 정보를 제공합니다.
- 📷 약봉투 사진 업로드
- 휴대폰으로 촬영한 약봉투 이미지를 웹에서 바로 업로드
- 📝 OCR 자동 텍스트 추출
- EasyOCR 기반 Flask 마이크로서비스로 한글·영어 약품명 인식
- 💊 의약품 상세 정보 조회
- 국내외 의약품 데이터베이스 연동 후 복용법·주의사항·성분 정보 제공
- 🏥 인근 병원 추천
- 추출된 약품 유형에 적합한 전문 진료과·병원 검색 및 거리·평점 기반 정렬
- 🔒 사용자 인증 & 관리
- OAuth2 기반 소셜 로그인 및 JWT 세션 관리
- 모듈화 & 확장성
각 기능(이미지 OCR, 의약품 조회, 병원 검색, UI)이 독립 서비스로 구현되어 향후 추가 기능이나 트래픽 증가에도 유연 대응 - 컨테이너 기반 통합 개발 환경
Flask-OCR 서버, Spring Boot 백엔드, React 프론트엔드를 Docker Compose로 통합 실행하여 일관된 개발/테스트 환경 확보 - 도메인 중심 구조
OCR, Drug, Hospital, UI 도메인별 책임을 분리하여 유지보수성과 가독성 극대화
EveryCare 서비스는 아래 세 개의 레포지토리로 구성됩니다:
레포지토리 | 역할 |
---|---|
flask-server | EasyOCR 기반 OCR 처리 및 의약품/병원 필터링 로직을 제공하는 마이크로서비스 |
backend | Spring Boot REST API 서버 |
- OCR 서버 연동 | |
- 의약품·병원 조회 API 제공 | |
- Swagger UI 문서화 | |
frontend | React + Vite + TypeScript UI |
- 약봉투 촬영/업로드 화면 | |
- OCR 결과 및 정보 조회 화면 | |
- 사용자 인증/관리 화면 |
각 레포지토리는 완전한 독립 빌드·배포가 가능하며, Dockerfile을 통해 컨테이너화되어 있습니다.
- 공통 원칙
- 민감 정보(.env)는 Git에 커밋 금지
- 서비스별
.env
파일 분리 관리 - Docker Compose에서
env_file
로 로드
항목 | 변수 이름 예시 | 설명 |
---|---|---|
DB 연결 정보 | MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE | Backend가 MySQL 접속 시 사용 |
OCR 서버 URL | OCR_SERVER_URL | Backend → Flask-OCR API 호출 URL |
Spring Profile | SPRING_PROFILES_ACTIVE | dev / prod 구분 |
Frontend API URL | VITE_API_BASE_URL | React 앱에서 호출할 Backend 기본 URL |
OCR 설정 | EASYOCR_LANGUAGES, MODEL_PATH | Flask-OCR 서버 모델 경로/언어 설정 |
# backend/.env
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=password
MYSQL_DATABASE=everycare
OCR_SERVER_URL=http://flask-server:5000
SPRING_PROFILES_ACTIVE=dev
# flask-server/.env
EASYOCR_LANGUAGES=ko,en
MODEL_PATH=/app/.EasyOCR/model
# frontend/.env
VITE_API_BASE_URL=http://localhost:8080/api
레포지토리 | 주요 프레임워크/라이브러리 | 비고 |
---|---|---|
flask-server | Flask, EasyOCR, PyTorch, Requests | Python 패키지 requirements.txt 관리 |
backend | Spring Boot, Spring Web, Spring Data JPA, Lombok | Gradle(build.gradle ) 관리 |
frontend | React, Vite, TypeScript, TailwindCSS, Axios | package.json & yarn.lock 관리 |
-
서비스별 Dockerfile
flask-server/Dockerfile
backend/Dockerfile
frontend/Dockerfile
-
통합 실행 프로젝트 루트에 있는
docker-compose.yml
로 전체 스택( MySQL + Flask-OCR + Backend + Frontend ) 동시 실행 가능
# docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: everycare-mysql
env_file: ./backend/.env
volumes:
- mysql_data:/var/lib/mysql
ports:
- '3306:3306'
flask-server:
build: ./flask-server
container_name: everycare-ocr
env_file: ./flask-server/.env
ports:
- '5000:5000'
depends_on:
- mysql
backend:
build: ./backend
container_name: everycare-backend
env_file: ./backend/.env
ports:
- '8080:8080'
depends_on:
- mysql
- flask-server
frontend:
build: ./frontend
container_name: everycare-frontend
env_file: ./frontend/.env
ports:
- '3000:3000'
depends_on:
- backend
volumes:
mysql_data:
flask-server/
├── .EasyOCR/ # OCR 모델 파일
├── fonts/ # 테스트용 글꼴
├── app.py # Flask 애플리케이션 진입점
├── drug_gpt.py # GPT 기반 의약품 정보 로직
├── drug_search_api.py # 외부 의약품 API 연동 모듈
├── filter_drug.py # 의약품명 필터링 유틸
├── filter_hospital.py # 병원 정보 필터링 유틸
├── perform_ocr.py # OCR 수행 유틸
├── ocr_test.py # 로컬 OCR 테스트 스크립트
├── requirements.txt # Python 라이브러리 목록
└── Dockerfile
backend/
├── src/
│ └── main/
│ └── java/com/everycare/backend
│ ├── config/ # Swagger, CORS 등 설정
│ ├── controller/ # REST 컨트롤러
│ ├── service/ # 비즈니스 로직
│ ├── repository/ # JPA 리포지토리
│ ├── dto/ # 요청/응답 객체
│ └── entity/ # JPA 엔티티
├── build.gradle
├── Dockerfile
├── docker-compose.yml
└── HELP.md
frontend/
├── public/ # 정적 리소스(html, favicon 등)
├── src/
│ ├── components/ # 재사용 UI 컴포넌트
│ ├── pages/ # 화면별 페이지
│ ├── App.tsx # 루트 컴포넌트
│ └── main.tsx # 애플리케이션 진입점
├── package.json
├── tsconfig.json
├── tailwind.config.js
└── Dockerfile
-
전체 클론
git clone https://github.com/2024-EveryCare.git cd EveryCare
-
환경 변수 파일 복사 및 수정
cp backend/.env.example backend/.env cp flask-server/.env.example flask-server/.env cp frontend/.env.example frontend/.env # 각 .env 파일을 열어 호스트, 포트, 패스워드 등 환경에 맞게 수정
-
Docker Compose 실행
docker-compose up --build -d
-
서비스 확인
- Flask-OCR 서버: http://localhost:5000/ocr
- Backend Swagger UI: http://localhost:8080/swagger-ui/index.html
- Frontend: http://localhost:3000
-
개별 서비스 실행 (선택)
-
flask-server
cd flask-server pip install -r requirements.txt python app.py
-
backend
cd backend ./gradlew bootRun
-
frontend
cd frontend yarn install yarn dev
-