토이프로젝트/스프링 부트로 구현한 웹

전 글로 Github Action으로 자동배포를 성공했다. 하지만 문제점이 하나 존재할 때, 이 deploy.yml을 사용하면 지금 현재 모든 파일을 EC2에 올려버린다. 그러면 submodule로 만든 보안을 유지해야 하는 정보들 조차 EC2에 올라가 버린다. 이러면 안 되기 때문에 다른 방법을 찾아봤다. 목표 목표는 EC2에는 appspec.yml과 .jar파일, start.sh, stop.sh 4개만 올릴 것 이다. CodeDeploy의 행동 CodeDeploy는 Zip파일을 받는다. jar 파일은 받지 않는다. EC2에 올리기전 자동으로 zip파일을 압축 해제하고 appspec.yml을 실행한다. 이제 appspec.yml의 코드대로 코드가 수행된다. 흐름 이해 github reposiotry에 ..
CI & CD 소개 코드 버전 관리를 하는 VCS 시스템(Git, SVN 등)에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정을 CI(Continuous Integration - 지속적 통합)이라고 하며, 이 빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정을 CD(Continuous Deployment - 지속적인 배포) 라고 한다. CI 도구들 1. Jenkins Jenkins는 정말 많이 사용한다. EC2에 Jenkins를 설치해야 한다. 그리고 과금이 있다. 그러므로 Pass 2. Travis CI 지금 내가 읽고 있는 책도 Travis CI로 CI/CD를 구현하셨다. Travis를 사용해도 되지만 구글링을 해본 결과 속도가 굉장히 느리다고 한다..
프로젝트를 하다보면 application에 중요한 정보가 들어갈 때가 많다. 예를 들자면 oauth 로그인 정보나 다른 aws access 정보가 있다. 만약 이게 배포가 된다면 엄청난 보안사고가 일어날 수 있다. 이것을 예방하기위해 제일 쉬운 방법은 gitgnore에 올려 그냥 push를 안하면 된다. 그러면 배포할때 따로 관리를 해줘야 하므로 귀찮을 수가 있다. 이번에 선택한 방법은 submodule을 사용해 application을 관리하는 것이다. Git Submodules Git Submodules란 저장소 안에 다른 저장소를 원하는 디렉토리를 복제하는 기능이다. (생활 코딩 : 저장소안에 저장소 - git submodules youtube) 이 유튜브를 보면 자세하게 설명해준다. Git subm..
지금까지 EC2와 RDS는 많이 사용을 해봐서 EC2와 RDS는 기존에 사용하던 것을 그대로 사용했다. 이제 내가 만든 spring파일을 EC2에 배포해볼려고 한다. Git Clone으로 파일 가져오기 git에 파일을 올려놓고 관리하면 좋은점이 바로 clone이다. 이런 EC2 서버나 다른 곳에 한 번에 복사해서 사용할 수가 있다. 깃허브 페이지에서 https 주소를 복사한다. git clone 주소 를 하면 내가 원하는 폴더에 자동으로 복사가 된다. 이제 지금까지 내가 해왔던 test를 한번 돌려보자!! 배포 스크립트 만들기 저번 방학때 배포를 하기 위해서 맨날 똑같은 코드를 쳤던 기억이 있다. git에서 pull을 받고 gradle을 빌드하고 실행하고 있던 파일이 있으면 끄고 재실행 이것을 매번 반복..
이번에는 네이버 소셜 로그인을 구현해 볼 것이다. 네이버 API 등록 네이버 디벨로퍼의 openApi로 이동한다. 거기서 네이버 서비스를 등록해야 한다. 구글 콘솔에서 했던 것과 굉장히 비슷하다. 서비스 URL은 지금 로컬에서 하고 있기 때문에 http://localhost:8080/을 선택했다. Callback URL은 http://localhost:8080/login/oauth2/code/naver를 선택했다. application-oauth.properties에 등록하기 아쉽게도 네이버는 스프링 시큐리티에서 공식 지원을 하지 않는다고 한다. 그러므로 CommonOAuth2Provider에서 해주던 값들도 전부 수동으로 입력해야 한다ㅜㅜㅜㅜ #registration spring.security.oau..
지금 이 프로젝트는 애플리케이션을 재실행하면 로그인이 풀린다. 그 이유는 세션이 내장 톰켓의 메모리에 저장되기 때문이다. 기본적으로 세션을 실행하는 WAS의 메모리에서 저장되고 호출된다. 메모리에 저장되다 보니 내장 톰켓처럼 애플리케이션 실행 시 실행 되는 구조에선 항상 초기화가 됩니다. 톰캣이 재시작 되면서 세션도 초기화 되는 것이다. 세션 동기화 만약 2대 이상의 서버에서 서비스하고 있다면 톰캣마다 세션 동기화 설정을 해야한다. 톰캣 세션을 사용한다. 일반적으로 별다른 설정을 하지 않을 때 기본적으로 선택되는 방식이다. 이렇게 될 경우 톰캣에 세션이 저장되기 때문에 2대 이상의 WAS가 구동되는 환경에서는 톰켓들 간의 세션 공유를 위한 추가 설정이 필요하다. MySQL과 같은 데이터베이스를 세션 저장..
지금까지 짠 코드를 확인하면 같은 코드가 반복되는 부분이 존재한다. 이렇게 같은 코드가 반복하면 이후에 수적이 필요할 때 모든 부분을 하나씩 찾아가며 수정해야 하므로 유지보수성이 떨어진다. 바로 세션값을 가져오는 부분이 개선할만한 가치가 있다. SessionUser user = (SessionUser) httpSession.getAttribute("user"); 이제 이 부분을 메소드 인자로 세션값을 바로 받을 수 있게 만들 것이다. @LoginUser 만들기 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface LoginUser { } @Target(ElementType.PARAMETER) 이 어노테이션이..
스프링 시큐리티는 막강한 인증과 인가 기능을 가진 프레임워크이다. 스프링은 인터셉터, 필터 기반의 보안 기능을 구현하는 것보다 스프링 시큐리티를 통해 구현하는 것을 적극 권장하고 있다. 이번 프로젝트에서는 프로젝트 자체 로그인을 구현하는 것이 아닌 OAuth2.0을 이용해 로그인을 구현해 볼 것이다. 이 책에서는 스프링 부트 2.0을 기준으로 구현했다. 하지만 나는 스프링 부트 3.0을 기준으로 구현할려고 한다. 스프링 부트 1.5 VS 스프링 부트 2.0 OAuth2 연동 방법이 1.5에 비해 2.0에서 많이 달라졌다고 한다. 내가 설계한 프로젝트의 스프링 부트 버전은 3.0이다. 2.0과 OAuth2 에서는 크게 변경되지는 않았지만 SecurityConfig를 다르는 부분이 달라졌다. 만약 스프링 부..
Wooooong!!
'토이프로젝트/스프링 부트로 구현한 웹' 카테고리의 글 목록