교내 시설물 예약 온라인 서비스
현재 교내에서의 여러 시설물의 예약 관리시스템의 대부분이 수기로 작성되어 진행되어 웹 서비스로 대체하기 위한 필요성을 느껴 프로젝트 진행했습니다.
시설 목록을 보여주고 시설을 선택하면 선택 가능한 시간을 보여준다.
시설 조회(main home) / 예약 신청
날짜 및 시간을 선택해 예약한다.
예약 신청 / 예약 조회 / 예약 취소 / 시간별 예약 가능 보기 / 회원 별 예약 목록 보기
로그인이 안되있는 이용자면 로그인 화면이로, 로그인 된 이용자면 예약 세부내용을 보여준다.
회원가입 / 로그인
예약한 내역과 개인정보를 수정할 수 있다.
정보 조회 / 정보 수정 /회원 탈퇴
회원가입 / 로그인
UI 준비중. 날자별 예약 조회 / 예약 취소
React(SPA) + Spring Boot(API Server) 구조로 구현했으며, API Server 를 담당했습니다.
사용한 기술 스택은 아래와 같고 학습하며 블로그 를 정리했습니다.
- Spring Boot
- JPA
- AWS(infra)
- Nginx
- Jekins & Codedeploy (CI/CD)
Swagger 를 사용해 API 명세화 했습니다. 링크 서버가 종료되어 작동하지 않을 수 있습니다.
- Spring Boot
- Java 11
- JPA
- Maven
- AWS - EC2, S3
- PostgreSQL
- Jenkins
- Nginx, Tomcat
- vscode
- Git
React 와 JSON으로 통신 (HTTP API)
- config : swagger 및 webConfig 관리한다.
- controller : 클라이언트와 연결되는 부분으로 API를 관리한다.
- dto : controller 와 service 에서의 request/response 를 관리한다.
- entity : service 와 DataBase 에서의 request/response 를 관리한다.
- filter : 관리자용 url 권한을 관리한다.
- mapper : dto 와 entity를 맵핑해준다.
- repository : JPA/QueryDSL를 관리한다.
- service : 비지니스 로직을 관리한다.
Booking findByBno(Integer bno);
List<Booking> findByFacility(Facility facility);
List<Booking> findByStudents(Students students);
//booking list from Date
List<Booking> findAllByStartTimeBetween(LocalDateTime startTime, LocalDateTime endTime);
//booking list from Date with fno
@Query(value = "select b from Booking AS b where b.facility= ?1 and b.startTime between ?2 and ?3 order by b.startTime")
List<Booking> findAllByFacility(Facility facility, LocalDateTime startTime, LocalDateTime endTime);
@Query(value = "select b from Booking AS b where b.students= ?1 and b.bno= ?2")
Booking findBySidBno(Students students, Integer bno);#!/bin/bash
REPOSITORY=/Users/youngkyoonim/dev_dir/booking_service
PROJECT_NAME=booking_service_01
PACAKE_NAME=board_web_00-0
cd $REPOSITORY/$PROJECT_NAME/
echo "> git pull"
# git pull
./mvnw clean install
cd $REPOSITORY
echo "> Build 파일 복사"
cp $REPOSITORY/$PROJECT_NAME/target/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
CURRENT_PID=$(pgrep -f ${PACAKE_NAME}.*.jar)
echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &- 혼자 배포하고 테스트 하다보니 테스트코드를 작성하지 않은 부분
- OAuth2.0 + JWT 미사용
- 작은 오류 + 배포후 피드백을 받지 못하는 부분
다음 프로젝트에선 JUnit(Test), OAuth2.0 + JWT 사용
추가로 Redis, Spring Batch 도 사용해보면 좋을 것 같다.







