환경 변화는 엄청난 기술적 도약을 가져오며 기회와 도전을 동시에 가져왔습니다. 아직 js를 배워본 적이 없어서 책장에 올려놓고 함께 배울 수밖에 없었습니다. (>﹏
1. 먼저 읽고 읽어보세요
처음부터 "간단하고 깊은 언어로 된 Node.js 입문"을 별 고민 없이 읽었는데, 읽고 나니 이 책에는 어느 정도 기초적인 수준이 필요하다는 걸 깨달았습니다. 인터넷을 검색하다가 41페이지 분량의 "노드 소개"를 찾아 웹 애플리케이션 구축 방법을 배웠습니다. 그리고 성취감을 재충전한 후 "The Amazing Node.js"를 읽었습니다. 이제 나는 이 책을 읽은 후 "node.js 심층 소개"를 읽으려고 합니다.
2. 환경을 설정하고 git에서 루틴을 실행합니다(오류가 3번 보고됨)
공식 홈페이지에서 msi를 다운로드한 후 다음으로 넘어갑니다. npm install 명령을 입력하면 "npm ERR! notfound: git" 오류가 보고됩니다. 그 이유는 새 컴퓨터가 git을 따르지 않기 때문입니다.
외부 종속성 패키지를 설치할 때 "gyp ERR! 구성 오류" 오류가 보고됩니다. 그 이유는 Python 환경이 존재하지 않기 때문입니다. 그리고 이 종속성 패키지는 하위 버전에서만 설치할 수 있습니다. 보고된 마지막 오류는 "MSBUILD: 오류 MSB3428: Visual C 구성 요소 "VCBuild.exe"를 로드하지 못했습니다."입니다. 이 오류는 .net Framework 2.0 SDK 및 mvs2005를 설치한 후에도 계속 보고되었습니다. 결정적으로 포기했습니다.
3. 첫 번째 웹 애플리케이션
"Hello World"를 실행한 후 완전히 Node.js 기반의 웹 애플리케이션 작성을 시작합니다. 먼저, 서버 모듈을 시작해야 합니다. http 모듈의 createServer 함수에 의해 반환된 개체에는 포트를 수신하기 위한 Listen([PORT]) 메서드가 있습니다. 이 함수의 매개변수는 매우 이상합니다. 함수 정의입니다. JavaScript에서는 함수가 매개변수를 다른 함수로 받을 수 있습니다. 매개변수 함수를 익명 함수라고 합니다. 이 방법을 사용하는 이유는 노드가 이벤트 기반 콜백을 사용하기 때문입니다. 서버가 단일 프로세스에서 요청을 받으면 이 함수를 호출하여 요청을 처리합니다. 해당 이벤트가 발생하면 createServer 함수는 이 함수를 호출하여 콜백합니다.
http 요청 수신 완료 후 요청을 처리해드리겠습니다. 먼저, 우리는 다양한 URL과 GET 및 POST 매개변수를 추상적으로 제안합니다. 여기에는 두 가지 내부 모듈인 URL(URL 구문 분석)과 Query String(쿼리 문자열 처리)이 사용됩니다. 그리고 의존성 주입을 통해 라우터 모듈을 추가합니다. 다음으로, 라우팅을 완료하려면 요청 처리 모듈을 완료해야 합니다. 모든 요청은 먼저 객체(핸들)를 통해 모듈 간에 전달되며 핸들러가 응답할 수 있습니다. 일반적으로 말하면 요청 핸들러가 onRequest 함수를 통해 사용자에게 표시하려는 정보를 직접 반환(return())하도록 합니다. 그러나 차단 작업을 수행하는 데는 시간이 많이 걸리므로 비 차단 작업을 사용해야 합니다. 처리하는 데 시간이 걸리는 다른 함수에 함수를 인수로 전달하여 콜백을 사용합니다. 콘텐츠를 서버로 전달하는 대신 이번에는 서버에서 콘텐츠를 "전달"합니다. 즉, 서버의 콜백 함수 onRequest()에서 얻은 응답 객체를 라우팅을 통해 핸들러에 함수 매개변수로 전달하는 것입니다. 이런 방식으로 핸들러는 객체에 대한 함수를 호출할 수 있습니다.
그런 다음 처리 단계로 진행하여 양식을 통해 이미지를 업로드합니다. 여기서는 formidable 외부 종속 패키지를 사용하여 이미지를 수신합니다. 이 모듈은 양식을 처리하고 파일을 업로드하는 데 사용됩니다. 먼저 var form = new formidable.IncomingForm();을 사용하여 양식 객체를 얻습니다. 이 객체의 구문 분석 메소드는 양식 데이터를 구문 분석하고 처리할 수 있습니다. 파일을 저장하기만 하면 됩니다. fs 모듈은 파일을 저장하는 데 사용됩니다. rename 메소드를 통해 저장 위치를 지정하고, renameSync() 동기화 메소드를 사용하여 파일 저장 동작이 사진 표시 동작보다 우선하도록 합니다.
사진을 표시하는 것은 매우 간단합니다. fs의 readFile 메소드를 통해 파일을 읽고, 콜백 함수에서 response.write(file, "binary")를 사용하여 브라우저에 사진을 표시합니다.
요약하자면: 이 루틴을 통해 우리는 단일 스레드, 비동기, 이벤트 중심 등 node.js의 기능에 대해 배웠습니다. 이러한 추상 개념 중 일부는 루틴을 통해서도 설명되지만 깊이 이해해야 합니다. 루틴을 통해 학습한다는 것은 이해가 안 될 때 정보를 찾아봐야 한다는 의미입니다. 이 학습 방법도 좋은 입력-사람-출력 방법입니다.