다음주면 슬프게도 벌써 개강이다.
필자의 학교는 3학년 2학기에 졸업 프로젝트를 하는데, 12주 동안만 진행한다.
짧으므로 개강전에 미리 사용할 서버 환경을 조금이나마 구축하려고 한다. 먼저 할 일은 다음과 같다. (계속 수정할 여지가 있다)
- 새로운 AWS 프리티어 계정 생성
- ec2 인스턴스 생성 후 탄력적 IP 할당
- 가비아에서 도메인 구매
- rds 세팅.
- docker 세팅: 스프링 컨테이너 + nginx + redis(추후에 추가, 다른 컨테이너도 추가할 예정)
- ssl를 사용해 https 적용하기
- 도커와 깃허브 액션을 통합해 CI CD 파이프 라인 구축하기.
일단 이번 포스팅에서는 5번 스프링 컨테이너까지 띄워보겠습니다.
1. 새로운 AWS 프리티어 계정 생성
프리티어 계정으로 가입을 진행했다.
2. ec2 인스턴스 생성 후 탄력적 IP 할당
기존에 작성해둔 포스팅을 기반으로 진행했다. 기록의 중요성을 다시금 느꼈다.
https://devdebin.tistory.com/129?category=1010886
3. 가비아에서 도메인 구매
새로운 도메인을 가비아에서 구입했다. shop은 여전히 550원!!
https://devdebin.tistory.com/130?category=1010886
4. rds 세팅 여기까지 끝
rds와 ec2를 연결하고 rds를 로컬에서도 접근 가능하게했다. 퍼블릭 접근으로 안 열어놔서 접근하는데 꽤 얼탔다.
https://devdebin.tistory.com/134?category=1010886
5. 도커 세팅
지금은 프록시 서버로 nginx 사용할 예정이다.
nginx 컨테이너 1개, 스프링 애플리케이션 컨테이너 1개를 먼저 도커 컴포즈를 사용해 구축하려고 한다.
레디스도 사용할 계획이라 레디스 컨테이너는 추후에 추가하려고 한다.
일단 기초적으로 스프링 컨테이너 부터 띄워보자.
일단 ec2 인스턴스(우분투)에 도커를 인스톨해야했다. 다음과 같은 명령어를 입력했다.
curl -fsSL https://get.docker.com/ | sudo sh
그러면 도커가 인스톨 되고 docker --version 명령어를 통해 도커의 인스톨 여부(버전 여부)를 확인할 수 있다.
아래 글을 참고 했다.
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
그럼 다음으로는 스프링 프로젝트에 Dockerfile을 작성하자. 패키지 제일 위 경로에 파일을 작성하면 된다.
간단하게 컨트롤러 하나만 작성했다.
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/")
public String helloWorld(){
return "hi";
}
}
필자는 아래와 같이 Dockerfile을 작성했다.
#토대가 되는 이미지 FROM. 참고로 주석은 #을 사용하며 문장 맨 앞에서부터 시작해야함.
FROM --platform=linux/x86_64 openjdk:11-jre-slim
#docker build 커맨드를 사용할 때 입력받을 수 있는 인자를 선언한다.
ARG JAR_FILE=build/libs/\*.jar
#이미지에 파일이나 폴더를 추가. ${JAR_FILE} -> (이미지 파일로 복사) app.jar
COPY ${JAR_FILE} app.jar
#컨테이너를 실행할 때 실행할 명령어를 강제 지정한다.
ENTRYPOINT ["java","-jar","app.jar"]
이제 도커 파일을 빌드해보겠다. 도커 이미지를 만들 차례다. 현재 경로인 경우 . 을 끝에 찍어준다.
docker build -t 도커 계정/도커 허브 레포지토리 이름(exUser/project) .
다음으로는 만든 이미지를 도커 레포지토리에 푸쉬합니다.
docker push 도커 계정/도커 허브 레포지토리 이름
아래 이미지와 같이 도커 허브 레포지토리에 잘 올라간 것을 확인할 수 있습니다.
그럼 이제 ec2에 접속해서 도커 허브에서 이미지를 pull 해오겠습니다.
필자는 도커 로그인을 하고 pull을 했습니다.
docker pull 도커 계정/도커 허브 레포지토리
그럼 이제 pull 받은 이미지로 컨테이너를 띄워보겠습니다.
docker run -p 80:8080 도커 계정/도커 허브 레포지토리 (이미지)
성공적이로 도커 허브에서 이미지를 pull 받아 스프링 웹 서버를 띄웠다.
도커를 사용해서 ec2 인스턴스에 스프링 웹 프로젝트를 기반으로 만든 이미지를 사용해 컨테이너를 띄워봤다.
일단 오늘은 여기까지!
이상으로 포스팅을 마칩니다. 감사합니다.
참고자료
'프로젝트' 카테고리의 다른 글
동시성 문제 해결하기 (0) | 2023.06.22 |
---|---|
도메인과 테이블을 설계하고 개선하기 (0) | 2023.06.21 |
NextStep 자바 플레이 그라운드 with TDD, 클린코드 part 3 (0) | 2022.08.14 |
NextStep 자바 플레이 그라운드 with TDD, 클린코드 part 2 (0) | 2022.07.31 |
NextStep 자바 플레이 그라운드 with TDD, 클린코드 part 1 (0) | 2022.07.16 |