241216 리눅스 (기본 명령어, Java, MariaDB 설치)

241216 에이콘 아카데미 수업에 기반하여 작성되었음을 알립니다.

 

가상화 / 클라우드

AWS가 지원하는 리눅스 서버에 마리아DB를 설치하고 자료를 공유해보자!

sangdata를 배포파일로 만들어 AWS에 올려 전세계 어디서든 내가 만든 프로젝트를 서비스할 수 있을 것이다!

1. 리눅스 명령어 연습
2. AWS에서 직접하기엔 속도가 느리다.
3. 컴퓨터 내에 가상화로 리눅스를 설치하여 연습
4. AWS 계정 하나 만들어보기!

🙏 가상화 개념 이해하기


리눅스 기본 명령어 실습

💡 WSL(Windows Subsystem for Linux)
윈도우의 가상화 기능을 활용해서 윈도우 위에서 리눅스를 사용할 수 있게 해준다.
이제 가상머신을 따로 구성하지 않고도, 윈도우에서 리눅스를 사용할 수 있다. 게다가 단순히 가상머신으로 리눅스를 사용할 수 있는 것이 아니라, 윈도우 시스템과 통합되어 마치 하나의 머신처럼 자연스럽게 리눅스를 활용하는 것이 가능해 졌다. 윈도우 10과 윈도우 11을 지원하며 윈도우 모든 에디션에서 사용할 수 있다.
💡Cgroup
리눅스에서만 있는 기능 Cgroup, 도커를 사용 가능하게 한다.
리눅스에서 컨테이너를 구성하는 3가지 주요 기술 중 하나로, 프로세스들이 사용하는 시스템 자원의 사용정보를 수집 및 제한 시키는 커널의 기능이다.
다시말해 cgroup은 단일 또는 태스크 단위의 프로세스 그룹에 대한 자원 할당을 제어하는 커널 모듈이다.
Cgroup은 Control group으로 처음 개발되었을 때는 group이 아니라 container란 용어를 사용했었으나, container란 용어는 너무 많은 의미를 내포하고 있다고 판단하여 지금의 group이만 이름으로 변경되었다.

리눅스 기본 명령어

$ ls

파일을 보여주는 명령어

$ nano (파일명)

(사실 확장자 개념은 없다.)

shift + spacebar 한영 전환

Ctrl + O 저장

Ctrl + X 빠져나가기

$ cat (파일명)

파일 내부 확인

 

$ nano .(파일명)

디렉토리나 파일명 앞에 .을 찍으면 히든 (중요파일은 .을 찍고 만든다)

파일 저장 후 다시 ls해주면 안보임

$ ls -a

히든 파일 모두 보기

$ ls -l

$ ls -al

$ ls -al  >(파일명)

내용을 파일에 저장 가능

$ man (명령어)

명령어에 대한 설명, q를 눌러 나감

 

$ whoami

현재 접속한 계정명 출력

$ who

 

$ clear

터미널 내용 지우기

$ pwd

현재 사용자의 루트 디렉토리

$ mkdir (디렉토리명)

디렉토리 생성

사용법 : mkdir (옵션)[디렉토리]

$ cd (디렉토리명)

디렉토리 이동

디렉토리 이동(DOS의 CD와 같음) 사용할 때는 cd 다음에 스페이스를 넣어주자.

~ : 현재 사용자의 루트

 

파일, 디렉토리 생성, 수정, 삭제 

$ tree

전체 구조 파악, 설치 후 명령어 사용 가능

sudo : super user 절대적인 권한을 통해 설치 가능

$ sudo apt install tree

$ cp

디렉토리 / 파일 복사

사용법 : cp (옵션) [복사할 파일명 혹은 디렉토리] [대상파일]

aa.txt를 현재 디렉토리내의 kbs 디렉토리에 복사

리네임하여 복사도 가능

디렉토리 복사

기존에 디렉토리가 없다면 디렉토리가 자동으로 생성되며 복사된다.

good.txt 파일 하나 더 생성

다른 디렉토리에 복사, 경로만 잘 찍어주면 된다.

$ mv

이동, 사용법 : mv [소스 디렉토리 혹은 파일] [신규 디렉토리 혹은 파일]

$ du

디렉토리 / 파일 용량 확인

사용법 : du (옵션) [소스 디렉토리 혹은 파일]

$ find

파일 / 디렉토리의 목록을 찾을 때 사용

. 현재 디렉토리 뿐만 아니라 하위 디렉토리

-type d : 디렉토리만 찾아줌

-name : 이름

-type f : 디렉토리만 찾아줌

? / * 와일드카드 문자 사용 가능

파일명 2글자 뒤에는 .txt를 찾음

없으면 못찾아줌

$  grep

입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령어

$ grep [OPTION] [PATTERN] [FILE]

기본 사용

-i는 대소문자 무시

-n 해당 문자열의 번호 출력

정규 표현식 사용

-v : 제외(부정)

 

$ rm

삭제, 사용법 : rm (옵션) [삭제할 파일명 혹은 디렉토리]

option
  -f : 무조건 지움. 아무런 메시지가 나타나지 않음.
  -i : 어떤 작업을 하기 전에 무조건 메시지를 묻는다.
  -r : 파일을 포함하고 있는 디렉토리도 삭제한다 / 물어본다.
  -v : 작업된 내용을 보여준다.

 

$ rmdir

디렉토리 삭제

디렉토리가 비워져있어야 삭제 가능

보통 rmdir 사용 안하고 rm에 옵션을 주어서 사용한다.

$ whereis

실행파일 위치 찾기

$ which

바이너리만 보여줌

💡 whereis / which
path 설정이 되어있는 파일들만 찾아준다.

$ ifconfig

 = ipconfig

inet 뒤에 부분 192.168.159.128 가상 리눅스 서버의 IP주소

퍼미션 (Permission)

제일 중요!!

💡 퍼미션
퍼미션은 이름처럼 '허가'를 뜻한다. 파일이나 디렉토리를 누가 볼 수 있으며 누가 새로운 내용을 기록할 수 있으며 또 실행할 수 있는지 설정하는 것이다. 유닉스(리눅스)에서는 개별 파일 별로 퍼미션을 설정할 수 있다. 퍼미션은 총 10개의 알파벳으로 이뤄져 있다. 맨 첫 번째 자리는 파일인지, 디렉토리인지를 나타내는 것으로 퍼미션과 직접적인 관계가 없다. 첫 번째 자리는 파일인 경우 -, 디렉토리인 경우 d로 표시되어 있다. 그 다음부터 나오는 9개의 알파벳이 해당 파일 또는 디렉토리의 퍼미션을 나타낸다.

퍼미션에는 크게 세 종류가 있다. r은 "read"를 뜻하고, w는 "write", x는 "execute"을 뜻한다. 읽기 허가, 쓰기 허가, 실행 허가다. 퍼미션을 나타내는 9개의 알파벳은 3개씩 끊어서 각각 "user", "group", "others"의 퍼미션을 나타낸다.

예를 들어, 어떤 파일의 퍼미션이 다음과 같다면, -rwxrw-r--

이것은 세 개씩 끊어서, rwx, rw-, r--로 읽고 (맨 앞의 -는 파일이라는 의미로 퍼미션과 직접 상관 없다.) 각각이 "user"의 퍼미션, "group"의 퍼미션, "others"의 퍼미션이다. user 퍼미션은 rwx이므로, 읽기/쓰기/실행 모든 것이 다 허용되어 있다. group 퍼미션은 rw-이므로 "read", "write" 이므로 읽기,쓰기 퍼미션이 허용되어 있다. others 퍼미션은 r--이 므로 읽기 퍼미션만 허용되어 있다. 그러므로 이 파일은, 파일의 owner(user)는 읽기,쓰기,실행 모든 것을 다 할 수 있고 owner와 같은 그룹에 속하는 사용자는 읽기, 쓰기까지 할 수 있으며, owner도 아니고 owner가 속한 그룹도 아닌 사용자는 오직 읽기만을 할 수 있다.

디렉토리의 경우, r,w,x의 의미가 조금 달라진다. r은 해당 디렉토리에 있는 파일의 목록을 읽을 수 있는가의 여부를 가르키고(즉, cd를 해들어갈 수 있느냐의 여부), w는 그 디렉토리에 새로운 파일을 첨가하거나 기존의 파일을 지울 수 있는가의 여부, x는 해당 디렉토리에 들어있는 파일에 관한 정보를 리스팅할 수 있느냐의 여부를(즉, ls를 할 수 있느냐의 여부) 의미한다.

파일(디렉토리)의 owner는 대개 그 파일(디렉토리)를 만든 사람으로 처음에 설정된다. 특별히 퍼미션을 지정하지 않는 경우 기본적으로 설정되는 퍼미션은 rw-r--r-- 이다. user는 읽기, 쓰기가 허용되고 group을 포함한 다른 사용자는 오직 읽기만 가능한 파일(디렉토리)가 만들어지는 게 기본설정(default)이다. 퍼미션을 바꾸고 싶다면 어떻게 할까? 이 때 사용하는 코맨드가 chmod 이다. chmod는 "change mode"의 약자다. chmod는 두 가지 사용법이 있다.

첫 번째 사용법은 + 기호나 - 기호를 사용한다. 예를 들어, myprogram이라는 파일에 쓰기 퍼미션을 부여하고 싶다면 chmod +w myprogram 라고 하면 된다. user에만 쓰기 퍼미션을 첨가하고 싶다면 어떻게 할까?

chmod u+w myprogram 라고 하면 된다. user는 u이다. 마찬가지로 g는 "group", o는 "others"를 의미한다. 그러므로 원하는 대로 퍼미션에 변화를 줄 수 있다. 퍼미션을 없애는 것도 같은 방법이다. 만약, others의 쓰기, 실행 퍼미션을 없애고 싶다면 chmod o-wx myprogram 라고 하면 된다. chmod를 사용하는 다른 방법도 있다. "u+x"처럼 알파벳을 이용해서 퍼미션을 변경하는 방법을 "symbolic mode"라고 한다. 이와 달리 8진법을 사용하는 방법을 "absolute mode"라고 한다. 일단, r은 4, w는 2, x는 1이라고 보면 된다. 8진법을 이용한 퍼미션 설정은, user, group, others 각각에 대해 퍼미션 알파벳에 해당하는 숫자를 합쳐주는 것이다. 예컨대, 어떤 퍼미션이 -rwxr-xr-x라면, 이것은 755로 바꿀 수 있다.

user 퍼미션은 rwx이므로 (4+2+1) = 7, group과 others는 r-x이므로 (4+1) = 5 이므로 755다.
chmod 500 myprogram
chmod 777 myprogram
첫 번째 것은 myprogram 파일을 -r-x------로 바꾸는 것이다. 두 번째 것은, -rwxrwxrwx 이다.

파일 하나 생성하고 안에 명령어를 넣어주고 실행해주기

현재 read, write만 가능한 상태

유저에 대해서만 퍼미션 허용, 그룹과 아더는 손 못댐

+, -로 퍼미션 걸고 빼기

w만 모두 허용

세부 설정도 가능

rwx 모두 가능한 상태

 

💡 기본 명령어를 알아야하는 이유!
팀장이 리눅스 서버를 만들고 메인 계정을 사용하지 못하고 팀원 계정으로 각각의 하위 계정을 만든다면 터미널 프롬프트만 보인다. 다른 편집기를 사용하지 못하기 때문에 리눅스 기본 명령어를 사용해서 만들어야해서 꼭 알아둬야한다.

🙏 리눅스 기본 명령어, 원격으로 리눅스와 통신


자바 설치

(리눅스에 파이썬이 기본으로 깔려있음)

자바는 안깔려있다.

하지만 리눅스에서 버전별로 알려줌

설치 전 sudo apt update 해주는게 좋음

sudo apt install openjdk-21-jre-headless

( openjdk는 리눅스에서 지원하는 것)

설치 후 버전 확인!

jdk도 설치

sudo apt install openjdk-21-jdk-headless

설치 확인


마리아 DB 설치

🙏 Linux에 MariaDB 설치

sudo apt update

$ sudo apt install mariadb-server

마리아디비 서버 설치

 

클라이언트 설치

$ sudo apt install mariadb-client

# 클라이언트 설치 시 설정에 대해 묻는데, 만약 묻지 않는다면 아래 명령어를 수행한다. 
# MariaDB secure 설정

$ sudo mysql_secure_installation

 

# MariaDB 활성화
$ sudo systemctl enable mariadb
# MariaDB 시작
$ sudo systemctl start mariadb
# MariaDB 서비스 상태 확인
$ sudo systemctl status mariadb

# MariaDB 서비스 중지
$ sudo systemctl stop mariadb
# MariaDB 서비스 재시작
$ sudo systemctl restart mariadb

# MaraDB 접속

$ sudo mariadb -h124.0.0.1 -uroot -P3306 -p

대문자 P는 포트번호, 포트번호가 다를 시 입력 필수, 같다면 생략해도 괜찮다.

MariaDB [(none)]> create database test;
MariaDB [(none)]> use test;
Database changed
ariaDB [ test ]> create table sangdata(code int primary key,sang varchar(20),su int,dan int);
MariaDB [ test ]> insert into sangdata values(1,'pen',5,5000);
MariaDB [ test ]> insert into sangdata values(2,'book',5,5000);

MariaDB [ test ]> insert into sangdata values(2,'귀도리',5,50100);
MariaDB [ test ]> select * from sangdata;

네트워크 상태 확인

 

우분투 : 192.168.159.128

윈도우 : 192.168.0.19

 

윈도우에서 우분투의 DB 접근

접속이 안됨~!

🚨 우분투 MariaDB 서버의 외부 접속 관련 설정 문제
1) 기본적으로 127.0.0.1로 설정되어 있다면, 이를 0.0.0.0으로 변경하여 모든 IP 주소에서 접근 가능하게 하거나, 특정 IP 주소에서만 접근 가능하도록 해당 IP로 설정할 수 있다.
$>sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf 하고 bind-address 설정을 확인한다.
bind-address = 0.0.0.0
파일을 저장하고 나서 MariaDB 서버를 재시작
$>sudo systemctl restart mariadb

2) MariaDB 사용자 계정 문제 : root 사용자 계정이 localhost에서만 접속 가능하도록 설정되어 있을 수 있다. 원격에서 접속할 수 있도록 사용자 계정을 설정해야 한다.
해결 방법: MariaDB에 접속한 후, root 사용자의 원격 접근을 허용
$>sudo mariadb -u root -p GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_root_password' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3) 방화벽 설정 문제 : 우분투의 방화벽(UFW)이 활성화되어 있는 경우, MariaDB의 포트(기본적으로 3306번)가 차단되어 있을 수 있다. MariaDB 포트를 방화벽에서 열어준다.
$>sudo ufw allow 3306/tcp
$>sudo ufw reload

4) > mariadb -h(개인 IP) -u root -p
참고 : AWS의 리눅스라면 퍼블릭 IPv4 주소를 적어 준다.
원격 접속시 ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it 에러가 발생하는 경우에는 client에서 아래와 같은 방법으로 접근하면 된다.
--ssl=FALSE 옵션은 SSL 연결을 강제로 비활성화한다
> mariadb -h(개인IP) -u root -p --ssl=FALSE
💡SSL(Secure Sockets Layer)
인터넷 상에서 데이터를 안전하게 전송하기 위해 사용하는 암호화 기술이다. 현재는 TLS (Transport Layer Security)라는 더 안전한 기술로 발전했지만, 많은 사람들이 여전히 SSL이라는 용어를 사용하고 있다. SSL/TLS는 클라이언트(예: 브라우저, 데이터베이스 클라이언트)와 서버 사이의 통신을 암호화하여 데이터가 중간에서 도청되거나 변조되지 않도록 보호한다.
* MariaDB에서 SSL 연결이 필요한 경우
- 데이터베이스가 외부 네트워크(예: 인터넷)에 노출된 경우
- 클라이언트와 서버가 서로 다른 네트워크에 위치한 경우
- 민감한 데이터를 전송하는 경우(예: 금융, 의료, 국방 ...)