•  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
r8 vs r9
1
'''윤석열지지 디시인사이드 2중대알파위키 더시드위키 윤석열지위키 일베 국짐당들 개같이 멸망 윤짜장 탄핵의 그날까지jsk1124 열사 만세 두환이는 화장실에서 똥싸고 뒤졌다재산은 29만원 문어대가리 전대갈 탕탕절에 김재규 열사한테 총맞아 뒤진 정희를 추모하는 더시위키답게 두환이도 추모하고 국민 버리고 국민 여러분 안심십시오하미국로 런승만도 한다 더시드위키 일베 국짐당 위키답다 '''
1
[[분류:N위키:한국어]][[분류:시스템 소프트웨어]][[분류:웹 프로그래밍]][[분류:웹 서버]][[분류:웹 서버 프로그램]]
2
||<-2><tablealign=right><tablewidth=400><tablebgcolor=#fff,#1f2023><tablebordercolor=#333><colbgcolor=#333><colcolor=#fff> {{{+1 '''Coder™'''}}} ||
3
|| '''름''' || Coder ||
4
|| '''기능''' || 서버사이드 [[N위키:한국어/Codescript|Codescript]] 페이생성 ||
5
|| '''언어''' || [[N위키:한국어/Codescript|Codescript]] ||
6
|| '''제작자''' || [[nawega]] ||
7
|| '''최신 ''' || 1.2.0 ||
8
|| '''소스코드 공개''' || 클로즈드 소스[* 하지만 난독화된 소스코 컴파일해 제한적 배포는 일부 하고 있다.] ||
9
|| '''구조''' || 사용 ||
10
|| '''렌더링 방식''' || 모두 사용 ||
11
[목차]
12
[clearfix]
213
3
4
14
== 개요 ==
15
원래 로컬 프로그램을 짜거나, 웹페이지를 구동시키는데 사용되는[* 이때 프로그램이 설치되어있는 환경이라면 프로그램을 통해, 설치되어있지 않다면 Javascript로 우회컴파일한다. 자세한 내용은 [[N위키:한국어/Codescript|Codescript]] 문서 참고.] Codescript를 서버사이드에서 사용할 수 있게 한 소프트웨어이다. Node.js와 같은 프로그램과 성격이 비슷하다고 볼 수 있다.
16
== 업데이트 내역 ==
17
[include(N위키:틀/자세한 내용, 문서=N위키:한국어/Coder/패치내역)]
18
== 작동 구조 ==
19
먼저 Coder의 작동방식은 크게 세가지로 나뉜다.
20
1. 빌드형 작동 방식
21
1. 동적 작동 방식
22
1. 프론트엔드 & 백엔드 작동 방식
23
먼저 간단히 설명해 보면, 빌드형 작동 방식은 이름에서 보이듯이 매 파일 변경마다[* 현재는 git과 로컬 파일 시스템을 지원한다.] 새로 빌드를 해 사용자에게는 정적 웹페이지만 돌려주는 형식이다. 동적 작동 방식은 '''매 요청'''시마다 프로그램을 해석해 조건문으로 다른 결과를 내놓는 형식이다. 마지막 프론트엔드 & 백엔드 작동 방식은, 프론트엔드를 먼저 내려보내주고, AJAX로 서버에서 최소값만 받아와 페이지를 다시 구성한다.
24
=== 빌드형 작동 방식 ===
25
앞 문단에서 대략적인 방식을 알아보았으니 정확한 순서를 짚고 넘어가겠다.
26
1. 사용자가 지정한 디렉토리[* 단, /root/ 경로는 예약으로 쓸 수 없다.]에 있는 파일의 값이 변경된다.
27
1. 상시구동중인 Coder-Checker가 변경을 감지하고, Coder를 호출한다.
28
1. 빌드를 위해 /root/의 내용을 모두 삭제한다.
29
1. Coder는 파서를 돌려 Codescript를 정적 파일들로 변환한다.
30
1. 변환한 파일들을 /root/ 디렉토리에 옮기면 적용 끝.
31
이 방식은 방문자가 접속하는 속도가 빠르다는 장점이 있지만, 정적이기 때문에 로그인 등은 구현할 수 없으며, 파일 양이 방대한 경우 /root/를 삭제한 뒤 파싱하는 동안 500 Internal Server Error를 내뿜으며 접속이 안되기 때문에 트래픽이 많은 사이트에는 적합하지 않다. 그런데 통계상으로 이 기능을 사용하는 사이트가 전체의 58%나 된다! --아니 근데 쓰는 사이트가 몇개 안되잖아-- --그러네 듣보잡이다-- 아무래도 속도를 중요시 여기는 고객들의 요구를 반영한 것으로 보인다.
32
=== 동적 작동 방식 ===
33
간단하다. 요청이 들어올 때 마다 Codescript를 파싱해 내보낸다. 이때 쿠키나 세션과 같은 매개변수로 조건문을 사용할 수 있다. 다만 서버의 부담이 세고 기본적으로 느리다는 단점이 있다.
34
=== 프론트엔드 & 백엔드 작동 방식 ===
35
Coder의 꽃이라고 부를 수 있는 기능.
36
Coder를 만든 [[nawega]]의 사이트들은 모두 이 기능을 사용한다.
37
자세한 작동 순서는 아래와 같다.
38
1. static 디렉토리에 있는 파일의 값이 변경된다.
39
1. static 디렉토리에 있는 파일의 내용으로 /assets/ 디렉토리의 내용을 변경한다.
40
1. 요청이 들어온다.
41
1. static.json에 같은 주소의 파일이 있으면 해당 파일을 호출해 정적 사이트와 같이 작동하고[* css, javascript 등], 없을 경우 아래와 같이 동작한다.
42
1. 프론트엔드가 없는 경우 빈 사이트 전체적인 틀을 내려보낸다. 이게 프론트엔드가 된다. 새로고침하지 않는 한 계속 변하지 않는다.
43
1. 경로를 암호화해[* 이 API를 외부에서는 쓸 수 없는데, 디코딩 / 인코딩 알고리즘 자체가 기밀이기 때문이다.] 특정 디렉토리에 요청을 보낸다.
44
1. HTML5 pushState API를 통해 주소를 변경한다.
45
1. 요청을 받은 백엔드는 데이터베이스에서 페이지를 찾고, 있으면 제목 / 내용을 반환하고, 없으면 각 값에 null을 반환한다.
46
1. 제목 / 내용이 있는 경우 브라우저에 표시하고, null이면 404 페이지를 표시한다.