🤔 Rails Console?
Rails Console은 Rails 애플리케이션의 코드 스니펫을 실행해볼 수 있는 커맨드 라인 프로그램입니다. Rails Console을 통해 데이터를 조회하거나, 특정 로직을 실행해볼 수도 있고, 스크립트를 짤 수도 있습니다. Ruby 언어와 Rails 환경을 지원해주기 때문에 간편하게 사용할 수 있습니다.
🚀 사용법
시작하기
$ rails console
$ rails c
# 환경이 있다면
$ rails c -e test
위 커맨드를 입력하게 되면 irb를 레일즈 의존성을 포함해서 띄우게 됩니다. 만약 profile이 분리된 상태면 -e를 통해 환경을 지정해줄 수도 있습니다.
# 실행 결과
irb(main):001:0>
사용하기
실행이 완료되면 원하는 코드 스니펫을 넣어주면 됩니다.
> User.find(3)
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1
=> #<User id: 3, email: "test@email.com", password_digest: [FILTERED], created_at: "2021-07-07 07:07:58.024462000 +0000", updated_at: "2021-07-07 07:07:58.024462000 +0000">
이런 식으로 모델의 메서드를 직접 호출할 수도 있고,
> app.get '/hello'
=> 403
url을 입력해서 컨트롤러의 메서드를 호출해볼 수도 있습니다.
> a = 1
=> 1
> b = 2
=> 2
> c = 3
=> 3
> a+b+c
=> 6
변수에 대입도 가능합니다. 해당 변수들은 rails console을 종료하면 삭제되는 변수들입니다.
# 로그 레벨을 디버그로 설정하기
> Rails.logger.level = :debug
이런 식으로 설정을 변경할 수도 있습니다. 로그 레벨을 디버그로 설정하면 디버깅할 때 유용하기 때문에 바꿔두는 것을 추천합니다.
종료하기
> exit
exit
키워드를 통해 실행 종료를 할 수 있습니다.
샌드박스 모드 사용하기
Rails Console에서 로컬 변수들은 Console이 종료됨과 동시에 사라지지만, DB 변경을 가하는 로직을 실행하면 DB에 수정이 일어납니다. 샌드박스 모드를 사용하면 DB에 변경을 가해도 롤백을 하기 때문에 DB에 영향을 주면 안 되는 상황에서 유용하게 사용할 수 있습니다.
(단, 비즈니스 로직이 복잡하게 얽혀있을 때에는 오히려 DB만 롤백을 하는 것이 더 꼬일 수도 있기 때문에 이 점을 주의하셔야 합니다!)\
$ rails c --sandbox
—sandbox
옵션을 추가하면 샌드 박스 모드를 사용할 수 있습니다.
> User.delete(3)
TRANSACTION (0.3ms) BEGIN
User Destroy (4.4ms) DELETE FROM `users` WHERE `users`.`id` = 3
=> 1
# 종료 후 재시작!
> User.find(3)
TRANSACTION (0.1ms) BEGIN
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 3 LIMIT 1
=> #<User id: 3, email: "test@email.com", password_digest: [FILTERED], user_type: "passenger", created_at: "2021-07-07 07:07:58.024462000 +0000", updated_at: "2021-07-07 07:07:58.024462000 +0000">
샌드박스 모드를 적용하지 않는 로직과 비교해보면 트랜잭션이 적용되어있는 것을 확인할 수 있습니다.
💛 맺으며
저도 Rails Console을 능숙하게 잘 다루진 못하지만, Rails Console은 RoR이 가지는 정말 큰 장점 중에 하나라고 생각합니다. (디버깅할 때 특히 유용하게 사용하고 있습니다.)
혹시 글을 읽으면서 잘못된 내용이 있으면 댓글로 알려주시면 감사하겠습니다! 읽어주셔서 감사합니다! 😊
👏 참고
'Backend > Ruby on Rails' 카테고리의 다른 글
Rails FactoryBot 알아보기 (6) | 2021.07.13 |
---|