
๋ณธ๋ฌธ์ Ubuntu-Server 22.04.3 LTS version ํ๊ฒฝ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์ด๋ฉฐ, ํน์๋ ์๋ชป๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๊ณผ๊ฐํ๊ฒ ๋๊ธ ๋จ๊ฒจ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์๋ ํ์ธ์. Heon์ ๋๋ค. ์ด๋ฒ ํฌ์คํ ์ Raspberry Pi 4 Model B์ ์ค์นํ Ubuntu ํ๊ฒฝ์์ MariaDB๋ฅผ ์ค์นํ๊ณ , ์ธ๋ถ ์ ์๊น์ง ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
์ต๊ทผ ์ ๊ฐ ์ฐธ์ฌํ๊ณ ์๋ ํ๋ก์ ํธ์์ ๋ค์ด๋ฒํด๋ผ์ฐ๋๋ฅผ ๊ฒํ ํ๊ฒ ๋์๋๋ฐ์. ๊ณผ๊ธ์ ๊บผ๋ คํ๋ ์ ํฌ ํ์ VPC์ AI ๋ชจ๋ธ์ ์ํ ์๋ฒ๋ ์ฌ์ฉํด์ผํ๋ ์ํฉ์์, DB๊น์ง๋ ๋ณด์ ํฌ๋ ๋ง์ผ๋ก ์จ์ ํ ๋น์ฉ ์ถฉ๋น์ด ์ด๋ ต๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์, ๋์ ๊ฐ์ธ์ ์ผ๋ก ๋ณด์ ํ๊ณ ์๋ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์ฐ๋ถํฌ ์๋ฒ๋ฅผ db์๋ฒ๋ก ํ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ์ ๊ณ๊ธฐ๋ก ์ ๊ฐ ๊ฒช์ ๊ณผ์ ์ ์ด๋ฒ ํฌ์คํ ์์ ์ฌ๋ฌ๋ถ๋ค๊ป ๊ณต์ ํด๋ณด๊ณ ์ ํฉ๋๋ค.
$ sudo apt install mariadb-server mariadb-server
apt๋ก mariadb-server ํจํค์ง๋ฅผ ์ค์นํฉ๋๋ค.

$ sudo mariadb
์ค์น๊ฐ ์๋ฃ๋ ํ์ ์ ์์ ์ผ๋ก DB ์ ์์ด ๋๋ ๊ฒ์ ํ์ธํฉ๋๋ค.

> status๋ก db ์์ธ์ ๋ณด ๋ํ ํ์ธํ ์ ์์ต๋๋ค.

$ sudo mariadb-secure-installation
์ด์ ์ค์นํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณด์ ์ค์ ์ ์ค์ํฉ๋๋ค.

- ์ต์ด ์คํ ์ password๊ฐ ์ง์ ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ๊ณต๋ฐฑ์ผ๋ก enterํค๋ฅผ ๋๋ฌ์ค๋๋ค.
- unix_socket์ default ๊ฐ์ผ๋ก ์ ์งํ๋ฉฐ, root์ ์๋ก์ด ํจ์ค์๋๋ฅผ ์ง์ ํด ์ค๋๋ค. ์ดํ ์ต๋ช ๊ณ์ ๋ค์ ์ญ์ ํด ์ค๋๋ค.
- root ๊ณ์ ์ ์๊ฒฉ์ ์ ์น์ธ ์ ๋ฌด์ธ๋ฐ ์ ๋ ์น์ธํ๊ฒ ์ต๋๋ค.
- ํ ์คํธ ๋ฐ์ด๋ฒํ ์ด์ค์ ๊ถํ์ ๋ณด๋ ์ญ์ ํ, ํ ์ด๋ธ์ ๋ํ ๊ถํ ์ค์ ์ reloadํด์ค๋๋ค.
์ค์ ์๋ฃ ํ ์ ์์ด ์ ์์ ์ผ๋ก ๋๋์ง ํ์ธํด๋ด ๋๋ค.
//๊ด๋ฆฌ์ ๊ถํ์ผ๋ก DB์ ์
$ sudo mariadb
//์ผ๋ฐ ๊ณ์ ์ผ๋ก DB์ ์
$ mariadb -uroot -p
$ password <root ๋น๋ฐ๋ฒํธ>


์ต์ด๋ก mariadb๋ฅผ ์ค์นํ๋ฉด ๋ฆฌ๋ ์ค ํ์ผ ์์คํ ๊ธฐ๋ณธ ์ค์ ์ ์๋์ฐ์๋ ๋ค๋ฅด๊ฒ ํ ์ด๋ธ ์ด๋ฆ์ด ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
db์ ์ ์ํด์ > show variables like 'lower_case_table_names'; ๋ช
๋ น์ด๋ก ํ
์ด๋ธ์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์ค์ ์ ํ์ธํด๋ณด๋ฉด default ๊ฐ์ด 0์์ ํ์ธํ ์ ์๋๋ฐ์.

ํด๋น value์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
| lower_case_table_names | Value |
|---|---|
| 0 | ํ ์ด๋ธ ๋์๋ฌธ์ ๊ตฌ๋ถ |
| 1 | ํ ์ด๋ธ ๋์๋ฌธ์ ๊ตฌ๋ถ ์์ด ์๋ฌธ์๋ก ์ ์ฅ |
| 2 | ์๋์ฐ์์ ํ ์ด๋ธ ๋์๋ฌธ์ ๊ตฌ๋ถ |
Value ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ํ์ผ์ ์๋ํฐ๋ก ์ฝ๋๋ค.
$ sudo vim /etc/mysql/mariadb.conf.d/50- server.cnf
๋ค์๋ก ์ฌ์ฉํ ํฌํธ์ ๋์๋ฌธ์ ๊ตฌ๋ถ ์ค์ ๊ฐ์ ์
๋ ฅํฉ๋๋ค. ์ด๋ 'port'์ 'lower_case_table_names' ์์ฑ์ ํ๋จ์ ์ถ๊ฐํฉ๋๋ค.

์ค์ ํ์ผ ์ ์ฅ ํ mariaDB ์๋น์ค๋ฅผ ์ฌ์์ํด์ค๋๋ค.
$ sudo service mariadb restart

ํฌํธ๊ฐ ์ ์์ ์ผ๋ก ๋ณ๊ฒฝ๋์๋์ง telnet ๋ช
๋ น์ด๋ก ํ์ธํด๋ด
๋๋ค.
$ telnet localhost (port)

๋์๋ฌธ์ ๊ตฌ๋ถ ์ค์ ์ด 1๋ก ์ ๋ณ๊ฒฝ๋์๋์ง ํ์ธํฉ๋๋ค.
> show variables like 'lower_case_table_names';

ssh ์ค์ ์ ๋ฐฉํ๋ฒฝ ์คํ์ ์ํ๋ค๋ฉด,utf ๋ฐฉํ๋ฒฝ ์คํ์ ํ์ฑํํด์ผํฉ๋๋ค.
$ sudo vi /etc/services

์ค์ ํ์ผ์์ ์ํ๋ ์๋น์ค ๊ฒ์ ํ ์ด๊ณ ์ ํ๋ ๋ฐฉํ๋ฒฝ ํฌํธ์ ๋ถํฉํ๋์ง ํ์ธํฉ๋๋ค. ์กฐํํด๋ณด๋ mysql์ 3306/tcp์ธ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.

$ sudo ufw allow 3306/tcp
์๋น์ค ํ์ผ์์ ํ์ธํ๋ mysql ์๋น์ค์ ํฌํธ์ ํ๋กํ ์ฝ์ ์ง์ ํ์ฌ ๋ฐฉํ๋ฒฝ์ ์คํํฉ๋๋ค.
$ sudo ufw allow <port>/<optional: protocol> //protocol์ ์๋ต๊ฐ๋ฅํ๋ฉฐ ์๋ต ์ tcp์ udp ๋ชจ๋ ์ ์ฉ๋ฉ๋๋ค.

$ sudo ufw allow mysql ๋ช
๋ น์ด๋ก ์ฌ์ฉํ mysql ์๋น์ค์ ๋ฐฉํ๋ฒฝ์ ์คํํ ์๋ ์์ต๋๋ค. 4.2์์ ๋จผ์ ํฌํธ์ ํ๋กํ ์ฝ๋ก ์คํํด์ฃผ์๊ธฐ ๋๋ฌธ์, ํด๋น ๋ฐฉํ๋ฒฝ rule ์ถ๊ฐ๋ skipํ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค์.
( ๋นํ์ฑํํ ๊ฒฝ์ฐ์๋ $ sudo ufw disable )
$ sudo ufw status

ํ์ฌ ๋ฐฉํ๋ฒฝ ์ํ๋ฅผ ํ์ธํด๋ณด๋ฉด inactive ์ํ์ธ ๊ฒ์ ์ ์ ์๋๋ฐ์. ์ฐ๋ถํฌ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ฐฉํ๋ฒฝ์ธ UFW(Ubuntu Firewall)์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋นํ์ฑํ ๋์ด ์๊ธฐ ๋๋ฌธ์ ufw enable ๋ช
๋ น์ด๋ก ufw๋ฅผ ํ์ฑํํด์ผํฉ๋๋ค.
์ฃผ์ํด์ผํ ์
ufw๋ฅผ ํ์ฑํํ๋ฉด ๋ฐฉํ๋ฒฝ์ด ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ํฌํธ๊ฐ ์๋์ผ๋ก ๋งํ๊ฒ ๋ฉ๋๋ค. ๋ฐฉํ๋ฒฝ ์ค์ ์ ํ์ง ์๊ณ ๊ทธ๋๋ก ์ข ๋ฃํ๋ฉด ์ดํ๋ถํฐ ssh ์ ๊ทผ์ ๋ชปํ ์๋ ์์ผ๋ ์ ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
$ sudo ufw enable
ufw ๋ฐฉํ๋ฒฝ์ ํ์ฑํํ๊ณ ๋ค์ status๋ฅผ ์กฐํํ๋ฉด active ์ํ๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ ํ์ธํ ์ ์์ผ๋ฉฐ, ์๋์ ๊ฐ์ด ๊ธฐ์กด์ ์คํํ๋ ์๋น์ค๋ค์ ๋ํ IPv4 ๋ฐ IPv6์ ๋ํ ๋ฐฉํ๋ฒฝ ํ์ฉ ์ ์ฑ
์ด ์ ์ฉ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.


$ sudo ufw status numbered๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฉํ๋ฒฝ ์ ์ฉ ์์์ ๋ง์ถฐ status๋ฅผ ํ์ธํ ์๋ ์์ต๋๋ค.
$ sudo vim /etc/mysql/mariadb.conf.d/50- server.cnf
์๊ฒฉ ์ ์์ ์ํด์ ๊ธฐ์กด์ ์๋ํฐ๋ก ์ด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ํ์ผ์ bind-address๋ฅผ ์ฃผ์์ฒ๋ฆฌํฉ๋๋ค.
bind-address ์ด๊ธฐ ์ค์ ์ธ 127.0.0.1์ ๋ก์ปฌ ์ฃผ์๋ก๋ง ์ ์ํ ์ ์๋ ์ํ๋ฅผ ๋ปํ๋ฏ๋ก, ๋ค๋ฅธ ์ธํฐ๋ท ํ๊ฒฝ์์๋ ์ ์ํ ์ ์๊ฒ ํ๋ ค๋ฉด ์ฃผ์ ์ฒ๋ฆฌ ํด์ผํฉ๋๋ค.


๋ฐ์ดํฐ๋ฒ ์ด์ค ์๊ฒฉ ์ ์ ํ ์คํธ๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋๋ฅผ ์๋ก ์์ฑํด๋ด ์๋ค.
> create database <๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ>;

๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ๊ธฐ ์ํ port๋ฅผ ํ์ธํด๋ด
๋๋ค.
show global variables like 'port';

> create user '๊ณ์ '@'์ ์์์น' identified by 'ํจ์ค์๋';

> grant all privileges on DB์ด๋ฆ.ํ
์ด๋ธ to '๊ณ์ '@'์ ์์์น';
> flush privileges;

์ดํ
> select user,host from mysql.user; ๋ช
๋ น์ด๋ก ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์
๊ด๋ฆฌ์ ๊ณ์ ์ ์กฐํํด๋ณด๋ฉด ๋ฐฉ๊ธ ์ ์์ฑํ ๊ณ์ ์ ํ์ธํ ์ ์์ต๋๋ค.

์, ์ด์ ๊ทธ๋ ๋ค๋ฉด ์ง๊ธ๊น์ง ์ธํ ํ DB๋ฅผ ์ง์ ์ฐ๊ฒฐํด๋ด ์๋ค. DB ํธ๋ค๋ง์ ์ํ IDE๋ก ์ ๋ ์ ์ฉํ๋ JetBrains ์ฌ์ Datagrip์ ์ฌ์ฉํ๋๋ก ํ๊ฒ ์ต๋๋ค.( heidiSQL ์ฌ์ฉํด๋ ๋ฌด๋ฐฉ )

MariaDB ๋ฐ์ดํฐ ์์ค๋ฅผ ์์ฑํ๊ณ , ์ ์ํ Host๊ณผ port, ์กฐ๊ธ ์ ์ ์์ฑํ user์ password, ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉํ database ์ด๋ฆ์ ๊ฐ๊ฐ ์ ๋ ฅํ์ฌ DB Connection์ ์งํํด๋ด ์๋ค.
์ฌ๊ธฐ์ Host๋ ๊ณต์ ๊ธฐ๊ฐ ํ ๋นํ ๋ด๋ถ ip์ธ 192.168.x.x๊ฐ ์๋ ํ์ฌ ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๊ณต์ ๊ธฐ์ ip, ์ฆ ์ธ๋ถ ip(External IP)๋ก ์ ์ํฉ๋๋ค. ์ด๋ ๊ณต์ ๊ธฐ๋ ํฌํธ ํฌ์๋ฉ์ ํ์๋ก ์งํํ์ฌ์ผํฉ๋๋ค.
Tip
์๊ฒฉ์ผ๋ก ํ์ฌ ๋์ ๋ฆฌ๋ ์ค ์๋ฒ์ ์ ์ํ ์ธ๋ถ ip๋ฅผ ์๊ณ ์ํ๋ค๋ฉด, ๋ฆฌ๋ ์ค ์๋ฒ ํฐ๋ฏธ๋ ์ฐฝ์์
$ curl ifconfig.me๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ ์ํ ์ธ๋ถ ip๋ฅผ ์์๋ผ ์ ์์ต๋๋ค.
์ด์ Test Connection ๋๋ฌ์ Succeeded ๊ฐ ํ์๋๋ฉด ์ฐ๊ฒฐ์ด ์๋ฃ๋์์์ ์๋ฏธํฉ๋๋ค.
์ฝ์ ์ฐฝ์ ์ด์ด์ > select now(); ๋ฅผ ๋ ๋ ค๋ด
์๋ค.
์ ์์ ์ผ๋ก ํ์ฌ ์๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ก์จ DB ์์ฑ ๋ฐ ์ธ๋ถ ์ ์ ์ค์ ์ด ์๋ฃ๋์๋ค์.