나는 새로운 기술을 배우는 데 시간을 보내는 것을 좋아합니다. 그러나 새로운 기술을 사용할 때의 가장 큰 단점은 초기 채택에 따른 피할 수 없는 문제점입니다. “ 2022년 풀스택 개발자에서 Web3 파이오니어로 전환하는 방법 ”에서 Web3에 대해 알아가는 과정에서 이런 내용을 꽤 많이 보았습니다.
소프트웨어 엔지니어로서 우리는 새로운 기술을 테스트해 볼 때 이러한 얼리 어답터의 과제를 받아들이는 데 익숙합니다. 나에게 가장 효과적인 방법은 비논리적으로 보이는 단계는 내 기억에 남지 않기 때문에 내가 실행한 메모와 명령의 실행 목록을 유지하는 것입니다.
Web3 외에도 Node.js 및 Webpack을 사용하는 준표준 요구 사항이 있는 JavaScript 공간에서도 이러한 문제를 발견했습니다. 저는 Node.js와 Webpack을 사용하지 않고도 JavaScript를 있는 그대로 사용할 수 있는 솔루션을 찾고 싶었습니다. 나는 최근에 Rails 7 릴리스가 바로 이러한 상황을 어떻게 해결했는지 읽었습니다. 이것이 제가 이 기사에서 다룰 사용 사례입니다.
완전히 투명하게 말하자면 Ruby 및 Ruby on Rails에 대한 나의 경험은 거의 없습니다. 몇 년 전 누군가가 완전한 기능을 갖춘 서비스를 만들기 위해 몇 가지 명령을 내리는 것을 보고 "와, 그거 정말 멋지구나"라고 생각했던 기억이 납니다. 하지만 저는 서비스와 애플리케이션을 구축하는 데 이러한 접근 방식을 가지고 놀며 시간을 보낸 적이 없습니다.
Rails가 2005년 말에 처음 등장했기 때문에 이 데모를 2006년 초에 본 것으로 확신합니다. 데모에서 본 것처럼 최종 결과는 모델-뷰-컨트롤러(MVC) 디자인 패턴을 지원하는 서비스였습니다. 나는 Spring, Struts, JSF 및 Seam 프레임워크를 초기에 사용하면서 익숙했습니다.
Rails는 DRY(반복하지 마세요) 관행을 준수하면서 일을 간단하게 유지하겠다는 약속을 유지합니다. 이 약속을 이행하기 위해 Ruby는 엔지니어용 Gems를 사용하여 프로젝트에 공유 종속성을 도입합니다.
2021년 말, Rails의 7번째 주요 버전에는 몇 가지 흥미로운 기능이 도입되었습니다.
마지막 특징이 제가 이 글을 쓰게 된 계기가 되었습니다.
높은 수준에서 importmaps-rails Gem을 사용하면 개발자가 지도를 자신의 애플리케이션으로 가져올 수 있습니다. /bin/importmap
을 사용하면 엔지니어가 필요에 따라 종속성을 업데이트, 고정 또는 고정 해제할 수 있습니다. 이는 Maven 및 Gradle이 Java 기반 프로젝트에서 작동하는 방식과 유사합니다.
이를 통해 패키지 번들링 및 ES6 및 Babel 트랜스파일과 관련된 복잡성을 처리할 필요가 없습니다. 안녕 웹팩! Node.js는 안녕!
저는 거의 20년 동안 Ruby on Rails를 사용해 본 적이 없었기 때문에 가장 먼저 해야 할 일은 이 가이드 에 따라 MacBook Pro에 Ruby 3.3을 설치하는 것이었습니다. 설치한 후에는 IntelliJ IDEA IDE의 일부로 Ruby 플러그인을 설치 하기만 하면 되었습니다.
그런 다음 IntelliJ에서 import-map
이라는 새 Ruby on Rails 프로젝트를 만들고 JavaScript 프레임워크에 Importmap
을 사용하도록 지정했습니다.
프로젝트가 생성되면서 먼저 로컬 JavaScript 라이브러리를 사용하는 것이 얼마나 쉬운지 확인하고 싶었습니다. 그래서 다음 내용으로 /public/jvc_utilities.js
라는 새 JavaScript 파일을 만들었습니다.
export default function() { console.log('*****************'); console.log('* jvc-utilities *'); console.log('* version 0.0.1 *'); console.log('*****************'); }
기본 기능은 단순히 일부 명령을 JavaScript 콘솔에 반영합니다.
다음으로 다음 내용이 포함된 HTML 파일( /public/jvc-utilities.html
)을 만들었습니다.
<!DOCTYPE html> <html> <head> <title>jvc-utilities</title> </head> <script type="importmap"> { "imports": { "jvc_utilities": "./jvc_utilities.js"} } </script> <script type="module"> import JvcUtilities from "jvc_utilities"; JvcUtilities(); </script> <h3>jvc-utilities.html</h3> <p>Open the console to see the output of the <code>JvcUtilities()</code> function. </p> </html>
이 예에서는 추가 작업 없이 로컬 JavaScript 파일을 공개 HTML 파일과 함께 사용하는 방법을 보여줍니다.
다음으로 Example
라는 새 컨트롤러를 만들었습니다.
bin/rails generate controller Example index
이 예에서는 Lodash 라이브러리를 사용하고 싶었으므로 다음 명령을 사용하여 import-map
프로젝트에 라이브러리를 추가했습니다.
bin/importmap pin lodash
일부 JavaScript 기반 기능을 컨트롤러에 추가하기 위해 javascript/controllers/example_controller.js
다음과 같이 업데이트했습니다.
import { Controller } from "@hotwired/stimulus" import _ from "lodash" export default class extends Controller { connect() { const array = [1, 2, 3] const doubled = _.map(array, n => n * 2) console.log('array', array) // Output: [1, 2, 3] console.log('doubled', doubled) // Output: [2, 4, 6] this.element.textContent = `array=${array} doubled=${doubled.join(', ')}` } }
이 논리는 세 가지 값의 배열을 설정한 다음 값을 두 배로 늘립니다. 이를 위해 Lodash map()
메소드를 사용합니다.
마지막으로 다음을 포함하도록 views/example/index.html.erb
업데이트했습니다.
<h3>Example Controller</h3> <div data-controller="example"></div>
이 시점에서 이제 다음 URI를 사용할 수 있습니다.
/jvc-utilities.html
/example/index
Rails 서비스를 로컬에서 실행하는 대신 Heroku를 사용하겠다고 생각했습니다. 이렇게 하면 다른 소비자가 내 서비스에 액세스할 수 있는지 확인할 수 있습니다.
내 Heroku 계정을 사용하여 " Ruby로 Heroku 시작하기 " 가이드를 따랐습니다. 내 프로젝트를 기반으로 첫 번째 단계는 다음 내용이 포함된 Procfile
이라는 파일을 추가하는 것이었습니다.
web: bundle exec puma -C config/puma.rb
다음으로 Heroku CLI를 사용하여 Heroku에서 새 애플리케이션을 만들었습니다.
heroku login heroku create
create
명령을 사용하여 다음 애플리케이션을 시작하고 실행했습니다.
Creating app... done, ⬢ lit-basin-84681 https://lit-basin-84681-3f5a7507b174.herokuapp.com/ | https://git.heroku.com/lit-basin-84681.git
이 단계에서는 Heroku 생태계가 사용하는 Git 원격도 생성되었습니다.
이제 내가 해야 할 일은 최신 업데이트를 Heroku에 푸시하고 애플리케이션을 배포하는 것뿐이었습니다.
git push heroku main
이를 통해 내 코드가 Heroku로 푸시되었고, Heroku는 내 애플리케이션을 컴파일하고 배포했습니다. 1분도 안 되어 다음 내용을 확인하고 애플리케이션을 사용할 준비가 되었음을 알렸습니다.
remote: Verifying deploy... done. To https://git.heroku.com/lit-basin-84681.git fe0b7ad..1a21bdd main -> main
그런 다음 내 Heroku URL(내 애플리케이션에 고유하지만 이후 삭제했음)을 사용하여 /example/index
페이지로 이동했습니다. https://lit-basin-84681-3f5a7507b174.herokuapp.com/example/index
이것이 내가 본 것입니다:
브라우저에서 JavaScript 콘솔을 보면 다음 로그가 나타납니다.
/jvc-utilities.html
로 이동하여 다음 정보를 확인했습니다.
브라우저에서 JavaScript 콘솔을 볼 때 다음 로그를 확인했습니다.
성공. 저는 Rails 7 애플리케이션에서 자체 포함된 JavaScript 라이브러리와 공용 Lodash JavaScript 라이브러리를 사용할 수 있었습니다. 모두 Import Maps를 사용하고 Webpack이나 Node.js를 다룰 필요 없이 가능했습니다. 이제 안녕, Webpack과 Node.js!
독자들은 모든 IT 전문가에게 적용될 수 있다고 생각하는 나의 개인적인 사명 선언문을 기억할 것입니다.
“지적 재산의 가치를 확장하는 특징/기능을 제공하는 데 시간을 집중하십시오. 다른 모든 것에 프레임워크, 제품, 서비스를 활용하세요.” — J. 베스터
이 기사에서는 먼저 Rails 7을 살펴보고 Import Maps를 사용하여 Webpack 및 Node.js를 사용할 필요 없이 JavaScript 라이브러리를 얼마나 쉽게 사용할 수 있는지 보여주었습니다. Rails를 마지막으로 본 지 20년이 넘었음에도 불구하고 목표를 달성하는 데 필요한 짧은 시간에 깊은 인상을 받았습니다.
배포 관점에서 Rails 애플리케이션을 Heroku 플랫폼에 배포하려는 노력은 Procfile
생성과 세 가지 CLI 명령으로 구성되었습니다.
두 경우 모두 Rails와 Heroku는 제가 고객에게 가치를 제공하는 데 집중하고 Webpack, Node.js 또는 DevOps 작업과 관련된 문제로 인해 어려움을 겪지 않도록 함으로써 저의 사명 선언문을 고수합니다.
나는 우리가 새로운 기술을 탐색할 때 그다지 이상적이지 않은 문제점에 계속 직면하게 될 것이라고 확신하지만, 시간이 지나면 이 기사에서 설명한 것과 유사한 성과를 보게 될 것이라고 확신합니다.
언제나 그렇듯이 제 소스 코드는 여기 GitLab에서 찾을 수 있습니다.
정말 좋은 하루 보내세요!