1. 테이블 설정하기 

설정해야할 테이블 종류는 다음과 같다. 총 두가지이다

 

-JPA가 사용될 엔티티 테이블

해당 테이블은 Application에서 서버 실행하면 콘솔창에 출력되는 내용을 복사하면된다

내용이 길어서 다 담지는 못했지만, 'Hibernate:' 옆 부분을 복사하면된다 

복사한 내용은 MySQL workbench로 가서  rds와 연결된 db에붙여넣고 테이블을 생성하면된다. 

-> 이부분을 실행하려면 워크벤치와 rds를 연결해야하는데, 하는 방법은 다음 링크를 참고하면 된다

https://scshim.tistory.com/218

-스프링 세션이 사용될 테이블 

해당 테이블 정보는 맥북 기준 cmd+shift+o(알파벳)을 누르고 shcema-sql.sql을 검색해서 나오는 파일에서 확인할 수 있다.

위 테이블과 같은 방법으로 복사해서 mysql에 붙여넣고 테이블을 생성하면된다

 

2. 프로젝트 설정

-build.gradle에 의존성 추가하기 

 

-main/resource 패키지에 application-real.properties 파일 생성 후 내용 추가하기

 

3. EC2 설정

-app 디렉토리에 application-real-db.properties 파일 생성 

이 파일을 생성하는 이유는 RDS도 보안되어야 할 대상이므로 EC2 서버에 직접 설정 파일을 생성해야하기 때문이다

생성 후 내용 추가하기

 

4. deploy.sh 수정 후 실행

 

deploy.sh 마지막 부분을 수정하고

./deploy.sh 명령어로 실행하고 nohup.out 파일을 확인해서 다음이 보이면 성공이다.

 

위 단계까지 마치면 배포가 완료되었다. 

ec2 서버의 도메인을 찾아서 들어가면 내가 배포한 사이트를 확인할 수 있다

 

 

이제 ec2에 배포를 할건데 배포할 때 사용하는 명령어이 많아서 일일이 작성하는 불편함을 줄이기 위해 쉘스크립트에 정리해서 실행해볼 것이다

 

실행 전에 배포가 무엇인지, 쉘 스크립트가 무엇인지 알아보자

배포: 작성한 코드를 실제 서버에 반영하는 것이다

쉘스크립트: .sh를 확장자로 가진 파일을 말한다

 

1. ~/app/step1 디렉토리에 deploy.sh 파일을 생성한다 

여기서는 vim이라는 GUI가 아닌 환경에서 사용할 수 있는 편집 도구를 사용한다. 

파일에 들어가서 'i'를 누르면 파일에 내용 추가가 가능하고, 작성을 완료 했다면 esc키를 누른다.

저장후 파일을 나가야하므로 :wq 를 입력하고 엔터를 치면 파일을 나온다

 

더 자세한 vim 사용 방법은 다음 링크를 참조하면 된다. http://bit.ly/2Q3BpvZ 

2. deploy.sh 내용 

3. 스크립트에 실행권한 추가하기

확인해보면 deploy.sh 파일이 생성된 것을 확인할 수 있다

4. 스크립트 실행하기

5. 이후 nohup.out 파일 열기

deploy.sh 실행 후 vim nohup.out 명령어를 입력하면 된다

 

nohup.out 파일에는 실행되는 애플리케이션에서 출력되는 모든 내용을 가지고 있다

처음 실행시 nohup.out 파일에 APPLICATION FAILED TO START가 나오는데 그 부분은 github에 application-oauth.properties가 없기 때문이다. 이 문제를 해결하기 위해서는 다음 단계를 수행하면 된다 

6. app 디렉토리에 application-oauth.properties 파일 생성

파일 생성후 로컬 main/resources에 있는 application-oauth.properties의 내용을 복사해서 붙이면 된다

7. deploy.sh 하단 부분 수정 

 

수정 후 deploy.sh를 수행하면 kill되는 문제가 발생한다.

이거를 해결하는 방법은 다음 링크에 있으므로 참고하면 된다 

https://heyazoo1007.tistory.com/197

프로젝트에 참고한 책: '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'

ec2에 배포하기에 앞서 ec2서버를 만들고, rds도 만들어야한다. 만드는 법은 다음 링크를 참조하면 된다

배포를 다 한후 기록용으로 남기는 내용이라 일부 부족한 내용이 있을 수 있다. 그런 경우는 책 내용을 찾아보는 것을 추천한다 

 

-ec2 인스턴스 생성: https://victorydntmd.tistory.com/61

-rds 데이터베이스 생성: https://zamezzz.tistory.com/302

이부분 도 역시 추가로 공부할 부분이 있다면 책을 통해 공부하는 것을 추천

 

이제 본격적으로 배포를 해보자 

먼저 github에 있는 코드들을 ec2에 불러와야한다.

1. EC2에 깃 설치

2. 깃버전 확인

3.프로젝트를 저장할 디렉토리 생성

4. 생성한 디렉토리로 이동

5. 깃 클론하기

6. 파일 잘 복사되었는지 확인한다

7. 코드 잘 수행되는지 테스트를 진행한다

되도록이면 테스트에 오류가 없는게 좋으므로 미리 IDE에서 통합 테스트 진행 후 완료된 상태에 하면 좋을 것 같다

8. 테스트 실패 시 코드 수정 후 재 push했을 때

-git pull 입력

-만약 다음과 같이 gradlew 실행 권한이 없다는 메시지가 뜬다면

=> -bash: ./gradlew: Permission denied

chmod +x ./graldew 명령어로 실행권한을 추가한 뒤 다시 테스트를 수행하면 된다

 

이렇게 ec2에 프로젝트를 클론하는 것을 완료하였다 

 

프로젝트에 참고한 책: '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'

코드에서 같은 부분이 반복된다면 수정시 반복되는 모든 부분을 찾아 수정을 해야하는 상황이 발생할 수 있다. 

따라서 이 프로젝트에서 개선해야하는 부분을 찾아서 개선하려고 한다 

-프로젝트에서 개선해야할 부분()

해당 코드는 IndexController에 있는 Index()메소드의 코드인데, index 메소드 외에 다른 컨트롤러와 메소드에서 세션값이 필요하면 그때마다 직접 세션에서 값을 가져와야한다. 따라서 이부분을 개선할 @LoginUser 어노테이션을 만들어보도록 하자

1. @LoginUser

config/auth 패키지에 해당 어노테이션을 작성한다

코드작성은 간단하다 

 

2. LoginUserArgumentResolver

@LoginUser 어노테이션이 기능할 수 있도록 해당 클래스를 같은 패키지에(config/auth) 생성한다 

이는 HandlerMethodArgumentResolver라는 인터페이스를 구현한 클래스이다

HandlerMethodArgumentResolver는 한 가지 기능을 지원하는데, 해당 구현체가 지정한 값으로 해당 메소드의 파라미터로 넘길 수 있다

 

 

-supportParameter()

컨트롤러 메소드의 특정 파라미터를 지원하는지 판단한다

첫째로 파라미터에 @LoginUser 어노테이션이 붙어 있고, 

두번째로 파라미터 클래스 타입이 SessionUser.class인 경우 true를 반환한다 

예를 들면 (@LoginUser SessionUser user)인 경우 기능한다

 

-resolveArgument

파라미터에 전달할 객체를 생성한다

세션에서 객체를 가져온다

 

3. WebConfig

LoginUserArgumentResolver가 스프링에서 인식될 수 있도록 WebMvcConfigurere에 추가하는 과정이다

config패키지에 WebConfig를 생성한다 

 

모든 과정이 끝났다면 @LoginUser 어노테이션으로 코드를 개선하면 된다 

 

개선 전 코드

개선 후 코드 

+ Recent posts