![로고2](https://private-user-images.githubusercontent.com/106488607/245317403-45885ada-932d-4640-93a8-4a84d451bb9c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1MTE2MDksIm5iZiI6MTcyMTUxMTMwOSwicGF0aCI6Ii8xMDY0ODg2MDcvMjQ1MzE3NDAzLTQ1ODg1YWRhLTkzMmQtNDY0MC05M2E4LTRhODRkNDUxYmI5Yy5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMFQyMTM1MDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1kMTk1YWU5ODkzMTk0YjI1OWEzNzY1YzliN2EwN2U4OTZkN2ZjNWZhZTNkODY5MDQzYjg4NWYzM2U5ZDJkNTdhJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.5i-7_VA9pqsFyGsNqyPeWBNhUxHtxxhYU8lykpHH0SU)
- 모든 팀원이 풀스택으로 개발에 참여했으며, 주 포지션은 아래와 같습니다.
Name |
이서영 |
강민정 |
이치승 |
정다운 |
Position |
팀장 & 예약 기능 |
여행준비 기능 |
여행일지 기능 |
마일리지 기능 |
⚡️ FE 자세히 살펴보기
- bootstrap : 4.6.2
- HTML5
- CSS3
- JavaScript : 1.16.1
- JQuery : 3.6.4
- Chart.js
- summernote : 0.8.18
⚡️ BE 자세히 살펴보기
- springboot : 4.18.0
- H2 Database → MySQL : 8.0.32
- jdk : 11.0.17
- lombok
- MyBatis
- JSP
- BCrypt HASH
- Apache Tomcat : 9.0
⚡️ API 자세히 살펴보기
- 카카오 소셜 로그인 API (OAuth 2.0 프로토콜)
- 카카오페이 API
- 이메일 전송 API (네이버 SMTP 프로토콜)
- 구글 맵 API
- CoolSMS API
- DAUM 우편번호 찾기 API
- 국가 코드 OPEN API
![](https://camo.githubusercontent.com/029f7dcc3951900c02a2f33a91a10a3d15aa7392cf2d3318b329634a63409836/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f48544d4c352d4533344632363f7374796c653d666c6174266c6f676f3d4e6f74696f6e266c6f676f436f6c6f723d7768697465)
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.security:spring-security-crypto'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework:spring-context-support'
implementation group: 'net.nurigo', name: 'javaSDK', version: '2.2'
implementation 'commons-io:commons-io:2.6'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'commons-fileupload:commons-fileupload:1.3.1'
⚡️ 구조 자세히 살펴보기
📦src
┗ 📂main
┣ 📂java
┃ ┗ 📂com
┃ ┗ 📂green
┃ ┗ 📂airline
┃ ┃ ┣ 📂config
┃ ┃ ┗ 📂controller
┃ ┣ 📂dto
┃ ┃ ┣ 📂kakao
┃ ┃ ┣ 📂nation
┃ ┃ ┣ 📂request
┃ ┃ ┗ 📂response
┃ ┣ 📂enums
┃ ┣ 📂handler
┃ ┃ ┗ 📂exception
┃ ┣ 📂repository
┃ ┃ ┣ 📂interfaces
┃ ┃ ┗ 📂model
┃ ┣ 📂service
┃ ┗ 📂utils
┣ 📂resources
┃ ┣ 📂db
┃ ┣ 📂mapper
┃ ┗ 📂static
┃ ┣ 📂css
┃ ┃ ┗ 📂summerNote
┃ ┃ ┗ 📂font
┃ ┣ 📂images
┃ ┃ ┣ 📂airplane
┃ ┃ ┣ 📂baggage
┃ ┃ ┣ 📂board
┃ ┃ ┣ 📂gifticon
┃ ┃ ┣ 📂in_flight
┃ ┃ ┣ 📂like
┃ ┃ ┣ 📂product
┃ ┃ ┗ 📂ticket
┃ ┗ 📂js
┃ ┗ 📂summerNote
┃ ┗ 📂lang
┗ 📂webapp
┗ 📂WEB-INF
┗ 📂view
┣ 📂baggage
┣ 📂board
┣ 📂faq
┣ 📂in_flight
┣ 📂layout
┣ 📂manager
┣ 📂mileage
┣ 📂myPage
┣ 📂notice
┣ 📂ticket
┣ 📂user
┗ 📂voc
- 핵심 기능이 많으며 실무에서 활용할 수 있는 기능이 포함된 것들 중, 예약, 환불, 외부 API를 활용할 수 있는 항공권 예약 사이트로 주제 선정
- 현행 시스템 벤치마킹 (아시아나 항공, 대한 항공 등)
- 소셜 로그인 API, 항공권 예매 기능, 결제 및 환불 API
- 기내 서비스 조회 기능, 서비스 신청 기능, 여행일지 조회 기능
- 구글 맵 API, 마일리지 숍 구매 기능, 네이버 이메일 SMTP 프로토콜
- 대시보드 조회, 회원관리, 항공권 관리 및 조회, 서비스 신청 관리 및 조회
- 여행일지 관리 및 조회, 마일리지 숍 관리 및 조회, 고객센터 관리 및 조회
테이블 명세서 : https://docs.google.com/spreadsheets/d/1oaUxJ4CWKrVUvi02h9mYOwBL-raDCLswAQ5Qllws7Xw/edit#gid=0
![ERD Model](https://private-user-images.githubusercontent.com/124985978/244907219-3dc47f53-61da-4115-9644-3d19a8e3f185.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1MTE2MDksIm5iZiI6MTcyMTUxMTMwOSwicGF0aCI6Ii8xMjQ5ODU5NzgvMjQ0OTA3MjE5LTNkYzQ3ZjUzLTYxZGEtNDExNS05NjQ0LTNkMTlhOGUzZjE4NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNzIwJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDcyMFQyMTM1MDlaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lZjAwYzMwMDljNGE2Yjc1MWMyOTQ4NjdiZjlkZjVlZGU5ZGM1YWZkMjE2Njk0MGZhZGU4MjQ5NzE5YjcxNmQ0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.j_k_MXWSdBMcYLamR3iWpeEx2Ud4r9B033-oNzBNUBA)
User |
Manager |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/872e19cf-262f-48aa-bd3a-338e88208be6?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/faa63d99-e44c-49d5-adf1-66d1dff62262?raw=true) |
- 왕복/편도 선택
- 출발지/도착지 입력 시 자동 완성 기능 제공
- 전체 공항 조회
- 탑승일 선택
- 탑승 인원 선택 (성인/유아/소아)
- 좌석 등급 선택
- 나이 계산기
- 옵션 선택 후, 스케줄 출력 (잔여 n석, 매진, 미운영)
- 선택한 스케줄에 운항하는 항공기의 종류에 따라 좌석 배치가 다르게 나타남
- 선택한 좌석 등급이 아닌 좌석 선택 불가능
- 예약되지 않은 좌석만 선택 가능
- 운항시간, 국내선/국제선, 탑승객 유형, 좌석 등급에 따라 가격 계산
- 탑승객 정보 입력
- 카카오페이 또는 마일리지로 결제 가능
- 결제 완료 시 문자 발송 (CoolSMS API)
- 회원 등급에 따른 적립 비율로 적립 예정 마일리지 추가
- 적립된 마일리지는 탑승일 다음 날부터 사용 가능
- 탑승일 이전인 경우 환불 신청 가능
- 환불 수수료 부과 (국제선/국내선, 탑승일까지 며칠 이전인지에 따라 결정됨)
- 정렬 기능 (가격 높은 순, 가격 낮은 순)
- 페이징 처리
- 검색 기능 (브랜드, 상품명)
- 상품별 재고량 부여
- 구매 시 이메일로 기프티콘 이미지 발송
- 기프티콘 유효기간 1년 부여
- 마일리지샵 이용 내역 페이지에서 환불 가능
항공권 예약/환불 (카카오페이) |
마일리지샵 구매 (이메일 SMTP) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/1cd653da-4adf-4cd9-a653-24aed68336c2/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/8021f046-485e-486f-9862-15098df8aa41/img.gif?raw=true) |
- 아이디 중복 확인
- 비밀번호 확인
- Validation 처리
- 주소 찾기 (DAUM 우편번호 찾기 API)
- 국적 선택 (국가 코드 오픈 API)
- 카카오 소셜 로그인 (OAuth 2.0 프로토콜)
- 일반 로그인
- 아이디/비밀번호 찾기 (이메일 SMTP 프로토콜)
- 노선에 따라 제공받을 수 있는 기내 서비스 조회
- 특별 기내식 조회 및 신청
- 위탁 수하물 조회 및 신청
- 게시글 CRUD
- 조회수 & 좋아요 수에 기반한 인기 게시글 선정
- MODAL을 이용한 게시글 상세 내용 출력
- 조회수 중복 방지 (쿠키 활용)
- 로그인 시에만 좋아요 버튼 활성화
- 페이징 처리
- 마일리지샵 구매/환불
- 마일리지 조회
- 누적 탑승 마일리지에 따라 회원 등급 변동
- 공지사항 조회
- 자주 묻는 질문 조회
- 고객의 말씀 작성
메인 |
회원 안내 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/3ea6b895-9579-47b6-a423-fbfcfb58833d?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/f46b7412-65ce-44f3-a84b-6e192ecc30e6?raw=true) |
카카오 소셜 로그인 |
비밀번호 찾기 (이메일 SMTP) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/8b4dbb54-cb86-4e52-9b80-9795dc45cfd1/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/fac17342-cb00-4329-8f1f-06a7d4fa94f8/img.gif?raw=true) |
비밀번호 변경 |
회원 정보 변경 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/65af6941-116b-443b-bf6a-022582240feb/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/9fa448ae-b9d3-44d2-82e6-e0b535ad7033a/img.gif?raw=true) |
항공권 예약/환불 (카카오페이) |
항공권 예약/환불 (마일리지) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/1cd653da-4adf-4cd9-a653-24aed68336c2/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/8295e81a-39ec-4d1f-b1f4-04bf66ff3289/img.gif?raw=true) |
기내 서비스 조회 |
위탁 수하물 신청 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/79470ee8-9b6d-42e3-877b-5b8e07bd3f84/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/c07b2977-7795-47e1-b2ba-b796f8d009ef/img.gif?raw=true) |
특별 기내식 조회 |
특별 기내식 신청 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/d075854e-8ebc-46ce-b78a-1fa218e5fd9c/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/dc56d0aa-5aff-4b47-963c-df326b674579/img.gif?raw=true) |
여행일지 |
공항 위치 정보 (구글 맵 API) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/f5aab43f-dee4-4d17-838f-33668411aeaa/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/519cd0ca-d90a-4ed7-8fb2-e3d16f0ad3f2/img.gif?raw=true) |
항공기 정보 |
마일리지샵 구매 (이메일 SMTP) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/3b1067de-58a7-478f-8576-fc91744a300d/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/8021f046-485e-486f-9862-15098df8aa41/img.gif?raw=true) |
마일리지샵 환불 |
공지사항 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/94235af1-5a2c-4fdd-9673-7aa45bd78b13/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/14721b13-882e-411b-b08a-00f1e11cbbc6/img.gif?raw=true) |
자주 묻는 질문 |
고객의 말씀 작성 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/3caecebf-071d-44c8-b5a2-bec30083b58c/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/ea38a3f9-cdae-42e6-8f3e-469970e2bdeb/img.gif?raw=true) |
- chart.js 활용
- 이번 달 매출액, 신규 회원 수, 탈퇴 회원 수, 작성된 고객의 말씀 수
- 항공권 판매 매출액 추이 (지난 11개월 간)
- 도착지별 이용객 수 순위
- 마일리지샵 브랜드별 판매 순위
- 지난 달 고객의 말씀 유형 비율 (문의/불만/칭찬/건의)
- 처리되지 않은 고객의 말씀 알림
- 개인 메모 공간
- 회원/관리자 정보 조회 (검색 기능, 페이징 처리)
- 회원 탈퇴 처리
- 신규 관리자 등록
- 운항 스케줄 조회
- 항공권 판매/환불 내역 조회
- 특별 기내식 신청 내역 조회
- 위탁 수하물 신청 내역 조회
- 공지사항 CRUD
- 자주 묻는 질문 CRUD
- 고객의 말씀 답변
대시보드 |
회원 정보 조회 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/a5dd6d2d-c462-476b-90d9-86e759df94e9?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/15547ecc-167f-4a2a-b87c-4462ecce1f43/img.gif?raw=true) |
관리자 정보 조회 |
마일리지샵 상품 등록 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/df7e0db1-de86-46cf-9c55-4ef402f77680/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/80afc88c-6ba2-4107-8a18-62bf118546df/img.gif?raw=true) |
마일리지샵 이용 내역 조회 |
공지사항 작성 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/28eb301d-1af1-4498-9a3b-2bd168987e39/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/7bea7e6a-0fab-4082-b406-446702474c90/img.gif?raw=true) |
자주 묻는 질문 작성 |
고객의 말씀 답변 |
![](https://github.com/seoyounglee0105/green_airline_project/assets/105858187/f8fce7d1-ab33-4d66-b7d1-c4b03c7c94a0/img.gif?raw=true) |
![](https://github.com/seoyounglee0105/green_airline_project/assets/106488607/b0c45e0b-c09e-4473-8605-500392a60542/img.gif?raw=true) |