Pages

2016년 2월 28일 일요일

[JAVASCRIPT] KB927917 오류

HTML Parsing Error: Unable to modify the parent container element before the child element is closed

이 문제는 자식 컨테이너 HTML 요소에 자식 컨테이너의 부모 컨테이너 요소를 수정하려고 시도하는 스크립트 코드가 포함되어 있기 때문에 발생합니다. 이 스크립트 코드는 innerHTML 메서드 또는 appendChild 메서드를 사용하여 부모 컨테이너 요소를 수정하려고 시도합니다.

이 문제를 해결하려면 닫힌 컨테이너만 수정하거나 스크립트의 바로 아래 수준 컨테이너 요소만 수정하는 스크립트 블록을 작성하십시오. 이렇게 하려면 자리 표시자를 사용하여 대상 컨테이너를 닫거나 수정할 컨테이너로 스크립트 블록을 이동하면 됩니다.


2016년 2월 2일 화요일

비동기 처리 구현을 위한 Ratpack

Ratpack은 HTTP 응용 프로그램 구축을위한 JAVA 라이브러리의 집합입니다.
Ratpack은 앱을 실용적이고 높은 성능을 작성하기 위해 제공합니다.
처리 베이스는 non-blocking형 이벤트 구동 네트워크 엔진인 Netty를 사용하여 비동기처리를 구현하고 있습니다.
Ratpack은 JSON과 같이 특정 언어에 비 종속적인 프로토콜을 최 우선적으로 서포트하고 있으며, 
옵션으로 넷플릭스의 서킷 브레이커 라이브러리인 Hystrix나 레포팅을 위한 Dropwizard Matrics를 지원하고 있습니다.
설정정보관리는 YAML과 JSON 그리고 Java프로퍼티가 사용 가능합니다.
Ratpack은 오픈소스 프로젝트로서 개발이 진행되고 있으며, 아파치 라이센스를 사용하고 있습니다.

Ratpack의 개발 목표
매뉴얼에 기재된 Ratpack이 표방하는 개발 목표는 다음과 같습니다.
    1. 빠르고, 확장가능하며, 고효율이어야 한다.
    2. 응용프로그램을 성능저하 없이 복잡하게 발전시킬 수 있어야 한다.
    3. non-blocking 프로그래밍의 장점을 활용하면서도 비용을 절감시킬 수 있어야 한다.
    4. 다른 툴과 라이브러리들과 통합함에 있어서 유연하고 개방적이어야 한다.
    5. 응용 프로그램을 쉽고 완벽하게 테스트 할 수 있어야 한다.

반면 다음의 사항들에 대해서는 지양하고 있음을 밝히고 있습니다.
    1. 완벽하게 통합된 "풀스텍" 솔루션
    2. 필요한 모든 기능을 제공하는 "만능 칼"
    3. "비즈니스 로직"을 위한 프레임웍 혹은 아키텍처

심플한 비동기 처리의 구현
Ratpack의 가장 큰 특징은 뭐니뭐니해도 심플한 비동기 처리의 구현입니다. JVM위에서 비동기 처리라는 과제에 도전하고 있다는 점 에서 자주 Akka와 비교되곤 하는데, 코딩스타일에 있어서 자바8을 기반으로 도입하고 있는것이 메뉴얼에서 잘 드러납니다. 

Ratpack의 메뉴얼에 실려있는 RESTful HTTP API 헨들러 체인의 구현부 입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package springpack;
import ratpack.server.RatpackServer;
public class Main {
  public static void main(String[] args) throws Exception {
    RatpackServer.start(spec -> spec
      .handlers(chain -> chain (1)
          .prefix("api", pchain -> pchain (2)
            .all(ctx -> ctx (3)
              .byMethod(method -> method (4)
                .get(() -> ctx.render("Received GET request"))
                .post(() -> ctx.render("Received POST request"))
                .put(() -> ctx.render("Received PUT request"))
                .delete(() -> ctx.render("Received DELETE request"))
              )
            )
          )
      )
    );
  }
}
cs


처리모델

Ratpack의 처리 모델은 node.js와 닮아 있습니다. 다음 그림은 4코어 시스템에서 동작하는 Ratpack의 처리 모델의 개요를 나타내고 있습니다.


Ratpack은 기동과 함께 지정한 코어 수 만큼의 이벤트 루프가 바인딩 됩니다. Ratpack은 Netty를 이용해 "이벤트 루프 그룹"을 생성하고 사용 가능한 CPU코어에 각각의 Single Thread로 동작하는 이벤트 루프를 바인딩 합니다. 각각의 이벤트 루프는 응용 프로그램에서 도착하는 non-blocking 네트워크 요청을 처리합니다. 즉, 하나의 비동기처리 요구에 대하여 하나의 CPU에 바인딩 되도록 하는 처리 방식을 통해 고성능 비동기 처리를 실현하려 하고 있는데, 최근 실시한 벤치마크에서는 단순 Hello World의 경우 32코어 머신에서 초당 1억 리퀘스트를 단일 JVM인스턴스로 처리 할 수 있는 것으로 알려져 있습니다.


참고 URL