본문 바로가기

spring

springboot 프로젝트 개요

이번 포스팅부터 1인 프로젝트를 진행할 것인데 프로젝트 개요부터 프로젝트 명세와 진행하는 요소들과 더불어 트러블 슈팅 등등 기록하며 포스팅해보도록 하겠다.

 

진행할 프로젝트는 웹 애플리케이션으로 스케줄러로 날짜를 선택할 수 있게끔 만들고 스케줄을 시간별로 어떤 일을 할건지 저장할 수 있고 할 일을 했다면 체크할 수 있는 체크 박스를 두도록 할 것이다.

포스팅 부분도 생성할 것이다. 스케줄과 같이 날짜를 설정하고 날짜를 선택해 날짜에 해당하는 포스팅을 할 수 있게끔 구성할 것이고 보통 필자는 기술 포스팅을 주로 하기 때문에 유튜브나 다른 포스팅, 문서를 찾아보고 진행한다. 멀티 모니터를 사용하지 않는 입장으로 유튜브를 틀어놓고 포스팅하기 불편함을 겪어 포스팅하는 부분에 URL을 삽입하는 곳을 두고 유튜브가 작은 별도의 화면으로 나오게 되고 아래에 텍스트 박스에 포스트를 남길 수 있다. 개인적인 포스팅으로 타인 것을 타인이 확인하지는 못한다. 유튜브 화면을 보고 싶지 않다면 토글 버튼을 두고 눌러서 화면을 숨길수도 있게끔 구성할 것이다.

포스트와 스케줄을 날짜를 선택해 데이터를 저장하게끔 하는데 이 데이터를 저장할 때 날짜에 맞게 저장이 되고 날짜 선택시 저장되어 있는 데이터를 가져와 볼 수 있게 하고 선택된 날짜에 데이터를 저장할 수 있다. 이미 저장된 데이터를 수정할 경우 수정된 데이터로 저장하게 하는 스케줄러 웹 페이지인 이름은 Jlaner를 만드려고 한다.

이름이 Jlaner인 이유는 mbti의 계획적인 부분인 J와 Planer에서 P는 즉흥적인 성향이니 J를 사용해 Planer에 대입해 Jlaner로 하기로 했다. 

 

개요는 끝났으니 프로젝트 설계를 알아보자.

요구사항을 정리하고 유스케이스를 만들고 유스케이스 명세서 작성, EER 다이어 그램 순서로 진행하려고 한다.

 

요구사항 정리

 

요구사항으로 회원은 로그인을 통해서만 진행할 수 있다.

회원은 로그인 후 날짜를 선택해서 저장되어 있는 스케줄이나 포스팅 데이터를 확인할 수 있다.

저장되어 있지 않은 날짜의 데이터라면 해당하는 날짜의 해당하는 포스팅이나 스케줄이 데이터가 저장된다.

만약 데이터가 저장되어 있다면 데이터를 수정할 수 있게끔 할 것이다.

 

다음은 유스 케이스를 확인해보자.

 

Actor로 Member와 Youtube를 두었다. Member는 시스템의 기능을 수행할 엑터이고 Youtube는 외부 액터로 원래 시스템인 Jlaner의 외부에 두어야 하지만 편의상 내부에 두었다. 해당 시스템 구성에서는 서드파티로 구분된다.

 

이외에 usecase를 통해 관계를 나타내고 포함과 확장으로 표현했다.

로그인 후 날짜를 선택해야 하며 이후 포스팅과 스케줄을 통해 데이터를 저장하거나 확인할 수 있게 한다.

 

더욱 자세한 흐름을 위해 유스 케이스 명세서를 작성해 보도록 하겠다.

유스케이스 명 Jlaner
액터명 주액터: Member
부액터: Youtube
목표(개요) 개인의 planer로 스케줄을 관리하고 포스팅을 한다.
시작 조건 스케줄과 포스팅을 하기 위해 로그인을 진행해야 한다.
이후 조건 사용자가 지정한 날짜의 저장한 포스팅과 스케줄을 확인할 수 있다.
정상 흐름 1.사용자는 로그인 화면에서 소셜 로그인을 한다.
1-1.회원가입을 하지 않았다면 구글, 네이버, 카카오 중 회원 가입을 한 후 로그인을 한다.
2.날짜를 설정한다.
2-1.날짜 설정시 저장된 데이터가 있다면 저장되어 있는 데이터를 확인할 수 있다.
3.Schedule 선택 시 각 시간대에 스케줄을 입력하고 시간대 옆 체크 박스를 통해 수행 여부를 체크할 수 있다. 저장시 해당 날짜에 데이터가 저장이 된다.
4.Posting 선택 시 유튜브를 화면 안에서 실행할 수 있다. 텍스트 박스에 원하는 포스팅을 진행할 수 있다. 저장시 해당 날짜에 데이터가 저장이 된다.
4-1. 유튜브를 실행하지 않아도 되며, 실행시에도 화면을 숨길 수 있다.
대체 흐름 2A: 사용자가 아무 데이터도 작성하지 않았는데 저장할 경우
 1.내용이 없다는 알람을 통해 데이터를 채우도록 한다.
3A: 사용자가 아무 데이터도 작성하지 않았는데 저장할 경우
 1.내용이 없다는 알람을 통해 데이터를 채우도록 한다.

 

위는 유스케이스의 명세서로 유스케이스를 통한 흐름을 자세하게 나타내는 명세서이다.

위 흐름을 지킬 수 있도록 설계하고 구성할 것이다.

 

EER 다이어그램

 

위 다이어그램은 데이터 베이스에서 사용할 테이블을 설계한 것이다. 개인적인 스케줄과 포스팅을 관리하는 플래너를 만들기 때문에 복잡한 구조를 가져가지는 않는다. 각 스케줄과 포스팅 데이터를 저장할 테이블과 사용자 정보를 저장할 테이블 3개의 테이블을 가져가기로 했다.

차후 구조는 바꿀 수도 있고 추가되거나 할 수 있다.

 

 

개발을 하기 전 아키텍처를 구성해 보았다. 위 아키텍처를 통해 배포해 본 적은 없다. 도커, 레디스, 엔진엑스를 제외하고는 배포해본적 있지만 리버스 프록시를 통한 무중단 배포, 레디스를 통해 세션 관리를 위한 서버를 구성하듯 필자는 Oauth2 소셜 로그인만 구성할 거라 필요 없을 것이라 생각했지만 리프레시 토큰을 mysql에 저장하고 사용하는 것은 리소스가 많이 사용될 것 같아서 별도로 리프레시 토큰을 저장하고 인증에 사용하기 위해 레디스를 세션 저장소와 같이 사용하려 했다. 이후 각 레디스와 스프링 서버를 도커로 실행할 것이다. 자세한 건 배포를 진행할 때 포스팅으로 진행하도록 하겠다.

 

지금까지 진행할 프로젝트의 개요를 알아보았다. 이후 차차 포스팅하면서 진행하도록 하자. 필자가 계획하고 있는 기간은 2주이다. 개인프로젝트이고 익숙하지 않은 것을 다루기도 하다 보니 좀 더 걸릴 수 있겠다 싶어 간단한 프로젝트지만 조금 기간을 더 가져갔다.

내일부터 개발에 착수해서 프론트 구성부터 진행해보려 한다. html, css, js, thymeleaf를 사용할 것이다.