티스토리 뷰

이 전 시간에 Ruby on Jets를 설치를 해봤습니다.

그럼 이번에는 간단하게 Ruby on Jets 구조 소개 및 기본 몇 가지 명령어를 살펴보겠습니다.

 

앞으로 Jets를 하면서 해당 글에서 예제로 사용되는 명령어에 있어선 초반 인트로에 말했다 싶이 Ruby on Rails와 명령어가 아주 비슷합니다.

 

 

  • Ruby on Jets 구성

Ruby on Jets는 대략적으로 다음과 같은 구성으로 되어있습니다.

.
├── app
│   ├── controllers
│   ├── helpers
│   ├── javascript
│   ├── jobs
│   ├── models
│   └── views
├── bin
├── config
├── db
├── public
└── spec
디렉터리 혹은 파일 특징
app/controllers 해당 Controller를 호출 시 내부 코드가 동작이 됩니다. AWS Lambda 배포 시, 해당 Controller 내 액션별로 함수가 생성이 됩니다.
app/helpers Controller 등에서 긴 코드를 효율적으로 분리하고 관리하기 위해 함수로 사용되는 방법 중 하나로서, 헬퍼 함수는 재사용이 가능합니다.
app/javascript Assets 기능이 활용되어 캐싱을 방지하고, image, javascript, css 파일들이 해당 폴더 내에서 관리가 됩니다. [https://kbs4674.tistory.com/17]
app/jobs Scheduler + Job으로서 활용되는 파일들의 모임으로서, 해당 Job 파일을 호출 시, 파일 내 코드가 작동됩니다. [https://kbs4674.tistory.com/106]
app/models 테이블 관리 및, Remote Connect 된 Database의 Table을 ORM으로 변환시키는 등으로 활용됩니다.
bin 실행파일들이 여기에 담겨져 있습니다. Jets에서는 기본적으로 webpackers 패키지가 있습니다.
config Database 설정, Router 설정, Environment 별 환경설정, 서버 실행 시 초기화 코드 설정, AWS Lamabda 설정 등을 해당 폴더에서 관리합니다.
db 모델(Database Table) 파일이 관리됩니다.
public 파일 관리에 사용되는 폴더로, Assets과는 다르게 캐싱이 되는 특징이 있습니다. [https://kbs4674.tistory.com/17]
spec 코드/Gem Test 시에 활용이 됩니다.
.env 환경변수 설정 시 활용됩니다. [https://kbs4674.tistory.com/110]

 

 

  • MySQL2 데이터베이스 생성

Jets는 기본적으로 MySQL2 데이터를 사용합니다.

콘솔을 이용해서 기본적인 MySQL2 데이터베이서를 구축을 해보겠습니다.

 

1. 우분투 계정을 Super User 계정으로 전환합니다.

sudo su

 

2. MySQL 콘솔을 킵니다.

mysql -u root -p

이 때 암호를 묻긴 하지만, 그냥 엔터를 누르면 관리자 권한으로서 바로 로그인 및 콘솔로 진입됩니다.

 

3. MySQL 콘솔에 다음 내용을 입력해서 데이터베이스를 생성합니다.

# CREATE DATABASE [데이터베이스 이름];

CREATE DATABASE kcm_development;
CREATE DATABASE kcm_test;
CREATE DATABASE kcm_production;

 참고  저는 development, test, production 환경을 대비해 데이터베이스를 3개 만들었습니다.

 

4. MySQL 사용자를 생성합니다.

CREATE USER 'kcm4674'@'%' IDENTIFIED BY '123456a';

 

5. 데이터베이스 접근권한 리스트에 사용자를 추가합니다.

GRANT ALL PRIVILEGES ON kcm_development.* TO 'admin'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON kcm_development.* TO 'admin'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON kcm_development.* TO 'admin'@'%' WITH GRANT OPTION;

 

6. 키보드에서  Ctrl + D  를 눌러서 MySQL 및 Superuser 권한 터미널에서 빠져나갑니다.

 

7. Database 환경설정을 관리하는  config/database.yml  파일을 열람합니다.

 

8.  database.yml  을 다음과 같이 내용을 변경합니다.

default: &default
  adapter: mysql2
  encoding: utf8
  username: <%= ENV["DATABASE_USER_NAME"] %>
  password: <%= ENV["DATABASE_USER_PASSWORD"] %>
  pool: 5

development:
  <<: *default
  host: localhost
  database: <%= ENV["DATABASE_NAME"] %>_<%= Jets.env %>

test:
  <<: *default
  host: localhost
  database: <%= ENV["DATABASE_NAME"] %>_<%= Jets.env %>

production:
  <<: *default
  host: <%= ENV["DATABASE_HOST"] || "localhost" %>
  database: <%= ENV["DATABASE_NAME"] %>_<%= Jets.env %>

 

위 코드를 보면 ENV["DATABASE_NAME"] 과 같은 환경변수가 설정되어있는게 확인합니다.

이를 통해 코드 내 정보가 은닉처리 되어있음을 알 수 있습니다.

 

9. 환경변수 등록을 위해 프로젝트 루트위치에 보이는  .env  파일을 열람합니다.

 부록  환경변수 등록 [클릭]

 

 참고  혹시 .env 와 같은 숨김파일이 안보인다면 우측에 보이는 톱니바퀴 아이콘을 클릭 후, Show Hidden Files 를 클릭(숨김파일 활성화)

 

hidden 파일 visiable 활성화

 

10.  .env  파일에서 환경변수를 다음과 같이 등록합니다.

## .env

# DATABASE_HOST="15.164.32.14"
DATABASE_NAME="kcm"
DATABASE_USER_NAME="kcm4674"
DATABASE_USER_PASSWORD="123456a"

 

11. 이제 터미널을 통해 Database 생성 및 Migrate까지 진행합니다.

## 데이터베이스 생성
# JETS_ENV=production jets db:create
jets db:create

## 데이터베이스 Migrate (스키마 최신화)
# JETS_ENV=production jets db:migrate
jets db:migrate

## Seed파일 내 미리 입력된 더미데이터를 데이터베이스에 Write
# JETS_ENV=production jets db:seed
jets db:seed

## 데이터베이스 Drop
# JETS_ENV=production jets db:drop
jets db:drop

 참고  rake 명령어도 되긴 하나, create, migrate 에서 Environment 인식을 제대로 못합니다.

 

 

 유의사항  Database: Production Mode

 

AWS Lambda 함수 내 Database 활용에 있어, AWS Lambda 내에서 Database 사용에 있어 localhost 지원이 안됩니다.

그렇다보니 원격으로 Database를 연동해서 써야 할 필요가 있습니다.

 부록  다른 AWS EC2 서버 내의 Database와 Remote Connect 하기 [클릭]

 

 

  • MVC Generate

Jets에서는 Ruby on Rails와 동일하게 MVC 패턴으로서 구조를 생성할 수 있습니다.

 

1. Controller/View

## Controller/View 생성
jets g controller homes index

## Controller/View 제거
jets degenerate controller homes index

 

Controller/View 생성 시 자동으로 Test코드 등록 및  config/routes.rb  에 자동으로 URI 경로가 등록됩니다.

하지만 scss 및 coffee script는 생성이 안됩니다.

 

 

2. Model

## Model 생성
jets g model user email password nickname

## Model 제거
jets degenerate model

 

Model 생성 시, Table 및 모델파일이 생성됩니다.

하지만 Test 코드는 생성이 안됩니다.

 

 

 유의사항  파일 제거

파일 삭제는 다음과 같이 입력하면 됩니다.

## jets degenerate [controller | model | scaffold | ...] [NAME]
jets degenerate model user

 참고  햇갈릴 수 있는게 간혹 Rails 때와 같이 다음과 같이 입력하곤 하는데

## jets d [controller | model | scaffold | ...] [NAME]
jets d model user

위 방식은 jets에서는 통하지 않습니다.

 

 

  • Scaffold 생성

 실습 전 참고  사전에 Database 설정이 되어있어야 합니다.

간단히 Rails/Jets 내에서 CRUD를 생성해주는 Scaffold를 생성해보겠습니다.

 

1. Scaffold 생성

아래 명령어를 입력하면 아주 간단하게 scaffold가 설정이 됩니다.

jets scaffold post title content:text

 

더불어, 내부 동작도 Rails의 scaffold와 동일하게 이루어집니다.

 

 

 

  • URI 규칙 생성

Jets에서 URI 규칙은 Rails와 동일하게  config/routes.rb  에서 설정이 가능합니다.

일단 Jets에서는 기본적으로 Intro 화면을 보여주는 경로가 정의되어 있습니다.

Jets.application.routes.draw do
  root "jets/public#show"
  
  resources :posts
  
  # The jets/public#show controller can serve static utf8 content out of the public folder.
  # Note, as part of the deploy process Jets uploads files in the public folder to s3
  # and serves them out of s3 directly. S3 is well suited to serve static assets.
  # More info here: https://rubyonjets.com/docs/extras/assets-serving/
  any "*catchall", to: "jets/public#show"
end

 

 주의  AWS Deploy 시 과금주의

AWS Lamabda 배포 시,  routes.rb  에 정의된 내용들이 API 게이트웨이 서비스 이용을 할 것으로 간주합니다.

 

API 게이트웨이란?

1. AWS Lamabda는 기본적으로는 Scheduling 등 방법으로 내부적으로 Lamabda가 호출될 시, 람다에 작성된 코드가 동작되게 하는게 기본원리입니다.

2. API 게이트웨이는 이런 단순한 Lamabda의 원리에 웹페이지 주소(URL)을 연동시켜서 홈페이지 주소를 통해 Lamabda에 접근 시, Lamabda 함수가 작동되게 할 수 있습니다.

 

하지만 API 게이트웨이는 서비스 유지에 있어 100만번 이상 접근 시 비용이 발생합니다.

저같은 경우는 Lambda 함수만을 사용하다보니  routes.rb  내용은 싹 다 지워버리고 시작합니다.

 

 

  • 관련자료

1. Jets Docs : Project Structure [클릭]

2. Jets Docs : Controllers [클릭]

3. Jets Docs : Routing [클릭]

4. Jets Docs : Generators [클릭]

 

 

  • 자료 참고

1. MySQL 콘솔 접근 [클릭]

2. MySQL 데이터베이스 생성 [클릭]

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함