ㅁ ftp에 들어가서 guestbook.zip을 내 pc로 복사해서 가져온다.
- 내 pc로 가져온 guestbook.zip을 압축된 상태 그대로 MobaXterm으로 드래그한다.
- 드래그해서 가져온 후 ls를 쳐서 파일이 보이는지 확인한다.
- cmd 창은 닫으면 안된다. cmd 창을 닫으면 서버가 꺼진다.
cmd 창이 꺼져버리면 시스템이 꺼지는 것이고, 꺼진 시스템에 접속은 불가능하다.
- 만약 cmd 창을 껐다면 다시 검색에서 ubuntu를 찾아서 키고, sudo service ssh start를 한다.
그래야 MobaXterm으로 접속할 수 있다.
MobaXterm은 서버가 켜져있으면 접속하는 프로그램일 뿐이다.
ㅁ 참고(guestbook.zip 내용)
- 이렇게 생겼다.
○ sudo apt install unzip
- unzip 유틸리티를 설치하는 명령어다.
- unzip 유틸이 설치되었다.
○ unzip guestbook.zip
- guestbook.zip 파일의 압축을 해제하는 명령어다.
○ ls
- 압축이 다 풀렸으면 ls로 현재 디렉토리 내 파일 및 디렉토리 목록을 확인한다.
guestbook.zip 압축파일과 guestbook 폴더가 있다.
○ cd guestbook
- guestbook으로 이동한다.
○ ls
- 다시 ls로 현재 디렉토리 내 파일 및 디렉토리 목록을 확인한다.
- src 디렉토리에는 소스 코드가 들어 있다.
- mvnw는 Maven Wrapper로 Maven을 간편하게 실행하기 위한 스크립트이다.
이제 Maven을 사용해 빌드 작업을 수행하여 JAR 파일을 생성할 것이다.
○ cd src
○ ls
○ cd main
○ ls
○ cd resources
○ ls
- 우리가 이클립스에서 보던 구조다.
○ nano application.properties
- Spring Boot 또는 Java 애플리케이션에서 사용되는 설정 파일(application.properties)을 열어서 편집하는 명령어다.
- nano는 터미널 기반의 텍스트 편집기다.
- application.properties는 애플리케이션의 환경 설정 정보를 담고 있는 파일이다.
- application.properties가 열렸다.
- 맨 윗줄의 server.port=80는 애플리케이션의 서버 포트를 80번 포트로 설정하는 구문이다.
주석처리하면 8080 포트가 된다. 주석처리한다.
- 맨 아래 Use Environment Variable 부분의 3줄을 주석처리한다.
- 가운데 Static setting 부분의 3줄은 주석을 해제한다.
- ip주소를 바꾼다.
현재 시스템에 디비가 있으면 localhost를 쓰면 되고, 디비가 별도로 있으면 db 서버의 ip주소를 적으면 된다.
- 보통 오라클은 외부에서 접속이 다 되는데 MariaDB 등은 외부접속을 할 수 있게 그쪽에서 권한을 줘야 한다.
- guestbook은 데이터베이스명이다.
- username을 admin, 비번을 1234로 바꾼다.
- ctrl+x, y, 엔터로 저장하고 나간다.
○ cd
- cd하고 바로 엔터치면 홈 디렉터리로 돌아온다.
○ cd -
- cd -하고 엔터치면 직전 디렉토리로 돌아간다.
○ sudo apt install mariadb-server
- 디비를 설치한다. 마리아 디비로 설치한다.
- y를 누른다.
============================================================================
[4교시]
ㅁ사용자를 만들고, guestbook이라는 db를 만들어 본다.
○ netstat -ntlp
- 3306이 떠있다. 마리아디비 서버가 동작하고 있다는 얘기다.
- 중요한건 그 앞의 주소다. 127.0.0.1 이렇게 되어있으면 로컬에서만 접근이 가능하다.
이 서버에서만 접속이 가능하다. 외부에선 못들어간다.
- 외부에서도 들어올 수 있도록 하려면 0.0.0.0으로 바꿔야 한다. 나중에 바꿔본다.
○ sudo mariadb -uroot -p
- MariaDB에 루트 사용자로 접속하기 위한 명령어다.
- Enter password라고 뜬다. 그냥 엔터쳤다.
나는 Enter password가 한번 떴는데, 두번 뜨면 첫번째는 사용자의 패스워드다.
- 아무튼 Enter password는 엔터를 두번 쳤다.
- sudo : 관리자 권한으로 명령어 실행.
- mariadb: MariaDB 클라이언트를 실행하여 데이터베이스 서버에 접속.
- -uroot: root 사용자로 접속.
- -p: 패스워드 입력을 요청한다. 명령어 실행 후 MariaDB 루트 계정의 비밀번호를 입력해야 접속할 수 있다.
○ create database guestbook;
- MariaDB에서 guestbook이라는 이름의 새 데이터베이스를 생성하는 명령어다.
○ create user admin@localhost;
- admin이라는 사용자를 하나 만들었다.
○ grant all privileges on guestbook.* to admin@localhost identified by '1234';
- 그리고 사용자에게 디비를 사용할 수 있는 권한을 줬다.
○ show databases;
- guestbook이 만들어져 있다.
○ exit
- exit으로 나온다.
======================================================================
ㅁ 이제 빌드를 한다.
○ ls
- 현재 디렉토리 내 파일 및 디렉토리 목록을 확인한다.
○ cd guestbook
- 현재 작업 디렉토리를 guestbook 디렉토리로 변경한다.
○ ls -l
- 현재 디렉토리의 파일 및 디렉토리 목록을 자세한 정보와 함께 출력하는 명령어다. (long)
- rw-, rwx 등은 파일 권한을 나타낸다.
r은 read(읽기), w는 write(쓰기), x는 execute(실행)이다.
- rwx가 연달아 3개 있다. 순서대로 유저, 그룹, 그외(유저도 그룹도 아닌사람)를 뜻한다.
유저는 파일 소유자를 뜻한다.
그룹은 소유자와 같은 그룹에 속한 사용자들을 뜻한다.
그외는 소유자도 아니고 그룹에도 속하지 않은 사용자들을 뜻한다.
- mvnw는 Maven Wrapper로 CLI에서 Maven 빌드 명령을 실행할 수 있는 스크립트다.
- mvnx에는 지금 x권한이 없다. 그러면 실행할 수가 없다.
○ chmod u+x mvnw
- u+x, g+x, o+x로 유저, 그룹, 그외에 실행권한을 줄수있다.
- 현재 프로젝트의 pom.xml 파일은 MariaDB에 맞게 설정되어 있다.
만약 Oracle 데이터베이스를 사용할 계획이 있다면, 나중에 pom.xml 파일에서 관련 설정을 변경해야 한다.
지금은 MariaDB가 설치된 상태니까 이대로 쓰면된다.
- 그럼 이제 빌드를 해본다.
○ mvnw
- mvnw 엔터를 해본다. 분명히 있는데도 not found라고 뜬다.
○ echo $PATH
- 현재 환경 변수 PATH의 값을 출력하는 명령어이다.
- 윈도우는 현재 디렉토리에서 실행 파일을 먼저 찾고 없으면 PATH 변수에 등록된 디렉토리에서 검색하지만,
리눅스에서는 PATH 변수에 등록된 디렉토리 내에서만 찾고 실행할 수 있다.
- 만약 PATH에 등록되지 않은 프로그램이나 스크립트를 실행하려면 절대 경로 또는 상대 경로를 사용해야 한다.
○ pwd
- 현재 작업 디렉토리(Working Directory)의 절대 경로를 출력하는 명령어다.
○ ./mvnw clean package
- 상대경로에서 .은 현재디렉토리를 의미한다.
'현재 디렉토리에 있는 mvnw를 실행해라'라는 명령어다.
- clean package는 기존에 있던게 혹시 있으면 다 지우라는 것이다.
- clean package: Maven 명령어로 두 가지 작업을 수행한다
- clean: 이전 빌드 결과물을 삭제한다.
- package: 소스 코드를 컴파일하고, 테스트 후 JAR(또는 WAR) 파일을 생성한다.
- 근데 에러가 발생했다. Maven은 Java 환경이 필요하며, JDK가 설치되어 있지 않으면 작동하지 않는다.
○ sudo apt install openjdk-17-jdk
- OpenJDK 17 개발 키트(JDK)를 설치하는 명령어다.
- 지금은 수업 프로젝트에 맞는 jdk 버전이고, 내 프로젝트를 할 때는 내 jdk 버전에 맞춰서 하면 된다.
- 코레토를 쓰든 openjdk를 쓰든 오라클에 있는 jdk를 쓰든 기본적인건 다 똑같고 약간의 차이가 있다.
- JRE: Java 프로그램을 실행하기 위한 환경.
- JDK: Java 프로그램을 개발하고 실행할 수 있는 도구.
(JRE를 포함, 자바 애플리케이션을 개발하고 빌드하기 위한 도구가 추가됨)
○ ./mvnw clean package
- JDK를 설치한 후 다시 실행하면 Maven 빌드가 제대로 작동한다.
- 빌드가 성공적으로 완료되면 "BUILD SUCCESS" 메시지가 표시된다.
※ (참고) sudo apt remove openjdk-17
- OpenJDK 17 패키지를 제거하는 명령어다.
○ ls
- 현재 디렉토리 내 파일 및 디렉토리 목록을 확인한다.
○ ls target
- 현재 디렉토리 내 target 디렉토리의 파일 및 디렉토리 목록을 출력하는 명령어다.
- Maven 빌드 후 target 디렉토리에는 빌드 결과물(예: JAR, WAR 파일 등)과 관련된 파일이 생성된다.
- 이 명령어를 사용하여 빌드 결과물을 확인한다.
- guestbook-1.0.jar : 빌드된 JAR 파일.
- classes/ : 컴파일된 클래스 파일이 저장된 디렉토리.
- generated-sources/ : Maven에서 생성된 소스 코드 디렉토리.
○ java -jar target/guestbook-0.0.1-SNAPSHOT.jar
- 적당히 쓰다가 tab키를 누르면 자동완성이 된다.
- Maven 빌드 결과로 생성된 JAR 파일을 실행하는 명령어다.
- java: Java 실행 명령어.
- -jar: JAR 파일을 실행하도록 지정하는 옵션.
- target/guestbook-0.0.1-SNAPSHOT.jar: 실행할 JAR 파일의 경로와 이름.
- 이 명령어 실행 시 JAR 파일에 포함된 메인 클래스가 실행된다.
정상적으로 동작하면 애플리케이션이 시작되고 로그가 출력된다.
ㅁ 브라우저로 접속해보기
- 브라우저 주소창에 ip주소 다음 :8080을 입력한다.
ip주소는 ubuntu에서 ip address를 입력해서 나오는 서버 ip 주소다. MobaXterm의 탭에도 써있다.
- 사이트에 접속이 되었다. 애플리케이션이 정상적으로 실행되고 배포되었음을 의미한다.
다만 로컬이니까 내 pc에서만 접속 가능하다.
- ngrok을 쓰면 로컬 서버를 외부 네트워크에 노출시켜 외부에서도 접근 가능하게 할 수 있다.
- 우리가 개발한 소스를 JAR 파일로 만들어 두고 데이터베이스를 오라클로 설정한 후 필요한 데이터베이스만 생성한 다음 이렇게 동작시키면 해당 애플리케이션을 실행할 수 있는 상태가 된다.
- 현재 애플리케이션이 실행 중이므로 프롬프트를 사용할 수 없다.
Ctrl + C를 눌러 실행 중인 애플리케이션을 중단한다.
○ java -jar target/guestbook-0.0.1-SNAPSHOT.jar &
- 띄어쓰기하고 &를 붙이면 애플리케이션이 백그라운드에서 동작한다.
- 이로써 애플리케이션은 실행되면서도 프롬프트는 자유롭게 사용할 수 있다.
- 엔터를 여러번 치면 저렇게 입력할 수 있게 뜬다.
○ netstat -ntlp
- netstat -ntlp 명령어로 현재 리스닝 상태(대기 상태)인 포트를 확인한다.
○ jobs
- 현재 실행 중인 백그라운드 작업 목록을 확인하는 명령어다.
- running 이라고 뜨면 작업이 현재 백그라운드에서 실행 중이라는 상태다.
이러면 이제 프롬포트를 하면서도 서비슬를 계속 사용할 수 있다.
ㅁ cd
- cd는 Change Directory(디렉토리 이동)를 의미한다. 작업 디렉토리를 변경하는 명령어다.
(1) cd
- 홈 디렉토리로 이동한다. (예: /home/admin으로 이동.\)
(2) cd 경로
- 지정한 디렉토리로 이동한다.
(3) cd ..
- 현재 디렉토리의 상위 디렉토리로 이동합니다. (한 단계 위로 이동)
(4) cd ../..
- 현재 디렉토리에서 두 단계 상위 부모 디렉토리로 이동합니다. (두 단계 위로 이동)
ㅁ cd [절대경로|상대경로]
(1) 절대경로
- '/' 부터 전체경로를 입력하여 이동한다.
- '/'가 없으면 안된다. 루트 디렉토리다.
- 루트 디렉토리(/)부터 시작하는 전체 경로를 입력하여 이동한다.
- 반드시 '/'로 시작한다.
- ex) /etc/sysconfig/network-scripts
- ex) 현재 위치가 /home/admin이고, admin 디렉토리에 있는 test 디렉토리로 이동할 경우 cd /home/admin/test
(2) 상대경로
- 현재위치를 기준으로 이동한다.
- '/'로 시작하지 않는다.
- ex) 현재 위치가 /home/admin이고, admin 디렉토리에 있는 test 디렉토리로 이동할 경우 cd test
ㅁ 로컬 리눅스에서 애플리케이션 빌드 및 배포
(1) JDK와 Maven을 설치하여 빌드 환경 구성
(2) 소스 코드를 로컬 서버로 전송하고 mvnw clean package 명령어로 JAR 파일을 생성.
(3) 생성된 JAR 파일은 java -jar 명령어를 통해 실행하며, 필요 시 백그라운드 실행(nohup)을 설정해 서버를 계속 동작시킬 수 있다.
(4) 애플리케이션이 실행되면 브라우저에서 서버 IP와 포트를 통해 접속하여 정상 동작 여부를 확인할 수 있습니다.
ㅁ 로컬 리눅스 vs 도커(컨테이너)
- 지금 해본 방식은 리눅스에 애플리케이션과 필요한 구성 요소를 직접 설치하여 동작시키는 방식이다.
앞으로 이를 컨테이너 환경에서도 실행해해볼 예정이다.
- 리눅스는 설치파일만 10몇기가 된다. 그리고 설치하고 나면 그것도 10몇기가 된다.
컨테이너는 필요한 최소한의 환경만 포함하기 때문에 용량이 매우 작다.
- 기존의 리눅스 방식에서는 추가 서버가 필요할 때 새로 설치 및 환경 구성이 필요하지만,
컨테이너를 사용하면 이 과정을 간단히 반복할 수 있다.
'배포 > Linux(Ubuntu)' 카테고리의 다른 글
6. 공개키/개인키 생성 (0) | 2024.12.05 |
---|---|
5. SSH 인증 방식 (0) | 2024.12.05 |
4. MobaXterm과 cmd로 우분투에 접속해보기 (1) | 2024.12.05 |
3. 가상화를 이용한 리눅스 설치 및 애플리케이션 배포 (2) | 2024.12.04 |
1. 리눅스 설치 (WSL로 리눅스 설치) (2) | 2024.12.04 |