맥(Mac M2) war파일 생성 후, 서버 연결해서 실행하는 방법
https://extsdd.tistory.com/259
[아마존 AWS EC2] 서버 인스턴스 삭제하기 / 프리티어 종료! / Elastic IP 삭제
이번에 아마존 EC2 인스턴스를 12개월 동안 무료로 사용할 수 있는 프리티어 기간이 끝난다는 메일을 받았다. 아무생각 없이 영원히 이용할 수 있을 것 같았던 EC2가.. 끝이라니..! 무료 사용 종료
extsdd.tistory.com
<시나리오>
- 자바설치
- mysql서버설치
- aws인 경우 서버 보안그룹 설정
- (window)환경에서 원격 mysql서버에 접속해보기
- 개발 서버에서 프로젝트 빌드
- FTP통신을 이용해서 빌드 된 파일을 전송
- 또는 깃으로 다운로드하고 리눅스에서 직접빌드 (서버스펙이 요구됨 , AWS 프리티어인 경우 어림도 없음)
- 스프링부트인 경우 백그라운드로 war파일 실행
- AWS인 경우 서버 스펙이 낮기 때문에 swap으로 메모리설정
일단 나는 우분투와 로컬의 차이 그리고 접속방법에 대해 잘 알지 못했다..
그래서 로컬에 자꾸 java와 mysql을 설치함 ㅋㅋㅋㅋㅋ
서버에 설치하는 방법은 아래의 순서대로 진행하면 되고, 서버에 접속하기 위해서는 ubuntu를 설치하고 접속하면 된다.
aws에서 탄력적ip주소와 pem파일의 key를 생성하고 인바운드 규칙 등등... (따로 정리해야겠다.) 설정한 다음
맥은 터미널에 바로
ssh -i 이름.pem ubuntu@탄력적IP주소
를 입력해서 서버로 접속하면 된다.
그러면 터미널이 서버로 바뀌는듯...? 그 다음 자바와 톰캣 등등 설치를 진행하면됨!...
Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-1031-aws x86_64)
이런 메세지와 함께
ubuntu@ip-********(내아이피):~$
이렇게 실행되면 서버로 접속완료!!!!!! (감격...)
apt로 외부 파일 설치 (웹서버구현)
- 향상된 패키지 관리도구 apt
- 외부 파일을 리눅스에 설치하는 방법으론 크게 3가지가 있습니다.
- wget명령어로 다운하기 (window의 브라우저와 비슷합니다.)
- FTP통신으로 tar파일을 옴기고 압축해제하고 실행하기
- apt명령문으로 파일 다운받기
실행(1.자바설치)
apt설치 시 환경변수 설정은 자동으로 이루어 집니다.
1.sudo apt-get update
2.sudo apt search openjdk-11
3.sudo apt-get install openjdk-11-jdk
자바버전 or 컴파일 버전 확인하기
1.java -version
2.javac -version
ubuntu@ip-*********:~$ java -version
openjdk version "11.0.18" 2023-01-17
OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
ubuntu@ip-*********:~$ javac -version
javac 11.0.18
자바 실행파일 찾기
1. which java
ubuntu@ip-*********:~$ which java
/usr/bin/java
환경변수 등록확인
1. echo $PATH
- 모놀리식 아키텍쳐 웹서버 vs MSA기반 아키텍쳐버 웹서버
- 대표적인 웹서버 구현 아키텍쳐는 하나의 운영체제 위에 필요한 서비스를 모두 묶어서 구축하는 형식입니다.
- 전통적인 서버 구축 방식입니다.
- 하나의 서비스 또는 어플리케이션이 하나의 거대한 아키텍처를 가질 때, Monolithic 하다고 합니다.
- 데이터베이스는 같은 운영체제에 묶을 수도 있고, 다른 서버에 분리해서 구축할 수도 있습니다.
- RDS and EC2데이터베이스 and 웹서버에 데이터베이스
- 예제에서는 DB도 묶어서 실습 합니다.
실행(2.mysql설치)
apt방식으로 mysql을 받고 설치한다.
1.sudo apt search mysql
2.sudo apt-get install mysql-server
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
등등 여러개의 잡다한 패키지를 설치하는 과정이 나온다. 중간에 [Y/N]을 입력하는 구간이 나오면 Y를 입력해주면 쭉 실행되면서 설치된다/
다음으로 mysql설치 후 초기 비밀번호 설정을 해주면 된다.
1.mysql접속 sudo mysql
2.초기비번설정 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password by '비밀번호';
3.탈출 exit
4.루트로접속 mysql -u root -p
비밀번호 입력후 접속이 되면 정상 설치 완료
보안그룹설정(3.mysql접속)
AWS라면 보안그룹 설정으로 포트를 설정합니다

- mysql의 포트개방 입니다.
- 설정하지 않더라도 ssh를 통해서 접속이 가능함. (보안을 강화하려면 설정하지 않음)
- 접속가능한 아이피주소 입니다.
- 0.0.0.0/0 인 경우 어디서든 접속 가능입니다. (보안에 매우 위험. 데이터베이스 해킹에 취약해짐)
- 본인의 공용 아이피를 적어서 본인 컴퓨터에서만 접속 가능하게 할 수 있습니다.
- ssh접속 포트개방 입니다.
- 반드시 열어야 함
- 접속가능한 아이피주소 입니다.
- 0.0.0.0/0 인 경우 어디서든 접속 가능입니다. (보안에 매우 위험)
- 본인의 공용 아이피를 적어서 본인 컴퓨터에서만 접속 가능하게 할 수 있습니다.

3306포트는 개방하지 않고 리눅스에 ssh로 접속하여 mysql로 접근할 수 있습니다. (보다 안전)

- 접속했으면 개발 환경의 데이터베이스를 운영을 백업하고, 동일한 환경을 구성합니다.
- MySQL 환경과 설정에 따라 대소문자를 구분하기도 하고 그렇지 않기도 한다.
- 컬럼이름은 모든 환경에서 대소문자를 구분하지 않는다.
create database spring default character set 'utf8';
create user 'spring' identified by 'spring';
grant all privileges on spring.* to 'spring';
나는 같은 조원 조장님이 만들어주신 build war파일을 사용해서 쉽게 배포할 수 있었다.
하지만 깃 클론받아서 파일 수정한 다음에 한번 빌드해보는 것도 연습해볼 예정!!
개발서버에서 프로젝트 빌드
어플리케이션 빌드란?
- 컴퓨터가 코드를 실행 시킬 수 있도록 컴파일하며, 어플리케이션에 필요한 라이브러리를 통합하고, 합치는 과정
- 빌드 과정은 무거운 작업이기 때문에 컴퓨터 사양이 좋아야 합니다. (여유 하드디스크 용량도 필요)
- EC2에서 프리 티어로 제공하는 운영체제는 사양이 좋지 않기 때문에 윈도우에서 빌드 합니다.
프로젝트 빌드시 필수사항
- 레이아웃을 쓰는 경우 th:replace부분을 ./경로/경로 형태로 전부 수정 (리눅스의 경로 참조 문제)
- 파일업로드 경로 처리
- 개발환경의 업로드 경로 \\ 를 전부 우분투 환경의 경로에 맞추어 /로 변환한다.
- 우분투에 만들어지는 로컬 업로드 폴더는 window와 다르다.
- app-properties파일의 업로드 경로를 우분투의 경로 /home/ubuntu/upload 형태로 바꾼다.
- 우분투에 /home/ubuntu/upload폴더를 만들어준다.
- 파일을 업로드 하려면 어플리케이션이 폴더를 (읽기 쓰기 실행) 할 수 있는 권한이 있어야 한다.
- sudo chmod -R 777 /home/ubuntu/upload 으로 누구나 다 (읽기 쓰기 실행) 할 수 있는 권한을 준다.
- 운영 데이터베이스의 접속 주소가 다르다면 수정한다.
- 빌드파일 설정 build/gradle의 version명을 바꿔도 된다 (선택사항)
- 추가로 여러분 프로젝트를 운영 환경에 맞추어 설정하면 됩니다.
첫번째 방법. CMD빌드
- 윈도우에 자바11설치 (8버전이 있는 경우는 8버전 환경변수 삭제하고 cmd로 이동)
- 프로젝트 루트폴더 안에서 ./gradlew build 또는 (gradlew build)
- ./build/libs 폴더 안에 war 파일이 생성되었습니다.
두번째 방법. 통합 개발 환경에서 마우스로 빌드
- 이클립스기준 show view에서 greadle task추가
- gradle task탭에서 빌드
- ./build/libs 폴더 안에 war 파일이 생성되었습니다.
java -jar /home/게정명/파일명.war
실행해보기!
FTP통신을 이용해서 빌드 된 파일을 전송
- FTP통신 - File transfer protocol
- 파일을 전송하는 통신방법 입니다.
- 빌드가 완료된 파일을 우분투 서버로 옮겨서 동작 시켜야 합니다.
파일질라 프로그램 설치
https://filezilla-project.org/
파일질라를 통해 서버에 접속하기
AWS라면 키페어 등록 후 접속
VM이라면 비밀번호만 입력 후 접속

키는 aws에서 생성한 pem파일 등록하면 된다.
그리고 우분투에서 war나 jar빌드한 파일을 실행해주면 된다.
이렇게 실행하면 터미널 종료시 어플리케이션이 종료된다 ㅜㅜ 그래서 그 아래와 같이 실행하면 백그라운드로 동작된다!
java -jar 경로/프로젝트.jar
java -jar /home/ubuntu/BootMyweb-0.0.1.war
jar or war파일의 백그라운드 실행 명령
- 우분투 서버에서 실행파일을 백그라운드로 동작 시킵니다.
- 터미널을 종료해도 어플리케이션은 백그라운드로 동작됩니다.
- 실행로그는 nohup.out 파일에 기록 됩니다.
하드디스크를 렘으로 일부분 변환시켜 RAM의 성능을 올려줄 수 있는 방법이 있습니다.
SWAP설정 입니다.
https://down-develope.tistory.com/6
AWS ec2 프리티어 t2.micro 인스턴스 다운문제 해결
작은 개인 프로젝트 배포를 위해 AWS EC2중 무료인 t2.micro를 사용하시는 분들이 많을 것입니다. 그런데 t2.micro를 사용하다보면 인스턴스가 다운돼서 분명 인스턴스 상태는 running 이지만 ssh 접속이
down-develope.tistory.com
프리티어 설정 후
nohup java -jar 경로/프로젝트.jar &
nohup java -jar /home/ubuntu/BootMyweb-0.0.1.war &
nohup.out파일의 실시간 로그 확인 명령
- 운영 환경에서 에러는 여기서 볼 수 있습니다.
tail -fn50 nohup.out
이제 끝...
http://탄력적ip:포트번호/경로를 입력하면 어디에서든 접속 할 수 있다.....