Jamstack Architecture는 점점 더 많은 관심을 끌고 있으며 웹 사이트 구축의 효율적인 방법을 제공합니다.
Jamstack의 핵심 원칙 중 하나는 사전 렌더링입니다. 이는 일련의 정적 리소스를 미리 생성하여 CDN 또는 기타 최적화 된 정적 호스팅 환경의 방문자가 가장 빠른 속도와 가장 낮은 오버 헤드로 서비스를 제공 할 수 있음을 의미합니다.
그러나 우리가 웹 사이트를 미리 전 세계를 사전에 보내려면 어떻게 웹 사이트를 더 역동적으로 보이게 할 수 있습니까? 자주 변경이 필요한 웹 사이트를 구축하는 방법은 무엇입니까? 사용자 생성 콘텐츠를 처리하는 방법은 무엇입니까?
실제로 이것은 서버리스 기능을위한 이상적인 응용 프로그램 시나리오입니다. Jamstack과 Serverless는 최고의 파트너이며 서로 완벽하게 보완합니다.
이 기사는 패턴을 탐색합니다. 거의 전적으로 사용자 생성 된 컨텐츠로 구성된 웹 사이트에서 Serverless 기능을 사전 생성 된 페이지의 백업 솔루션으로 사용합니다. 404 페이지가 서버리스 렌더링을 동적으로 추가하는 서버리스 기능 인 낙관적 URL 라우팅 기술을 채택합니다.
복잡한 것 같나요? 아마도. 그러나 작동합니까? 절대적으로 효과적입니다!
데모 웹 사이트를 사용 하여이 사용 사례에 대해 알아볼 수 있습니다. 그러나이 기사를 읽은 후 시도하십시오.
돌아 왔어? 좋아, 그것에 뛰어 들자.
이 샘플 웹 사이트의 철학은 다음과 같습니다. 친구에게 보낼 따뜻한 메시지와 가상 격려 메시지를 만들 수 있습니다. 메시지를 작성하고 Lollipop (또는 미국 친구들을 위해 아이스 사이클)을 사용자 정의하고 수신자와 공유 할 URL을 얻을 수 있습니다. 그게 다야, 당신은 그들의 하루를 밝혔습니다. 이것보다 더 나은?
전통적으로 일부 서버 측 스크립트를 사용하여 양식 제출을 처리하고 데이터베이스에 새로운 롤리팝 (사용자 생성 컨텐츠)을 추가하고 고유 한 URL을 생성합니다. 그런 다음 더 많은 서버 측로 로직을 사용 하여이 페이지에 요청을 구문 분석하고 데이터베이스를 쿼리하여 페이지보기를 채우고 적절한 템플릿으로 렌더링하고 사용자에게 반환하는 데 필요한 데이터를 가져옵니다.
이것은 합리적으로 보입니다.
그러나 확장 비용은 얼마입니까?
기술 건축가와 기술 감독자는 프로젝트의 범위를 평가할 때 종종이 문제에 직면합니다. 그들은 성공적인 상황에 대처하기 위해 충분한 자원을 계획, 지불 및 할당해야합니다.
이 가상 Lollipop 웹 사이트는 일반적인 장식이 아닙니다. 우리 모두가 서로 긍정적 인 메시지를 보내고 싶어하기 때문에이 사이트는 저를 억만 장자로 만들 것입니다! 뉴스가 퍼지면서 트래픽 수준이 급등합니다. 서버가 무거운 하중을 처리 할 수 있도록 좋은 전략을 가질 수 있습니다. 캐시 계층, 일부로드 밸런서를 추가 할 수 있으며 데이터베이스 및 데이터베이스 서버를 설계하여 이러한 모든 막대 사탕을 생성하고 제공 할 필요성에 압도되지 않고로드를 공유 할 수 있습니다.
그러나… 나는 이런 일을하는 방법을 모른다.
그리고 이러한 인프라를 추가하고 계속 실행하는 데 드는 비용이 얼마나 드는지 모르겠습니다. 이것은 복잡합니다.
그렇기 때문에 사전 렌더링으로 호스팅을 가능한 한 단순화하고 싶습니다.
정적 페이지를 제공하는 것은 웹 서버에서 동적으로 페이지를 제공하는 것보다 훨씬 간단하고 저렴합니다.
우리는 많은 사용자 생성 콘텐츠를 작업하고 있기 때문에 여전히 데이터베이스를 사용하는 것이 합리적이지만 직접 관리하지는 않습니다. 대신 서비스로 사용할 수있는 많은 데이터베이스 옵션 중 하나를 선택하겠습니다. API를 통해 상호 작용하겠습니다.
FireBase, MongoDB 또는 다른 수의 데이터베이스를 선택할 수 있습니다. Chris는 이러한 리소스 중 일부를 서버리스 리소스에 대한 훌륭한 웹 사이트에서 컴파일했습니다.
이 경우 동물 군을 DataStore로 선택합니다. 동물 군은 데이터를 저장하고 쿼리하기위한 훌륭한 API를 제공합니다. SQL이 아닌 스타일의 데이터 저장소이며 정확히 필요한 것입니다.
결정적으로, 동물 군은 데이터베이스 서비스를 제공하기위한 완벽한 비즈니스를 만들었습니다. 그들은 내가 가질 수없는 깊은 도메인 지식을 가지고 있습니다. 이와 같은 데이터베이스로 서비스 제공 업체를 사용함으로써 고 가용성 인프라, 용량 및 규정 준수 보안, 숙련 된 지원 엔지니어 및 광범위한 문서를 포함하여 프로젝트 전문가 데이터 서비스 팀을 물려 받았습니다 .
직접하는 대신, 그와 같은 타사 서비스를 사용하십시오.
아키텍처 tl; dr
개념 증명을 다룰 때, 나는 종종 논리적 흐름을 낙서하고 있습니다. 이 웹 사이트를 위해 만든 낙서는 다음과 같습니다.
그리고 몇 가지 설명 :
- 사용자는 일반적인 HTML 양식을 작성하여 새로운 롤리팝을 만듭니다.
- 새로운 컨텐츠가 데이터베이스에 저장되며 제출은 새로운 사이트 생성 및 배포를 유발합니다.
- 사이트가 배포되면 새로운 Lollipop은 고유 한 URL을 통해 액세스 할 수 있습니다. 데이터베이스 쿼리 나 서버에 의존하지 않고 CDN에서 빠르게 제공되는 정적 페이지가됩니다.
- 사이트 생성이 완료 될 때까지 정적 페이지로 새로운 Lollipop에 액세스 할 수 없습니다. Lollipop 페이지에 대한 실패는 동적 쿼리 데이터베이스 API를 통해 Lollipop 페이지를 동적으로 생성하는 페이지로 돌아갑니다.
이 접근법은 먼저 정적/사전 생성 리소스를 가정 한 다음 정적보기를 사용할 수 없을 때 동적 렌더링으로 돌아갑니다.
보다 자세한 설명
웹 사이트의 코드를 직접 파헤칠 수 있습니다 (오픈 소스이며 원하는만큼 탐색 할 수 있음).
더 깊이 파고이 예제의 구현을 탐색하고 싶습니까? 좋아, 더 자세히 설명하겠습니다.
- 각 페이지를 생성하려면 데이터베이스에서 데이터를 가져옵니다
- 서버리스 기능을 사용하여 데이터를 데이터베이스 API에 게시합니다
- 완전한 사이트 재생을 트리거합니다
- 페이지가 생성되지 않은 경우 주문형 렌더링
데이터베이스에서 페이지를 생성합니다
나중에 데이터를 데이터베이스에 게시하는 방법에 대해 논의하지만 먼저 데이터베이스에 이미 일부 항목이 있다고 가정 해 봅시다. 각 항목의 페이지가 포함 된 웹 사이트를 생성 할 예정입니다.
정적 웹 사이트 생성기는 이것에 매우 능숙합니다. 그들은 데이터를 처리하고 템플릿에 적용하며 HTML 파일을 제공 할 준비가되었습니다. 이 예제에는 모든 생성기를 사용할 수 있습니다. 나는 비교적 단순하고 현장 생성이 빠르기 때문에 Eleventy를 선택했습니다.
Eleventy에 일부 데이터를 제공하기 위해서는 많은 옵션이 있습니다. 한 가지 방법은 구조화 된 데이터를 반환하는 JavaScript를 제공하는 것입니다. 데이터베이스 API를 쿼리하는 데 좋습니다.
Eleventy Data 파일은 다음과 같습니다.
<code>// 设置与Fauna 数据库的连接。 // 使用环境变量进行身份验证// 并访问数据库。 const faunadb = require('faunadb'); const q = faunadb.query; const client = new faunadb.Client({ secret: process.env.FAUNADB_SERVER_SECRET }); module.exports = () => { return new Promise((resolve, reject) => { // 获取最新的100,000 个条目(为了我们的示例) client.query( q.Paginate(q.Match(q.Ref("indexes/all_lollies")),{size:100000}) ).then((response) => { // 获取每个条目的所有数据const lollies = response.data; const getAllDataQuery = lollies.map((ref) => { return q.Get(ref); }); return client.query(getAllDataQuery).then((ret) => { // 将数据发送回Eleventy 以用于站点构建resolve(ret); }); }).catch((error) => { console.log("error", error); reject(error); }); }) }</code>
나는이 파일을 lollies.js라고 명명했으며 Lollies라는 컬렉션에서 Eleventy에서 반환 할 수있는 모든 데이터를 사용할 수 있습니다.
이제 템플릿에서 해당 데이터를 사용할 수 있습니다. 해당 데이터를 취하고 각 프로젝트에 대한 페이지를 생성하는 코드를 보려면 코드 리포지토리에서 볼 수 있습니다.
서버없이 데이터를 제출하고 저장합니다
새 Lollipop 페이지를 만들 때 사용자 컨텐츠를 데이터베이스에 캡처하여 향후 주어진 URL 페이지를 채우는 데 사용할 수 있습니다. 이를 위해 기존 HTML 양식을 사용하여 데이터를 적절한 양식 처리기에 게시합니다.
양식은 다음과 같습니다 (또는 저장소의 전체 코드를 참조하십시오).
<code></code>
호스팅 체계에 웹 서버를 가지고 있지 않다고 양식에서 제출 된 HTTP 게시 요청을 처리 할 수있는 장소를 설계해야합니다. 이것은 서버리스 기능의 완벽한 사용 사례입니다. 나는 이것에 netlify 함수를 사용하고 있습니다. 원하는 경우 AWS Lambda, Google Cloud 또는 Azure 기능을 사용할 수 있지만 NetLify 기능 워크 플로우의 단순성과 동일한 코드 저장소에서 서버리스 API와 UI를 유지한다는 사실이 마음에 듭니다.
백엔드 구현 세부 정보를 프론트 엔드로 유출하는 것은 좋은 습관입니다. 명확한 분리는 일을 더 쉽게 이식하고 깔끔하게 만드는 데 도움이됩니다. 위의 양식 요소의 조치 속성을 확인하십시오. 내 웹 사이트에서 /new라는 경로에 데이터를 게시하는데, 이는 실제로 어떤 서비스가 통신할지 힌트를주지 않습니다.
우리는 리디렉션을 사용하는 모든 서비스로 라우팅 할 수 있습니다. 이 프로젝트에서 구성 할 Serverless 함수로 전송하고 있지만 원하는 경우 다른 곳으로 데이터를 보내도록 쉽게 사용자 지정할 수 있습니다. NetLify는 사용자가 CDN 수준에서 트래픽을 지시하는 간단하고 최적화 된 리디렉션 엔진을 제공하여 사용자가 올바른 위치로 매우 빠르게 경로를 발전시킬 수 있습니다.
다음 리디렉션 규칙 (내 프로젝트의 NetLify.TOML 파일에 위치)은 NetLify functions에서 호스팅 한 NewLolly.js라는 서버리스 기능에 대한 요청을 프록시합니다.
<code># 将“new”URL 解析为函数[[redirects]] from = "/new" to = "/.netlify/functions/newLolly" status = 200</code>
서버리스 기능을 살펴 보겠습니다.
- 새 데이터를 데이터베이스에 저장하고
- 새 페이지에 새 URL을 만듭니다
- 결과를 볼 수 있도록 사용자를 새로 만든 페이지로 리디렉션하십시오.
먼저, 데이터를 구문 분석하고 동물 군 데이터베이스에 연결하고 새로운 Lollipop에 대한 짧은 읽기 쉬운 ID를 생성하려면 다양한 유틸리티가 필요합니다.
<code>const faunadb = require('faunadb'); // 用于访问FaunaDB const shortid = require('shortid'); // 生成短唯一URL const querystring = require('querystring'); // 帮助我们解析表单数据// 首先,我们使用我们的数据库设置一个新的连接。 // 环境变量帮助我们安全地连接// 到正确的数据库。 const q = faunadb.query const client = new faunadb.Client({ secret: process.env.FAUNADB_SERVER_SECRET })</code>
이제 서버리스 기능을 처리하기 위해 요청에 일부 코드를 추가합니다. 핸들러 함수는 양식 제출에서 필요한 데이터를 가져 오도록 요청을 구문 분석 한 다음 새 Lollipop에 고유 한 ID를 생성 한 다음 새 레코드로 데이터베이스로 작성합니다.
<code>// 处理对无服务器函数的请求exports.handler = (event, context, callback) => { // 获取表单数据const data = querystring.parse(event.body); // 添加一个唯一的路径ID。并记下它- 我们稍后会将用户发送到它const uniquePath = shortid.generate(); data.lollyPath = uniquePath; // 组装准备发送到数据库的数据const lolly = { data: data }; // 在fauna db 中创建棒棒糖条目client.query(q.Create(q.Ref('classes/lollies'), lolly)) .then((response) => { // 成功!将用户重定向到此新棒棒糖页面的唯一URL return callback(null, { statusCode: 302, headers: { Location: `/lolly/${uniquePath}`, } }); }).catch((error) => { console.log('error', error); // 错误!返回带有statusCode 400 的错误return callback(null, { statusCode: 400, body: JSON.stringify(error) }); }); }</code>
우리의 진행 상황을 확인합시다. 데이터베이스에서 새로운 Lollipop 페이지를 만들 수있는 방법이 있습니다. 또한 각실 각실에 대한 페이지를 생성하는 자동 빌드가 있습니다.
각 Lollipop에 대한 전체 사전 생성 페이지 세트가 있는지 확인하려면 새 항목이 데이터베이스에 성공적으로 추가 될 때마다 재 구축을 트리거해야합니다. 이것은 매우 쉽습니다. 정적 웹 사이트 생성기 덕분에 빌드가 자동화되었습니다. 우리는 그것을 트리거하는 한 가지 방법 만 있으면됩니다. NetLify를 사용하면 수많은 빌드 후크를 정의 할 수 있습니다. 그들은 WebHooks이며 HTTP Post 요청을 받으면 사이트를 재건하고 배포합니다. 이것은 NetLify의 사이트 관리 콘솔에서 만든 것입니다.
데이터베이스에 기록 된 각 Lollipop의 페이지를 포함하여 사이트를 재생하기 위해 새 데이터를 데이터베이스에 저장 한 직후이 빌드 후크에 HTTP Post 요청을 발행 할 수 있습니다.
다음은 다음과 같은 코드입니다.
<code>const axios = require('axios'); // 简化发出HTTP POST 请求// 触发新的构建以永久冻结此棒棒糖axios.post('https://api.netlify.com/build_hooks/5d46fa20da4a1b70XXXXXXXXX') .then(function (response) { // 在无服务器函数的日志中报告console.log(response); }) .catch(function (error) { // 描述无服务器函数日志中的任何错误console.log(error); });</code>
데이터베이스 삽입을위한 성공적인 핸들러에 추가 된 전체 코드로 볼 수 있습니다.
새로운 Lollipop의 URL을 수신자와 공유하기 전에 빌드 및 배포가 완료되기를 기다리려면 모두 좋습니다. 그러나 우리는 인내심이 없으며 방금 만든 롤리팝에 대한 새로운 URL을 얻을 때 즉시 공유하고 싶습니다.
불행히도, 사이트가 새 페이지를 포함시키기 위해 재생을 완료하기 전에 URL에 액세스하면 404를 얻을 것입니다. 그러나이 404를 활용하게되어 기쁩니다.
낙관적 URL 라우팅 및 서버리스 백업 시나리오
Custom 404 라우팅을 사용하여 실패한 요청을 Lollipop 페이지로 보내 데이터베이스에서 Lollipop 데이터를 직접 찾을 수있는 페이지로 보낼 수 있습니다. 원하는 경우 클라이언트 JavaScript 에서이 작업을 수행 할 수 있지만 더 좋은 방법은 서버리스 기능에서 볼 준비가 된 페이지를 동적으로 생성하는 것입니다.
이 방법은 다음과 같습니다.
먼저, Lollipop 페이지에 액세스하려는 모든 요청 (이 요청은 비어 있음)을 대신 서버리스 기능으로 이동하도록 지시해야합니다. NetLify 리디렉션 구성에 다른 규칙을 추가하여이를 수행합니다.
<code># 未找到的棒棒糖应该直接代理到API [[redirects]] from = "/lolly/*" to = "/.netlify/functions/showLolly?id=:splat" status = 302</code>
이 규칙은 Lollipop 페이지에 대한 요청이 정적 페이지를 제공 할 준비가되지 않은 경우에만 적용됩니다. 서버리스 기능에 임시 리디렉션 (HTTP 302)을 만듭니다.
<code>const faunadb = require('faunadb'); // 用于访问FaunaDB const pageTemplate = require('./lollyTemplate.js'); // JS 模板文字// 设置和授权Fauna DB 客户端const q = faunadb.query; const client = new faunadb.Client({ secret: process.env.FAUNADB_SERVER_SECRET }); exports.handler = (event, context, callback) => { // 从请求中获取棒棒糖ID const path = event.queryStringParameters.id.replace("/", ""); // 在DB 中查找棒棒糖数据client.query( q.Get(q.Match(q.Index("lolly_by_path"), path)) ).then((response) => { // 如果找到,则返回视图return callback(null, { statusCode: 200, body: pageTemplate(response.data) }); }).catch((error) => { // 未找到或发生错误,将悲伤的用户发送到通用错误页面console.log('Error:', error); return callback(null, { body: JSON.stringify(error), statusCode: 301, headers: { Location: `/melted/index.html`, } }); }); }</code>
다른 페이지 (사이트의 / lolly / path 내부가 아닌)에 대한 요청이 404를 반환하는 경우 해당 요청을 서버리스 기능으로 보내서 막대기를 확인하지 않습니다. 우리는 사용자를 404 페이지로 직접 보낼 수 있습니다. NetLify.tOML 구성을 통해 파일에 더 많은 폴백 규칙을 추가하여 404 개의 라우팅 레벨을 정의 할 수 있습니다. 파일의 첫 번째 성공적인 경기가 채택됩니다.
<code># 未找到的棒棒糖应该直接代理到API [[redirects]] from = "/lolly/*" to = "/.netlify/functions/showLolly?id=:splat" status = 302 # 真正的404 可以直接转到这里: [[redirects]] from = "/*" to = "/melted/index.html" status = 404</code>
우리는 끝났어! 이제 URL이 정적 파일로 생성되지 않은 경우 서버리스 기능을 사용하여 컨텐츠를 동적으로 렌더링하려고하는 "정적 첫 번째"사이트가 있습니다.
매우 빠릅니다!
더 큰 규모를 지원합니다
새로운 항목이 생성 될 때마다 Lollipop 페이지를 재생하기위한 빌드를 트리거하는 기술이 항상 최고는 아닙니다. 빌드의 자동화는 사이트의 재배치가 매우 간단하다는 것을 의미하지만, 우리는 매우 인기를 얻기 시작할 때 물건을 제한하고 최적화하기를 원할 수 있습니다. (단지 시간 문제일까요?)
중요하지 않습니다. 데이터베이스에서 많은 페이지를 만들고 콘텐츠를 더 자주 추가 할 때 고려해야 할 사항은 다음과 같습니다.
- 새 항목마다 재건을 트리거하는 대신 사이트를 예정된 작업으로 재 구축 할 수 있습니다. 어쩌면 이것은 시간당 또는 하루에 한 번 일어날 수 있습니다.
- 하루에 한 번 구축 된 경우 지난 날에 제출 된 새로운 롤리팝에 대해서만 페이지를 생성하고 향후 사용하기 위해 매일 생성되는 페이지를 캐시하기로 결정할 수 있습니다. 빌드 의이 논리는 빌드를 너무 길게 만들지 않고 많은 수의 롤리팝 페이지를 지원하는 데 도움이됩니다. 그러나 나는 여기서 빌드 내 캐시에 대해 이야기하지 않을 것입니다. 궁금한 점이 있으면 NetLify 커뮤니티 포럼에서 물어볼 수 있습니다.
정적 사전 생성 리소스를 동적 렌더링을 제공하는 서버리스 백업 솔루션과 결합함으로써 놀랍도록 광범위한 사용 사례를 충족시켜 많은 동적 인프라를 구성하고 유지 관리 할 필요가 없습니다.
이 "정적 첫 번째"접근 방식을 사용하여 어떤 다른 사용 사례를 사용할 수 있습니까?
위 내용은 정적 우선 : 서버리스 렌더링이 폴백으로 사전 생성 된 Jamstack 사이트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

HTML의 일부에서 요소를 사용하여 CSS 파일을 HTML에 연결하면 달성 할 수 있습니다. 1) 태그를 사용하여 로컬 CSS 파일을 연결하십시오. 2) 여러 개의 태그를 추가하여 여러 CSS 파일을 구현할 수 있습니다. 3) 외부 CSS 파일은 다음과 같은 절대 URL 링크를 사용합니다. 4) 파일 경로 및 CSS 파일로드 순서의 올바른 사용을 확인하고 성능을 최적화하면 CSS Preprocessor를 사용하여 파일을 병합 할 수 있습니다.

Flexbox 또는 그리드 선택은 레이아웃 요구 사항에 따라 다릅니다. 1) Flexbox는 탐색 표시 줄과 같은 1 차원 레이아웃에 적합합니다. 2) 그리드는 매거진 레이아웃과 같은 2 차원 레이아웃에 적합합니다. 두 사람은 프로젝트에 사용하여 레이아웃 효과를 향상시킬 수 있습니다.

CSS 파일을 포함시키는 가장 좋은 방법은 태그를 사용하여 HTML 부분에 외부 CSS 파일을 소개하는 것입니다. 1. 태그를 사용하여 외부 CSS 파일을 소개합니다. 2. 작은 조정의 경우 인라인 CSS를 사용할 수 있지만주의해서 사용해야합니다. 3. 대규모 프로젝트는 SASS와 같은 CSS 전 처리기를 사용하여 @Import를 통해 다른 CSS 파일을 가져올 수 있습니다. 4. 성능의 경우 CSS 파일을 병합하고 CDN을 사용해야하고 CSSNANO와 같은 도구를 사용하여 압축해야합니다.

예, YoushouldLearnbothflexBoxAndgrid.1) FlexBoxisIdealforone-Dimensional, FlexiblelayoutSlikenavigationMenus.2) GridexCelsIntwo-Dimensional, ComplexDesignsSuchasmagazinElayouts.3) 결합 된 BothenSlayoutFlexibility 및 HeartingFortructur

자신의 코드를 리팩터링하는 것은 어떤 모습입니까? John Rhea는 자신이 쓴 오래된 CSS 애니메이션을 선택하고 최적화하는 사고 과정을 살펴 봅니다.

cssanimationsarenherinly에 hardbutreepracticenderstandingofcsspropertiesandtimingflestions.1) startsimpleants withsimpleatslikeScalingabuttononHoverusingKeyframes.2) useAsingfuctionslikecubic-bezierfornateffects, 그러한 분위기, 3)

@keyframesispopularduetoitstativerstatility 및 powerincreatingsmoothcssanimations.keytricksinclude : 1) states 사이에 moothtransitionsbettites, 2) 애니메이션 multiplepropertiessimultory, 3) vendorPixesforBrowsercompatibility, 4) 빗질을 사용하여

csScounterSearedTomanageAutomaticNumberingInberingInwebDesigns.1) 1) theCanbeusedfortablestoffContents, ListItems 및 CustomNumbering.2) AdvancedUsesInSinestedNumberingsystems.3) CreativeUseNvolvecust를 CreativeSinvolecust.4) CreativeSinvolvecust


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

드림위버 CS6
시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기