- 명칭 : RECIPE
- 개발 인원 : 1명
- 담당 역할 : 주제선정, 분석/설계, 인프라 구축 및 레이아웃, 개발, 테스트, 시연
- 주요 기능 : 레시피 등록 조회 수정 삭제, 스크랩, 레시피 댓글 답글 대댓글(계층형 구조), 더미데이터를 크롤링 방식으로 수집, AWS인프라로 서비스 무중단 배포
- 개발 환경 : Springboot 2.4.1, Spring Security, Jsp, Mybatis , Aws, Nginx
- 데이터베이스 : MariaDB 10.5
- 형상관리: git
- 간단 소개 : 개인들의 레시피를 공유하는 커뮤니티
- 사이트 : 레시피 공유 커뮤니티
- 시연 영상: 유투브 링크
- Recipe 프로젝트 배포 및 서비스 운영
- 운영 환경에 맞게 프로젝트 전환 및 기능 추가
초기 프로젝트 목표
최신 개발 트렌드에 맞게 기존 recipe 프로젝트를 전환 하려고 한다.
- 전자정부프레임워크 3.9 (spring 4.3.2) => 스프링부트로(2.4.1) 전환
- jQuery => vanilla Js 로 전환 ES6 문법 활용
- Oracle => PostreSQL
- Mybatis => JPA
- Jsp => thymeleaf
- 회원 가입,인증 JWT token
- Java 8, 11 문법 사용
- TDD 기반 개발
- JUnit4 => JUnit5 전환 및 모든 api를 TDD 방식으로 변경한다.
- 전자정부프레임워크 3.9 (spring 4.3.2) => 스프링부트로(2.4.1) 전환
- Oracle => Mariadb(10.5.8)로 변경
- 회원 가입,로그인 기능 구현 (스프링 시큐리티 적용)
- Java 8, 11 문법 사용 및 lombok 적용
- TDD 기반 개발 -앞으로 추가되는 기능에 한하여 진행
- git으로 형상관리
- recipe-v2 project 생성 (https://github.com/seongbinko/recipe-v2)
- thymeleaf index.html 생성
- controller 테스트 수행 ()
- postgreSql mybatis 연동
- 기존의 master를 local_master branch로 변경
- local_01 branch를 master로 변경
- thymeleaf로 회원가입 뷰 생성 (bootstrap4 이용)
- 계정 관련 컨트롤러 생성 (스프링 시큐리티 적용) 및 테스트(Junit5)
- nav, footer 뷰 생성
- 로고 이미지 등록
기존의 프로젝트 버전을 최신트렌드로 변경하는 것도 의미가 있지만 나의 서비스를 배포 운영하는 것으로 개발 방향을 바꾸어서 프로젝트를 진행하려 한다. 그에 따라 프로젝트 계획을 일부 수정한다.
- 전자정부프레임워크 3.9 (spring 4.3.2) => 스프링부트로(2.4.1) 전환
- jQuery =>
vanilla Js 로 전환 ES6 문법 활용-유지 - Oracle =>
PostreSQL-Mariadb로 변경 - Mybatis =>
JPA-유지 - Jsp =>
thymeleaf-유지 - 회원 가입,로그인 기능 구현
JWT token-폼 인증 방식으로 변경 (스프링 시큐리티) - Java 8, 11 문법 사용 및 lombok적
- TDD 기반 개발
- JUnit4 => JUnit5 전환 및
모든api를 TDD 방식으로 변경한다. -앞으로 추가되는 기능에 한하여 진행
- JUnit4 => JUnit5 전환 및
- recipe project 원 소스파일 적용 recipe origin project
- application.properties 수정
- mariadb 설정 변경
- 이미지 파일 저장 디렉토리 수정
- jsp 설정 추가
- 뷰가 thymeleaf에서 jsp로 변경됨에 따라 pom.xml 수정 및 파일 디렉토리 수정
- lombok 적용 (dto, vo 클래스)
- Oracle에서 Mariadb로 바뀜에 따라 mappers/*.xml 파일 쿼리 변경 (계층형 쿼리, 분석함수(row_number()), 조인, 시퀀스 등 )
- 테이블 생성 및 데이터타입 변경
- RECIPE_USER 테이블의 PHONE_NUMBER 컬럼 삭제 및 EMAIL 컬럼 추가 (이메일 인증을 위함)
- 전자정부프레임워크 관련 디렉토리, 파일 제거
- RECIPE_USER 테이블 컬럼 추가 (USER_EMAIL_TOKEN, USER_EMAIL_VERIFIED)
- 스프링 시큐리티 적용
- 회원가입 기능 추가
- 프론트단 유효성 검사
- spring validation 적용
- 패스워드 인코더 사용 ()
- 회원가입시 이메일 인증을 해야 사이트 이용하도록 구현 (토큰 활용)
- footer.html 카피라이트 추가
- TDD 방식으로 개발 (Junit 5)
-
회원가입 기능 추가
- 이메일 인증을 해야지만 서비스 가입 완료 및 이용가능하도록 변경
- 악의적인 이메일 전송을 막기 위해서 1시간에 한번만 인증메일 전송가능 하도록 구현
- 패스워드를 잊어버릴시 이메일로만 로그인 가능한 페이지를 제공하며, 이메일에서 url을 통해 접속시 패스워드 변경 페이지로 이동하여 패스워드 변경 가능하도록 구현
- spring validation 적용
- TDD 방식으로 개발 (Junit 5)
-
프로필 기능 추가
- 로그인이 되면 프로필 페이지가 조회가능 하며 기본 프로필,
- 회원이 되면 프로필 수정 페이지에서 프로필 수정이 가능하며, 기본 정보 수정, 패스워드 변경, 닉네임 변경 등이 가능하다
- spring validation 적용
- TDD 방식으로 개발 (Junit 5)
-
application.properties 분리
- local에서 필요한 것과 dev에서 필요한 것이 분리 되게 변경하였다. (ex 이메일 인증)
-
예외 처리 페이지 구현
- 스프링 디폴트 에러페이지에서 커스텀 페이지로 변경
-
로고 수정 및 기본 아이콘 이미지 변경
-
버그 수정
- 계층형 댓글 기능이 동작하지 않아 쿼리 수정
- 레시피 작성일이 나오지 않는 문제 수정
- 모든 html 타이틀을 "레시피"로 수정
- 기존의 소스 코드 일부 수정
- 모든 테스트를 실행시 전부 통과하도록 변경
-
패키기 구조 정리
TODO List
- 프로필에서 내 게시글, 스크랩한 것을 볼 수 있도록 구현
- 다른 사용자도 내 닉네임을 클릭시 프로필을 조회 할 수 있도록 구현
- 파일업로드 용량 제한
- 패키지 정리
- 프로젝트 파일 war로 배포 및 동작 확인
- jsp는 스프링부트에서 jar로 배포할 시 동작하지 않기 때문
-
프로젝트 버그 수정
- 페이징 처리 limit (endIndex) 변경
- xml sql from 절 대문자로 변경
-
aws rds mariadb 10.5 데이터베이스 생성
- 테이블 생성
- mariadb 테이블 기본값 UTF-8로 변경
-
aws ec2 인스턴스 생성
- kst로 로컬타임 변경
- 80 포트 8080포트로 포워딩
- jdk 11 설치
- nohup으로 서버 실행
- http://ec2-3-36-243-80.ap-northeast-2.compute.amazonaws.com
- Todo
- 리눅스 환경에서 파일 업로드 된 이미지 불러오기
- 도메인 구매
- application-dev.properties 보안을 위해 삭제
- application.auth.properties는 깃허브에 올리지 않고 따로 보관
- 레시피 공유 사이트 url 수정
-
무중단 배포 구현
- github → trivis CI → aws s3 → code deploy → ec2 ← Nginx (8081, 8082) ← client
- .travis.yml 추가
- appspec.yml 추가 (codedeploy 부분)
- 무중단 배포를 위한 profileController 추가
- application-real.properties 추가
- 무중단 배포를 위한 스크립트 추가
- stop.sh, start.sh, health.sh, switch.sh, profile.sh
- appspec.yml 무중단 배포를 위한 hooks 변경
- Ec2 이전으로 application.properties 메일서비스 url 변경
- github → trivis CI → aws s3 → code deploy → ec2 ← Nginx (8081, 8082) ← client
-
recipe_insert.jsp (레시피 등록 기능 disabled 처리)
- License 추가
- 이미지 업로드 EC2 업로드 방식에서 AWS S3 업로드 방식으로 변경