http://bit.ly/summernote-rails-for-fileupload-1 on Jun. 6, 2015, in Korean

http://bit.ly/summernote-rails-for-fileupload_2 on Jan. 2, 2016, in Korean

In my blog, the posts on summernote-rails gem are always the most frequent in daily visit statistics.

About 22 months were passed since last post on summernote. Official published version of summernote-rails is 0.8.3, as of Nov. 13, 2017.

얼마 전 페일스북 그룹에 올라 온 질문을 보고 초보자들에게 흔히 있을 수 있는 궁금증이라고 생각하여 이 글을 작성한다.

웹서비스는 라우팅으로부터 시작한다고 해도 과언이 아닐 것이다.

특히나 레일스도 REST형식의 라우팅을 지원한다. 레일스는 외부로부터 서버로 들어오는 URI 요청을 파싱하여 어떤 컨트롤러를 호출할 것인지 정하게 되는데, 해당 컨트롤러의 특정 액션을 구체적으로 호출한 후 액션명과 동일한 뷰 템플릿 파일(정확히는, [action-name].html.erb)을 app/views/[controlle-name]/ 디렉토리에서 찾아 페이지를 렌더링한 후 요청결과로써 클라이언트에게 발송하게 된다.

이와 같은 요청/응답의 과정은 레일스 프로젝트의 COC 원칙 중의 대표적인 사례다.

일반적으로 웹애플리케이션은 HTTP 통신 프로토콜(서버와 클라이언트 간의 단방향 통신(half-duplex communication))을 이용하여 서비스를 한다. 따라서 채팅 프로그램을 웹으로 구현할 때는 데이터의 동시성에 관한 문제를 해결하기 실무적으로 어렵게 되고 기존에는 대안으로 일정한 시간 간격으로 서버에서 클라이언트로 데이터를 보내는 polling 방식을 사용한다.

DHH는 이러한 polling 방식의 문제점을 해결하기 위해 양방향 동시 통신을 가능케 해 주는 웹소켓을 레일스 프레임워크에서 레일스 방식으로 쉽게 구현할 수 있도록 했는데 이것을 액션케이블(ActionCable)이라고 한다. 레일스 5.0에 처음으로 도입되었다.

레일스를 이용하여 프로젝트를 작성할 때 특정 글에 대한 댓글기능을 구현하는 것은 매우 단순하고 쉬운 편이다. 물론 구현 방식에 따라 그 난이도는 다를 수 있지만, 이에 대해서는 인터넷 상에 이미 많은 자료가 소개되어 있다.

이 글에서는 댓글기능을 스레드방식으로 중첩해서 보이도록 기능 개선을 해 볼 것이다.

구현로직은 사실은 매우 간단하다. 댓글 모델에 상위 객체로 연결할 수 있도록 외래키를 추가하고 댓글 모델에 self join 관계 선언을 해 주면 된다.

곧 정식으로 릴리스될 예정인 레일스 5의 여러가지 추가 기능 중에 두 가지가 주목을 받고 있다. 하나는 'ActionCable', 다른 하나는 'Turbolinks 3'다.
'ActionCable'에 대해서는 별도의 글을 준비 중이며, 여기서는 'Turbolinks 3'에 대해서 추가된 기능 중심으로 알아 보도록 하겠다.

참고동영상: New Turbolinks 3 Features With Ruby on Rails

특히 'Turbolinks 3'에서 추가된 기능 중 'Partial Replacement'에 대한 내용을 샘플 애플리케이션과 함께 알아 보도록 하자.