이제 3개월차부턴 기업협업이 시작되었다. 나는 인썸니아라는 웹서비스 및 모바일앱 개발을 하는 스타트업 회사로 가게되었다. 인썸니아는 풀스택개발자들을 지향하고 개인프로젝트로 진행되기때문에 여기서 한달만 일해도 정말 많은것을 배울수 있을것 같았다.
인썸니아에서 우리에게 주어진 프로젝트는 4주동안 웹앱 쇼핑몰을 만드는것이다. 프로젝트는 개인 프로젝트이며 다음 기술스택을 사용하여 기획부터 백앤드, 프론트앤드부분까지 해야한다.
백앤드부분 같은 경우에는 사실 너무나도 생소한 Ruby라는 언어를 쓰는 Rails라는 풀스택 framework를 사용하게 되고,
프론트앤드부분 같은경우에는 이제는 많이 익숙해진 React.js를 사용하지만 Framework7이라는 웹앱을 만들어주는 library를 사용해야하고, 지금까지 SASS, Styled Components를 사용해왔던것과 달리 Tailwind CSS라는 inline styling처럼 생긴 스타일링을 해야해서 같은 React지만 조금 다를것 같았다 ㅋㅋ
또다시 내가 뭘 할수있는지도 모르던 1차 프로젝트 시작전의 마음으로 밤샘 공부를 .. 다짐하며 ... 기업협업 프로젝트를 시작했다.
우리는 기업협업 첫날전에 Ruby 2.6.5버전과 Rails 6버전을 설치해서 오라는 미션?을 받았는데 ... M1 노트북을 가지고 있는 나한테 새로운 프로그램을 설치하는건 진짜 ..... 하 .... 금요일밤부터 설치를 시도하기 시작해서 일요일 오후 3시쯤에 설치를 했다. 정말 stackoverflow에 올라온 모든 M1 설치 관련 포스트와 유튜브 영상을 다 본것 같다 ... 같은 M1인데 왜 저사람들은 되고 나는 안되는건지도 모르겠고 ... 설치가 되었는데 뭐때메 된건지도 모르겠다 ..... Ruby 2.7.2버전 설치를 성공했는데 또 2.6.5버전은 설치가 안되고 ... 멘붕의 연속 ... 🤯
책상에 굴러다니는 LG Gram에 우분투를 설치해서 Ruby와 Rails를 설치하는법을 검색까지 해봤다 ....
결국 일요일에 Ruby 2.6.5버전과 Rails 6버전 설치를 성공했지만 세상은 아직 M1을 받아드릴 준비가 안된것을 주말에 깨달아버렸,,,
많이 허접하지만 .... 모델링부터 시작해보았다. 일단 한 사이클을 돌리는게 중요하다고 생각했기때문에 가장 기본적인 기능들만 구현했다.
회원가입/로그인 ▷ 상품리스트 ▷ 찜리스트 ▷ 장바구니 ▷ 결제
부수적인 옵션들을 거의 다 제거하고 카테고리와 주문 Status만 더 넣었을뿐인데도 머리가 복잡해졌다 ... 프론트쪽을 구현할때는 다른 요소들이 서로 어떤 연관성이 있는지 생각을 많이 할 필요가 없었는데 백앤드쪽에서는 많은 데이터를 효율적으로 관리를 해야하니 어떤 데이터가 어떤 데이터와 엮여있는지 생각하며 데이터베이스를 짰어야했다.
🎈 여기서 중요한 convention
루비온레일즈에서 마이그레이션 파일을 만드는 방법은 다음과 같다. 만약 items 모델을 추가하려면,
rails generate model Item name:string description:text image_rl:string price:integer sale:decimal category:references
이런식으로 커맨드에 입력하고 실행한다. 그러면 app > db > migrate
폴더안에 다음과 같은 마이그레이션 파일과 모델 파일이 생성된다. Category 같은 경우에는 아이템과 1:n 관계기때문에 뒤에 데이터타입 대신 :references
라고 지정해준다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class CreateItems < ActiveRecord::Migration[6.0] def change create_table :items do |t| t.string :name t.text :description t.string :image_url t.integer :price t.decimal :sale t.integer :stock t.references :category, null: false, foreign_key: true t.timestamps end end end |
이렇게 모든 테이블들의 마이그레이션 파일과 모델 파일을 생성하고 나면 다음으로 해야할것은 테이블간의 관계들을 define 해주어야한다.
app > models
폴더안에는 rails generate model
command를 실행할때 만들어진 모델 파일들이 있다. 만약 :references
를 붙였다면 다음과 같이 저절로 belongs_to
라는 관계가 정의가 되어 있다.
1 2 3 | class Item < ApplicationRecord belongs_to :category end |
하지만 반대로 has_many
에 대한 관계는 정의 되어있지 않기때문에 하나하나 파일을 수정해줘야한다.
1 2 3 4 5 6 | class Item < ApplicationRecord belongs_to :category has_many :likes, dependent: :destroy has_many :liked_users, through: :likes, source: :user has_many :line_items end |
이렇게 model 파일들을 하나하나 다 수정해주면 이제 db:migrate를 하면 된다. 여기서부턴 다음 포스트에 ...