⛏️
공부방
  • README.md
  • 프로젝트
    • ft_transcendence
      • 설계
        • 0. 프론트 디자인
        • 1. BackboneJS 뷰 객체
        • 2. API 설계
        • 3. 레일즈 라우팅 구현
        • 4. DB 설계
        • 5. 채널 설계
    • slab-saver
    • react-payment
  • 공부
    • HTML, CSS
      • GRID
      • emmet
      • position
      • CSS Unit
        • 단위 정리
        • 기준을 정해보자
        • em의 정확한 기준은 뭐야?
      • flex
      • NAVBAR 실습
      • 유튜브 화면 만들어보기
    • SQL
      • 이론
        • 1강 데이터베이스
        • 2강 다양한 데이터 베이스
        • 3강 데이터베이스 서버
      • 명령어
        • DB 관리
        • TABLE 관리
        • Constraints
        • SQL 명령어 - 1
        • SQL 명령어 - 2
        • SQL 명령어 - 3
        • SQL 명령어 - 4
        • SQL 명령어 - 5
    • Ruby
      • 루비 객체와 클래스
      • 곡괭이
        • Chapter2. Ruby.new
        • Chapter3. 클래스, 객체, 변수
        • Chapter4. 컨테이너, 블록, 반복자
        • Chapter5. 기능 공유하기
        • Chapter6. 표준 타입
        • Chapter8. 메서드 파헤치기
    • Python
      • 유용한 링크
    • RubyOnRails
      • 아직 정리하지 못한 것들
        • RSPEC 을 이용한 테스트 완전 자동화
        • 레일즈 이니셜라이징 과정
        • 액션케이블 구체적으로 정리하기
        • 웹팩으로 자바스크립트 모듈 관리하기
      • ACTIVE JOB
        • 액티브잡의 기본
        • 실전! 액티브 잡을 이용한 스케쥴링
        • 서버를 껏다 키면 스케쥴링 된 이벤트가 사라진다!
      • ACTION CABLE
        • 액션케이블 Consumer를 이용해서 문제 해결
        • 액션케이블 연결 순서
      • ACTIVE STORAGE
      • 모델
        • validation
          • seeds 데이터 validation 스킵
          • validation 검사가 save, update, create 모든 경우에 일어난다
          • validator 클래스
          • 커스텀Validation
          • validates format(정규표현식)
        • 액티브레코드 find의 다양한 활용
        • 한 레코드에 동시 접속 막자!! with_lock
        • 레일즈 where 사용법
        • 레일즈에서 모델 관련 이슈
        • 모델이름바꿀때명심할것
        • 모델의 includes 메서드
        • 연관 모델을 다른 이름으로 설정하고 가져오기
      • 기본 상식
        • form으로 전달되는 params를 분석해보자
        • StrongParameter 쿼리 배열 받기
        • view helper로 디버깅 하는 방법
        • css 파일을 수정했는데 적용이 안된다?
        • StrongParameter 일반데이터와 객체 데이터 한번에 받기
        • wrap-parameter body가 두 번씩 날라오는 이유
        • 컬렉션 map에서 요소 스킵하는법
        • CASE를 이용해서 정렬(일반적인 정렬 X)
        • 문자열(정규표현식)
        • TIME ZONE 설정하기
        • 커스텀exception
      • RSPEC으로 모델 테스트하기
      • 한 눈에 읽는 루비 온 레일즈
      • Perfect RubyOnRails
        • Chapter1. 소개
        • Chapter2. RubyOnRails 기본
        • Chapter3. 스캐폴딩
        • Chapter7. 라우팅
        • Chapter8. 테스트
    • Javascript
      • var, let, const 차이
      • 브라우저 동작 원리
      • 디바운싱과 쓰로틀링
      • Tagged Template Literal(styled-components)
      • IntersectionObserver 를 사용해서 스크롤 이벤트의 부하 줄여주기
      • EVENT LOOP
        • 자바스크립트에서 어떻게 비동기적인 실행이 가능한걸까?
        • 이벤트 루프의 동작
        • setTimeout이 실행되면 어떤 동작이 일어날까?
        • 블록은 실행이 보장된다
        • 콜스택에 있는 블록이 보장된다는 점을 이용해서 브라우저 죽이기
        • setTimeout 무한반복으로 브라우저는 죽을까?
        • Promise 무한반복으로는 브라우저를 죽일 수 있을까?
        • RAF는 그럼 뭐야?
      • forEach는 반복도중 멈출 방법이 throw 밖에 없다!
      • 임시
        • 정리할 것 목록
          • 자바스크립트 기본 문법
        • 이벤트 임시 정리
      • 유용한 링크
      • arrow function 을 이용한 bind 이슈 해결
      • preventDefault - passive
      • CRITICAL-RENDERING-PATH
      • setInterval에 클로져 개념 사용하기
      • 오디오 문제 이슈
      • 자바스크립트의 식과 문
        • 식과 문이란 무엇인가...
        • 식
          • 1. 기본값과 래퍼객체
          • 2. 참조값과 가비지컬렉팅
        • 식을 조금 더 자세히 알아보자
      • prototype, [[Prototype]] 차이
      • export, import 학습
      • ESlint
      • 아주아주기본
        • Chatper1. 기본
        • Chapter2. 타입
        • Chapter3. 연산자
        • Chapter4. 제어문
        • Chapter5. 배열
        • Chapter6. 함수
        • Chapter7-1. 객체
        • Chapter7-2. 객체
        • Chapter8. 표준객체
        • Chapter9. DOM
      • 이벤트 위임
      • 이벤트가 버블링 되서 root 까지 가다보면... 부모의 부모의 ... 모든 click 이벤트를 발동시키는거 아니야?
      • classList
    • BackboneJS
      • Backbone Model 프로토타입에 메서드 구현하기
      • BackboneJS의 각 요소의 역할과 책임을 확실히 이해하자
      • Window 이벤트를 listenTo로 감시하기
      • 뷰 자신이 자신을 지워야 할 때를 감지하려면 어떻게 해야하는가?
      • 백본 VIEW의 remove와 jquery의 remove 는 다르다!
      • 백본 컬렉션 URL에 쿼리 붙이기
      • index.html.erb와 BackboneJS의 결합
      • 백본 모델과 컬렉션에서 fetch 를 통해 JSON 가져오기!
      • 모델은 urlRoot, 컬렉션은 url
      • ISSUE
      • Absolute Beginner
        • Part1
        • Part2
        • Part3
        • Part4
    • 문제풀이
      • 01. 유효한 팰린드롬(leetcode: 125)
      • 02. 문자열 뒤집기(leetcode: 344)
      • 03. 로그파일 재정렬(leetcode 937)
      • 04. 가장 흔한 단어(leetcode: 819)
      • 05. 그룹 애너그램(leetcode: 49)
      • 06. 가장 긴 팰린드롬 문자열(leetcode: 5)
      • 07. 두 수의 합(leetcode: 1)
      • 08. 빗물 트래핑
      • 09. 세 수의 합(leetcode: 15)
    • BlackCoffeeStudy
      • level1
        • 1주차
    • express
      • Untitled
      • 구글 애널리틱스 연결하기
      • passport를 활용한 로그인
      • express-init 명령어 사용
      • ec2와 DBeaver
      • mariadb 설치
      • sequelize 설치 및 사용법
        • sequelize 설치
        • sequelize-cli 사용법
        • 모델 간 연관관계 맺기
        • Hook 사용하기
      • express-ejs-layout 활용하기
      • Bootstrap
      • npm install로 설치한 모듈 ejs에서 사용하기
      • 미들웨어
    • cypress
      • window.alert 테스트는 어떻게 하지?
      • 상수를 어디에 저장할건가?
      • before()와 beforeEach()
    • aws
      • aws로 프로젝트를 배포해보자!
      • nginx로 리버스프록시 서버를 만들자
      • github actions 로 푸쉬되면 자동으로 업데이트 하는 기능 만들어보기
    • react
      • Drag & Drop 를 이용해서 리스트 요소 순서 바꾸기
      • CRA에서 CRACO 사용하지 않고 절대경로 import(NODE_PATH)
      • useEffect내에서 state의 dependency 문제
      • IntersectionObserverAPI로 무한스크롤 구현
      • react-testing-library
        • 기본
        • react-router-dom 에서의 에러
        • event 발생시키기
        • Integration testing하기
        • async하게 렌더링 되는 요소 잡기
        • Mocking 하기
      • CRA로 만든 앱에서 절대경로로 import 해오기(alias하기)
      • 커스텀 훅 만들기
    • 타입스크립트
      • 조건부타입 (Conditional types)
      • Generics
      • Keyof 타입 오퍼레이터
      • Indexed Access Types
      • 타입 챌린지
        • easy
          • 00. Awaited
          • 01. Concat
          • 02. Exclude
          • 03. First Of Array
          • 04. If
          • 05. Includes
          • 06. Pick
          • 07. Readonly
          • 08. Length
          • 09. Tuple to Object
        • mediun
          • 01. Absolute
    • Firebase
      • 파이어스토어 규칙
    • 기타
      • 협업 프로세스
      • UUID
      • 구글애널리틱스 설치하기
      • 드림코딩 강의
        • 포트폴리오
          • CSS
            • nth-child
            • CSS 팁
          • 자바스크립트
            • 1. 스크롤에 따른 navbar 의 색 변경하기
            • 2. navbar 버튼을 누르면 해당 페이지로 스크롤링 되게 만들자
            • 3. 스크롤 다운 하면 arrow-up 버튼 나오게 하기
            • 4. project 필터링 구현
            • 5. project 필터링에 transition 효과 넣기
      • GIT
        • 기본 사용법 정리
        • git remote update - remote 브랜치 가져오기
  • 기타
    • 이것저것
      • 독서
        • 클린코드
          • Chapter0. 나는 왜 클린코드 책을 읽는가?
          • Chapter1. 클린코드
          • Chapter2. 의미있는 이름
          • Chapter3. 함수
          • Chapter4. 주석
          • Chapter5. 형식 맞추기
      • 용어
      • IDE
        • RubyMine
          • 실전이 중요!
          • 1. Editor Basic
          • 2. Navigation
          • 3. Completion
          • 4. Refactoring
          • 5. Code Assistance
      • MAC에서 살아남기
        • Alfred - Spotlight 업그레이드
        • Vimium
        • BetterTouchTool - 트랙패드
        • 구름 입력기 - ESC, `
        • Spectacle - 화면 분할
    • 원티드 프리온보딩
      • 1주차
        • 월요일
        • 목요일
      • 2주차
      • 3주차
      • 4주차
      • 5주차
      • 6주차
    • 일기장
      • 2020
        • December
          • 20201208(화)
          • 20201209(수)
          • 20201210(목)
          • 20201211(금)
          • 20201214(월)
          • 20201215(화)
          • 20201216(수)
          • 20201217(목)
          • 20201218(금)
          • 20201219(토)
          • 20201221(월)
          • 20201222(화)
          • 20201223(수)
          • 20201224(목)
          • 20201226(토)
          • 20201228(월)
          • 20201229(화)
          • 20201230(수)
          • 20201231(목)
      • 2021
        • January
          • 20210101(금)
          • 20210102(토)
          • 20210105(화)
          • 20210106(수)
          • 20210107(목)
          • 20210108(금)
          • 20210109(토)
          • 20210112(화)
          • 20210113(수)
          • 20210114(목)
          • 20210115(금)
          • 20210117(일)
          • 20210118(월)
          • 20210119(화)
          • 20210120(수)
          • 20210121(목)
          • 20210125(월)
          • 20210126(화)
          • 20210127(수)
          • 20210128(목)
          • 20210129(금)
        • February
          • 20210201(월)
          • 20210202(화)
          • 20210203(수)
          • 20210204(목)
          • 20210205(금)
          • 20210207(일)
          • 20210208(월)
          • 20210209(화)
          • 20210217(수)
          • 20210218(목)
          • 20210219(금)
          • 20210220(토)
          • 20210222(월)
          • 20210223(화)
          • 20210224(수)
          • 20210226(금)
          • 20210228(일)
        • March
          • 20210302(화)
          • 20210303(수)
          • 20210304(목)
          • 20210305(금)
          • 20210306(토)
          • 20210308(월)
          • 20210309(화)
          • 20210310(수)
          • 20210311(목)
          • 20210312(금)
          • 20210313(토)
          • 20210315(월)
          • 20210316(화)
          • 20210317(수)
          • 20210318(목)
          • 20210319(금)
          • 20210322(월)
          • 20210323(화)
          • 20210324(수)
          • 20210325(목)
          • 20210327(토)
          • 20210329(월)
          • 20210330(화)
          • 20210331(수)
        • April
          • 20210406(화)
          • 20210407(수)
          • 20210408(목)
          • 20210409(금)
          • 20210410(토)
          • 20210412(월)
          • 20210413(화)
          • 20210414(수)
          • 20210415(목)
          • 20210416(금)
          • 20210417(토)
          • 20210419(월)
          • 20210420(화)
          • 20210421(수)
          • 20210422(목)
        • July
          • 20210728(수)
Powered by GitBook
On this page
  • 2.1 애플리케이션 작성
  • 2.2 컨트롤러의 기본
  • 2.2.1 컨트롤러 클래스 생성
  • 2.2.2 컨트롤러 클래스의 기본 구문
  • 2.2.3 라우팅 기초와 이해
  • 2.2.5 컨트롤러 이름 규칙
  • 2.3 뷰 기본
  • 2.3.1 템플릿 변수 생성
  • 2.4 모델 기본
  • 2.4.1 O/R 맵퍼란?
  • 2.4.3 모델 클래스 생성
  • 2.4.4. 마이그레이션 파일로 테이블 생성
  • 2.4.6 데이터베이스 클라이언트 실행

Was this helpful?

  1. 공부
  2. RubyOnRails
  3. Perfect RubyOnRails

Chapter2. RubyOnRails 기본

기본이 중요하다..!

PreviousChapter1. 소개NextChapter3. 스캐폴딩

Last updated 4 years ago

Was this helpful?

2.1 애플리케이션 작성

애플리케이션을 개발하려면 일단 골격을 작성해야한다!

  1. 새로운 애플리케이션 생성

    rails new appName [options]
    
    rails new railbook
  2. 애플리케이션 구조 확인

굉장히 많은 폴더와 파일이 생성된다. 가장 많이 사용하는 폴더는 /app이다. 애플리케이션의 동작과 관련된 대부분의 코드는 이 폴더에 존재한다.

  1. HTTP 서버 실행

기본적으로 WEBrick 라는 간단한 서버를 표준으로 제공한다. 아래와 같은 명령어로 실행한다.

rails server

2.2 컨트롤러의 기본

MVC 에서 컨트롤러를 담당하는 부분이다. 각각의 요청을 처리하는 본체. 비지니스 로직(모델), 그 결과를 출력(뷰)하는 것도 모두 컨트롤러 클래스 가 하는 일이다. 즉 컨트롤러 클래스란 요청을 받고 응답을 생성하는 처리를 하는 ROR의 핵심이다.

2.2.1 컨트롤러 클래스 생성

rails generate 명령어

rails generate controller <name> <options>

rails generate controller hello
  • 위의 명령어로 아래와 같은 파일들이 생성된다.

2.2.2 컨트롤러 클래스의 기본 구문

  • 컨트롤러를 rails generate controller hello 명령으로 실행의 결과로 생성된 hello_controller.rb 파일을 열어보면 아래처럼 생겼다.

class HelloController < ApplicationController
end
  1. ApplicationController 상속

  2. 주의 깊게 봐야할 건 상속이다. 모든 컨트롤러 클래스는 ApplicationController 클래스를 상송해줘야 한다. 이 클래스는 컨트롤러의 기본적인 기능을 제공하는 클래스다. ApplicationController 클래스가 요청이나 응답과 관련된 모든 처리를 해주므로 개발자는 앱 개발에 집중할 수 있다.

  3. 구체적인 처리를 실행하는 것은 액션 메서드

  4. 액션 메서드는 클라이언트로부터의 요청을 처리하는 메서드다. 컨트롤러 클래스에는 하나 이상의 액션 메서드가 존재할 수 있다. 이런 액션 메서드를 관리하는 것이 컨트롤러 클래스.

  5. 액션 메서드의 역할

  6. 일반적으로 액션 메서드는 요청을 처리하거나 모델(비즈니스 로직)을 호출하고 뷰에서 사용되는 템플릿 변수를 설정하는 등 다양한 일을 한다.

2.2.3 라우팅 기초와 이해

  • 라우팅이란 특정한 URL로 요청을 보냈을 때 요청을 처리할 대상을 지정하는 것 또는 그러한 구조 자체를 의미한다.

  • Rails 는 클라이언트에서 요청을 받았을 때, 라우팅으로 호출해야 하는 컨트롤러와 액션을 결정한다.

2.2.5 컨트롤러 이름 규칙

설정보다 규약이 중요하다

  • Rails를 고부하는 첫 단계는 관련된 파일 또는 클래스의 이름 규칙을 이해하는 것이다.

  • Controller의 이름을 hello로 만들었을 때의 예시를 보자

종류

설명

예

컨트롤러 클래스

앞 글자는 대문자 뒤에 Controller라는 글자를 붙인다.

HelloController

컨트롤러 클래스(파일 이름)

컨트롤러 ㅋㄹ래스의 이름을 소문자로 만들고, 각 단어를 언더스코어(_)로 구분한다.

hello_controller.rb

헬퍼 파일 이름

컨트롤러 이름 뒤에 "_helper.rb"를 붙인다.

hello_helper.rb

테스트 스크립트 이름

컨트롤러 이름 뒤에 "_controller_test.rb"를 붙인다

hello_controller_test.rb

2.3 뷰 기본

  • ROR에서 최정적인 출력은 ERB(Embedded Ruby)에서 사용하는 것이 기본이다.

  • ERB는 내장된 이라는 뜻으로 html 문서에 내장된 루비라는 뜻이다.

  • ;ERB의 장점은 아래와 같다.

    1. HTML 기반이므로 최종 출력을 예상하기 쉽다.

    2. Ruby 구문을 그대로 적용할 수 있다.

    3. 뷰 헬퍼를 활용해 링크 또는 입력 양식을 쉽게 만들 수 있다.

    4. 임의의 Ruby 스크립트를 넣어 조건 분기 또는 반복 등의 처리를 자유롭게 적용할 수 있다.

    5. 뷰 헬퍼를 사용해 데이터베이스에서 추출한 데이터를 기반으로 링크 또는 입력 양식 요소 등을 간단하게 생성할 수 있다.

2.3.1 템플릿 변수 생성

  • 액션 메서드에서 해야 하는 일 중 절대 빠뜨려서는 안 되는 일이 바로 템플릿 변수 를 설정하는 것이다. 템플릿 변수는 템플릿 파일(ERB)에서 사용할 수 있는 변수로, 액션 메서드에서 데이터를 뷰로 전달할 때 사용하는 변수다.

  • 액션에서는 출력하고 싶은 데이터를 준비하고, 템플릿에서는 해당 데이터를 어디에, 어떻게 출려할지를 정의한다.

  • 이렇게 템플릿 변수로 뷰 - 컨트롤러 가 연결된다.

class HelloController < ApplicationController
  ...
  def view
    @msg = 'hello world'
  end
end

hello_controller.rb

...
<%= @msg %>
...

/hello/view.html.rb

2.3.2 템플릿 파일 작성

템플릿 파일이란 액션에서의 결과를 출력하기 위한 파일이다.

  • 템플릿 파일은 /app/views/<컨트롤러 이름>/<액션 이름>.html.erb라는 이름으로 생성해야 한다.

  • 동적 처리는 <% ... %> 또는 <%= ... %>로 입력 1. <% ... %>는 블록 내부의 코드를 실행한다. 출력이 없다. 연산만 된다. 2. <%= ... %>는 블록 내부의 값을 출력한다.

  • 템플릿 변수는 @<변수 이름>으로 참조한다.

2.3.3 공통 레이아웃

  • 레이아웃을 사용하면 헤더나 푸터 또는 메뉴처럼 사이트 공통 디자인을 한꺼번에 적용할 수 있다.

2.4 모델 기본

  • 모델이란 데이터베이스 또는 외부서비스에 접근하기 위한 비지니스 로직을 담당하는 컴포넌트다.

  • 액티브 레코드는 관계형 데이터베이스의 데이터를 객체로 조작하기 위한 방법을 제공한다.

2.4.1 O/R 맵퍼란?

  • O/R 맵퍼는 관계형 데이터베이스와 객체 지향 언어의 객체 사이에 징검다리를 놓아주는 라이브러리다.

  • 애플리케이션과 데이터베이스의 구조적인 차이를 객체 관계 불일치(impedance mismatch) 라고 부른다.

  • O/R 맵퍼는 이러한 잘못된 매칭을 제거하기 위한 툴.

  • 액티브레코드에서는 데이터베이스의 테이블 한 개로 모델 클래스 한 개를 생성한다.

    • 모델 클래스의 인스턴스는 레코드 한 개를 나타내는 객체 -> 테이블의 행

    • 객체의 속성은 테이블의 필드 -> 테이블의 열

2.4.3 모델 클래스 생성

  • 컨트롤러를 생성할 때 사용했던 rails generate를 사용한다.

rails generate model name field:type ... [options]

rails generate model book isbn:string title:string price:integer
  • 모델의 이름 규칙은 아래와 같다

종류

설명

예

모델 클래스

첫 글자를 대문자로 하고 단수형으로 사용

Book

모델 클래스의 파일 이름

첫 글자를 소문자로 하고 단수형으로 사용

book.rb

테이블

첫 글자를 소문자로 하고 복수형으로 사용

books

테스트 스크립트

xxxxx_test.rb(첫 글자는 소문자로 하고 단수형으로 사용)

book_test.rb

2.4.4. 마이그레이션 파일로 테이블 생성

  • 마이그레이션이란 테이블 레이아웃을 생성 또는 변경하기 위한 구조다. 프로그램 작성 도중에 레이아웃을 변경하는 일이 생기더라도 마이그레이션을 이용해 쉽게 변경할 수 있다.

  • 변경이라면 열(속성)의 추가 그리고 타입 등을 변경 할수 있다는건가?

2.4.6 데이터베이스 클라이언트 실행

rails dbcondole 명령어
캬.. 진짜 많이도 생성한다..
각각이 무슨 역할을 하는지는 차차 알아가자..!