🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

[인프런 워밍업 스터디 클럽 1기 BE] 세번째 발자국

[인프런 워밍업 스터디 클럽 1기 BE] 세번째 발자국

Section - 6 생애 최초 배포 준비하기

 

배포란?

 

배포

최종 사용자에게 SW를 전달하는 과정

  • 전용 컴퓨터에 Spring과 MySql 등이 설치되고 코드가 작성된 우리의 서버를 옮겨 실행시키는 것이다.

  • AWS(Amazon Web Service)같은 클라우드 서비스에서 서버를 빌릴 수 있다.

     

    Profile

    똑같은 서버 코드를 실행시키지만 실행 환경에 따라 설정을 다르게 한다.

     

  • 데이터베이스 설정, 외부 API 키 등...

  • 똑같은 서버 코드를 실행시키지만, local 이라는 profile을 입력하면, H2 DB를 사용하고, dev 라는 profile을 입력하면 MySQL DB를 사용하게 한다.

     

  • H2 DB

    • 경량 Database로 개발 단계에서 많이 사용하며 디스크가 아닌 메모리에 데이터를 저장할 수 있다.

       

    • 데이터가 휘발될 수 있다.

       

    • 개발 단계에서는 변경이 잦기 때문에 오히려 휘발 되는 것이 장점일 수도 있다.

  • application.yml 수정

spring:
  config:
    activate:
      on-profile: local
  datasource:
    url: "jdbc:h2:mem:library;MODE=MYSQL;NON_KEYWORDS=USER"
    username: "sa"
    password: ""
    driver-class-name: org.h2.Driver
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.H2Dialect
  h2:
    console:
      enabled: true
      path: /h2-console
---
spring:
  config:
    activate:
      on-profile: dev
  datasource:
    url: "jdbc:mysql://localhost/library"
    username: "root"
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        dialect: org.hibernate.dialect.MySQL8Dialect

 

git과 github란?

 

git

  • 코드를 쉽게 관리할 수 있도록 해주는 버전 관리 프로그램

  • 다양한 버전으로 개발된 프로그램들을 손쉽게 합치고 관리해 준다.

GitHub

  • git으로 관리되는 프로젝트의 코드가 저장되는 저장소

GitHub에 저장하는 이유

  1. 내 컴퓨터에 있는 코드는 모종의 이유로 소실 될 수 있다.

  2. 배포 과정에서 소스 코드를 옮길 때 활용할 수 있다.

     

git 기초 명령어

작성한 코드 원격 저장소에 올리기

# 해당 프로젝트를 git이 관리하도록 함
git init

# github 저장소와 git 프로젝트를 연결
git remote add origin [repository 주소]

# 모든 파일을 추가
git add .
# 특정 파일/폴더만 추가
git add [파일/폴더 이름]

# 현재 add한 상태를 확인
git status 

# 현재 add된 파일들을 다 제거
git resest

# add한 파일을 메시지와 함께 묶는 커밋
git commit -m “메시지”

# 커밋한 파일을 github 저장소로 보냄
git push

# git push 하는 경우  최초 1회는 반드시 실행해주어야 함
git push --set-upstream origin master

.gitignore

이 파일 안에 작성된 폴더나 다른 파일들이 git에 의해 추적되거나 관리되는 것을 방지함

build/
.gradle/
.idea/

 

AWS EC2

  • Elastic Compute Cloud

  • 탄력적으로 사용할 수 있는 원격 컴퓨터

    • 언제든지 필요할 때 빌리고 반납할 수 있다.

Section - 7 생애 최초 배포하기

 

EC2 접속방법

  1. 다운로드 받은 키 페어(pem key)를 이용하는 방법

    1. 접속하려는 EC2의 IP 주소

    2. 다운로드 받은 키 페어

       

    3. 접속하기 위한 프로그램(git CLI or Mac Terminal)

       

      키 페어의 권한을 닫아준다. (보안 처리)

      chmod 400 경로/키페어명.pem

      보안 처리가 되어야만 접속이 가능하다. 만약, 처리가 되지 않고 접속을 시도하면 unprotected private key file을 사용하고 있다며 접근 자체가 거부 된다.
      접근 명령어

      ssh -i 경로/키페어명.pem ec2-user@IP
  2. AWS 콘솔을 활용하는 방법

    AWS ec2 웹사이트에 접속해서 연결 버튼을 통해 연결한다.

기본적인 리눅스 명령어

# 폴더를 만드는 명령어
mkdir folder1

# 현재 위치에서 폴더나 파일을 확인하는 명령어
ls

# 조금 더 자세한 정보를 확인
ls -l

drwxrwxr-x 2 ec2-user ec2-user 6

# d : folder1은 폴더이다.
# r : 읽는 권한, w : 쓸 수 있는 권한, x : 실행 권한

# rwx/rwx/r-x
# 폴더 소유자의 권한 / 폴더 소유 그룹의 권한/ 아무나 접근했을 때의 권

# 2 : 폴더에 걸려 있는 바로가기 개수

# ec2-user : 폴더 소유주의 이름

# ec2-user : 폴더 소유 그룹의 이름

# 6 : 폴더(파일의 크기) 단위 : byte

필요한 프로그램 설치하기

  1. 코드를 가져오기 위한 git 설치

  2. 서버를 구동하기 위한 java 설치

  3. 데이터베이스 역할을 하는 MySQL 설치

GitHub에서 코드 가져오기

git clone [레포지토리 주소]

EC2 Swap 설정

Swap 설정 : RAM이 부족할 경우 일부 DISK를 사용하게 해준다.

# swqp 메모리 할당
sudo dd if=/dev/zero of=/swapfile bs=128M count=16

# swqp 파일에 대한 권한 업데이트
sudo chmod 600 /swapfile

# swap 영역 설정
sudo mkswap /swapfile

# swap 파일 사용 설정
sudo swapon /swapfile

# swap 성공 확인
sudo swapon -s

빌드하기

# gradlew를 사용할 수 있도록 쓰기 권한 설정
chmod +x ./gradlew

# gradle을 이용해 테스트를 돌리지 않고 프로젝트 빌드
./gradlew build -x test

서버 실행하기

java -jar build/libs/[빌드한 파일명.jar] --spring.profiles.active=dev

 

foreground vs background

foreground

  • 우리가 보고 있는 프로그램

  • ex) PDF 프로그램이 foreground 프로그램

background

  • 우리가 보고 있지 않은데 실행 중인 프로그램

  • ex) 컴퓨터에서의 백신 프로그램

  • c2 접속을 종료해도 서버가 종료되지 않도록 하려면 서버를 background로 동작하게 해야 함

    • nohup [명령어] &

background 서버 다운

  • ps aux : 현재 실행중인 프로그램 목록을 확인

  • ps aux | grep java : java가 들어가는 프로그램을 확인(각 프로그램의 고유 번호 확인)

  • kill -9 프로그램번호 : 해당 프로그램을 종료

 

DNS 적용

  • 가비아에서 도메인 구매

  • DNS 레코드 수정

    • 타입 : A

    • 호스트 : www

    • 값/위치 : EC2에서 빌린 인스턴스의 퍼블릭 IP 주소

 

Section - 8 Spring Boot의 이모저모

build.gradle

  • 빌드 스크립트

  • gradle을 이용해 프로젝트를 빌드하고 의존성을 관리하기 위해 작성

    • plugins : 프로젝트에 적용하고 싶은 플러그인 추가

    • group : 프로젝트의 그룹

    • version : 프로젝트의 버전

    • sourceCompatibility : 프로젝트가 사용하고 있는 JDK 버전

    • repositories : 외부 라이브러리나 프레임워크를 가져오는 장소 설정

    • dependencies : 우리가 사용하는 라이브러리/프레임워크 표시

    • tasks.named('test') : 테스트를 수행할 때 사용할 프레임 워크

     

    Spring Boot의 특징

    1. 간편한 설정

      • xml 대신 어노테이션 기반의 설정 가능

      • 기본적으로 필요한 것을 모두 자동 설정

    2. 간단한 의존성 관리

      • 의존성을 필요한 것끼리 묶어 starter로 관리

      • 필요한 라이브러리나 프레임워크 하나 하나 적을 필요 없음

    3. 강력한 확장성

      • starter 추가만으로 필요한 기술을 도입할 수 있음

         

 

application.yml

  • YAML 문법 사용

  • .yaml 또는 .yml : YAML의 확장자

    • 기본적으로 key : value 형식으로 데이터 정의

    • 각 계층은 들여쓰기를 통해 구분 (이를 통해 중복 제거)

    • value로 들어갈 수 있는 타입 : 참/거짓, 숫자, 문자열(큰 따옴표 사용)

      • 배열은 - 사용

    • #로 주석 표현

  • application.properties

    • applicatoin.yml 대신 사용 가능

    • key : value 형식으로 데이터 기록

    • 들여 쓰기를 통해 중복을 제거할 수는 없음

    • application-프로파일 이름.properties 파일을 새로 만들어 profile 설정

    • 가독성 떨어짐

  • lombok

    • 생성자, getter, setter, equals, toString 등 반복되는 보일러 플레이트 코드(boiler palte code)를 자동으로 생성해줌(반복되는 코드 제거)

    • lombok 도입을 위한 설정

      • lombok 의존성 추가

      • IntelliJ lombok 플러그인 추가

      • intelliJ Annotation Processor 설정

과제

[과제 #6] API 분리

[과제 #7] JPA 적용


블로그를 찾아보며 겨우 혼자 배포한 경험이 있었는데 이렇게 다시 배포의 과정을 차근차근 배워볼 수 있어서 좋았다. 완강을 해서 뿌듯했고 앞으로 남은 미니 프로젝트도 잘 마무리할 수 있으면 좋겠다.

댓글을 작성해보세요.

채널톡 아이콘