🌱 Spring 프레임워크

IntelliJ IDEA와 Spring Boot로 배우는 환경별 설정 완벽 가이드: 개발부터 배포까지!

itstory(Booho) 2024. 12. 31. 11:53
728x90

 

1. 인텔리제이 파일 생성 및 코드 작성

1.1파일 생성

IntelliJ IDEA에서 src/main/resources 디렉토리에 다음 두 개의 YAML 파일을 생성합니다.

  • application-dev.yml: 개발 환경 설정 파일
  • application-prod.yml: 운영 환경 설정 파일

참고: resources 폴더에 파일을 생성하는 방법은 이전 답변을 참고해주세요. 

1.2 설정 값 입력

각 YAML 파일에 환경에 맞는 설정 값을 입력합니다.

 

application-dev.yml (개발 환경)

YAML
 
spring:
  datasource:
    url: jdbc:mysql://localhost:3307/food_db
    username: 아이디 
    password: 비밀번호
  jpa:
    show-sql: true

jwt:
  secret: 55n7u6mdrnh!@%!@8yvb81y82!#@#1y82vb355n7u6mdrnh!@%!@8yvb81y
  • spring.datasource: 개발용 로컬 MySQL 데이터베이스 연결 정보를 입력합니다.
    • url: jdbc:mysql://localhost:3307/food_db (localhost와 3307은 실제 환경에 맞게 수정)
    • username: MySQL 사용자 이름
    • password: MySQL 비밀번호
  • spring.jpa.show-sql: SQL 쿼리를 콘솔에 출력하여 디버깅을 돕습니다.
  • jwt.secret: JWT 토큰 생성에 사용할 비밀 키 (security 설정 시 필요)

application-prod.yml (운영 환경)

YAML
 
spring:
  datasource:
    url: jdbc:mysql://데이터베이스 서버주소:포트/food_db
    username: 아이디
    password: 비밀번호
  jpa:
    show-sql: false 

jwt:
  secret: 55n7u6mdrnh!@%!@8yvb81y82!#@#1y82vb355n7u6mdrnh!@%!@8yvb81y

server:
  port: 80
  • spring.datasource: 운영 환경의 RDS 데이터베이스 연결 정보를 입력합니다.
    • url: jdbc:mysql://RDS 주소:포트/food_db (RDS 엔드포인트와 포트 번호로 수정)
    • username: RDS 사용자 이름
    • password: RDS 비밀번호
  • spring.jpa.show-sql: 운영 환경에서는 SQL 쿼리 출력을 비활성화합니다.
  • jwt.secret: JWT 토큰 생성에 사용할 비밀 키 (개발 환경과 동일하게 유지하거나 다른 키 사용)
  • server.port: 애플리케이션이 실행될 포트를 80으로 설정합니다. (HTTP 기본 포트)

1.3 활성 프로파일 설정

application.yml 파일 (또는 application-default.yml)을 생성하고, 활성 프로파일을 설정합니다.

YAML
 
spring:
  profiles:
    active: dev  # 개발 환경에서는 dev 프로파일 활성화
  • spring.profiles.active: dev 또는 prod 값을 설정하여 활성화할 프로파일을 지정합니다.

참고:

  • IntelliJ IDEA에서 실행 설정을 통해 활성 프로파일을 변경할 수도 있습니다. (Run/Debug Configurations > VM options)
  • -Dspring.profiles.active=prod 옵션을 사용하여 JAR 파일 실행 시 활성 프로파일을 지정할 수도 있습니다.

1.4 배포 및 버전 관리

코드를 수정할 때마다 JAR 파일을 새로 생성하고 배포해야 합니다. 이를 버전 업이라고 합니다. 버전 업을 통해 변경된 코드를 운영 환경에 반영합니다.

참고:

  • 버전 관리 시스템 (예: Git)을 사용하여 코드 변경 이력을 관리하는 것이 좋습니다.
  • CI/CD (Continuous Integration/Continuous Deployment) 도구를 사용하여 자동으로 빌드 및 배포하는 것을 고려할 수 있습니다.

 

 

2. 코드 패키징

IntelliJ IDEA에서 개발한 Java 프로젝트를 JAR (Java Archive) 파일로 패키징해야 합니다. JAR 파일은 Java 애플리케이션을 실행하는 데 필요한 모든 클래스 파일과 리소스를 포함하는 압축 파일입니다.

  • 프로젝트 구조 확인: 프로젝트의 모든 의존성 (라이브러리)이 pom.xml (Maven) 또는 build.gradle (Gradle) 파일에 정확하게 선언되어 있는지 확인합니다.
  • 빌드 설정: IntelliJ IDEA에서 프로젝트를 빌드하고 JAR 파일을 생성합니다.
    • Maven: mvn clean package 명령어를 사용합니다.
    • Gradle: gradle clean build 명령어를 사용합니다.

  • JAR 파일 확인: target (Maven) 또는 build/libs (Gradle) 디렉토리에 생성된 JAR 파일을 확인합니다.

 

   수명주기 → clean →  더블 클릭 → package 더블클릭
       이 두가지를 완료 하고나면 왼쪽 메뉴바에 타겟이라는 폴더가 생깁니다.
   타겟 →  .jar 프로그램 생성된것을 확인 (파란색 아이콘)

 

3. PuTTY 및 터널링 설정

PuTTY는 SSH (Secure Shell) 클라이언트로, EC2 인스턴스에 안전하게 연결하는 데 사용됩니다. 터널링은 로컬 컴퓨터의 특정 포트를 EC2 인스턴스의 포트로 전달하는 기술입니다. 이를 통해 로컬에서 EC2 인스턴스의 데이터베이스에 접속할 수 있습니다.

  • PuTTY 다운로드 및 설치: PuTTY 웹사이트에서 PuTTY를 다운로드하고 설치합니다.
  • PuTTY 설정:
    • Session: EC2 인스턴스의 퍼블릭 IP 주소 또는 DNS 이름을 입력합니다.
    • Connection > SSH > Tunnels:
      • Source port: 로컬 컴퓨터에서 사용할 포트 번호를 입력합니다 (예: 3306).
      • Destination: localhost:3306 (EC2 인스턴스의 MySQL 기본 포트)을 입력합니다.
      • Add: 버튼을 클릭하여 터널을 추가합니다.
    • Session: 설정을 저장합니다.
  • PuTTY 연결: 저장된 세션을 선택하고 "Open" 버튼을 클릭하여 EC2 인스턴스에 연결합니다.

4. EC2에 Java 17 설치

EC2 인스턴스에 Java 17을 설치해야 JAR 파일을 실행할 수 있습니다.

  • SSH 접속: PuTTY 또는 터미널을 사용하여 EC2 인스턴스에 SSH로 접속합니다.
  • Java 설치: 다음 명령어를 사용하여 Java 17을 설치합니다. (Amazon Linux 2 기준)
Bash
 
sudo yum update

 

Bash
sudo amazon-linux-extras install java-openjdk17 -y



  • Java 버전 확인: java -version 명령어를 사용하여 Java 17이 정상적으로 설치되었는지 확인합니다.

리눅스 명령어 

1. 파일 및 디렉토리 관리

더보기
  • ls: 현재 디렉토리의 파일 및 디렉토리 목록을 표시합니다. (ls -l 옵션을 사용하면 자세한 정보를 볼 수 있어요.)
  • cd: 디렉토리를 변경합니다. (cd ..는 상위 디렉토리로 이동, cd /home/user는 /home/user 디렉토리로 이동합니다.)
  • pwd: 현재 작업 중인 디렉토리 경로를 표시합니다.
  • mkdir: 새로운 디렉토리를 생성합니다. (mkdir new_directory는 new_directory라는 이름의 디렉토리를 생성합니다.)
  • rmdir: 빈 디렉토리를 삭제합니다. (rmdir empty_directory는 empty_directory라는 이름의 빈 디렉토리를 삭제합니다.)
  • rm: 파일이나 디렉토리를 삭제합니다. (rm file.txt는 file.txt 파일을 삭제합니다. rm -r directory는 directory 디렉토리와 그 안의 모든 파일을 삭제합니다.)
  • cp: 파일이나 디렉토리를 복사합니다. (cp file.txt file_copy.txt는 file.txt 파일을 file_copy.txt라는 이름으로 복사합니다.)
  • mv: 파일이나 디렉토리를 이동하거나 이름을 변경합니다. (mv file.txt new_file.txt는 file.txt 파일의 이름을 new_file.txt로 변경합니다.)
  • touch: 새로운 파일을 생성하거나 파일의 타임스탬프를 변경합니다. (touch new_file.txt는 new_file.txt라는 이름의 빈 파일을 생성합니다.)
  • cat: 파일의 내용을 화면에 출력합니다. (cat file.txt는 file.txt 파일의 내용을 화면에 출력합니다.)
  • less: 파일의 내용을 페이지 단위로 보여줍니다. (less long_file.txt는 long_file.txt 파일의 내용을 페이지 단위로 보여줍니다.)
  • head: 파일의 처음 몇 줄을 표시합니다. (head -n 10 file.txt는 file.txt 파일의 처음 10줄을 표시합니다.)
  • tail: 파일의 마지막 몇 줄을 표시합니다. (tail -n 5 file.txt는 file.txt 파일의 마지막 5줄을 표시합니다.)
  • find: 특정 조건에 맞는 파일을 찾습니다. (find . -name "*.txt"는 현재 디렉토리와 하위 디렉토리에서 .txt로 끝나는 파일을 찾습니다.)
  • grep: 파일에서 특정 패턴을 검색합니다. (grep "hello" file.txt는 file.txt 파일에서 "hello"라는 문자열을 포함하는 줄을 찾습니다.)

2. 시스템 정보 확인

더보기
  • uname: 시스템 정보를 표시합니다. (uname -a는 자세한 시스템 정보를 표시합니다.)
  • df: 디스크 사용량을 표시합니다.
  • du: 파일 및 디렉토리의 용량을 표시합니다.
  • free: 메모리 사용량을 표시합니다.
  • top: 시스템 프로세스 정보를 실시간으로 보여줍니다.
  • ps: 현재 실행 중인 프로세스 목록을 표시합니다.
  • who: 현재 로그인한 사용자 정보를 표시합니다.
  • w: 현재 로그인한 사용자와 그들이 실행 중인 프로세스 정보를 표시합니다.
  • date: 현재 날짜와 시간을 표시합니다.
  • cal: 달력을 표시합니다.

3. 사용자 및 권한 관리

더보기
  • useradd: 새로운 사용자를 추가합니다.
  • userdel: 사용자를 삭제합니다.
  • passwd: 사용자 비밀번호를 변경합니다.
  • groupadd: 새로운 그룹을 추가합니다.
  • groupdel: 그룹을 삭제합니다.
  • chown: 파일이나 디렉토리의 소유자를 변경합니다.
  • chmod: 파일이나 디렉토리의 권한을 변경합니다.

4. 네트워크 관리

더보기
  • ping: 네트워크 연결을 테스트합니다. (ping google.com은 Google 서버에 ping을 보냅니다.)
  • ifconfig: 네트워크 인터페이스 정보를 표시합니다.
  • iwconfig: 무선 네트워크 인터페이스 정보를 표시합니다.
  • netstat: 네트워크 연결 상태를 표시합니다.
  • ssh: 다른 컴퓨터에 안전하게 연결합니다.
  • scp: 다른 컴퓨터와 파일을 안전하게 주고받습니다.
  • wget: 웹에서 파일을 다운로드합니다.

5. 시스템 관리

더보기
  • shutdown: 시스템을 종료합니다. (shutdown -r now는 시스템을 재부팅합니다.)
  • reboot: 시스템을 재부팅합니다.
  • halt: 시스템을 정지합니다.
  • poweroff: 시스템 전원을 끕니다.
  • apt: (Debian/Ubuntu) 패키지를 설치, 업데이트, 삭제합니다.
  • yum: (CentOS/RHEL) 패키지를 설치, 업데이트, 삭제합니다.

6. 기타 유용한 명령어

더보기
  • man: 명령어에 대한 매뉴얼 페이지를 표시합니다. (man ls는 ls 명령어에 대한 매뉴얼 페이지를 표시합니다.)
  • echo: 텍스트를 화면에 출력합니다. (echo "Hello, world!"는 "Hello, world!"를 화면에 출력합니다.)
  • clear: 터미널 화면을 지웁니다.
  • history: 이전에 실행한 명령어 목록을 표시합니다.
  • alias: 명령어에 별칭을 지정합니다.
  • |: (파이프) 명령어의 출력을 다른 명령어의 입력으로 사용합니다. (ls -l | grep "txt"는 ls -l 명령어의 출력을 grep "txt" 명령어의 입력으로 사용합니다.)
  • >: 명령어의 출력을 파일에 저장합니다. (ls -l > file_list.txt는 ls -l 명령어의 출력을 file_list.txt 파일에 저장합니다.)
  • >>: 명령어의 출력을 파일에 추가합니다. (echo "New line" >> file.txt는 "New line"을 file.txt 파일에 추가합니다.)

 

5. FileZilla 설정 및 파일 전송

FileZilla는 FTP (File Transfer Protocol) 클라이언트로, 로컬 컴퓨터와 EC2 인스턴스 간에 파일을 전송하는 데 사용됩니다.

  • FileZilla 다운로드 및 설치: FileZilla 웹사이트에서 FileZilla를 다운로드하고 설치합니다.
  • FileZilla 설정:
    • Host: EC2 인스턴스의 퍼블릭 IP 주소 또는 DNS 이름을 입력합니다.
    • Protocol: SFTP (SSH File Transfer Protocol)를 선택합니다.
    • User: EC2 인스턴스의 사용자 이름을 입력합니다 (예: ec2-user).
    • Password: EC2 인스턴스의 비밀번호 또는 키 파일을 사용하여 인증합니다.
    • Port: 22 (SSH 기본 포트)를 입력합니다.
  • FileZilla 연결: "Quickconnect" 버튼을 클릭하여 EC2 인스턴스에 연결합니다.
  • 파일 전송: 로컬 컴퓨터에서 패키징한 JAR 파일을 EC2 인스턴스의 원하는 디렉토리로 전송합니다.

 

 


6. 애플리케이션 실행

EC2 인스턴스에서 JAR 파일을 실행합니다.

  • SSH 접속: PuTTY 또는 터미널을 사용하여 EC2 인스턴스에 SSH로 접속합니다.
  • JAR 파일 실행: 다음 명령어를 사용하여 JAR 파일을 실행합니다.
Bash
 
java -jar <JAR 파일 이름>.jar
Bash
sudo java -jar -Dspring.profiles.active=food_db -Dserver.port=8081 food_db-0.0.1-SNAPSHOT.jar 

 

 

728x90