# rails

83개의 포스트

Ruby on Rails 개념 정리

1. gem 레일즈가 프레임워크라면, 젬은 라이브러리이다.필요한 기능이 있을 때마다 추가해서 사용할 수 있다. 루비에서 지원하는 패키니 시스템이다. 인터넷에서 자동으로 프로그램을 받아서 설치를 해준다. node의 npm 개념이다. 레일스 프로젝트를 생성하면 프로젝트 루트 디렉토리에 Gemfile이 자동으로 생성된다. Gemfile은 다양한 gem을 등록하는 텍스트 파일이다. gem 명령어 gem install gem upadate gem uninstall gem을 일일이 설치할 수 없기 때문에 bundler를 이용하여 한꺼번에 설치한다. gemfile은 bundler에서 사용하는 의존성 파일이다. bundle은 gemfile에 정의된 gem들의 의존성을 파악해 사용할 수 있게 해주는 명령어이다. 번들러는 설치된 모든 gem과 버전관련 정보를 Gemfile.lock에 기록한다. group

2023년 6월 13일
·
0개의 댓글
·

Ruby on Rails 명령어 정리

서버 열기 콘솔 열기

2023년 6월 13일
·
0개의 댓글
·

Ruby on Rails 정리 - new와 create의 차이 #3

CRUD 들어가기 전에 계속 헷갈렸던 new와 create의 차이점을 정리해보자! 다행히 스택 오버 플로우에 누가 똑같은 질문을 올려놨다 ㅋㅋㅋ > Within Rails' implementation of REST new and create are treated differently. > An HTTP GET to /resources/new is intended to render a form suitable for creating a new resource, which it does by calling the new action within the controller, which creates a new unsaved record and renders the form. > An HTTP POST to /resources takes the record creat

2023년 6월 10일
·
0개의 댓글
·

Ruby on Rails 정리 #2

3. 레일즈 프로젝트 생성하기 3-1. 레일즈 설치하기 우분투에서 루비 설치하기 이 방식으로 루비를 설치하면 이후 프로젝트 생성 때 오류가 발생한다. 번들러가 설치가 안되기 때문에 다른 방법으로 루비를 설치해야 한다. 여기에서 Rbenv를 사용하여 Ruby를 설치를 참고해서 설치하면 된다. 추가적으로 참고하면 좋은 링크 루비 버전 확인 squlite3 설치하기 squlite3 버전 확인 3-2. 블로그 앱 생성하기 프로젝트 생성 sudo apt install ruby-full로 루비를 설치하면 이 단계에서 오류가 발생한다. 주의하기! 4. Hello, Rails! 4-1. 서버 켜기 간단쓰! 근데 왜 계속 bin 아래에서 하는거지? 4.2 Say

2023년 6월 7일
·
0개의 댓글
·

Rails Cache 적용기

레일즈의 여러가지 캐싱 기법 중 low-level 캐싱을 적용하여 우리 서비스의 체인점 리스트 API의 성능을 개선한 경험기를 공유하고자 한다. 백그라운드 체인점 리스트 API는 유저가 주문 과정의 막바지에서 집근처 안경점을 선택하는 데 사용되므로 굉장히 중요한 API이다. 그럼에도 불구하고 성능이 엉망이었다. 성능 뿐만이 아니었다. 약 800개의 체인점 리스트 데이터를 한 번에 내려주다보니 메모리 역시 많이 차지하였고, 이로인해 skylight(레일즈 특화 APM) 대시보드에는 해당 API 옆에 항상 메모리 alert이 떠있었다. 성능과 메모리 개선을 위해 여러가지 작업을 했고, 어느정도 준수할 정도의 개선을 이뤄냈으나, 완벽하진 않았다. 이에 캐싱을 적용하여 추가적인 성능 개선을 할 필요를 느끼게 됐다. 캐싱을 적용하고자 한 이유는 해당 데이터가 아래와 같은 특징을 갖고 있어서였다. 데이터의 쓰기 작업보다는 읽기 작업이 현저히 많다. 가맹점 수가 폭발적으로

2023년 6월 6일
·
0개의 댓글
·

Ruby on Rails 정리 #1

1. 기초 루비 : 프로그램 언어 레일즈 : 루비 언어로 작성된 웹 어플리케이션 프레임워크 2. 레일즈 2-1. MVC 아키텍쳐 모델(Models) 모델은 데이터와 데이터를 다루는 규칙이다. 모델은 주로 데이터베이스 테이블과 상호 작용하는 규칙들을 관리한다. 대부분의 경우에 데이터베이스의 하나의 테이블은 어플리케이션의 하나의 모델과 대응한다. 대부분의 비지니스 로직은 모델에 집중된다. 뷰(Views) 뷰는 어플리케이션의 유저 인터페이스이다. 레일즈에서 뷰는 주로 데이터 표현에 관련된 루비 코드가 삽입되어 있는 HTML 파일이다. 뷰는 데이터를 웹 브라우저(또는 다른 기기)에 제공한다. 컨트롤러(Controllers) 모델과 뷰를 연결해주는 역할을 한다. 웹 브라우저

2023년 6월 5일
·
0개의 댓글
·

Rails과 MySQL, docker-compose로 연결하기

전제 docker-compose.yml과 rails앱 프로젝트 루트의 config/database.yml에서 설정해야한다. MySQL에 따로 사용자를 생성하지 않고, root 계정으로 접속하도록 했다. docker-compose.yml 레일즈앱에서 필요한 MYSQL환경변수는 MYSQLROOTPASSWORD : root 계정의 비밀번호 설정 MYSQL_DATABASE : 레일즈앱에서 사용할 데이터베이스이름 MYSQL_HOST : MYSQL 호스트명 => docker-compose.yml에서 db이름을 입력. 여기서는 "db"임 MYSQL_USERNAME: root (이유는 현재 컨테이너에서 root로 접속하기 위함) DB에서 필요한 MYSQL 환경 변수는 DBROOTPASSWORD : mySQL root 를 만들때 사용할 비밀번호 DB_DATABASE: 최초에 생성할 DB이름 -> 레일즈앱에서 필

2023년 5월 11일
·
0개의 댓글
·

puma 설정 파일 tuning

저번 글의 말미에서 puma의 worker와 thread의 최적화된 숫자를 찾는 것이 중요하다 말했다. 이번 글에서는 우리 서비스의 puma 설정 파일 튜닝 과정을 공유하고자 한다. 상세한 수치는 빼고 어떤 식으로 진행했는지를 중점으로 이야기해 보겠다. 백그라운드 puma의 default 설정을 그대로 사용하고 있었으므로 single mode에서 5개의 threads가 돌아가고 있었다. 이전 글에서도 말했듯이 1개의 프로세스로는 루비의 GVL로 인해 병렬처리에 한계가 있다. 성능 테스트 툴인 Jmeter를 사용하여 10분간 가상 유저 10명이 지속적으로 request를 보내는 상황을 시뮬레이션 해보았다. ![](https://velog.velcdn.co

2023년 5월 5일
·
0개의 댓글
·
post-thumbnail

puma는 어떻게 작동하는가

웹앱서버란 puma는 web application server이다. 앱서버는 소켓에서 연결을 수락한 다음, http request를 우리 레일즈 서버로 서브하는 역할을 한다. 이러한 과정에서 (루비 진영의)웹앱서버는 유저경험에 악영향을 끼칠 수 있는 아래 3가지 문제를 최대한 효율적으로 대응하는 방향으로 발전해 왔다. Slow Clients 말 그대로 느린 클라이언트 요청이다. 3g 폰을 가진 유저가 산 꼭대기에서 이미지 업로드를 한다고 생각해보면 된다. 이러한 유저 요청이 바로 slow client 요청이다. puma와 Passenger와 같은 웹앱서버는 리퀘스트 버퍼링 방식으로 이를 해결한다. puma에서는 reactor 스레드가 이러한 역할을 수행한다. request의 모든 패킷이 수신되었는지 확인하고, 수신 완료되었을 때, 즉 버퍼링이 끝났을 때 reactor가 스레드풀의 스레드로 request를 넘겨 요청을 처리하도록 한다. 이러한 처리 방식은 Ddos 공격을

2023년 5월 5일
·
0개의 댓글
·

Rails request life cycle

부족하거나 틀린 점 있으면 댓글로 지적해주시면 감사하겠습니다. request가 들어오면 레일즈에서는 어떤 일들이 일어날까? request의 흐름을 차근차근 따라가 보며 rails에서 request를 다루는 internal에 대해 알아보자. 웹앱서버(Puma) 브라우저에서는 HTTP 프로토콜에 따라 request를 우리의 서버로 보낸다. > HTTP와 HTTPS에 관해서 더 자세히 알고 싶다면 여기 참조 이 request는 가장 먼저 웹앱서버(여기서는 puma)로 들어오게 된다(물론 리버스프록시 서버가 있다면 해당 서버를 먼저 거친다). puma는 incoming http request를 받아 레일즈로 보낸 후 응답을 리턴받아 다시 클라이언트에게 반환하는 역할을 한다. 들어온 request는 Puma::Server클래스의 #process_client에서 처리가 되는데, 이 메

2023년 4월 29일
·
0개의 댓글
·

Rails Router는 어떻게 동작하는가 2편 (영상 번역)

1편 보러가기 how does the router read? 라우터는 어떻게 읽을까? 우리는 그것을 가르쳐야 한다. Journey는 당신과 내가 읽는 것과 비슷한 방식으로 request를 읽는다. 사실 Journey가 읽는 방식은 컴파일러가 코드를 읽는 방식과 같다. 우리가 위와 같은 문장을 읽을 때, 우리의 mind가 실제로 하고 있는 것은 이 일련의 문자들과 capitalization, punctuation, spaces 등을 보고, 일관성 있는 글자들로 나눈다. 우리의 mind는 그 글자들을 가지고 일종의 문법을 따르는 문장으로 만들어 이 문장이

2023년 4월 24일
·
0개의 댓글
·

Rails Router는 어떻게 동작하는가 1편 (영상 번역)

2018 RailsConf에서 Vaidehi Joshi가 발표한 레일즈 router 관련 영상이 굉장히 유익하여 이를 늦게나마 정리해보고자 한다. 국내에는 레일즈 router를 어떻게 사용하는지에 대한 글은 좀 있으나, 어떻게 동작하는지 그 원리에 대한 블로그 글은 찾아보기 힘들다. 해당 영상 번역이 이러한 원리를 이해하는데에 도움이 되었으면 한다. 해당 영상에선 자막을 제공하니 자막과 함께 해당 영상을 시청하길 권장하나, 만약 영어 영상이 부담된다면 여기 정리한 글을 봐도 충분할 것이다. > 참고로 지금과 같이 인용 표시에 적혀있는 말은 영상에서 나온 것이 아닌 저자(나)가 하는 말이다. 또한 완벽한 번역이 아니며 중간중간 의역도 들어가 있으니 감안해서 보길 바란다. Rails Router는 어떻게 동작하는가? router가 어떻게 작동하는지 알기 위한 가장 첫 번째 스텝은, router

2023년 4월 24일
·
0개의 댓글
·

Rack이란 무엇인가

#everythingisarackapp 이란 말을 들어보았는가? 루비 세계에서 모든 것이 rack app이라 할 정도로 rack은 굉장히 중요한 의미를 가진다. rack이란 무엇일까? 간단히 말하자면 rack은 일종의 인터페이스이다. 우리의 rack app은 이 인터페이스를 구현한 것이라 볼 수 있다. 먼저 rack이 풀고자 하는 문제를 살펴보자. rack이 풀고자 하는 문제 (출처: https://www.akshaykhot.com/definitive-guide-to-rack/) 루비 세계에는 여러 웹 서버와 여러 웹 프레임워크가 있다. 프레임워크를 변경하는 일은 드물겠지만, 여러 이유로 인해 웹서버를 변경하는 일이 생길 수도 있을 것이다. 예를 들자면 unicorn의 slow clie

2023년 4월 20일
·
0개의 댓글
·

N+1 검출 라이브러리 비교

배경 백엔드 개발자로서 서버와 데이터베이스 간 요청하는 횟수 및 데이터를 최대한 적게 하는 것이 기본 소양이다. 레일즈에서 N+1 쿼리를 잡기위하여 개발환경에 Bullet 과 Prosopite 젬을 설치하였고 실험을 통해 어느 젬이 좋은지(?) 비교해보려고 한다. bullet Bullet 의 좋은 점은 어느 코드에서 N+1 이 검출됐는지 알려주고 또 어떤 코드를 넣어야 N+1 을 해결할 수 있는지 알려준다. ref: https://github.com/flyerhzm/bullet 그리고 간단하게 config 설정해주면 위 로그를 레일즈 로그 뿐만 아니라 Slack 에도 전송할 수 있다 또한 Bullet.unusedeagerloading_enable = true 옵션을 통해 남용된 includes 가 있을 경우 이를 검출해주기도 한다. Prosopite prosopite 는 다음과 같이 bullet 보다 나은 점을 공식 레포에서 소개한다. ref:

2023년 4월 20일
·
0개의 댓글
·
post-thumbnail

[Rails] Selenium으로 크롤링하기

✅ 크롤링 방법 1️⃣ 컨트롤러 생성하기 1. 터미널에 아래 명령어를 사용해서 컨트롤러를 생성한다. 그럼 아래처럼 폴더와 파일 그리고 라우터가 생성된다. (예제를 위해 kurly라는 컨트롤러 생성) 컨트롤러 폴더와 파일 view 폴더와 파일 라우터 경로 👉 여기서 라우터의

2023년 3월 31일
·
0개의 댓글
·

[Rails] 에러 핸들링

ruby의 기본 rescue문법 실제 사용 예시 예시가 생각이 안나서 대충 이런식으로 많이 작성하는 거 같다~로 작성하였으니, 가볍게 봐주시면 감사하겠습니다. Rails 코드를 보면 StandardError를 rescue로 해논것도 있지만 어떤 에러를 캐치할지 더 명확하게 지정해주면 어디서 어떤 에러가 발생하였는지 명확하게 알 수 있는 메리트가 있다. 따라서 에러핸들링을 할 경우 가능한 한 상황에 맞는 에러Class를 사용하면 좋을 것 같다 개인적인 생각 개인적인 생각으로는 어떤 에러가 발생할지 명확하지 않을 경우 StandardError를 작성해서 어떤 에러가 발생하는지 확인 → 그 뒤에 조금더 상세하게 로직을 구현하면 좋지않을까 생각했다🤔 코멘트 자신의 코드나 회사에서 어떤 식으로 작성하시는지 코멘트 작성해주시면 감사드리겠습니다! 다른 언어도 환영이에요!

2023년 2월 20일
·
0개의 댓글
·
post-thumbnail

지금까지 사용해본 웹 프레임워크 정리

참고 해당 내용은 제가 배우면서 느낌점이라서 사람마다 의견이 다를 수 있으며 프레임워크 공부량이나 깊이에 따라 내용 차이가 발생할 수 있다는 점을 감안하시고 봐주시면 감사하겠습니다. Spring 평가 : ★★★★☆ 언어 : Java, Kotlin, Groovy 장점 검색을 하였을때 정보를 많이 얻을 수 있다. 많은 부분을 직접 코드를 짜기 때문에 구조 파악이 쉽다. SpringBoot를 사용하면 복잡한 세팅을 손쉽게 할 수 있다. Java기반이라서 필요한 기능이 있다면 찾아봤을때 많은 예제를 찾을 수 있다. 템플릿 개발시 타임리프를 사용하여 간단하게 화면 구현이 가능하다. 단점 처음에 AoP, DI와 같은 어려운 개념이 많이 나와서 어렵게 느껴질 수 있다. 컴

2022년 11월 29일
·
0개의 댓글
·
post-thumbnail

[Ruby][Rails] 프로젝트 생성

프로젝트 세팅하는 법 프로젝트 세팅이 끝났으면 설치는 간단합니다. 위 커맨드를 입력해주면 에 입력한 디렉토리가 생성되는데 해당 디렉토리를 IDE로 열어주면 됩니다. 자신 있다면 터미널로 열어서 vim으로 편집해도 된다.전 자신 없으니...IDE를... 시작하기 해당 커맨드를 사용하여 서버를 시작합니다. 레일즈에서는 기본 포트가 3000이니 따로 설정하지 않으셨다면 http://localhost:3000/ 에 들어가서 기본 페이지를 볼 수 있습니다. 이렇게 기본페이지가 보이면 재대로 설치된 것 입니다. ![](https://velog.velcdn.com/images/persestitan/post/db534cd4-2cfa-4054-b9fd-8c714047934b/image

2022년 11월 28일
·
0개의 댓글
·
post-thumbnail

[Ruby][Rails] 초기 세팅 하기

초기 세팅 루비 설치 확인하기 버전이 출력된다면 설치되어 있는 것이지만 설치되어 있지않으면 설치해주세요. 데이터베이스 설치 확인 저는 sqlite3데이터베이스를 사용할 예정으로 해당 데이터베이스가 존재하는지 확인해줍니다. Rails설치 그리고 다음 커맨드를 입력하만 자동으로 rails가 설치됩니다. Rails설치 확인 그리고 설치 되었는지 확인해주었습니다.

2022년 11월 28일
·
0개의 댓글
·
post-thumbnail

코딩의 기초와 웹,앱 프로그래밍 8!

- 16. 데이터베이스의 개념과 CRUD 만들기 데이터 베이스란 : 데이터를 효율적으로 저장하는 공간 RDB(Relational Database) : 엑셀처럼 짜여진 틀안에서 정해진 정보만 입력하는것 NoSQL(Not only SQL) : 메모장에 적는것처럼 틀이 정해져 있지 않은것 CRUD(CreateReadUpdateDelete) : 생성 검색 수정 삭제 이번 수업에서는 모델과 DB 까지 사용하여 완전한 MVC형태로 만들어보자! rails g controller board index를 치게되면 컨트롤러 뷰 라우터 까지 index뷰에 라우터 연결까지 한번에 다된다 rails g model post 를 적게되면 post model이 만들어진다 Controller ![](https://velog.velcdn.com/images/rlarudrnr415/post/bd90c2a9-af72-40b2-

2022년 11월 8일
·
0개의 댓글
·