> 웹 프론트엔드 > JS 튜토리얼 > 10 node.js 모범 사례 : 노드 전문가의 깨달음

10 node.js 모범 사례 : 노드 전문가의 깨달음

Joseph Gordon-Levitt
풀어 주다: 2025-02-17 09:26:09
원래의
159명이 탐색했습니다.

10 node.js 모범 사례 : 노드 전문가의 깨달음 키 테이크 아웃

빌드, 테스트 및 앱 시작과 같은 작업을 구성하기 위해 NPM 스크립트를 활용합니다. 이것은 개발자가 새로운 프로젝트를 볼 때 단일 진실의 출처를 제공합니다.

프로젝트의 초기 단계에서 Process.env.node_env와 같은 환경 변수를 사용하십시오. 이렇게하면 민감한 정보가 누출되지 않고 처음부터 코드를 올바르게 작성합니다. 이벤트 루프와 setimmediate () 또는 settimeout ()을 사용하여 CPU 집약적 작업을 다음 이벤트 루프 사이클에 오프로드하는 방법을 이해합니다. 단순성과 프로토 타입 상속 또는 클래스의 복잡성을 피하기 위해 기능적 상속을 사용하십시오. 이것은 많은 많은 노드 기여자들 사이에서 선호되는 방법입니다.

전문 지식 수준과 앱의 특성에 따라 TypeScript, Flow, Elm, Clojurescript 또는 Coffeescript와 같은 JavaScript에 대한 대안을 고려하십시오. 이것은 설정이 거의없는 팀에 이익이 될 수 있습니다.
  • <.> 10 node.js 모범 사례 : 노드 전문가의 깨달음은 게스트 저자 Azat Mardan의 것입니다. Sitepoint 게스트 게시물은 웹 커뮤니티의 저명한 작가와 스피커의 매력적인 콘텐츠를 제공하는 것을 목표로합니다.
    2017 년에 더 나은 노드 개발자가되기위한 이전 기사 10 팁에서 오늘 코드에 적용 할 수있는 10 개의 Node.js 팁, 트릭 및 기술을 소개했습니다. 이 게시물은 노드 기술을 다음 단계로 끌어 올리는 데 도움이되는 10 가지 모범 사례를 통해 그 정맥에서 계속됩니다. 이것이 우리가 다룰 것입니다 :
    NPM 스크립트 사용 - NPM 스크립트 및 노드로 더 잘 구성 할 수있을 때 Bash 스크립트 작성을 중지하십시오. 예를 들어, NPM 실행 빌드, 시작 및 테스트. NPM 스크립트는 노드 개발자가 새로운 프로젝트를 볼 때 단일 진실의 소스와 같습니다. env vars - 개발 또는 생산으로 설정하여 process.env.node_env를 사용하십시오. 일부 프레임 워크 도이 변수를 사용하므로 컨벤션에서 재생하십시오.
  1. 이벤트 루프 이해 - setimmediate ()는 즉각적이지 않지만 NextTick ()는 다음에 있지 않습니다. setimmediate () 또는 settimeout ()을 사용하여 CPU 집약적 작업을 다음 이벤트 루프 사이클에 오프로드하십시오. 기능적 상속 사용-가장 많은 노드 기여자들과 마찬가지로 기능적 상속을 사용하여 프로토 타입 상속 또는 클래스를 디버깅하고 이해하는 뇌-배수 트랩을 피하십시오.
  2. . 이름을 적절하게 이름을 지정하십시오 - 문서로 작용할 의미있는 이름을 부여하십시오. 또한 대문자 파일 이름이없고 필요한 경우 대시를 사용하십시오. 파일 이름의 대문자는 이상하게 보일뿐만 아니라 크로스 플랫폼 문제를 유발할 수 있습니다. JavaScript를 사용하지 않는 것을 고려하십시오 - ES6/7은 이미 CoffeeScript라는 더 나은 JavaScript를 가졌을 때 6 년 동안 회의에서 태어난 한심한 추가입니다. 선박 코드를 더 빨리 원한다면 사용하고 시간을 낭비하지 않으면 Var/Const/Let, Semi-Colons, Class 및 기타 인수에 대해 토론하십시오. 기본 코드 제공 - 트랜스 필러를 사용할 때 기본 JS 코드 (빌드 결과)를 커밋하여 빌드 없이 프로젝트를 실행할 수 있습니다. gzip 사용 - duh! NPM I Compression -S 및 Sane 로깅 -환경에 따라 그리 많지 않습니다. npm I Morgan -s 스케일 업 - 노드 개발 중 하나부터 클러스터링 및 무국적 서비스에 대해 생각하기 시작하십시오. PM2 또는 StrongLoop의 클러스터 컨트롤
  3. 를 사용하십시오 캐시 요청 - Nginx 및/또는 Varnish Cache 및 CDN 캐싱과 같은 요청 레벨 캐시와 같은 정적 파일 서버 뒤에 숨겨서 노드 서버에서 최대 주스를 가져옵니다.
  4. 그래서 각각을 이등분하고 개별적으로 살펴 보겠습니다. 우리는?
  5. NPM 스크립트 사용 빌드, 테스트 용 NPM 스크립트를 만들고 가장 중요한 것은 앱을 시작하는 것이 거의 표준입니다. 이것은 새로운 노드 프로젝트가 발생할 때 가장 먼저 노드 개발자가 보는 첫 번째 장소입니다. 어떤 사람들 (1, 2, 3, 4)은 더 낮은 수준이지만 더 신뢰할 수있는 NPM 스크립트를 위해 Grunt, Gulp 등을 버렸습니다. 나는 그들의 주장을 완전히 이해할 수 있습니다. NPM 스크립트가 사전 및 포스트 후크가 있다는 점을 고려하면 매우 정교한 자동화 수준에 도달 할 수 있습니다.
    <span>"scripts": {
    </span>  <span>"preinstall": "node prepare.js",
    </span>  <span>"postintall": "node clean.js",
    </span>  <span>"build": "webpack",
    </span>  <span>"postbuild": "node index.js",
    </span>  <span>"postversion": "npm publish"
    </span><span>}
    </span>
    로그인 후 복사
    로그인 후 복사
    종종 프론트 엔드를 개발할 때는 두 개 이상의 시계 프로세스를 실행하여 코드를 재건하려고합니다. 예를 들어, 하나는 Webpack이고 다른 하나는 Nodemon 용입니다. 첫 번째 명령이 프롬프트를 해제하지 않으므로 && 로이 작업을 수행 할 수 있습니다. 그러나 동시에 여러 프로세스를 스폰하여 동시에 실행할 수있는 편리한 모듈이 있습니다. 또한 Webpack, Nodemon, Gulp, Mocha 등과 같은 Dev 명령 줄 도구를 설치하십시오. 예를 들어 ./node_modules/.bin/mocha를 가리키거나 Bash/zsh 프로파일 (Path!) 에이 줄을 추가 할 수 있습니다.

    env vars 를 사용하십시오 프로젝트의 초기 단계에서도 환경 변수를 활용하여 민감한 정보의 누출이 없도록하고 처음부터 코드를 올바르게 구축하기 위해. 또한 일부 라이브러리와 프레임 워크 (Express를 확실히 알고 있음)는 Node_env와 같은 정보를 가져와 동작을 수정합니다. 생산으로 설정하십시오. mongo_uri 및 api_key 값도 설정하십시오. 쉘 파일 (예 : start.sh)을 생성하고 .gitignore에 추가 할 수 있습니다 :

    NODEMON은 ENV VAR (예)를 넣을 수있는 구성 파일도 있습니다. 이벤트 루프 를 이해하십시오 강력하고 영리한 이벤트 루프는 입력 및 출력 작업이 완료되기를 기다리는 모든 시간을 사용하여 노드를 너무 빠르고 훌륭하게 만드는 것입니다. 따라서 노드는 I/O 바운드 시스템을 최적화하는 데 좋습니다 CPU 집약적 인 것을 수행 해야하는 경우 (예 : 계산, 암호 해싱 또는 압축), 해당 CPU 타스크의 새로운 프로세스를 생성하는 것 외에도 Setimmediate와의 과제를 연기하는 것을 탐색 할 수 있습니다. () 또는 settimeout () - 콜백의 코드는 다음 이벤트 루프 사이클에서 계속됩니다. NextTick ()는 이름과 반대로 같은주기에서 작동합니다. argh!

    이벤트 루프에서 작업 한 Bert Belder의 다이어그램이 있습니다. 그는 이벤트 루프가 어떻게 작동하는지 분명히 알고 있습니다!
    <span>export <span>PATH</span>="./node_modules/.bin:<span>$PATH"</span>
    </span>
    로그인 후 복사

    기능적 상속을 사용하십시오 javaScript 지원 프로토 타입 상속은 객체가 다른 객체에서 상속 될 때입니다. 클래스 운영자는 ES6을 사용하여 언어에 추가되었습니다. 그러나 기능 상속에 비해 지나치게 복잡합니다. 대부분의 노드 전문가는 후자의 단순성을 선호합니다. 간단한 기능 공장 패턴에 의해 구현되며, 새 또는 새로 사용 할 필요는 없습니다. 기능적 상속에서 각 객체는 자체 메소드 사본을 사용하기 때문에 프로토 타입을 업데이트 할 때 (모든 인스턴스도 변경 될 수 있음) 암시 적 효과가 없습니다. Express, Mocha, Connect, SuperAgent 및 수십 개의 다른 노드 모듈의 배후에있는 TJ Holowaychuk의 코드를 고려하십시오. Express는 기능적 상속 (전체 소스 코드)을 사용합니다
    <span>"scripts": {
    </span>  <span>"preinstall": "node prepare.js",
    </span>  <span>"postintall": "node clean.js",
    </span>  <span>"build": "webpack",
    </span>  <span>"postbuild": "node index.js",
    </span>  <span>"postversion": "npm publish"
    </span><span>}
    </span>
    로그인 후 복사
    로그인 후 복사
    객관적으로 핵심 노드 모듈은 프로토 타입 상속을 많이 사용합니다. 그 패턴을 따르는 경우 어떻게 작동하는지 알아야합니다. JavaScript 상속 패턴에 대한 자세한 내용은 여기를 참조하십시오 이름을 적절하게 이름을 지정하십시오 이것은 분명합니다. 좋은 이름은 문서로 사용됩니다. 어느 쪽을 선호 하시겠습니까?

    나는 app.use () 만 볼 때 덱스터가 무엇을하고 있는지 전혀 모른다. 더 의미있는 이름은 어떻습니까?

    같은 방식으로 파일 이름은 코드의 목적이 무엇인지 올바르게 반영해야합니다. 플랫폼과 함께 모든 코어 모듈이있는 노드 폴더 (Github Link)를 살펴보면 파일/모듈의 명확한 이름 지정이 표시됩니다 ( 코어 모듈) :

      내부 모듈에는 코드의 메소드 및 변수와 마찬가지로 밑줄 (_debugger.js, _http_agent.js, _http_client.js)이 표시됩니다. 이것은 개발자에게 이것이 내부 인터페이스임을 경고하는 데 도움이되며, 사용중인 경우 스스로 자체적으로 사용됩니다. 리팩토링되거나 제거 된 경우 불만을 제기하지 마십시오. JavaScript를 사용하지 않는 것을 고려하십시오 > 허? 방금 올바르게 읽었습니까? 하지만 도대체? 예. 맞습니다. ES6과 ES2016/ES7에 의해 추가 된 두 가지 기능이 있어도 JavaScript는 여전히 단점이 있습니다. JavaScript 외에 다른 옵션이 있습니다. 귀하 또는 귀하의 팀은 설정이 거의 없습니다. 전문 지식 수준과 앱의 특성에 따라 강력한 타이핑을 제공하는 TypeScript 또는 흐름으로 더 나을 수 있습니다. 스펙트럼의 다른 쪽 끝에는 순전히 기능적인 Elm 또는 Clojurescript가 있습니다. 커피 스크립트는 또 다른 위대하고 전투 테스트를 거친 옵션입니다. 다트 2.0을 살펴볼 수도 있습니다.

      필요한 모든 매크로 만 있으면 (매크로가 원하는 언어를 정확히 빌드 할 수 있습니다) 완전히 새로운 언어가 아닌 Sweet.js를 고려하십시오. 코드를 생성하는 코드를 작성합니다 javaScript 경로를 사용하는 경우 일부 개발자는 언어를 제대로 구축 할만 큼 충분히 이해하지 못할 수 있으므로 컴파일 된 코드를 여전히 포함하십시오. 예를 들어, Vs 코드는 가장 큰 TypeScript 프로젝트 중 하나이며, 아마도 각도 2 이후에 Code는 TypeScript를 사용하여 유형을 사용하여 노드의 코어 모듈을 패치합니다. VScode/src/vs/base/node/of vs code repo (link)에서는 crypto, process 등과 같은 친숙한 모듈 이름을 볼 수 있지만 ts 확장 기능이 있습니다. Repo에는 다른 TS 파일이 있습니다. 그러나 기본 JavaScript 코드가 포함 된 VSCODE/빌드도 포함했습니다는 Express Middleware를 알고 있습니다 Express는 훌륭하고 매우 성숙한 프레임 워크입니다. 무수한 다른 모듈이 동작을 구성 할 수있게하는 것은 광채입니다. 따라서 가장 많이 사용되는 미들웨어를 알아야하며

      를 사용하는 방법을 알아야합니다. 그렇다면 내 익스프레스 치트 시트를 잡으십시오. 주요 미들웨어 모듈이 있습니다. 예를 들어, NPM I 압축 -S는 응답을 수축시켜 다운로드 속도를 줄입니다. Logger ( 'tiny') 또는 Logger ( 'common')는 각각 (dev) 또는 그 이상 (prod) 로그를 제공합니다.

      스케일 업 노드는 비 블로킹 I/O로 인해 비동기가 적합하며 스레드가 하나만 있기 때문에이 비동기 코딩 방식을 간단하게 유지합니다. 이것은 첫 번째 코드 라인에서도 조기에 스케일링을 시작할 수있는 기회입니다. 너무 많은 문제없이 수직으로 확장 할 수있는 핵심 클러스터 모듈이 있습니다. 그러나 더 나은 방법은 PM2 또는 StrongLoop의 클러스터 컨트롤과 같은 도구를 사용하는 것입니다. 예를 들어 이것은 PM2로 시작할 수있는 방법입니다 :

      그런 다음 같은 서버의 4 가지 인스턴스를 시작할 수 있습니다. Docker의 경우 PM2 버전 2에는 PM2 Docker가 있습니다. 따라서 Dockerfile은 다음과 같이 보일 수 있습니다

      공식 알파인 리눅스 PM2 이미지는 Docker Hub에 있습니다. 캐시 요청 이것은 Node 인스턴스에서 더 많은 주스를 얻을 수있는 DevOps 모범 사례입니다 (PM2 등이있는 하나 이상을 얻을 수 있습니다. 위의 참조). 이동 방법은 Node 서버가 요청 작성, 데이터 처리 및 비즈니스 로직 실행과 같은 앱 작업을 수행하고 Apache HTTPD 또는 Nginx와 같은 다른 웹 서버로 트래픽을 오프로드하는 것입니다. 다시, 당신은 아마도 설정을 위해 Docker를 사용해야합니다 :

      나는 Docker Compose를 사용하여 여러 컨테이너 (nginx, 노드, Redis, Mongodb)가 서로 작동하게합니다. 예를 들면 :

      요약 오픈 소스 소프트웨어 의이 시대와 나이에 오픈에있는 신뢰할 수있는 테스트 코드에서 배우지 않는 변명은 없습니다. 당신은 들어가기 위해 내부 원에있을 필요가 없습니다. 학습은 결코 멈추지 않으며 곧 우리가 경험할 실패와 성공에 따라 다른 모범 사례를 가질 것이라고 확신합니다. 그들은 보장됩니다. 마지막으로 소프트웨어가 세상을 어떻게 먹고 JavaScript가 소프트웨어를 먹는 지에 대해 글을 쓰고 싶었습니다. 매년 표준 릴리스, 많은 NPM 모듈, 도구 및 컨퍼런스와 같은 훌륭한 것들이 있습니다… 주의의 한마디로.

      나는 점점 더 많은 사람들이 다음 새로운 프레임 워크 나 언어를 쫓는 방법을 봅니다. 반짝이는 물체 증후군입니다. 그들은 매주 새로운 도서관과 매달 새로운 프레임 워크를 배웁니다. 그들은 트위터, 레딧, 해커 뉴스 및 JS 주간을 강박 적으로 확인합니다. 그들은 JavaScript 세계에서 압도적 인 수준의 활동을 사용하여 미루는 것입니다. 그들은 빈 공개 github 역사를 가지고 있습니다.

      새로운 것을 배우는 것은 좋지만 실제로 물건을 만드는 데 혼동하지 마십시오. 중요한 것과 급여를 지불하는 것은 실제로 물건을 짓는 것입니다. 엔지니어링을 중단하십시오. 다음 페이스 북을 구축하지 않습니다. 약속 대 발전기 대 비스듬한 기다려서 누군가가 토론에서 스레드에 대답했을 때, 나는 이미 내 콜백을 썼기 때문에 (그리고 커피 스크립트를 사용하여 일반 ES5/6/7보다 2 배 더 빨리 수행했기 때문입니다! ).. <.> 최종 모범 사례는 모범 사례를 사용하는 것이며 최선의 최선은 기본을 마스터하는 것입니다. 소스 코드를 읽고, 코드에서 새로운 것을 시도하고, 가장 중요한 것은 수많은 코드를 직접 작성하십시오. 이제이 시점에서 읽기를 중지하고 중요한 선박 코드로 가십시오! 그리고이 게시물이 충분하지 않은 경우 여기서 가장 좋은 노드 관행에 대한 더 많은 독서가 있습니다.

      https://blog.risingstack.com/nodejs-at-scale-npm-best-practices https://devcenter.heroku.com/articles/node-best-practices https://blog.risingstack.com/node-js-best-practices

      https://expressjs.com/en/advanced/best-practice-performance.html https://www.codementor.io/nodejs/tutorial/nodejs-best-practices

      node.js 모범 사례 에서 자주 묻는 질문 (FAQ) node.js 개발을위한 가장 중요한 모범 사례는 무엇입니까? node.js 개발에는 응용 프로그램의 효율성과 확장 성을 크게 향상시킬 수있는 몇 가지 모범 사례가 포함됩니다. 여기에는 비동기 프로그래밍 사용이 포함되며, 이는 비 차단 작업을 허용하고 성능을 향상시킵니다. 애플리케이션 충돌을 방지하기 위해 오류를 올바르게 처리하는 것이 중요합니다. 다른 모범 사례에는 Linter를 사용하여 코드 품질을 시행하고, 구성을 위해 환경 변수를 사용하고, 코드베이스를 관리 할 수 ​​있고 이해할 수 있도록 작은 모듈을 작성하는 것이 포함됩니다.

      • Node.js 응용 프로그램의 성능을 어떻게 개선 할 수 있습니까? node.js 응용 프로그램의 성능을 향상시키는 몇 가지 방법이 있습니다. 가장 효과적인 방법 중 하나는 클러스터 모듈을 사용하여 모든 서버 포트를 공유하는 하위 프로세스를 생성 할 수 있습니다. 이렇게하면 더 많은 요청을 동시에 처리 할 수있어 응용 프로그램의 성능을 크게 향상시킬 수 있습니다. 또한 PM2와 같은 도구를 사용하여 Node.js 응용 프로그램을 관리하고 모니터링 할 수 있습니다.이 응용 프로그램은 성능 문제를 식별하고 해결하는 데 도움이 될 수 있습니다.
      • Node.js로 개발할 때 피해야 할 일반적인 실수는 무엇입니까? >
      • Node.js로 개발할 때 피하는 몇 가지 일반적인 실수에는 이벤트 루프 차단, 오류를 올바르게 처리하지 않으며 Linters와 같은 도구를 사용하여 코드 품질을 시행하는 것이 포함됩니다. 이벤트 루프를 차단하면 다른 작업이 실행되는 것을 방지하기 때문에 성능 문제가 발생할 수 있습니다. 오류를 제대로 처리하지 않으면 응용 프로그램 충돌이 발생할 수 있지만 Linters를 사용하지 않으면 코드 품질이 일관되지 않고 잠재적 인 버그가 발생할 수 있습니다. node.js 응용 프로그램이 안전한 지 확인하려면 어떻게해야합니까?

        Node.js 응용 프로그램의 보안에 몇 가지 모범 사례가 필요합니다. 여기에는 보안 통신을 위해 HTTPS를 사용하고, 주입 공격을 방지하기 위해 사용자 입력을 검증 및 소독하고, 일반적인 웹 취약점으로부터 보호하기 위해 보안 헤더를 사용하는 것이 포함됩니다. 오래된 종속성은 알려진 보안 취약점을 포함 할 수 있으므로 의존성을 최신 상태로 유지하는 것도 중요합니다.

        Node.js 애플리케이션을 테스트하기위한 몇 가지 모범 사례는 무엇입니까?

        테스트는 중요한 부분입니다. Node.js 개발 및 따라야 할 몇 가지 모범 사례가 있습니다. 여기에는 응용 프로그램의 개별 구성 요소를 테스트하기위한 단위 테스트 작성, 이러한 구성 요소 상호 작용 방법을 테스트하기위한 통합 테스트 및 응용 프로그램 전체를 테스트하기위한 엔드 투 엔드 테스트가 포함됩니다. Codebase의 변경이 이루어질 때마다 Tests를 자동으로 실행하기 위해 CONTERUUS INTEGRATION (CI) 시스템을 사용하는 것도 중요합니다.

        Node.js에서 종속성을 관리하는 방법?

        종속성 관리는 어떻게 관리 할 수 ​​있습니까? node.js는 일반적으로 node.js의 기본 패키지 관리자 인 NPM을 사용하여 수행됩니다. Package.json 파일에 정확한 종속성 버전을 지정하여 응용 프로그램이 예상대로 작동하는지 확인하는 것이 중요합니다. 또한 버그 수정 및 보안 패치로부터 이익을 얻기 위해 종속성을 정기적으로 업데이트해야합니다.

        Node.js에서 오류 처리를위한 모범 사례는 무엇입니까? JS 개발. 모범 사례에는 시도/캐치 블록을 사용하여 동기 오류를 잡고, 오류 우선 콜백을 사용하여 비동기 오류를 처리하고, 중앙 오류 처리 메커니즘을 사용하여 한 곳의 모든 오류를 처리하는 것이 포함됩니다. 또한 디버깅 목적으로 오류를 기록하고 적절한 오류 메시지로 클라이언트에 응답하는 것도 중요합니다.

        node.js에서 코드 품질을 보장하는 방법

        Node.js에서 코드 품질을 보장하십시오. 몇 가지 모범 사례가 포함됩니다. 여기에는 Linter를 사용하여 코드 품질을 시행하고 일관된 코딩 스타일에 따라 버그를 일찍 잡아 테스트를 작성하는 것이 포함됩니다. 또한 버전 제어 (GIT와 같은)를 사용하여 코드베이스의 변경 사항을 추적하고 잠재적 인 문제를 포착하기 위해 코드 검토를 수행하는 것이 중요합니다.

        Node.js 응용 프로그램을 어떻게 확장 할 수 있습니까? 스케일링 Node.js 응용 프로그램은 여러 가지 방법으로 달성 할 수 있습니다. 일반적인 방법 중 하나는 클러스터 모듈을 사용하여 서버 포트를 공유하는 하위 프로세스를 생성하여 응용 프로그램이 더 많은 요청을 동시에 처리 할 수 ​​있도록하는 것입니다. 또한로드 밸런싱을 사용하여 여러 서버에 들어오는 네트워크 트래픽을 배포 할 수 있으며, 수평 스케일링 (더 많은 기계 추가) 또는 요구 사항에 따라 단일 시스템에 더 많은 리소스 추가 (더 많은 리소스 추가). node.js 응용 프로그램을 배포하기위한 모범 사례는 무엇입니까?

        Node.js 애플리케이션 배포에는 몇 가지 모범 사례가 포함됩니다. 여기에는 구성에 환경 변수를 사용하고 PM2와 같은 프로세스 관리자를 사용하여 응용 프로그램을 관리하고 CI (Continuous Integration) 시스템을 사용하여 코드베이스를 변경할 때 응용 프로그램을 자동으로 배포하는 것이 포함됩니다. 성능 문제를 식별하고 해결하기 위해 응용 프로그램을 모니터링하는 것도 중요합니다.

위 내용은 10 node.js 모범 사례 : 노드 전문가의 깨달음의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿