ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL 자바 스프링부트 서버개발 올인원 : 43-46강
    Java 2024. 5. 15. 16:25

    이전 강의에서 AWS EC2서버를 빌리는 것 까지 했다.

    이번 강의에서는 빌린 EC2서버에 접속하는 것이다.

     

    우선 EC2서버에 접속하는 방법으로는 2가지가 있다. 

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

    2. AWS콘솔을 활용해서 접속하는 방법 


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

    준비물

    - 접속하려는 EC2의 IP주소(퍼블릭 IP주소)

    - 서버를 열면서 다운로드 받았던 키 페어

    - 접속하기 위한 프로그램(git CLI) 

     

    우선 다운로드 받았던 키 페어의 권한이 열려있는 상태이기 때문에 권한을 닫아주는 작업부터 해야한다.

    git CLI에서 chmod 400 [다운로드 받은 키페어 파일주소(보통 드래그해서 가져옴)]

    보안처리를 해야만 에러가 발생하지 않음

    출처 : 인프런 -  자바와 스프링 부트로 생애 최초 서버 만들기

    보안처리를 하지 않으면 위와같은 에러가 발생함

    출처 : 인프런 -  자바와 스프링 부트로 생애 최초 서버 만들기

    ssh -i [파일경로] ec2-user@[ec2ip주소]

    명령어를 입력하게 되면 EC2 서버에 접속할건지 묻는 메세지가 나오게 된다!


    2. AWS콘솔을 활용해서 접속하는 방법 

    그냥 AWS홈페이지에서 위에 연결버튼을 누르고 아래 연결버튼을 누르면 끝난다...


    가장 기본적인 리눅스 명령어 5가지

    mkdir : 폴더를 만드는 명령어

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

    ls -l : 현재 위치의 폴더나 파일의 정보를 더 자세하게 확인하는 명령어


     

    출처 : 인프런 -  자바와 스프링 부트로 생애 최초 서버 만들기 ls -l 명령어 사용시 화면

    파일의 자세한 정보에는 drwxrwxr-x 라는 것을 확인할 수 있는데 r은 읽을 수 있는 권한, w는 쓸 수 있는 권한, x는 실행할 수 있는 권한을 의미한다.

    반복되는 부분에는 위와같은 정보이다.

    고로 소유자와 소유그룹의 권한은 읽기, 쓰기, 실행

    다른사람들은 읽기와 실행만 된다는 것을 알 수 있다.

     

    뒤에 drwxrwxr-x 뒤에있는 2의 의미는 폴더에 걸려있는 바로가기 개수이다.

    ec2-user : 해당 폴더의 소유주(주인)이름

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

    6 : 해당 폴더(파일)의 크기, byte단위

    22 12:13 : 파일의 최종 변경 시각


     

    cd : 폴더 안으로 들어가는 명령어

    cd .. : 상위 폴더로 올라가는 명령어

    pwd : 현재 위치를 확인하는 명령어

    rmdir : 비어 있는 폴더(디렉토리)를 제거하는 명령어


    리눅스에서 스프링 서버 배포를 위한 프로그램 설치

    패키지 최신화 명령어
    sudo yum update

    sudo - 관리자의 권한으로 실행한다는 의미

    yum - 리눅스 패키지관리 프로그램(gradle과 비슷한 역할)을 의미

    yum update - 현재 설치된 패키지들을 최신화하는 것을 의미

    git 설치 명령어
    sudo yum install git

    yum을 이용해 프로그램을 다운로드 한다.

    자바 17버전 설치 명령어
    sudo yum install java-17-amazon-corretto -y 

    -y 는 설치시 모든 요청을 yes로 답함

     

    MySQL 설치 명령어
    sudo dnf install  https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
    sudo dnf install mysql-community-server

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    GPG KEY와 관련된 에러가 발생할 수도 있는데,
    The GPG keys listed for the "MySQL 8.0 Community Server" repository are already installed but they are not correct for this package. 

    📌해결방법으로 아래 명령어를 실행하면 된다.
    sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
    sudo yum update
    sudo dnf install mysql-community-server

    기존에 설치된 GPG KEY를 갱신하고 yum update후 다시 설치하는 방법이다.
    MySQL 잘 설치됐는지 확인하는 명령어
    sudo systemctl status mysqld

    systemctl은 현재 보이지 않는 프로그램을 관리하는 명령어

    MySQL 재시작하는 명령어
    sudo systemctl restart mysqld

    📌처음 MySQL을 설치하면 inactive로 설치는 됐지만 활성화되지 않은 상태임 때문에 재시작해줘야 한다.

    sudo systemctl status mysqld 로 확인한 inactive 상태
    재시작후 active된 상태

    MySQL 8의 임시 비밀번호를 확인하는 명령어
    sudo cat /var/log/mysqld.log | grep "A temporary password"

    설치시 임시로 저장된 비밀번호를 확인한다.

    MySQL 접속 명령어
    mysql -u root -p

    root : 루트계정

    -p : 패스워드 입력하겠다는 의미

    📌패스워드 입력칸에 아무것도 눌리지 않아도 입력이 되고 있는 것이다. (비밀번호 입력시 **로 표시되는 것 처럼 아무것도 안나옴..)

    임시 비밀번호 변경 SQL문
    ALTER user 'root'@'localhost'
    IDENTIFIED WITH mysql_native_password BY "비밀번호";

    임시비밀번호를 사용해서 로그인한 후 새로운 데이터베이스를 만드려고 하면 에러가 발생한다.

    임시 비밀번호를 변경한 다음 데이터베이스를 만들어야한다.

     

    📌비밀번호 규칙은 대문자/소문자/숫자/특수문자 다 포함되어야한다.

    📌주의사항

    spring:
      config:
        activate:
          on-profile: local
    
      datasource:
        url: "jdbc:mysql://localhost/library"
        username: "root"
        password: "1234"
        driver-class-name: com.mysql.cj.jdbc.Driver
    
      jpa:
        hibernate:
          ddl-auto: none #스프링이 시작할 때 DB에 있는 테이브을 어떻게 처리할지 (DB와 매핑할 때 다른경우 어떻게 처리할지 creat/create-drop..등등이 있음)
    
        properties:
          hibernate:
            show_sql: true #JPA를 사용해서 DB에 SQL을 날릴 때 SQL을 보여줄건지
            format_sql: true #SQL을 보여준다면 보기좋게 포맷팅을 해서 보여줄지
            dialect: org.hibernate.dialect.MySQL8Dialect #방언, 사투리라는 뜻으로 SQL문법이 조금 다른 경우 SQL을 수정해준다.(현재 mySQL8에 맞게 설정)

    EC2서버에서 사용하기 위해서는 위의 yml 파일에서 설정해줬던 password를 EC2에 설치했던 MySQL 비밀번호와 일치시켜줘야한다.(profile하나를 다르게 다시 만들면 될 듯)

     

    이후 ec2 서버에서 mysql에 들어가 테이블들을 생성해주면 됨


    ec2서버에 github 리포지토리 클론, 빌드, 배포하기

    git clone [github 리포지토리 주소.git]

    가져오게 되면 ls로 library-app이 설치된 것을 볼 수 있다.

     

    📌프리티어로 빌린 ec2서버의 성능이 좋지 않아서 빌드나 실행시 렉이 많이 걸릴 수 있다.

    🎯따라서 메모리가 부족한 경우 디스크를 사용할 수 있도록 설정할 수 있는데 이것을 Swap 설정이라고 한다.

    Swap 설정
    프로그램이 실행되면 원래 RAM을 사용하지만 일부 DISK를 사용하게 해준다.
    장기기억 장치인 DISK가 단기 기억장치인 RAM보다 느리긴 하지만, RAM이 과부하 걸리는 것보다는 나음

    Swap 설정을 위한 명령어
    # swap 메모리를 할당한다.
    sudo dd if=/dev/zero of=/swapfile bs=128M count=16

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

    # swap 영역 설정
    sudo mkswap /swapfile

    # swap 파일을 사용할 수 있도록 만든다.
    sudo swapon /swapfile

    # swap 성공 확인
    sudo swapon -s

     

    빌드를 하기 위해 gradle을 사용할 수 있도록 설정해야한다.(최초 사용시)
    chmod +x ./gradlew

    chmod : chage mode

    +x : 쓰기 권한을 부여

    ./gradlew : gradlew에 대해서

    gradle을 사용한 프로젝트를 빌드
    ./gradlew build -x test

    gradle을 이용해 빌드한다.

    -x test : 테스트를 돌리지 않는다. (테스트 코드가 없기도 하고, 프리티어니까..성능을 위해서..)

     

    빌드된 프로젝트 실행
    java -jar build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=distribute

    어떤 profile을 쓸건지 직접 설정해줄 수 있다.

     

    jar파일만 실행했는데, 서버가 동작하는 이유는 SpringBoot에 톰캣이 내장되어 있기 떄문이다. 

     

    이제 서버에 들어가기 위해서 EC2 방화벽 설정을 해줘야한다.

    보안탭 - 보안그룹 - 인바운드 규칙 편집으로 접속가능한 아이피를 지정해주면 된다.  

    설정해주면 ec2서버의 공용 ip를 가지고 8080포트로 접속할 수 있게 된다!

    http://3.34.51.118:8080/v1/index.html

    이런식으로..

     

    ctrl + c 눌러서 리눅스에서 돌아가고 있는 스프링 서버를 닫을 수 있다.

    빌드된 프로젝트 제거
    ./gradlew clean

     


    AWS EC2 접속을 종료해도 서버 실행시키기

    foregroud와 background

    1. foreground

    우리가 보고 있는 프로그램을 말한다. 

    문서를 보고 있다면, PDF프로그램이 foreground프로그램

    인프런 강의를 보고있다면, 브라우저가 foreground프로그램이 된다.

     

    2. background

    우리가 보고있지 않은데 실행중인 프로그램을 말한다.

    컴퓨터에서 조용히 돌아가고 있는 백신이 background프로그램이라 할 수 있다.

    음악을 틀고 게임을 하면, 음악 재생 프로그램이 background프로그램이 된다.

     

    그렇다면 EC2서버를 백그라운드로 돌게 만들어야한다.

    background로 동작하게 만드는 명령어 nohup
    nohup [명령어] &

    위의 명령어를 사용해 앞뒤에 붙여서 실행 명령어를 입력해주면 백그라운드로 실행된다.
    nohup java -jar library-app/build/libs/library-app-0.0.1-SNAPSHOT.jar --spring.profiles.active=distribute &

    nohup을 써서 실행하게 되면 nohup.out이라는 폴더가 생성되는데, 만들어놓은 프로젝트에 nohup.out폴더를 만드는 것 보다 프로젝트 밖에 만드는게 이상적이기 때문에 cd로 디렉토리 위치를 한칸 위로 올라가서 실행시킨다.

    background로 돌아가는 서버 종료 명령어
    kill -9 [프로그램번호]

    프로그램 번호는 아래 ps aux를 통해서 확인 가능하다.

    ps aux : 현재 실행중인 프로그램 목록을 확인할 수 있다.

    ps aux | grep java : 실행중인 프로그램중 java가 들어가는 프로그램을 확인한다.

    ps aux ❘ grep java 명령어 실행 결과

    여러 실행중인  프로그램 중 java가 들어가는 3줄을 찾을 수 있다.

    그 중 우리가 입력했던 명령어를 확인할 수 있고 해당 프로그램 번호는 29223 이다.


    파일에 접근 하는 방법

    1. 파일에 직접 들어가는 방법
    vi [파일이름]

    vi : 리눅스 편집기인 vim을 사용해서 파일을 연다.

    vi로 접속하면 esc를 누르고 :q 를 입력해서 종료가능하다

    2. 파일의 전체 내용물을 확인하는 방법
    cat [파일이름]

    cat : 파일에 있는 내용물을 모두 출력하는 명령어

    파일 내용물의 양이 많지 않고, 실시간 업데이트가 잘 되지 않는 파일을 확인할 때 주로 사용한다.

    ctrl + c 로 종료 가능

    3. 파일의 끝 부분을 확인하는 방법
    tail [파일이름]

    현재파일 끝부분을 실시간으로 출력해준다.
    tail -f [파일이름]

    tail : 현재 파일의 끝 부분을 출력하는 명령어

     

Designed by Tistory.