저는 백엔드 개발자입니다... 보통... 수학은 잘하지만 미학에는 서툴러요. 내가 만든 모든 디자인 시도는 항상 지루해 보이는 일반적인 쓰레기로 귀결되었습니다. 수십 가지 도구를 사용해 보았지만 최종 결과는 항상 Microsoft FrontPage 2003
에서 작성된 것처럼 보였습니다.저도 그걸 볼 정도로 자의식이 강해서 포기했어요. 나는 당신에게 문서를 작성해 주겠지만, 당신이 나에게 준비된 $LaTeX$ 스타일 파일을 제공하는 경우에만 가능합니다. 블로그를 쓰겠지만 마크다운으로만 작성하고 시각적 매력에 대해서는 다른 사람에게 맡기세요. DevFest 프레젠테이션을 준비하겠습니다. 단, 주최자가 PowerPoint 템플릿을 제공하는 경우에만 가능합니다. 저는 버튼이든 로그인 폼이든 어떤 것도 디자인하려고 하지 않습니다.
그래도 삭발하고 백엔드 JSON API 안식처로 돌아갈 수는 없습니다. --- 여전히 애완동물 프로젝트를 위한 프런트엔드를 작성하고 내부용 대시보드를 구축해야 합니다. 하지만 수십 개의 프레임워크, 라이브러리, 철학으로 인해 프런트엔드 세계에 진입하려는 시도는 엄청나게 고통스럽습니다. 나는 지난 8년 동안 React, Angular, Node라는 말을 들어왔지만 실제로 그것들을 이해하려고 노력하기에는 너무 무서웠습니다. C나 Leetcode를 배우는 것이 이보다 더 쉬웠습니다.
그럼에도 불구하고 나는 그것을 배워야 했고 이제는 프로메테우스(이 이름을 가진 JS 프레임워크가 아직 없는지는 잘 모르겠습니다)가 되어 이 지식을 백엔드 사람들에게 전달하고 싶습니다. 개발자.
보너스로 어떤 프런트엔드 프레임워크를 선택할지 최종 권장 사항을 포함했습니다. 나 자신도 아주 오랫동안 의사결정 마비를 겪었고, 이는 당신이 그것을 극복하고 지나치게 생각하지 않고 일을 시작하는 데 도움이 될 것입니다.
프레임워크에 대해 논의하기 전에 우리가 동일한 입장에 있는지 확인하기 위해 절대 기본부터 시작하겠습니다. 원한다면 이 섹션을 건너뛸 수 있습니다.
최소 웹페이지는 확장자가 .html인 텍스트 파일과 콘텐츠 태그로 구성됩니다.
<html> <div>Hello World!</div> </html>
형식을 추가하려면 스타일 속성을 추가하세요.
<html> <div> <p>or if you have a lot of formatting, add id to your content and refer to it from <style> tag. The style is formatted using CSS language which looks like an HTML element followed by JSON related to it:<br> <pre class="brush:php;toolbar:false"><html> <div> <p>This will create static pages that do not change and do not react to any events. To add some interactivity, like checking if you left a form field empty or entered a valid email, you will need JavaScript.</p> <h3> Running JavaScript </h3> <p>Before using any programming language you must first install it on your computer. For C/C++ you need to install a compiler like GCC or Clang, for Python you need to install a CPython interpreter.</p> <p>To run JavaScript you only need a web browser --- all modern web browsers can run JS code. It is as simple as opening a web browser and going to pressing F12. This will open a JS console:</p> <p><img src="https://img.php.cn/upload/article/000/000/000/173587576253989.jpg" alt="A no-nonsense guide to frontend for backend developers" /></p> <p>You can also create a text file with extension .html and put a <script> tag on it, open this file in browser, and the outcome will be displayed if you press F12:<br> <pre class="brush:php;toolbar:false"><!-- myfile.html --> <html> <script> // write a JS code here console.log('Hello World'); </script> </html>
그러나 안전상의 이유로 브라우저 콘솔에는 파일 시스템에 액세스할 수 없으며 JS를 사용하여 최소한 Python이나 Ruby와 같은 다른 스크립팅 언어의 기능을 달성할 수 있는 일부 다른 기능이 부족합니다. 따라서 컴퓨터에서 JS 코드를 실행하는 두 번째 방법이 있습니다. 바로 Node.js를 설치하는 것입니다. 이는 본질적으로 파일 읽기 및 쓰기와 같은 작업을 수행할 수 있는 JS 인터프리터입니다.
//$ node //Welcome to Node.js v23.3.0. //Type ".help" for more information. > console.log('Creating a new directory'); > fs.mkdirSync('new_dir'); // access filesystem using fs
Node.js를 사용하면 웹 브라우저를 설치하지 않고도 서버나 Docker 컨테이너에서 JS 코드를 실행할 수 있습니다. 이것이 매우 유용하다는 것을 아래에서 살펴보겠습니다.
위 섹션을 결합하면 기존 HTML CSS JS 설정을 사용하여 웹페이지를 만들 수 있습니다.
콘텐츠 자체, 스타일, 스크립트의 세 가지 섹션이 있는 단일 .html 파일로 결합할 수 있습니다.
<html> <div>Hello World!</div> </html>
scripts.js
<html> <div> <p>or if you have a lot of formatting, add id to your content and refer to it from <style> tag. The style is formatted using CSS language which looks like an HTML element followed by JSON related to it:<br> <pre class="brush:php;toolbar:false"><html> <div> <p>This will create static pages that do not change and do not react to any events. To add some interactivity, like checking if you left a form field empty or entered a valid email, you will need JavaScript.</p> <h3> Running JavaScript </h3> <p>Before using any programming language you must first install it on your computer. For C/C++ you need to install a compiler like GCC or Clang, for Python you need to install a CPython interpreter.</p> <p>To run JavaScript you only need a web browser --- all modern web browsers can run JS code. It is as simple as opening a web browser and going to pressing F12. This will open a JS console:</p> <p><img src="https://img.php.cn/upload/article/000/000/000/173587576253989.jpg" alt="A no-nonsense guide to frontend for backend developers" /></p> <p>You can also create a text file with extension .html and put a <script> tag on it, open this file in browser, and the outcome will be displayed if you press F12:<br> <pre class="brush:php;toolbar:false"><!-- myfile.html --> <html> <script> // write a JS code here console.log('Hello World'); </script> </html>
이 설정의 가장 큰 문제는 HTML 요소(예:
어쨌든 이 설정은 수십 년 동안 웹에서 사용되었습니다.
좋아요! 우리는 기본적인 사항을 다뤘습니다. 이제 프런트엔드 프레임워크 선택과 일반적인 앱 아키텍처에 관한 모든 논의의 기초가 되는 주요 딜레마에 대해 이야기해 보겠습니다. 시작하기 전에 몇 가지 용어를 명확히 하겠습니다. 클라이언트 측은 사용자가 콘텐츠를 소비하는 브라우저 또는 앱을 의미하고, 서버 측은 일반적으로 콘텐츠를 저장하는 백엔드 서버를 의미합니다. 로그인 정보, 데이터베이스에 대한 액세스 권한이 있으며 전체적으로 전체 앱의 백본 역할을 합니다. 이제 더 깊이 알아볼 준비가 되었습니다.
모든 종류의 데이터를 표시하는 중요 웹 앱에서는 HTML 스크립트를 자동으로 생성하는 방법이 필요합니다. 그렇지 않으면 데이터가 업데이트될 때마다 누군가 HTML 태그를 수동으로 업데이트해야 합니다.
HTML은 간단한 텍스트 파일이므로 어떤 스크립트 언어로도 쉽게 문자열로 생성할 수 있습니다. 이 작업을 수행하는 라이브러리가 많이 있습니다. 예를 들어, Jinja2 라이브러리를 사용하면 Python과 유사한 언어를 사용하여 목록 mylist = [1,2,3,4,5]의 모든 요소를 테이블 행에 작성할 수 있습니다.
//$ node //Welcome to Node.js v23.3.0. //Type ".help" for more information. > console.log('Creating a new directory'); > fs.mkdirSync('new_dir'); // access filesystem using fs
물론 브라우저는 이를 이해하지 못합니다. --- Python에서 특수 명령을 실행하여 이 Jinja2 스크립트를 실제 HTML로 렌더해야 합니다. 그러면 .html 파일이 렌더링됩니다.
<html> <!-- page HTML content here --> <div> <p>You can see that we have a button that triggers a function sayHelloWorld(), which is defined inside <script> tags and it has font size of 40pt, which is defined inside <style> tags.</p> <p>Also note that the comment symbols are different in all 3 sections:</p>
This shows that the browser understands that these are 3 different languages. So, the usual practice is not to clutter .html file too much and separate it into 3 files and call styles and scripts by file path:
content.html
<html> <div> <p><strong>styles.css</strong><br> </p> <pre class="brush:php;toolbar:false">#mytext {color:red; font-size:20pt} button {font-size: 40pt}
이 기능은 매우 중요하여 특별한 이름이 있을 정도로 템플릿입니다. 한 가지 강조하고 싶은 점은 템플릿에서 이러한 HTML 생성이 서버에서 선택한 언어(Python/Ruby/Java/C#), 일반적으로 백엔드 코드가 작성된 언어로 발생한다는 것입니다. 브라우저는 기본적으로 이러한 언어를 이해하지 못합니다. --- 그들은 JS만 이해하므로 사전 렌더링된 HTML 파일을 보냅니다. 이것은 나중에 중요해질 것입니다.
이전 섹션에서는 백엔드가 HTML 스크립트를 생성하고 데이터베이스의 데이터와 기타 정보로 채우는 방법을 살펴보았습니다. 예를 들어, 사용자가 일부 소셜 미디어 게시물에서 좋아요 버튼을 누르면 백엔드는 해당 새 게시물을 포함하도록 좋아요를 누른 게시물 페이지의 콘텐츠를 업데이트해야 합니다. 이는 두 가지 방법으로 수행할 수 있습니다:
1) 백엔드에는 일부 Jinja2 스크립트가 포함된 HTML 템플릿이 준비되어 있으며 이를 데이터베이스의 최신 쿼리 결과로 렌더링합니다.
<html> <div>Hello World!</div> </html>
여기서 렌더링된 HTML은 CSS 스타일 및 JS 스크립트와 함께 프런트엔드로 직접 전송됩니다. 브라우저는 백엔드가 이미 준비한 내용만 표시할 뿐이며 페이지의 데이터 유형이나 논리는 인식하지 못합니다.
2) 백엔드는 브라우저가 이해할 수 있는 형식으로 데이터베이스의 Like_posts 테이블의 쿼리 결과를 지정하는 JSON을 보냅니다.
<html> <div> <p>or if you have a lot of formatting, add id to your content and refer to it from <style> tag. The style is formatted using CSS language which looks like an HTML element followed by JSON related to it:<br> <pre class="brush:php;toolbar:false"><html> <div> <p>This will create static pages that do not change and do not react to any events. To add some interactivity, like checking if you left a form field empty or entered a valid email, you will need JavaScript.</p> <h3> Running JavaScript </h3> <p>Before using any programming language you must first install it on your computer. For C/C++ you need to install a compiler like GCC or Clang, for Python you need to install a CPython interpreter.</p> <p>To run JavaScript you only need a web browser --- all modern web browsers can run JS code. It is as simple as opening a web browser and going to pressing F12. This will open a JS console:</p> <p><img src="https://img.php.cn/upload/article/000/000/000/173587576253989.jpg" alt="A no-nonsense guide to frontend for backend developers" /></p> <p>You can also create a text file with extension .html and put a <script> tag on it, open this file in browser, and the outcome will be displayed if you press F12:<br> <pre class="brush:php;toolbar:false"><!-- myfile.html --> <html> <script> // write a JS code here console.log('Hello World'); </script> </html>
브라우저는 이러한 JSON을 요청하는 특수 JS 기능을 실행하며, JSON을 수신하면 여기에서 추출된 데이터를 사용하고 브라우저 자체에서 HTML을 생성합니다.
//$ node //Welcome to Node.js v23.3.0. //Type ".help" for more information. > console.log('Creating a new directory'); > fs.mkdirSync('new_dir'); // access filesystem using fs
옵션 2는 더 복잡하지만 어떤 이유로 인기가 있습니다. 이 설정에서는 프런트엔드 포트만 클라이언트에 노출하며 백엔드 없이도 정적 HTML JS 앱을 제공합니다. 그리고 백엔드에서 데이터를 가져와야 하는 경우에만 프런트엔드가 백엔드 자체에 연결되어 브라우저에서 이 기능을 추상화합니다. 물론, 그렇게 하려면 이제 프런트엔드에 자체 라우터가 필요합니다. 기본적으로 이것은 백엔드가 해야 할 일을 수행하려는 프런트엔드입니다.
지금까지 작동하는 프런트엔드 코드를 작성하는 방법과 위치에 대한 기본 사항을 다루었습니다. HTML이 자동으로 생성되는 방법을 살펴봤지만 지금까지는 JS 부분이 수동으로 작성된다고 가정했습니다. 실제 프론트엔드 개발에서는 그렇지 않은 경우가 많습니다. JS 스크립트를 수동으로 작성하는 것은 번거롭고 코드 구조가 매우 빠르게 지저분해집니다. 또한 스크립트를 재사용해야 하는 경우 기존 방식으로 복사하여 붙여넣어야 합니다. 그래서 처음부터 개발자들은 JS 개발을 더 쉽고 체계적으로 만들기 위해 일종의 라이브러리를 사용했습니다.
초창기에는 바닐라 JS를 사용하여 요소를 찾아 수정하거나 AJAX 요청을 서버에 보내는 것이 매우 번거로웠습니다. 따라서 많은 개발자들은 바닐라 JS 위에 깔끔한 구문 설탕인 JQuery를 사용했습니다. Datatables(검색, 페이지 매김, 상자에서 정렬이 포함된 대화형 테이블), 애니메이션 시계 또는 카운터 등과 같은 많은 추가 기능이 JQuery로 작성되었습니다. 다른 사람이 미리 작성한 이러한 구성 요소를 사용하는 것은 정말 쉬웠습니다. 코드를 다운로드하여 HTML 페이지의