오류 내용
Ruby와 mysql을 연동하여 개발을 하던 도중,
Authenticity Token
def
handle_unverified_request raise ActionController::InvalidAuthenticityToken
end
post 'reply/create/:post_id' => 'main#reply_create'
제가 하려던 코드는 절대 어려운 코드는 아닙니다. 코드의 내용은 그저 reply/create/1 과 같이 이러한 주소로 가 바로 create 를 하면 되는 것이었습니다.
def
handle_unverified_request raise ActionController::InvalidAuthenticityToken
end
그런데 이러한 녀석을 만나게 된 것이었습니다.
해결 방법
application_controller.rb 파일에서 해당 부분을
protect_from_forgery with: :except
이렇게 고치니 오류는 전부 사라졌습니다.
protect_from_forgery with: :null_session
stackoverflow 나 구글링을 통해 여러가지 시도를 했지만 저에게는 이게 가장 고칠 것이 적고 현명한 답 같더라구요.
API는 정말 일반적으로 상태를 저장하지 않도록 설계가 되어있죠. 그렇기에 API 요청을 클라이언트가 Rails 대신 세션을 처리해요. 하지만 :null_session으로 변경을 한다면 확인되지 않은 요청을 처리할 수 있습니다.
추가적으로 생길 수 있는 오류
이건 rails 와 musql을 연결하여 사용하는 저의 케이스에만 해당합니다. 만일 같은 오류를 겪고 계시다면 함께 해결하시죠.
Mysql은 PK (기본키) : id 값이 자동으로 저장이 되고 그 숫자는 저절로 데이터가 생길때마다 늘어나죠.
일단 오류의 내용이 무엇인지부터 먼저 볼게요
Mysql2::Error: Field 'id' doesn't have a default value
이 뜻은 'Mysql 에서 현재 너는 id 라는 필드에 대해서 default(기본값)이 없어' 라는 것은 어떤 값으로 생성이 되어야 할 지에 대해서 default 값 입력 방법이 정해져있지 않다는 말입니다.이 말은 기본적으로 생성이 되어야 할 id 필드가 생성이 되지 않는 다는 말입니다. 전혀 당황할 것이 없습니다. 이 부분을 해결하시 위해서는 Mysql 클라이언트 프로그램을 열어줍니다 (예를 들어서 Workbench 같은 것이 있겠죠. 캡쳐사진은 보편적으로 사용되는 workbench를 사용중입니다.)
일단 클라이언트 프로그램을 들어가 데이터 삽입에 오류가 났던 테이블의 설정에 들어갑니다
거기서 id Column 에 대해서 AI, 즉 Auto Increase 자동 증가 옵션을 줍니다.이렇게만 하면 해당 오류는 해결이 됩니다.
이되에도, 어떠한 필드에 대해서 not null 값을 주고서 값을 추가하려고 하면 오류가 나겠죠? 그러면 역시나, default 값을 따로 입력을 하거나, 프론트 단에서 이 부분은 입력하지 않으면 안된다는 메시지를 띄우면 됩니다.
저는 처음 회사에서는 백엔트 팀에 합류하여 React 와 Mysql 을 연결하여 사용하여 사이트를 개발했었고,
두번째 회사에서는 1인 풀스텍 개발로 스타트업에 시작 멤버로 참여해 Angular 와 Firebase - firestore 을 연결하여 사용을 했었습니다.
이러한 보편적인 조합을 사용하는 케이스들은 한글로 된 설명들과 자료들이 참 많았습니다. 그 말은, 한국에서 그러한 조합으로 개발을 하는 곳이 참 많다는 소리입니다. 따라서 인스트럭션(공식 설명서 혹은 튜토리얼 동영상)을 많이 보고 따라하면 금방 연결을 할 수 있었고, 오류 또한 자료가 많아 해결하는데 어려움이 많이 없었습니다.
최근 SI 업체로 이직을 하게 되며 Ruby on rails 를 처음 사용하게 되었습니다. 한국에서 크게 사랑받지 못하는 언어이다 보니, 한국어 강의나 도서(있지만 너무 옛날 버전. 이마저도 절판)적더라구요. 그래서 이제는 모든 검색을 영어로만 하게 되었습니다.
항상 여러 컴포넌트를 만들고 한 페이지에 컴포넌트들을 이런 저런 형태로 조립해보는 레고같은 개발 형식을 해왔는데 Ruby는 조금 다른 방식을 해야 하더군요 (완전히 다르지는 않습니다). Ruby는 버전마다 아주 코어하거나 많이 쓰이는 기능들을 드랍하고 코드를 바꾸는 경우가 많아 적잖이 당황했습니다. 역시나 한글로 검색을 했을때는 자료가 현저히 적었습니다. ruby 에 관련된 포스팅은 앞으로 많이 올려보겠습니다. 이번 포스팅과 같이 앞으로 ruby에 관련된 포스팅을 점점 올려보도록 하려구요.
이전 Angular 프로젝트로 했던 것 처럼 요청이 있거나, ruby 개발을 준비하는 분들이 많다고 생각이 되면 ruby로 프로젝트를 처음부터 끝까지 만드는 포스팅도 고려해볼게요
'Back-End > Ruby' 카테고리의 다른 글
rails i18n 하는 방법, rails 언어처리 (5분 내외) (2) | 2022.12.08 |
---|---|
Rails CRUD - 데이터 저장이 잘 되었는지 확인하는 방법 (0) | 2022.10.03 |
(해결 방법) rails devise sign_up 오류 devise sign up error (0) | 2022.05.24 |
(해결) LoadError: cannot load such file -- sass (0) | 2022.05.19 |
루비 온 레일즈 rails Gem 설치 다운로드 방법 (0) | 2022.05.19 |