๐Ÿฏ[TIL] 250703-024

byoยท2025๋…„ 7์›” 3์ผ

๐Ÿ’ซ AWS

โœ”๏ธ ๋กœ์ปฌ db ์„ค์ •

AWS์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์ „ ๋กœ์ปฌ์—์„œ ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ธฐ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

โ˜‘๏ธ ๋กœ์ปฌ db ์ž‘์„ฑ

psql -U postgres
psql (17.4)

postgres=# CREATE USER dashboard WITH PASSWORD 'password';
CREATE ROLE
postgres=# CREATE DATABASE dashboard OWNER dashboard;
CREATE DATABASE
postgres=# \l
                                             ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชฉ๋ก
   ์ด๋ฆ„    |  ์†Œ์œ ์ฃผ   | ์ธ์ฝ”๋”ฉ | ๋กœ์ผ€์ผ ์ œ๊ณต์ž | Collate | Ctype | ๋กœ์ผ€์ผ | ICU ๋ฃฐ |      ์•ก์„ธ์Šค ๊ถŒํ•œ
-----------+-----------+--------+---------------+---------+-------+--------+--------+-----------------------
 dashboard | dashboard | UTF8   | libc          | ko-KR   | ko-KR |        |        |
 
postgres=# \q

PS C:\Users\juyou> psql -U dashboard
psql (17.4)
๋„์›€๋ง์„ ๋ณด๋ ค๋ฉด "help"๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.

dashboard=> CREATE TABLE sales (
dashboard(>     id          SERIAL      PRIMARY KEY,
dashboard(>     sale_date   DATE        NOT NULL,
dashboard(>     customer_id INT         NOT NULL,
dashboard(>     amount      NUMERIC(10,2) NOT NULL
dashboard(> );
CREATE TABLE
dashboard=> CREATE VIEW daily_sales AS
dashboard-> SELECT sale_date,
dashboard->        SUM(amount)    AS total_amount,
dashboard->        COUNT(*)       AS order_count
dashboard->   FROM sales
dashboard->  GROUP BY sale_date
dashboard->  ORDER BY sale_date;
CREATE VIEW
dashboard=> CREATE VIEW customer_spending AS
dashboard-> SELECT customer_id,
dashboard->        SUM(amount) AS total_spent
dashboard->   FROM sales
dashboard->  GROUP BY customer_id;
CREATE VIEW

dashboard-> \dt
            ๋ฆด๋ ˆ์ด์…˜ ๋ชฉ๋ก
 ์Šคํ‚ค๋งˆ | ์ด๋ฆ„  |  ํ˜•ํƒœ  |  ์†Œ์œ ์ฃผ
--------+-------+--------+-----------
 public | sales | ํ…Œ์ด๋ธ” | dashboard
(1๊ฐœ ํ–‰)

โ˜‘๏ธ์Šคํ”„๋ง์—์„œ ๋ฐ์ดํ„ฐ ์ž˜์žกํžˆ๋Š”์ง€ ํ™•์ธ

  • dashboard/src/main/resources/application.yml
spring:
  application:
    name: ${APP_NAME}
  datasource:
    url: jdbc:postgresql://${DB_HOST}:${DB_PORT}/${DB_NAME}
    username: ${DB_USERNAME}
    password: ${DB_PASSWORD}
  • run > edit configuration > environment values
APP_NAME=dashboard;DB_HOST=localhost;DB_NAME=dashboard;DB_PASSWORD=password;DB_PORT=5432;DB_USERNAME=dashboard

โœ”๏ธ AWS DB ์„œ๋ฒ„ ๋งŒ๋“ค๊ณ  postgres ์„ค์น˜

๊ทธ๋ƒฅ ๋””๋น„์šฉ ์„œ๋ฒ„ ์ƒˆ๋กœ ํŒ ๋‹ค..

์ „์— ํ–ˆ๋˜๋Œ€๋กœ aws ์ธ์Šคํ„ด์Šค ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ
์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์— postgres๊ฐ€ ์ ‘๊ทผ๊ฐ€๋Šฅํ•˜๋„๋ก port:5432 source:ipv4 ์„ค์ •ํ•˜๊ณ 

putty๋กœ ๋“ค์–ด๊ฐ€์„œ postgres ์„ค์น˜..
์„ค์น˜ ๋ช…๋ น์–ด๋Š” ์—ฌ๊ธฐ์—

pg_hba.conf ํŽธ์ง‘๋ถ€ํ„ฐ ํ•ด๋ฒ„๋ฆฌ๋ฉด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ชจ๋ฅด๋‹ˆ๊น ๊ผญ ์Šˆํผ์œ ์ € ๋น„๋ฒˆ ์„ค์ •๋ถ€ํ„ฐ ํ•ด์ฃผ๊ณ  conf ํŒŒ์ผ ํŽธ์ง‘ํ•˜๊ธฐ^^

โœ… aws postgres์— ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๊ธฐ

์•„๊นŒ ๋กœ์ปฌ postgres์—์„œ ํ•˜๋“ฏ์ด ๋˜‘๊ฐ™์ด ํ•˜๋ฉด๋œ๋‹ค.

sudo systemctl status postgresql
psql -U postgres -W
CREATE USER dashboard WITH PASSWORD 'password';
CREATE DATABASE dashboard OWNER dashboard;
\q
psql -U dashboard -W
CREATE TABLE sales (
    id          SERIAL      PRIMARY KEY,
    sale_date   DATE        NOT NULL,
    customer_id INT         NOT NULL,
    amount      NUMERIC(10,2) NOT NULL
);
CREATE VIEW daily_sales AS
SELECT sale_date,
       SUM(amount)    AS total_amount,
       COUNT(*)       AS order_count
  FROM sales
 GROUP BY sale_date
 ORDER BY sale_date;
CREATE VIEW customer_spending AS
SELECT customer_id,
       SUM(amount) AS total_spent
  FROM sales
 GROUP BY customer_id;

โœ”๏ธ AWS๋กœ Spring ๋ฐฐํฌํ•˜๊ธฐ

git์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ aws์— ์˜ฌ๋ฆด ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๊นƒํ—ˆ๋ธŒ์— ํ‘ธ์‹œํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค.

โ˜‘๏ธ aws์—์„œ ์ž๋™์œผ๋กœ ์ž๋ฐ” ํˆด์ฒด์ธ์„ ๋ชป์ฐพ๋Š”๋Œ€์„œ ๋ฏธ๋ฆฌ ์„ค์ •ํŒŒ์ผ์— ๋ช…์‹œํ•˜์—ฌ ํ‘ธ์‹œํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค.

settings.gradle ํŒŒ์ผ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •:

pluginManagement {
    repositories {
        gradlePluginPortal()
        mavenCentral()
    }
}

plugins {
    id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}

rootProject.name = 'dashboard'

โ˜‘๏ธ ์ฐธ๊ณ ๋กœ ์ž๋ฐ”๋ฒ„์ „๋„ ๋ช…์‹œํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค..

  • root ํด๋” > system.properties ์ƒ์„ฑ ํ›„ ํ•œ ์ค„ ์ถ”๊ฐ€
java.runtime.version=17

โœ… AWS spring์šฉ ์ปด ํ•˜๋‚˜ ์ƒ์„ฑ

AWS > ec2 ์ง„์ž… > ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜๊ธฐ

  • ์ธ์Šคํ„ด์Šค ์ด๋ฆ„ ์ž…๋ ฅ
  • ๋ฆฌ๋ˆ…์Šค ๋ฒ„์ „ ์„ ํƒ (์—ฌ๊ธฐ์„œ๋Š” ๊ทธ๋ƒฅ ์•„๋งˆ์กด ์„ ํƒํ•จ)
  • ํ‚ค ํŽ˜์–ด ๊ฑ ์žˆ๋Š”๊ฑฐ ์žฌ์‚ฌ์šฉ ํ•ด๋„๋œ๋‹ค. ๋ณด์•ˆ ๊ด€๋ฆฌ์— ๋”ฐ๋ผ ํ‚ค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ƒ์„ฑํ•ด์„œ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์ƒ์„ฑ๋ˆ„๋ฅด๊ธฐ

  • ์ƒ์„ฑ๋˜๋ฉด id ๋งํฌ ํด๋ฆญํ•ด์„œ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์„ค์ •ํ•˜๋Ÿฌ ๋“ค์–ด๊ฐ„๋‹ค.
    ์ž์„ธํ•œ ์„ค๋ช…์€ ์—ฌ๊ธฐ์—
    ์Šคํ”„๋ง์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์— ํฌํŠธ 8080, ์†Œ์Šค ipv4 ์„ ํƒ ํ›„ ์ €์žฅ.

โœ… putty์—์„œ ์—ด๊ธฐ

putty ์—ด์–ด์„œ ํ‚ค ์„ค์ •ํ•˜๊ณ 
์„ธ์…˜ ์—ฐ๊ฒฐํ•œ๋‹ค. ๋ฌผ๋ก  ์Šคํ”„๋ง์šฉ aws public ipv4 ip ์ž…๋ ฅ
์ž์„ธํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•œ๋‹ค

ec2-user@<public-ipv4-address> 

โœ… AWS์— git, jdk ์„ค์น˜ํ•˜๊ธฐ

aws ec2 ์ธ์Šคํ„ด์Šค๋กœ ์ƒˆ๋กœ์šด ์„œ๋ฒ„ ์ปดํ“จํ„ฐ ๊ณต๊ฐ„์„ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ์„œ๋ฒ„์ปด์—์„œ ์Šคํ”„๋ง ์‹คํ–‰์„ ์œ„ํ•œ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
git, jdk, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋“ฑ๋ก์ด ํ•„์š”ํ•˜๋‹ค.

โ˜‘๏ธ ๊นƒ ์„ค์น˜, ๋ฒ„์ „ํ™•์ธ

sudo dnf install git -y
git --version

โ˜‘๏ธ jdk ์„ค์น˜, ๋ฒ„์ „ํ™•์ธ

sudo dnf install java-17-amazon-corretto -y
java --version

โ†’ aws๋‹ˆ๊น ๊ทธ๋ƒฅ ์•„๋งˆ์กด jdk ์„ค์น˜..

โ˜‘๏ธ ๊นƒ ํด๋ก ํ•ด์„œ ํ”„๋กœ์ ํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ

git clone your_github_address

โœ… ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ธฐ

์Šคํ”„๋ง ํŒŒ์ผ๋“ค์ด ์ž˜ ๋„˜์–ด์˜ค๋ฉด ์ด์ œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •๋งŒ ํ•ด์ฃผ๋ฉด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๋จผ์ € ํด๋ก ํ•ด์˜จ ๊นƒ ํด๋”๋กœ ์ด๋™ํ•˜์—ฌ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

  • ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ํŒŒ์ผ๋ฆฌ์ŠคํŠธ ํ™•์ธ
  • ๊นƒ ํด๋”๋กœ ์ด๋™
ls -al
cd your_git_repository_name
ls -al
cd project_root_folder_name

โ˜‘๏ธ ๋ฆฌ๋ˆ…์Šค ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •

  • ์„ค์ •ํŒŒ์ผ ํŽธ์ง‘
sudo nano ~/.bashrc

์„ค์ •ํŒŒ์ผ์ด ์—ด๋ฆฌ๋ฉด ์—ฌ๊ธฐ์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ˜‘๏ธ JDK ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
.bashrc ํŒŒ์ผ ๋งจ ์•„๋ž˜์— ๋‘์ค„ ์ถ”๊ฐ€

export JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto
export PATH=$JAVA_HOME/bin:$PATH

โ˜‘๏ธ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ .bashrc ํŒŒ์ผ ๋งจ ์•„๋ž˜์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋„ ์ž…๋ ฅํ•ด์ค€๋‹ค.
โ€ผ๏ธaws db ์ธ์Šคํ„ด์Šค host ip ์ž…๋ ฅ

export APP_NAME=dashboard
export DB_HOST=18.208.216.209 
export DB_PORT=5432
export DB_NAME=dashboard
export DB_USERNAME=dashboard
export DB_PASSWORD=password

โ˜‘๏ธ ์ €์žฅํ•˜๊ณ  ์ ์šฉํ•˜๊ธฐ
ctrl X > save? Y > save_file_name ๊ทธ๋Œ€๋กœ Enter

  • .bashrc ํŒŒ์ผ์— ์„ค์ •ํ•œ ๋‚ด์šฉ์„ ์ง€๊ธˆ ์ด ์…ธ์— ์ฆ‰์‹œ ์ ์šฉ
source ~/.bashrc

โœ… ๋นŒ๋“œํ•˜๊ธฐ

์ธํ…”๋ฆฌ์ œ์ด์—์„œ ๋”ธ๊น์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์ž…๋ ฅํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค..

  • gradle ์‹คํ–‰ ๊ถŒํ•œ ๋ถ€์—ฌ
  • .gradle ํด๋” ๊ฐ•์ œ ์‚ญ์ œ
  • build ์ง€์šฐ๊ณ  ๋‹ค์‹œ ์‹คํ–‰
chmod +x gradlew
rm -rf ~/.gradle
./gradlew clean build

Gradle ํ”„๋กœ์ ํŠธ์—์„œ ./gradlew build๋ฅผ ์‹คํ–‰ํ•˜๋ฉด,
์ปดํŒŒ์ผ๋œ ๊ฒฐ๊ณผ๋ฌผ(jar)์ด build/libs/ ํด๋”์— ์ƒ์„ฑ๋œ๋‹ค.

[project_root_folder]$ ls build/libs/
dashboard-0.0.1-SNAPSHOT-plain.jar  dashboard-0.0.1-SNAPSHOT.jar
ํŒŒ์ผ๋ช…์ฐจ์ด์ 
dashboard-0.0.1-SNAPSHOT.jarโœ… ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ fat JAR (๋ชจ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํฌํ•จ)
dashboard-0.0.1-SNAPSHOT-plain.jarโŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ์ˆœ์ˆ˜ ์ปดํŒŒ์ผ ํด๋ž˜์Šค๋งŒ ํฌํ•จ๋œ JAR

โœ… ์‹คํ–‰ํ•˜๊ธฐ run

์‹คํ–‰ ๊ฐ€๋Šฅํ•œ jar ํŒŒ์ผ์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์˜ต์…˜(nohup)์œผ๋กœ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋œ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ์„œ๋ฒ„ ์ปดํ“จํ„ฐ๋ฅผ ๊บผ๋„ ๋ฐฐํฌ๊ฐ€ ์ง€์†๋œ๋‹ค.

nohup java -jar build/libs/dashboard-0.0.1-SNAPSHOT.jar > log.txt 2>&1 &

์‹คํ–‰ ๋กœ๊ทธ๋ฅผ log.txt์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ถ€๋ถ„์„ค๋ช…
nohupํ„ฐ๋ฏธ๋„์„ ๋‹ซ์•„๋„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์† ์‹คํ–‰๋˜๊ฒŒ ํ•จ
java -jar build/libs/dashboard-0.0.1-SNAPSHOT.jarJAR ํŒŒ์ผ ์‹คํ–‰ (Spring Boot ์„œ๋ฒ„ ๋“ฑ)
>ํ‘œ์ค€ ์ถœ๋ ฅ(stdout)์„ log.txt๋กœ ๋ฆฌ๋‹ค์ด๋ ‰์…˜
2>&1ํ‘œ์ค€ ์—๋Ÿฌ(stderr)์„ ํ‘œ์ค€ ์ถœ๋ ฅ(stdout)์œผ๋กœ ํ•ฉ์นจ โ†’ ์ฆ‰, ๋ชจ๋“  ๋กœ๊ทธ๋ฅผ log.txt์— ์ €์žฅ
&๋ช…๋ น์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰ํ•จ (ํ„ฐ๋ฏธ๋„์„ ์ฐจ์ง€ํ•˜์ง€ ์•Š์Œ)

โ˜‘๏ธ ๋กœ๊ทธ ํ™•์ธ

tail -f log.txt

์ตœ์‹ ์ˆœ์œผ๋กœ ๋กœ๊ทธ ํ™•์ธ ๊ฐ€๋Šฅํ•œ tail ์˜ต์…˜

profile
๐Ÿ—‚๏ธ hamstern

0๊ฐœ์˜ ๋Œ“๊ธ€