AWS
EC2 | 프로세서, 스토리지, 네트워킹, OS 및 구매 모델의 다양한 옵션을 제공하며, 클라우드에서 안전하고 크기 조정 가능한 컴퓨팅을 제공합니다. |
Elastic Beanstalk | AWS Elastic Beanstalk는 Java, .NET, PHP, Node.js, Python, Ruby, Go 및 Docker를 사용하여 개발된 웹 애플리케이션 및 서비스를 Apache, Nginx, Passenger 및 IIS와 같은 친숙한 서버에서 손쉽게 배포하고 확장할 수 있는 서비스 |
RDS | Amazon Aurora, PostgreSQL, SQL Server 및 MySQL 중에서 선택한 관계형 데이터베이스 |
S3 | 확장성, 데이터 가용성, 보안 및 성능을 갖춘 클라우드 객체 스토리지 |
Route 53 | 높은 가용성과 확장성이 뛰어난 클라우드 Domain Name System (DNS) 웹 서비스 |
메타 데이터 넣기
기본적으로 해당 프로젝트에서는 권한 설정을 위해 roles 테이블의 권한을 메타 데이터로 유지합니다.
첫번째 방법으로 sql 파일로 관리를 하는 방법
(두번째 방법으로 할 것이기 때문에 일단 삭제)
두번째 방법으로 SpringBootApplication 에서 run 메소드 작성
@SpringBootApplication
public class SpringbootBlogRestApiApplication implements CommandLineRunner{
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
public static void main(String[] args) {
SpringApplication.run(SpringbootBlogRestApiApplication.class, args);
}
/* 메타 데이터 테이블 작성 */
@Autowired
private RoleRepository roleRepository;
@Override
public void run(String... args) throws Exception {
Role adminRole =new Role();
adminRole.setName("ROLE_ADMIN");
roleRepository.save(adminRole);
Role userRole =new Role();
userRole.setName("ROLE_USER");
roleRepository.save(userRole);
}
}
최초 실행시 run() 메소드가 실행되어 메타 데이터를 테이블에 insert 하도록 합니다.
프로파일 분리 (application.properties)
AWS에 배포하기전에 properties 파일을 환경에 따라 분리
개발환경: dev
운영환경: prod
테스트환경: qa
application.properties
#spring.datasource.dbcp2.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/myblog?userSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
#spring.datasource.username = root
#spring.datasource.password = 3578
# hibernate properties
#spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
#spring.jpa.show-sql=true
#spring.jpa.hibernate.ddl-auto= update
logging.level.org.springframework.security=DEBUG
#spring.security.user.name=kjh
#spring.security.user.password=password
#spring.security.user.roles=ADMIN
###
app.jwt-secret= JWTSecretkey
# 7일
app.jwt-expiration-milliseconds= 604800000
spring.mvc.pathmatch.matching-strategy=ant-path-matcher
spring.profiles.active=dev
spring.profiles.active=dev
활성화할 파일을 지정합니다.
c.s.b.SpringbootBlogRestApiApplication : The following 1 profile is active: "dev"
실행시 활성화한 properties 파일을 알려줍니다.
application-dev.properties, application-prod.properties, application-qa.properties
spring.datasource.dbcp2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/myblog?userSSL=false&serverTimezone=Asia/Seoul&characterEncoding=UTF-8
spring.datasource.username = root
spring.datasource.password = 3578
# hibernate properties
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto= update
환경에 따라 바뀔 수 있는 부분을 파일에 작성합니다.
AWS RDS
자격 증명 설정
MySQL 인스턴스 연결
AWS Elastic Beanstalk
Package Spring Boot Blog App as JAR File
JAR 파일을 AWS Cloud 에 배포하기 위해 패키징 작업
nginx가 서버 내부의 5000번 포트와 연결되기 때문에
5000번 포트로 실행해야 배포할 애플리케이션이 정상적으로 동작됩니다.
application.properties
Maven clean -> Maven install
Maven clean
Maven install
※ Maven clean, install 을 하는 이유를 알아봤습니다.
메이븐이란
자바 프로젝트의 빌드를 자동화 해주는 툴
- 빌드
자바프로젝트 - src - lib/*.jar
complie - package - deploy
Maven 라이프사이클
메이븐이 작동하는 원리
"Maven install" 명령 내리면 complie ~ install 단계까지 모두 실행
각 phase 에는 plugin이 존재 하고 해당 plugin에서 수행 가능한 명령을 goal 이라고 합니다.
Compile
maven compile
소스코드를 컴파일해주는 단계입니다.
성공적으로 컴파일이 된다면 target/classes폴더가 만들어지고 컴파일된 class파일이 생성됩니다.
Test
maven test
테스트 코드를 실행해주는 단계입니다. 실패하면 빌드가 멈춥니다.
이 단계에서 target/test-classes폴더와 안에 컴파일된 class파일이 생성되고 target/surefire-reports 폴더에 테스트 결과가 기록됩니다.
Package
maven package
해당 프로젝트를 지정한 확장자로 묶어주는 단계입니다.
확장자 타입은 pom.xml에 packaging 태그로 묶이게 되고
"artifactId-version.packaging" 형태의 파일을 target폴더안에 생성해줍니다.
install
maven install
로컬 리포지토리 즉 Maven이 설치되어 있는 PC에 배포하게 됩니다.
deploy
maven deploy
원격 리포지토리가 등록되어 있다면 해당 원격 리포지토리에 배포하게 됩니다.
Clean 라이프사이클
maven clean
생성된 target 폴더를 삭제해버립니다.
Site 라이프사이클
문서 사이트를 생성할 수 있도록 지원합니다.
Elastic Beanstalk 서비스에 배포하기
플랫폼 java 설정
자바 11
추가 옵션 구성
AWS RDS username, password
롤링과 배포
배포 방식을 다르게 둘 수가 있는데
"추가 배치를 사용한 롤링" 을 사용해 다운타임 시간없이 추가 배치를 두어 버전 업(재배포)를 할 수 있습니다.
스웨거 ui 접속 테스트 성공!
재배포
Maven clean
Maven install
'Back-end > Spring Boot + REST API' 카테고리의 다른 글
Spring Boot 시큐리티 + JWT 흐름 정리 (0) | 2022.11.23 |
---|---|
Spring Boot 실행 프로세스와 Embedded Servers , CLI 실행 (0) | 2022.09.09 |
Spring boot - blog application (REST API) : Swagger REST API Documentation (0) | 2022.08.09 |
Spring boot - blog application (REST API) : Versioning (버저닝) (0) | 2022.08.04 |
Spring boot - blog application (REST API) : Spring Security + JWT (0) | 2022.08.02 |
댓글