"스프링 부트와 AWS로 혼자 구현하는 웹 서비스" 를 따라서 클론코딩
(기존의 내용을 따라 하되, 몇몇 기술이나, 기능은 바꿔서 내가 원하는대로 해볼예정, 가능하다면 기능도 추가해볼것임)
-
프로젝트 생성 및 깃 연동
-
spring initializr를 이용해서 생성함.
-
jpa를 이용해서 게시물 엔티티들 생성함
-
spring jpa data를 이용해서 제대로 조회가 되는지 테스트 코드 작성중임
-
테스트 코드를 작성까지는 끝냈으나, h2디비연동에 설정하지 않은 테이블들이 생겨나서 확인중임
-
commit
: 3efcfe7
-
3장까지 끝냄
-
서비스 계층, 레파지토리 계층을 만들고, api용 컨트롤러를 만듦
-
작성한 각각의 코드에 대해서 테스트 코드를 작성함
-
추가적으로, 책에서는 조회에 대해서는 브라우저를 이용해서만 테스트 했기 때문에, 직접 조회테스트를 작성함.
-
모든 엔티티에 공통적으로 들어갈, 생성시간, 변경시간을 auditing 기능을 이용해서 처리함.
-
commit
: a1eec0c
-
4장까지 진행
-
4장에서 조회,수정, 삭제 화면을 만듦
-
책에서는 머스테치를 썼지만, 스프링 부트에서 권장하는 타임리프 사용하는 것이 좋다고 생각해서 전부 타임리프로 바꿈
-
머스테치에서는 레이아웃을 사용해서 중복부분을 한번에 관리하지만, 타임리프로 만들때는 fragment를 사용함
-
현재 수정, 삭제 api는 테스트하지 않았기 때문에 다음에 5장을 진행하면서 이 테스트를 만들예정
-
commit
: 029f3ff
-
4장테스트와 5장 도입부 진행(oauth)
-
책에서 안한, 레파지토리의 전체조회, 수정, 삭제, 컨트롤러의 삭제, 서비스계층 조회,전체조회, 수정, 삭제에 대한 테스트 코드를 작성함.
-
google oauth연동을 위해 인증정보를 등록하고 yaml에 등록함.
-
4장 추가 테스트 코드
commit
: b871bee
-
5장 진행
-
OAuth기능 구현(구글 로그인)
-
인증 버튼을 화면에 보여줘야 하는데, 머스테치에서 타임리프로 변경중에 있음
-
OAuth기능 구현
commit
: 3768fd4
-
5장 마무리
-
OAuth기능 완성(네이버,구글)
-
세션 코드를 어노테이션 기반으로 리펙토링함
-
책에서 머스테치로 처리하던 로그인 여부에 따른 버튼출력을 타임리프로 변경함
-
스프링 시큐리티를 테스트에 적용해서 기존에 작성한 테스트가 깨지는 것을 수정함.
-
OAuth관련 설정을 properties파일에서 좀 더 가독성 좋은 yml파일로 수정함.
-
7일차 코드
commit
: aa54a21
-
6장 끝냄
-
aws에 EC2(AMI 2)를 만들고 고정ip(EIP) 설정까지 함
-
로컬에서 ssh로 접속하기 위한 설정을 하고, 현재 사용중인 java 11버전을 설치함
-
책에서는 자바8을 설치하는데, 이는 이미 저장소에 있지만 11은 없기 때문에 따로 설치해야 됨
-
책에서는 os를 아마존에서 지원하는 AMI 1을 썼지만, 현재(2022.05.10)는 AMI 1이 없어지고 AMI 2 만 남아있음
-
AMI 2로 진행할 경우, 책에서 진행하는 호스트이름 변경시에 `/etc/sysconfig/network 파일만 변경하면 적용이 안되어서 추가적인 방법으로 설정했음
-
자바 11설치 참고 :java11 install
-
호스트 이름 변경 참고 : change hostname
-
AMI 1에 대한 지원 종료관련 : AMI 2
-
7장 끝
-
AWS에 관계형디비인 RDS를 만듦(mariaDB)
-
보안규칙을 설정하고, 추후에 이모지 저장을 위해 utf8이 아닌 utf8mb4로 지정해줌
-
이전에 생성한 EC2와 보안규칙을 연결해 서로 연결이 되도록 하였고 EC2에서 접근확인함.
-
인텔리제이에서도 DB에 접근설정을 하는데, 책에서 쓰는 DB Navigator의 경우, 툴자체의 문제인지 RDS에 접속이 안됨(구글링 해봐도 원인을 모름)
-
인텔리제이 유료버전이 제공하는 database tool window를 이용해서 연결하고, 테이블 생성 테스트까지 진행함.
-
참고한 블로그 : db tool
-
8장 끝
-
aws에 프로젝트를 배포하고 스크립트 작성
-
RDS에 테스트시 만들었던 테이블을 sql로 작성해서 생성함
-
운영환경용 yml파일을 별도로 만들어서 배포함
-
실행환경이 aws로 바뀌었기 때문에 oauth에 설정해둔 허용 url들을 이에 맞춰 변경함.
-
스프링 부트 2.5이상부터는 빌드시에 ~plain.jar라는 파일이 하나더 생기는데, 이는 의존성을 가져온것이 아닌, 프로젝트내에 존재하는 자원들로만 jar를 생성하기 때문에, 이것을 실행하면 문제가 됨. 따라서
build.gradle
에 설정을 추가해서 이 파일이 생기지 안도록 함 -
문제해결 참고 : jar 관련
-
9장 끝
-
AWS의 S3,code deploy를 이용해서 배포 구축
-
빌드는 책에서 travis를 사용했지만, github action으로 구축함
-
travis는 일정 크래딧을 다쓰기전까지만 무료이고, 초기 구축시에 github action보다 좀 더 까다롭기도 하고, 무엇보다 깃허브와의 연동은 github action이 더 좋으면서 편리하게 제공하기 때문에 이를 선택함.
-
구축후에 자동 빌드, 배포가 되는지 확인함.
-
참고한 블로그 : github action 적용
-
10장 끝
-
nginx의 리버스 프록시 기능을 이용해서 무중단 배포 구성완료
-
health check를 위한 컨트롤러를 만들고 테스트 코드 작성
-
작성한 코드 및 스크립트
commit
: 8296681