elimgweb

엘림G선교회 - 풀스택 글로컬 선교 플랫폼

License: MIT Node.js Version

🎉 완성된 웹사이트를 지금 바로 확인하세요!
라이브 데모: 여기를 클릭

📚 빠른 가이드 링크

처음 사용하시나요? 아래 가이드를 확인하세요:

가이드 설명 소요 시간
⚡ QUICK_REFERENCE.md 가장 자주 수정하는 내용만 모음 2분
📝 HOW_TO_EDIT.md 웹사이트 수정 완벽 가이드 10분
💡 EDITING_EXAMPLES.md 실전 수정 예시 모음 (5/10/30분) 15분
🚀 QUICK_START.md elimg.com 실제 배포 (3가지 방법) 30분
📄 DEPLOYMENT_GUIDE.md 상세 배포 가이드 1시간
🎬 VIDEO_TUTORIAL_SCRIPT.md 비디오 튜토리얼 스크립트 -
📋 FINAL_SUMMARY.md 전체 프로젝트 요약 5분
✨ FULLSTACK_COMPLETE.md 풀스택 기능 상세 설명 10분

🌍 프로젝트 개요

엘림G선교회 웹사이트는 단순한 정보 제공을 넘어 실제 작동하는 풀스택 선교 플랫폼입니다.

주요 특징

🚀 빠른 시작

필수 요구사항

설치 및 실행

# 1. 저장소 클론
git clone https://github.com/JinJun-han/elimgweb.git
cd elimgweb

# 2. 의존성 설치
npm install

# 3. 환경 변수 설정
cp .env.example .env
# .env 파일을 편집하여 필요한 설정을 입력하세요

# 4. 데이터베이스 초기화
npm run init

# 5. 개발 서버 실행
npm run dev

# 서버가 http://localhost:3000 에서 실행됩니다

📁 프로젝트 구조

elimgweb/
├── server/                 # 백엔드 서버
│   ├── models/            # 데이터베이스 모델
│   │   └── database.js    # SQLite 스키마 및 초기화
│   ├── routes/            # API 라우트
│   │   ├── api.js         # 공개 API 엔드포인트
│   │   └── admin.js       # 관리자 API 엔드포인트
│   ├── middleware/        # Express 미들웨어
│   ├── utils/             # 유틸리티 함수
│   ├── uploads/           # 업로드된 파일
│   ├── index.js           # 메인 서버 파일
│   ├── init-db.js         # 데이터베이스 초기화 스크립트
│   └── database.sqlite    # SQLite 데이터베이스 (자동 생성)
├── public/                # 정적 파일
│   ├── assets/           # 이미지, 아이콘
│   └── index.html        # 프론트엔드 SPA
├── i18n/                  # 다국어 번역 파일
│   ├── ko.json           # 한국어
│   ├── en.json           # 영어
│   └── vi.json           # 베트남어
├── .env.example          # 환경 변수 예시
├── package.json          # 프로젝트 설정
└── README.md             # 이 파일

🔧 환경 변수 설정

.env 파일을 생성하고 다음 변수들을 설정하세요:

서버 설정

NODE_ENV=development
PORT=3000
HOST=0.0.0.0

데이터베이스

DB_PATH=./server/database.sqlite

JWT 인증

JWT_SECRET=your-super-secret-jwt-key-change-this

이메일 설정 (Nodemailer)

EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password
EMAIL_FROM=no-reply@elimg.com

PG 결제 (PortOne)

PORTONE_API_KEY=your-api-key
PORTONE_API_SECRET=your-api-secret
PORTONE_STORE_ID=your-store-id

관리자 계정

ADMIN_USERNAME=admin
ADMIN_PASSWORD=change-this-password

📡 API 엔드포인트

공개 API

방문자 통계

GET /api/visitors

뉴스레터 구독

POST /api/newsletter
Content-Type: application/json

{
  "email": "user@example.com",
  "language": "ko"
}

후원하기

POST /api/donation
Content-Type: application/json

{
  "donor_name": "홍길동",
  "donor_email": "hong@example.com",
  "donor_phone": "010-1234-5678",
  "amount": 50000,
  "payment_method": "card",
  "is_recurring": false,
  "language": "ko"
}

후원 진행률

GET /api/donation/progress

뉴스 목록

GET /api/news?page=1&limit=10&language=ko

뉴스 상세

GET /api/news/:id?language=ko

댓글 작성

POST /api/comments
Content-Type: application/json

{
  "news_id": 1,
  "author_name": "홍길동",
  "author_email": "hong@example.com",
  "content": "좋은 소식 감사합니다!",
  "language": "ko"
}

검색

GET /api/search?q=선교&language=ko

다국어 번역

GET /api/i18n/:lang

관리자 API (인증 필요)

로그인

POST /api/admin/login
Content-Type: application/json

{
  "username": "admin",
  "password": "your-password"
}

대시보드 통계

GET /api/admin/dashboard
Authorization: Bearer <token>

뉴스 관리

GET /api/admin/news
POST /api/admin/news
PUT /api/admin/news/:id
DELETE /api/admin/news/:id

댓글 관리

GET /api/admin/comments
PUT /api/admin/comments/:id/approve
DELETE /api/admin/comments/:id

후원 관리

GET /api/admin/donations
PUT /api/admin/donations/:id/status

설정 관리

GET /api/admin/settings
PUT /api/admin/settings

🎨 기술 스택

백엔드

프론트엔드

보안 & 성능

🛡️ 보안

구현된 보안 기능

권장 사항

📊 데이터베이스 스키마

주요 테이블

visitors

방문자 추적

newsletter_subscribers

뉴스레터 구독자

donations

후원 내역

news

뉴스 기사 (다국어)

comments

댓글

admin_users

관리자 계정

partners

협력 파트너 (BAM 기업)

갤러리 이미지

settings

사이트 설정

🌐 다국어 지원

지원 언어

번역 파일 위치

i18n/
├── ko.json
├── en.json
└── vi.json

사용 예시

// API 요청 시 language 파라미터 사용
GET /api/news?language=vi
GET /api/i18n/en

💳 결제 연동 (PortOne)

설정 방법

  1. PortOne 가입
  2. 가맹점 ID 및 API 키 발급
  3. .env 파일에 설정
PORTONE_API_KEY=your-api-key
PORTONE_API_SECRET=your-api-secret
PORTONE_STORE_ID=your-store-id

결제 흐름

  1. 사용자가 후원 양식 작성
  2. POST /api/donation 으로 후원 정보 전송
  3. 서버에서 PortOne 결제 페이지 URL 반환
  4. 사용자가 결제 완료
  5. PortOne 웹훅으로 서버에 결제 완료 알림
  6. 데이터베이스 업데이트 및 이메일 발송

📧 이메일 설정

Gmail 사용 시

  1. Gmail 계정에서 2단계 인증 활성화
  2. 앱 비밀번호 생성
  3. .env 파일에 설정
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password

기능

🔍 SEO 최적화

구현된 기능

♿ 접근성

WCAG 2.1 준수

📱 모바일 최적화

🚀 배포

프로덕션 빌드

# 환경 변수 설정
NODE_ENV=production

# 서버 실행
npm start

권장 호스팅

🤝 기여하기

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📄 라이선스

이 프로젝트는 MIT 라이선스 하에 있습니다. 자세한 내용은 LICENSE 파일을 참조하세요.

📞 연락처

엘림G선교회

🙏 후원

이 프로젝트가 도움이 되었다면 후원을 고려해주세요:

계좌번호: 농협은행 301-0296-7179-91 (엘림G선교회)


Made with ❤️ by Elim G Mission © 2026 All rights reserved