SNS 제작 (스웨거, CI/CD)

개발연습생log·2022년 12월 21일
0

SNS 제작

목록 보기
1/15
post-thumbnail

✨ 개요

🏃 목표

API 명세서를 추가하고, CI/CD를 구축하여 AWS EC2에 배포하자.

📢 요구사항

  • 깃랩 리포지토리를 생성하고 CI/CD를 구축한다.
  • 스프링 부트 Swagger를 추가한다.
  • AWS EC2에 프로젝트를 배포한다.

✅ TO DO

  • Swagger 추가
  • EC2에 Docker 세팅
  • CI/CD 구성
  • Gitlab에 프로젝트 빌드해서 올리기

🔧 구현

Swgger 추가

의존성 추가

  • implementation "io.springfox:springfox-boot-starter:3.0.0"
  • implementation "io.springfox:springfox-swagger-ui:3.0.0"

SwaggerConfig 빈 등록

@Configuration
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }
}

application.yml 수정

spring:
  mvc:
    pathmatch:
      matching-strategy:ant_path_matcher

EC2에 Docker 세팅

Docker란?

  • 프로그램을 실행 시키기위해서 수많은 실행파일과 라이브러리가 필요하다.
  • 이것을 host에 설치하는 일은 번거롭다.
  • 컨테이너에 프로그램에 필요한 라이브러리 실행파일을 담고 host 운영체제로 프로그램을 실행시킨다.
  • 위 역할을 Docker가 한다.
  • 도커는 리눅스 기반으로 실행되기 때문에 리눅스에서 도커를 설치해야 성능이 올라간다.

Docker 명령어

  • 도커 실행
    • docker run 이미지명
  • 도커 컨테이너 확인
    • docker ps
    • docker ps -l
      • stop한 컨테이너까지 확인
  • 컨테이너 중지
    • docker stop 컨테이너 명, id
  • 컨테이너 재시작
    • docker start 컨테이너 명
  • 도커 로그 확인
    • docker logs 컨테이너 이름
  • 컨테이너 삭제
    • docker rm 컨테이너 명 -f
  • 이미지 삭제
    • docker rmi 이미지 명
  • 태그가 붙지 않은 이미지 삭제
    • docker image prune

Dockerfile

FROM gradle:7.4-jdk11-alpine as builder
WORKDIR /build

# 그래들 파일이 변경되었을 때만 새롭게 의존패키지 다운로드 받게함.
COPY build.gradle settings.gradle /build/
RUN gradle build -x test --parallel --continue > /dev/null 2>&1 || true

# 빌더 이미지에서 애플리케이션 빌드
COPY . /build
RUN gradle build -x test --parallel

# APP
FROM openjdk:11.0-slim
WORKDIR /app

# 빌더 이미지에서 jar 파일만 복사
COPY --from=builder /build/build/libs/*-SNAPSHOT.jar ./app.jar

EXPOSE 8080

# root 대신 nobody 권한으로 실행
USER nobody
ENTRYPOINT [                                                \
   "java",                                                 \
   "-jar",                                                 \
   "-Djava.security.egd=file:/dev/./urandom",              \
   "-Dsun.net.inetaddr.ttl=0",                             \
   "app.jar"              \
]

배포 스크립트

pullContents=$(docker pull registry.gitlab.com/goodjav141592/finalproject_kimjisu_team7)

if echo $pullContents | grep "Image is up to date" ; then
  echo 'Image already up to date'
  exit 0
fi

echo "배포를 시작 합니다."
docker stop sns
docker rm sns
docker run -p 8080:8080 --name sns -d registry.gitlab.com/goodjav141592/finalproject_kimjisu_team7
docker image prune -f

크론탭

  • 크론탭 에디터
    • crontab -e
  • 크론탭 내용 확인
    • crontab -l
  • 크론탭 삭제
    • crontab -r
  • 크론탭 설정
    • * * * * 명령어
  • 주기

CI/CD 구성

CI/CD란?

빌드와 배포를 자동화하는 것을 의미한다.

깃랩 CI/CD 스크립트

stages:
  - dockerbuild-push

package:
  only:
    - main
  image: docker:latest
  stage: dockerbuild-push
  services:
    - docker:dind
  before_script:
    - docker login registry.gitlab.com -u $GITLAB_USER -p $GITLAB_PASSWORD
  script:
    - docker build -t registry.gitlab.com/$GITLAB_USER/$PROJECT_NAME .
    - docker push registry.gitlab.com/$GITLAB_USER/$PROJECT_NAME

Gitlab에 프로젝트 빌드해서 올리기

Swagger UI


🌉 회고

  • Docker가 무엇인지 정확하게 알지 못한 체 계속 사용해왔다.
  • 오늘 CI/CD를 구축하면서 Docker의 생태계에 대해 조사를 하면서 VM과 Docker의 차이점을 알게 되었다.
profile
주니어 개발자를 향해서..

0개의 댓글