프로젝트 개요
사랑의 진도는 아마추어 창작 교류 행사 운영을 위한 웹 애플리케이션입니다. 행사 소개, 공지 확인, 부스 등록 및 관리, 문의/답변 기능 등, 행사 주최자와 참가자 모두를 위한 기능을 제공합니다.
공통 설계 포인트
메인 페이지


방문자가 행사 정보와 공지를 빠르게 파악할 수 있도록 구성했습니다. 배너 슬라이드와 공지사항 리스트에 연결된 페이지는 Thymeleaf 템플릿을 이용해 동적으로 렌더링되며, 관리자 페이지에서 내용을 수정할 수 있습니다.

배너와 링크를 설정하는 관리자 페이지입니다. 이 페이지에는 반응형 레이아웃이 적용돼있지 않습니다.
회원가입/로그인/비밀번호 변경


Spring Security 라이브러리를 활용해 구현했습니다. 비밀번호는 BCrypt로 암호화돼 서버에 저장됩니다. ID 저장 기능은 로컬 스토리지에 사용자 입력 정보를 저장하는 형태로 구현했습니다. 사이트에서 개인 정보 수집 동의를 받지 않아 이메일 인증 등의 기능을 구현하는 것에 제한이 있었기에, 비밀번호 찾기 기능은 관리자 페이지에서 비밀번호를 지정된 문자열로 초기화시키는 방식을 통해 우회적으로 구현했습니다.

해당하는 페이지입니다. 해당 페이지에는 반응형 레이아웃이 적용돼있지 않습니다.
회원 등급은 USER(일반 회원)/BOOTH(부스 회원)/ADMIN(관리자)로 나뉘며, 이 페이지에서 회원 등업 처리 또한 가능합니다.
어바웃 페이지


행사 정보를 소개하는 페이지입니다. Thymeleaf 템플릿을 통해 렌더링합니다. 수정 버튼은 관리자 계정으로 로그인했을 경우에만 노출되며, 수정 페이지에는 관리자 계정으로만 접근할 수 있습니다. 관련 로직은 Spring Security 세션 처리를 통해 구현했습니다.
게시판

게시판은 INFORMATION/EVENT/♥ 3종으로 구성돼있습니다. INFORMATION, EVENT 게시판은 관리자 계정으로만 게시글을 작성할 수 있으며, ♥ 게시판은 부스 회원 전용 게시판으로서 일반 사용자의 접근이 제한되고, 부스 회원이 게시글을 작성할 수 있습니다. 마찬가지로 Spring Security 세션 처리를 통해 구현했습니다. 게시글 목록은 레스트API, fetch를 통해 렌더링됩니다. 이 때, 관리자 계정으로 작성된 글은 작성자 정보가 '교무처장'으로 마스킹돼 표시됩니다.

게시글 상세 페이지입니다. 게시글 삭제는 관리자 및 작성자 본인만 할 수 있고, 수정은 작성자 본인만 가능합니다. 댓글 기능은 부스 게시판에만 존재하며, 게시판 정보를 Model에 담아 Thymeleaf 템플릿에 넘겨줌으로써 UI 분기 처리를 구현했습니다.

게시글 작성 페이지입니다. 제목/내용이 입력되지 않은 경우 alert창을 띄워 업로드를 막습니다. 비밀글로 작성할 경우 관리자 계정과 작성자 본인만 열람 가능합니다. 비밀글은 게시판에서 제목 앞에 자물쇠 이모티콘이 붙습니다.

게시판 공지는 관리자 페이지에서 설정 가능합니다. 해당 페이지에는 반응형 레이아웃이 적용돼있지 않습니다.
부스 정보

서버에 저장된 부스 정보를 Rest API를 통해 불러옵니다. 부스 태그를 통해 필터링 또한 가능합니다. 부스 참가자 닉네임을 클릭하면 참가자의 X(구 트위터) 계정으로 이동합니다.

부스 등록/수정/삭제는 해당 페이지에서 가능합니다. 부스 수정 버튼 클릭 시에 밑 부분의 부스 등록 폼이 부스 수정 폼으로 전환됩니다. 부스 등록/수정/삭제 로직은 레스트API를 통해 구현했습니다.
QnA

질문 등록은 비로그인 사용자도 가능합니다. 로그인 사용자에게는 자신이 작성한 질문만 확인하는 기능이 제공됩니다.
비밀글은 관리자와 작성자 본인만 확인 가능합니다. 이때, 비로그인 사용자는 비밀글 작성 시 비밀번호 설정을 요구하고, 열람 시 설정한 비밀번호를 입력해 확인합니다. UI 분기는 세션에서 로그인 정보를 받아와 처리합니다.

답변 등록은 위 페이지에서 가능합니다. 상세 보기 버튼을 클릭하면 밑의 답변하기 폼에 질문 내용이 들어옵니다.(Model에 담아 전달)
배운 점
이번 프로젝트를 통해,
아쉬운 점 & 개선 아이디어