블로그 이미지
Peter Note
Web & LLM FullStacker, Application Architecter, KnowHow Dispenser and Bike Rider

Publication

Category

Recent Post

2012. 10. 25. 16:31 Middleware, Cloud/WAS

하이퍼소닉은 애플리케이션 테스트용으로 사용하는 것으로 실 운영시에는 적은 메모리라도 아끼기 위하여 삭제하는 것이 좋다. 하이퍼소닉은 외부 접근이 안되므로 보안에 대한  설정은 없지만 운영들어 가기전에 삭제한다


  • deploy> 밑에서 ls *ds.xml 검색하면 hsqldb-ds.xml 파일이 나온다 
  • hsqldb-ds.xml 파일을 삭제한다 

하이퍼소닉을 제거한후 oracle을 사용한다면 다음과 같은 서비스에 설정을 변경하여 준다. 

  • deploy 밑에 oracle-ds.xml 파일을 만든다 
  • DefaultDS를 사용하고 있는 ejb2-timer-service.xml의 설정을 oracle로 변경한다
  • JMS를 사용하면 deploy/messaging/hsqldb-persistence-service.xml 파일을 지우고 동일한 oracle-persistence-service.xml 파일을 만든다
  • uuid-key-generator.sar에서 UUID 키 생성을 한다면 META-INF/jboss-service.xml 에서 DefaultDS를 변경한다 
만일 새로운 데이터베이스로 서비스를 전환했다면 

show tables in jbossdb; 로 사용하는 테이블들을 점검 한다 


posted by Peter Note
2012. 10. 25. 16:12 Middleware, Cloud/WAS

Java Messaging Service를 사용하지 않는 다면 다음의 파일 또는 내용을 제거 하여 자원(메모리, CPU) 소모를 예방한다


  • deploy/messaging 디렉토리 삭제
  • deploy/jms-ra.rar 파일 삭제
  • deployers/messaging-definitions-jboss-beans.xml 파일 삭제
  • conf/standardjboss.xml 파일에서 jms 관련 내용 제거 

메시징을 이용한다면 

  • deploy/messaging/destinations-service.xml 안에 <security>를 설정한다
  • conf/login-config.xml 파일에 <application-policy name="JMSRealm"> 이라는 새로운 application 정책을 만든다 
  • 마지막으로 deploy/messaging/messaging-jboss-beans.xml 안에 <bean name="SecurityStore">를 설정한다 


posted by Peter Note
2012. 10. 25. 16:02 Middleware, Cloud/WAS

▶ shutdown이나 twiddle이 JBoss의 내부 마이크로 커널과 통신하려면 JMX invoker를 사용한다.


  • deploy/jmx-invoker-service.xml 구성에서 org.jboss.invocation.Invocation 에 대한 인증 인터셉터를 추가한다
         <operation>
            <description>The detached invoker entry point</description>
            <name>invoke</name>
            <parameter>
               <description>The method invocation context</description>
               <name>invocation</name>
               <type>org.jboss.invocation.Invocation</type>
            </parameter>
            <return-type>java.lang.Object</return-type>
            <descriptors>
               <interceptors>
                  <!-- Interceptor to require authenticated users -->
                  <interceptor code="org.jboss.jmx.connector.invoker.AuthenticationInterceptor"
                     securityDomain="java:/jaas/jmx-console"/>
                  <!-- Interceptor that deals with non-serializable results -->
                  <interceptor code="org.jboss.jmx.connector.invoker.SerializableInterceptor"
                     policyClass="StripModelMBeanInfoPolicy"/>
               </interceptors>
            </descriptors>
         </operation>

해당 조건을 적용하면 단순 shutdown 명령이 내리지 않고 하기와 같이 한다

 bin> shutdown -S -s jnp://<IP> -u admin -p <admin 패스워드>

  • jnp 프로토콜 접속하는 JBoss 설치 IP (옵션)
  • -u 인증 admin 아이디 
  • -p admin 계정의 패스워드 



▶ HTTP Invoker 는 80 포트를 통해서 외부세계에서 JBoss의 JNDI, JMX invocation, EJB invocation등의 원격 접속을 허용한다. 


  • 80 포트는 애플리케이션을 요청하는 포트 이므로 HTTP Invoker는 아예 삭제를 한다
  • deploy/http-invoker.sar라는 단일 서비스를 디렉토리 몽땅 제거하면 서비스가 삭제된다





posted by Peter Note
2012. 10. 25. 15:40 Middleware, Cloud/WAS

JBoss 5.x에 대한 관리화면 폴더는 각 도메인안의 

  • deploy/jmx-console.war : JMX 콘솔
  • deploy/management : 웹 콘솔
두 디렉토리를 삭제하면 JMX 관리가 안됨. 보고 싶다면 보안을 설정한다

  • jmx-console.war/WEB-INF/web.xml에서 하기 security 테그의 주석을 제거한다 
<security-constraint>
     <web-resource-collection>
       <web-resource-name>HtmlAdaptor</web-resource-name>
       <description>An example security config that only allows users with the
         role JBossAdmin to access the HTML JMX console web application
       </description>
       <url-pattern>/*</url-pattern>
     </web-resource-collection>
     <auth-constraint>
       <role-name>JBossAdmin</role-name>
     </auth-constraint>
   </security-constraint>


  • JBossAdmin 권한을 가진 사용자만이 JMX 콘솔 사용이 가능하다 
  • 사전에 WEB-INF/jboss-web.xml 의 보안 도메인 링크가 하기와 같이 설정되어 있어야 한다
<jboss-web>
      <security-domain>java:/jaas/jmx-console</security-domain>
</jboss-web>

  • security domain에 대한 부분은 conf/login-config.xml에 하기와 같이 설정되어 있다
 <application-policy name="jmx-console">
    <authentication>
      <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule"
        flag="required">
        <module-option name="usersProperties">props/jmx-console-users.properties</module-option>
        <module-option name="rolesProperties">props/jmx-console-roles.properties</module-option>
      </login-module>
    </authentication>
  </application-policy>

  • conf/props 디렉토리 밑에 jmx-console-users.properties에 key=value로 admin을 정의 한다
  • conf/props 디렉토리 밑에 jmx-console-roles.propertiess에 하기와 같이 역할을 정의 한다
admin=JBossAdmin,HttpInvoker

  • management/console-mgr.sar/web-console.war/WEB-INF 디렉토리에서 web.xml 의 security 태그 주석을 제거하고 jboss-web.xml에서 java:/jaas/web-console를 java:/jaas/jmx-console 로 변경하면 똑같은 보안설정을 따르게 된다. 



posted by Peter Note
2012. 10. 24. 21:14 Testing, TDD/Tools, FitNesse

▶ Fit으로 테스트 했던 CalculateDiscount를 FitNesse Wiki에 넣어 보자 


  1. CalculateDiscount wiki 페이지를 만들어준다

  2. Excel을 이용하여  CalculateDiscount  표를 작성한다 (상단의 명칭은 java 클래스 명칭과 동일하게 작성한다)
 

  3. CalculateDiscount wiki 페이지에 excel 표를 Copy&Paste하고 [SpreadSheet to FitNesse] 포멧으로 바꾸고 [Save] 한다

  4. 기존에 만들어 두었던  CalculateDiscount java 컴파일 내역을 fitnesse.jar 파일 있는 곳에 복사한다

  5. [Test] 버튼을 클릭하여 테스트를 수행한다

  6. 결과를 확인한다



▶ Fit 과 FitNesse 응용하기 


  - Fit 방식을 이용하여 Maven에서 자동화 테스트 구현을 한다. 결과 result.html을 웹서버로 서비스하게 만들어 준다

  - FitNesse는 고객이 FrontPage로 들어와서 위키페이지 마다 [Test]를 클릭하여 결과를 직접 확인 하는 방법도 있다. 

posted by Peter Note
2012. 10. 24. 20:52 Testing, TDD/Tools, FitNesse

▶ FitNesse 를 설치하고 웹상에서 테스트하기 


  1. http://www.fitnesse.org/  로 들어가서 fitnesse.jar 파일을 다운로드 받는다

  2. 특정 디렉토리에 복사를하고 classpath 환경변수에 잡아준다. (안 잡을 경우 java -classpath에서 잡아줌)

  3. listen port를 지정하고 fitnesse 서버를 기동시킨다

  4. 브라우져에서 확인한다. FitNesse는 Wiki Web Server 이다. 여기에 Fit 테스트를 결합 시켰다.


  5. Main 페이지에서 왼쪽 메뉴에서 [Edit] 를 클릭한다
 

  6. Editing 페이지 하단에 >TestSample 이라고 입력하고 Save한다

  7. 화면의 하단의 TestSample[?] 에서 링크된 ? 를 클릭한
.
  8. TestSample Wiki 페이지가 나온다. 

  9. Excel을 이용하여 StressTest Column Fixture를 만든다.  (상단의 명칭은 java 클래스 명칭과 동일하게 작성한다) 

  10. TestSample Wiki 페이지 왼쪽 메뉴 [Edit] 클릭하여 들어간다. 
  11. 편집모드에서 상단에 fitnesse.jar 파일이 있는 위치정보를 넣어주고, Excel표는 Copy하여 Paste 한후에 [SpreadSheet to FitNesse] 버튼을 클릭한다. 그러면 Excel 포멧이 FitNesse 포멧으로 변경된다. 그리고 [Save] 한다. 


  12. 저장한 화면이 다음과 같이 나온다
 

  13. 왼쪽 메뉴 [Properties]에서 Test 속성을 체크하고 [Save] 한다


  14. StressTest.java 파일을 작성한다

  15. StressTest.java파일은 fitnesses.jar 파일이 있는 곳에서 컴파일 한다 

  16. 이제 모든 준비가 끝났다. 

    - 샘플 wiki 페이지를 만듦

    - 샘플 wiki 내용에 인수 테이블 포멧 Copy&Paste from Excel

    - Java Fixture를 만들어서 Fitnesse.jar 파일위치에서 컴파일

  17. 다음에 TestSample 페이지의 [Test] 버튼을 클릭한다

  18. 결과값이 자동으로 출력된다


한번의 스텝이 돌았다. 이제 FrontPage 메인에 또 다른 테스트 케이스를 > 를 이용하여 넣고서 첨부 할 수 있다. 

'Testing, TDD > Tools, FitNesse' 카테고리의 다른 글

[JMeter] 성능 테스트툴 간단 사용기-1  (0) 2012.10.26
[테스트 실습-3] FitNesse-2  (0) 2012.10.24
[테스트 실습-2] Fit-3  (0) 2012.10.23
[테스트 실습-2] Fit-2  (0) 2012.10.23
[테스트 실습-2] Fit-1  (1) 2012.10.23
posted by Peter Note
2012. 10. 23. 22:20 Testing, TDD/Tools, FitNesse

▶ Batch나 업무 프로세스를 타고 Fit Testing  (Action Fixture)

  - start   : 실행 fixture를 자동화할 클래스 명칭을 얻고 테스트를 시작한다

  - check : 메소드를 수행하여 값을 검증한다

  - enter  : 어떤 테스트도 하지 않고 void 메소드를 수행한다

  - press : 메소드를 수행하고 인수(argument)를 전달한다


  1. word로 위에서 부터 아래로 쭉 실행할 내역을 적는다 (start : BuyActions 란 명칭으로 주고 java파일도 동일하게 작성)

  2. java 파일을 하기와 같이 작성한다  

  3. java 파일 컴파일 하고, java fit.FileRunner TestBuyItems.htm result.html 수행한다

  4. 결과 result.html 을 열어본

▶ Action Fixture를 이용한 Chat Server 테스트 

  

  1. word에서 html 파일 만들기



  2. java로 Fixture 개발 (Fixture-ChatServerActions, 업무 모듈-ChatRoom, User, Room) 

  3. java 파일 컴파일하고, java fix.FileRunner TestChatServer.htm result.html 명령 수행하기 

  4. 결과  result.html 열어보기
 

▶ 예제 파일


TestCase-4.zip


TestCase-5.zip



▶ 참고 

  - Fit 의 Fixture 를 wiki에서 사용하는 방법 및 코드 

  - eclipse에서 Fit을 자동화 테스트 하고 싶을 경우 (luxoft)

  - eclipse FitRunner plug-ins 테스트 하기 


'Testing, TDD > Tools, FitNesse' 카테고리의 다른 글

[JMeter] 성능 테스트툴 간단 사용기-1  (0) 2012.10.26
[테스트 실습-3] FitNesse-2  (0) 2012.10.24
[테스트 실습-3] FitNesse-1  (0) 2012.10.24
[테스트 실습-2] Fit-2  (0) 2012.10.23
[테스트 실습-2] Fit-1  (1) 2012.10.23
posted by Peter Note
2012. 10. 23. 21:58 Testing, TDD/Tools, FitNesse

▶ 다수 인수에 대한 Fit Testing (Column Fixture)


  1. word에서 다음과 같이 fixture를 만들어 본다


  2. java 파일을 코딩한다 



  3. javac *.java 명령으로 컴파일 한다 

  4. java fit.FileRunner CalculateCredit.htm result.html 명령을 수행한다 

  5. result.html 파일을 열어본다 


▶ 인수값 열거형 Fit Testing (Column Fixture)


  1. word에서 열거를 위하여 콤마(,)를 사용한다. TestFirstPhone.htm으로 저장한다 

  2. java 코딩을 하기와 같이 한다


  3. java파일을 컴파일 한다

  4. java fit.FileRunner TestFirstPhone.htm result.html 수행한다 

  5. 결과를 열어본다


열거형등 다양한 타입에 대한 테스트를 수행해 볼 수 있겠다. 


▶ 예제 파일


'Testing, TDD > Tools, FitNesse' 카테고리의 다른 글

[JMeter] 성능 테스트툴 간단 사용기-1  (0) 2012.10.26
[테스트 실습-3] FitNesse-2  (0) 2012.10.24
[테스트 실습-3] FitNesse-1  (0) 2012.10.24
[테스트 실습-2] Fit-3  (0) 2012.10.23
[테스트 실습-2] Fit-1  (1) 2012.10.23
posted by Peter Note
2012. 10. 23. 20:55 Testing, TDD/Tools, FitNesse
▶ Test Framework 갖추기  

  - 형상관리 -> CI (빌드) -> 테스트 서버로 애플리케이션이 배포된 후 애플리케이션에 대한 자동화 테스트 수행

  - 테스트 서버에서 자동 테스트를 위한 Test Framework이 필요

    + DB schema의 최기화/원복 : DBA 하지 말고, DDL 가지고 테이블 관리 

    + 입력 파라미터 공급

    + 테스트 케이스에 대한 오류를 개발자 포털에 자동 등록 및 메일링 : 개발자 feedback 필요 (jira 자동 등록)

    + 테스트 서버 = HW/DB + Real Framework + Test Framework + 애플리케이션 + 테스트 코드 + 테스트 실행 stack이 필요함 


대부분 형상관리서버+빌드시스템까지는 구축하지만 적절한 Test Framework을 갖추는 것이 핵심이다. 



▶ 참조사이트

Using Fit Open Source Framework

Test Frameworks

Fitness


▶ Fit Test 하기 

  1. PC Local에 JDK 설치한다. 

  2. JDK bin 디렉토리는 환경변수 path에 설정한다. 

  3. Fitness를 다운로드한다. :  http://fit.c2.com/wiki.cgi?DownloadNow  -> JavaPlatform

  4. fit-java-1.1.zip파일 압축을 풀면 폴더안에 : fit.jar 파일이 있다. 

  5. fit.jar 파일을 환경변수에 classpath = .;<directory>\fit.jar  설정을 한다. (설정하지 않으면 java 수행시 -classpath를 늘 잡아준다)

  6. word를 열어서 다음과 같이 표를 만들어 .htm으로 저장한다 

  7. java 파일을 하기와 같이 만든다. (주의:htm파일 내역중 fixture명칭 CalculateDiscount 명칭과 java파일 명칭과 일치해야함)

  8. eclipse에 만든 *.java 파일을 TestDiscount.htm 파일이 있는 곳에 위치 시킨다. 예) d:/Test_framework/fit_testing/TestCase-1

  9. d:/Test_framework/fit_testing/TestCase-1 > javac *.java  명령으로 java 파일을 컴파일 한다. 
  10. d:/Test_framework/fit_testing/TestCase-1 > java fit.FileRunner TestDiscount.htm result.htm 명령을 수행한다.



  11. 결과 result.htm 파일을 열어본다. 

  12. 1000에서 결과값을 0.00 으로 기대했지만 50.0 값이 나왔고, 밑에도 50.51을 기대했지만 50.5가 나와서 amount라는 인수값을 discount()라는 메소드에 대입하였을 때 인수 테스트 2개에 오류 (2 wrong)가 있었음을 result.htm 결과 화면에 표현해 준다. 


▶ 결과 파일 


'Testing, TDD > Tools, FitNesse' 카테고리의 다른 글

[JMeter] 성능 테스트툴 간단 사용기-1  (0) 2012.10.26
[테스트 실습-3] FitNesse-2  (0) 2012.10.24
[테스트 실습-3] FitNesse-1  (0) 2012.10.24
[테스트 실습-2] Fit-3  (0) 2012.10.23
[테스트 실습-2] Fit-2  (0) 2012.10.23
posted by Peter Note
2012. 10. 22. 19:51 Testing, TDD
▶ 테스트의 일반적인 사항
  • 테스트 : 결함을 찾아 내는 것 (정치적으로 이용하게 되면 회비용 도구가 될 수도 있다)
  • QA : 기능상 정상 작동함을 증명 
  • 설계:개발:테스트 = 30:30:40 노력 분포도 
  • 테스트는 개발 초기에 수행
  • 1시간 이상 테스트에 몰두 하지 말라 (살충제 패러독스 : 결함에 내성이 생겨서 못찾는다. 쉬면서 또는 동료검토)
  • QC가 테스트와 비슷하고 QA와 테스트는 틀리다. 즉, QC & 테스트는 개발자나 PMO가 진행할 수 있다. 
  • UI 테스트 말고 핵심 로직에 대한 테스트를 얼마나 효과적으로 하는가가 중요함 
  • 단위 테스트 -> 통합 테스트 -> 시스템 테스트 -> 인수 테스트 -> 설치 테스트 : 단위 테스트가 제일 중요하다. 



'Testing, TDD' 카테고리의 다른 글

On Going Reliability Test란 무엇인가?  (0) 2012.08.17
posted by Peter Note
2012. 10. 21. 21:13 Middleware, Cloud/DBMS

org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Listener refused the connection with the following error:

ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

 )

        at org.apache.commons.dbcp.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:1549)

        at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1388)

        at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)



위와 같은 메세지가 나오면 다음과 같이 수정하여 Listener를 restart 시킨다. 


  • ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 이 메세지 구글링 해보면 lsnrctl services 수행해서 SID가 잘 나오는지 확인해 보라고 하는데 백날 해봐야 SID 안나오고 UNKNOWN 이라고 나온다. 
  • 그럼 listener.ora 파일을 열어보자. 하기와 같이 나올 것이다. 

SID_LIST_LISTENER =

  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (SID_NAME = CLRExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

  • 위의 문구를 하기와 같이 수정한다. 
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = XE)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (SID_NAME  = XE)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
  )

DEFAULT_SERVICE_LISTENER = (XE)

  • 서비스에서 Listener를 restart 해보고, lsnrctl services 명령어 날려보자. 하기 빨간색 문구가 새롭게 나온다. 
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0
         LOCAL SERVER
Service "XE" has 1 instance(s).
  Instance "XE", status UNKNOWN, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:3 refused:0
         LOCAL SERVER
The command completed successfully

기술적인 부분은 구글링해 보자.

'Middleware, Cloud > DBMS' 카테고리의 다른 글

MySQL 에 데이터베이스 만들고 테이블 만들기  (0) 2012.11.27
posted by Peter Note
2012. 10. 12. 17:45 Languages/JavaScript

드미트리 소스니코브의 JavaScript Core에 대한 내용을 간략히 요약해 보자. 




▶ 오브젝트 (객체, An Object)

  - 오브젝트는 한개의 프로토타입 오브젝트를 가지고 있으면서 프로퍼티들의 집합이다. 

  - 오브젝트의 프로토타입은 내부 [[Prototype]] 프로퍼티에 의해 참조된다.

  - [[Prototype]] 보다는 __<internal-property>__ 를 사용하나, 특별히 프로토타입 오브젝트는 __proto__ 프로퍼티 변수로 표시한다.


예)

  var foo={

          x: 10,

          y: 20

   }

   해당 객체에는 3개의 프로퍼티가 존재하게 된다.

 



▶ 프로토타입 체인


  - 프로토타입 체인은 상속/공유되는 프로퍼티들의 구현에 사용되는 객체들의 유한 연결이다. 

  - ECMAScript는 자바와 같은 일반적인 class-based 상속이 아니라 prototype chain을 통하여 상속은 한다. 이를 위임형 상속(delegation based inheritance) 또는 프로토타입형 상속(prototype based inheritance)이라 한다. 

  - 이는 ECMAScript에는 class라는 개념이 없기 때문이다. 속성(프로퍼티)/메소드등을 동적으로 할당할 수 있기 때문에 class정의 자체가 필요없음

  - 예로 b, c의 공통영역에 a 객체를 저장하면, b, c는 자신에게 추가적인 프로퍼티와 메소드를 저장할 수 있는 것이다.  


  - b가 calculate 메소드를 찾아가는 방법 : b 객체안에 메소드가 없을 경우, prototype chain을 거쳐서 찾는다. 메소드를 찾는다. 찾지 못할 경우 undefined 값이 리턴된다.  (최상위 오브젝트 Object.prototype 값은 null 이다.) 

  - 주의 할것중 상속하여 사용시 this는 원래 객체를 가르킨다. 

  - 예로 this가 가르키는 객체로 this.y 는 b, c 객체이고, this.x는 a 객체를 가르킨다.  



▶ 생성자 (Constructor)


  - 생성자를 통해 객체를 생성시 유용한 것들이 있다. 

생성자를 사용하면 펑션의 prototype 프로퍼티가 <생성자 함수명칭>.prototype 객체를 가르킨다.  (그림 3.A)

예로 constructor function을 사용하여 b, c에 생성한 객체의 주소를 할당하면 b, c의 __proto__는 Foo.prototype 객체를 참조하게 된다. Foo.prototype 객체의 constructor는 원형의 constructor function 인 Foo를 가르키게 된다.

* 참조 : 자바스크립트의 new 의미 (http://zero.diebuster.com/zero/?p=36)



그림으로 그리면 다음과 같다 


  - Foo 자신의 __proto__는 Function.prototype 을 갖는다. 

  - Foo.prototype 오브젝트의 constructor는 자동 생성되어 Foo를 참조한다

  - Foo.prototype은 b, c 오브젝트의 prototype에 참조되는 Foo의 프로퍼티이다. (프로퍼티에 .x .calculate가 붙으면서 별도 객체가 되었다)


▶ Execution Context Stack

  - runtime program execution에 대해서 알려면 ECMAScript의 실행컨텍스트스택의 동작방식을 알아야 한다 

  - 3가지 타입 존재 : global code, function code, eval code 

  - 3가지 code는 execution context 인스턴스안에서 검증되어 진다. 

  - global context는 1개만 있고, function과 eval execution context들이 여러개 있게 된다. 만일 function이 호출되면 function execution context안으로 들어가 function code가 검증되어 진다. eval function은 특별히 eval execution context안에 들어서 eval code를 검증한다.  

  - Execution Context(EC)는 Stack에 담겨서 EC1 -> EC2 로 호출할 때마다 자기자신은 caller와 callee가 되어 코드 끝까지 수행이 되는 것이다. 

  글로벌 EC가 최소 caller가 되어 다음 foo(10) EC callee를 활성화 하고, foo(10) EC가 caller 되어 foo(20) EC callee를 활성화 하는 식으로 옮겨가는 구조를 Stack안에 구현되어 수행되는 것이다. 이른 execution context stack이라 한다. 


  - ECMAScript의 코드 동작방식에서 Global EC는 하나가 생성되어 있고, 펑션 EC는 Stack이 넣어져서 수행되고 완료되면 다시 Stack에서 빠지게 된다. 

  - 모든 EC를 Object로 간주되고, EC안의 code를 수행하는 주체가 된다. 



▶ Execution Context


  - EC는 context상태를 저장하기 위한 프로퍼티와 관련 코드 수행 경로 추적을 위한 프로퍼티등을 가지고 있는 단순 객체(오브젝트)이다.  

  - Variable Object (VO)는 EC와 관련된 scope of data 이다. (A variable object is a scope of data related with the execution context.)

  - 변수(variable)과 펑션선언(function declaration)을 저장한다. function expression은 저장하지 않는다. 



baz는 function expression이어서 Global Variable Object 에 저장되지 않는다. 


  - Activation Object (AO)는 Function context에서의 Variable Object이다. 

  - caller에 의해 function context가 활성화 되면 activation object가 생성되고 function이 호출된다. 

  - 호출시에 arguments객체-indexed map-에 파라미터 값를 담아서 넘겨준다.

  - activation object도 variable object이므로 variable, function declaration, 일반 파라미터, arguments 객체를 저장한다. 




▶ Scope Chain


  - 스코프 체인은 컨텍스트의 코드를 표현하는 식별자(identifiers)를 찾기위한 오브젝트 목록이다. (A scope chain is a list of objects that are searched for identifiers appear in the code of the context)

  - 규칙인 prototype chain과 동일하다. 

  - 즉, 자신의 스코프에서 variable/activation object를 못찾으면 부모의 VO/AO를 찾는다.

  - 스코프 체인은 일반적으로 부모 VO들의 목록(list)이다. 

  - context입장에서 식별자는 variable, function declaration, formal parameter들의 명칭이다. 


  - scope chain은 __parent__ 내장 프로퍼티로 연결된다. 또는 [[Scope]]로 나타내기도 한다.

이를 통해서 내부의 펑션이 외부의 변수 값을 참조할 수 있게 된다. 

반대로 만일 내부 펑션이 외부로 리턴되어 부모가 해당 펑션을 활성화하여 VO를 사용한다면 어떻게 될까? 요건 Closure 에서...




▶ Closure


  - ECMAScript에서 펑션은 일급 객체이다. (function is the first-class object)

  - 이말은 function을 다른 function에 argument로 전달 할수 있다는 것이다. - funargs- functional arguments라고 함

  - 또한 function을 리턴 할 수도 있다. functional value 라고 한다. 

  - funarg 문제는 closure 개념으로 풀어간다. 

  - Closure는 좀 더 상세하게 다른 쳅터에서 다룬다. 


▶ This 

  - This 값은 execution context와 관련을 맺는 특별한 오브젝트이다. 그래서 context object라고 불릴 수도 있다. 

  - 즉, an object which context the execution context is activated. 

  - this 값은 execution context의 프로퍼티이지 VO의 프로퍼티가 아니다. ( a this value is a property of the execution context, but not a property of the variable object.). 즉, this는 scope chain에 참여하지 않는다. look up 대상이 아니라는 것이다.

  - this 값은 caller에 의하여 제공받는다. 즉 EC1 -> EC2를 호출할때 EC1이 caller가 도고 EC2안에 this가 있다면 EC1의 오브젝트가 되는 것이다. 

  - 좀 더 자세한 사항은 다른 쳅터에서 다룬다. 


posted by Peter Note
2012. 9. 20. 00:48 Git, GitHub

SVN에 대하여 잘 설명해 놓은 글이 있네요. Branch와 HEAD, revision에 대한 내용등과 merge할때 상황별 정책도 정리해 놓았네요. 


강추 : http://ghostsheep.tistory.com/9

'Git, GitHub' 카테고리의 다른 글

[Git] commit 사용하기  (0) 2012.11.26
[Git] diff 사용하기  (0) 2012.11.22
[Git] Ubuntu 에 설치하기  (0) 2012.11.14
[Git] Branch 전략  (1) 2012.11.14
[Git] 레퍼런스 모음  (0) 2012.09.10
posted by Peter Note
2012. 9. 13. 16:25 HTML5, CSS3


대학교 다닐때 학교의 홈페이지를 방학동안 200만원 받고 프로젝트를 하던 생각이 난다. 그땐 웹에디터도 없던 터라 Notepad에서 HTML을 직접 코딩하여 화면을 구성하였다. 그러기 위해 후배들 5명가량을 알바시키면서 100만원을 벌어 5개월짜리 종일반 학원을 다니던 생각이 난다. 그 당시에는 장기 컴퓨터교육 기관이 거의 없고, 정부 지원도 없던 때였다. 


이제 세월이 흘러 HTML은 HTML5 라는 훨씬 간편하며 컨텐트에 집중할 수 있는 마크업 랭귀지로 발전하고 있다. 결국 모자람과 혼합된 기능들이 주변 기술의 발전에 따라 분리되고 자신의 일에 집중할 수 있는 SOLID의 SRP(Single Response Principle) 처럼 HTML5 도 발전한것 같다. 


OLD HTML = HTML5 + CSS3 + JavaScript


  - HTML5 = Content에 집중

  - CSS3 = Presentation에 집중

  - JavaScript = Action에 집중



▶  HTML5에 대한 기본사항을 알아보자 

  - Flash를 대체하자 : HTML5의 기능 간단 목록

  - HTML5 역사를 보자 : 그림과 함께 기능이 되는 브라우져 테스트 내역이 잘 설명되어 있다

  - HTML5 배우기 : 블로그 중에서 가장 잘 정리된 듯하다. 

  - HTML5 + CSS3 : HTML5로 slide를 만듦

  - Essentail : HTML5 기능에 대해서 코드와 결과를 보자 (html5demo)

  - HTML5 API : API들에 대하여 기능별 상세 코드 설명 (좀 더 심플)



▶ HTML5로 무얼 할 수 있을까?

  - 게임만들기 : 자바스크립트와 적절히 사용해야 한다

  - Real-time message : websocket에 대한 이야기 

posted by Peter Note
2012. 9. 11. 21:42 HTML5, CSS3


HTML5 = Content

CSS3 = Presentation

공식으로 화면을 디자인 하자 



▶ CSS3를 공부하기 위하여 먼저 뒤진 곳은 SlideShare의 소개자료들이다. 


  - Getting start with CSS3 : 코드와 함께 결과 화면을 같이 배치하여서 쉽게 이해 가능

  - Practical Introduction : 좀 재미나게 디자인된 소개자료 

  - Quality Development : CSS3로 좋은 품질의 화면만들기 예제와 결과 화면 설명

  - CSS3 Secrets : 간과하기 쉬운 비밀들을 풀어서 결과 화면과 같이 보여줌 

  - CSS3 Gradients : CSS3 그라디언트 효과에 대한 모든것 



▶ CSS3 고급 기능 다루기


  - 웹폰트 (Web Typography) : WordPress 스킨을 입히다 알게된 font-face

  - 색깔 표현 : 색 표현의 모든 것을 설명

  - 3D 표현 : CSS3가 못하는게 없구만 (예제와 함께 코드를 설명하고 있음)

  - CSS3 for WebKit : 강화된 기능에 대한 설명

  - CSS3와 Selectors : selector에 대한 설명 

  - Border Radius : 코드와 예제 설명



▶ 웹 애플리케이션 적용하기 


  - iPhone에 CSS3 적용 : 발표용 자료

  - 웹앱할때 성능을 고려한 개발 하자 

  - HTML5 와 CSS3 이용해서 웹사이트 구축하기

  - Responsive Design (반응형 디자인) 만들기 : 기기에 따른 형태 변화를 위한 viewport에 대한 설명

  - 반응형 디자인에 대한 자세한 설명 : 그래픽적인 설명이 돋보임


CSS3 신통방통한 넘이다. 역사가 2005년부터 꽤 많이 성숙했다. Progressive Enhancement (점진적 향상) 에 대한 의미와 함께 HTML5 + CSS3 + JavaScript에 대한 깊이 있는 이해와 방향 감각이 필요하겠다. 


posted by Peter Note
2012. 9. 11. 19:01 Protocols



MQTT Broker인 OSS Mosquitto를 설치하고 Client 프로그램에서 push 내역을 받아서 display 하는 Prototyping을 해보자


▶ MQTT 준비하기

  1. MQTT Broker 설치 :  http://mosquitto.org/download/  개발버전은 윈도우 binary  설치, 운영버전은 Linux binary 설치 
    • 윈도우 버전으로 설치하면 service로 등록된다 (Mosquitto Broker)
    • Linux는 mosquitto 계정을 만들고 root에서 설치를 한다 (자동으로 mosquitto 계정을 찾아 설치해 준다)
  2. mosquitto 운영 : 모스퀴토 브로커(서버)를 기동하는 방법을 알아보자
    • http://mosquitto.org/man/mosquitto-8.html  모스퀴토 서버의 기동 방법과 시스템 환경변수의 종류 설명
    • mosquitto 의 환경변수는 $SYS topic등록으로 client가 받아 볼 수 있다
    • + # 기호를 통해 topic등록 가능
    • Bridge 설정을 통해서 multi broker 설정이 가능 (mosquitto.conf)
    • 메세지에 대한 file writing을 할 수 있음 
    • 특정 host, ip 접근 제어가 가능 
    • https://launchpad.net/mosquitto  버그 레포팅 사이트
  3. MQTT client 라이브로리 선택

▶ MQTT 설치하기 

  1. 아키텍쳐 설명 
    1. 네이버 자료 : http://helloworld.naver.com/helloworld/1846
    2. 성능 : ftp://public.dhe.ibm.com/software/kr/ik2012/mqtt.pdf
  2. 설치 : mosquitto broker 설치 
    1. 설치하기 : http://ceit.uq.edu.au/content/installing-mosquitto-under-centos
    2. /etc/sudoers 설정 : sudo su 명령 실행이 안될 경우 셋팅한다 
    3. [root@www etc]# cat sudoers | grep mosquitto
      mosquitto ALL=(ALL) ALL

    4. bin :  /usr/sbin/mosquitto
  3. 기동 : mosquitto 계정 접속 

           > sudo su

           > ./startMqtt.sh

  4. 결과 확인 

[root@www mosquitto]# netstat -na | grep 1883
tcp 0 0 0.0.0.0:1883 0.0.0.0:* LISTEN
tcp 0 0 :::1883 :::* LISTEN
[root@www mosquitto]# ps -ef | grep mosquitto
root 2641 2467 0 14:43 pts/0 00:00:00 su - mosquitto
504 2676 1 0 14:44 pts/0 00:00:00 /usr/sbin/mosquitto -d -c /etc/mosquitto/mosquitto.conf
root 2680 2664 0 14:44 pts/0 00:00:00 grep mosquitto


   5. 환경설정 

  • /etc/mosquitto/mosquitto.conf 
  • wildcard : +  #

   6. Client

 

'Protocols' 카테고리의 다른 글

Advanced Message Queueing Protocol (AMQP) 란 무엇인가  (0) 2012.11.28
MQTT Push  (0) 2012.09.10
posted by Peter Note
2012. 9. 10. 22:56 Languages/JavaScript



지난달 KOSTA 교육기관에서 "자바스크립트 디자인 패턴" 이라는 강의를 들었다. 하이브리드 웹앱을 배우면서 자바스크립트를 다시 들여다 보아야 겠다 생각하고 듣게 되었는데 자바스크립트가 이렇게 신선한 놈인줄 첨 깨달았다. 

예전엔 그냥 화면에 애니메이션 효과주는 그저그런 스크립트어로만 생각했는데 파면 팔수록 새로운 개념과 접근법으로 OOP를 실현하고 있음에 감탄을 유발시킨다.

 


1) 자바스크립트 기본을 알고 가자

  - 지돌스타님의 블로그 :  http://blog.jidolstar.com/790  연재글이 꽤 많다. 초보 OOP 개발자가 보기에 만만찮다. 

  - 드미트리소스니코브의 블로그 :  http://dmitrysoshnikov.com/ecmascript/javascript-the-core/#an-object 현재 페이스북 엔지니어 같다. 이 아저씨 고수다. 그래픽적으로 개념을 잘 설명해 주고 있다. 이 아저씨껀 다 읽어 보자. 쥑인다.


2) 자바스크립트 디자인 패턴을 본격적으로 보자

  - HTML 문서 :  http://addyosmani.com/resources/essentialjsdesignpatterns/book/

  - Design Patterns for Scalable JavaScript Application (PDF)

  - Pro JavaScript Design Patterns (PDF)


짬짬이 자바스크립트 디자인 패턴 블로그를 써야 겠다. 


posted by Peter Note
2012. 9. 10. 17:22 Git, GitHub


▶ Git 강좌

     

     


▶ Git Branch를 통하여 프로젝트를 관리하는 방법 


▶ Git 명령어 CheatSheet (Good!)
  • Git Cheat Sheet : Flash 기반으로 각 영역을 클릭하면 명령어 종류와 설명이 나옴


▶ Git Tools


'Git, GitHub' 카테고리의 다른 글

[Git] commit 사용하기  (0) 2012.11.26
[Git] diff 사용하기  (0) 2012.11.22
[Git] Ubuntu 에 설치하기  (0) 2012.11.14
[Git] Branch 전략  (1) 2012.11.14
SVN에 대하여 이해하기  (0) 2012.09.20
posted by Peter Note
2012. 9. 10. 13:37 Protocols



모바일 폰에서 Push 통신을 하기 위한 방법에는 C2DM, MQTT, Node.js등이 존재한다. 여기서 MQTT를 예전 프로젝트에서 진행해 보았는데, 참조하자. 시간이 허락된다면 C버전으로 되어 있는 MQTT Broker 서버를 Java 버전으로 개발해서 OSS(Open Source Software)로 공개하고 싶다. 자 그럼 MQTT의 세상속으로 빠져보아요~~~


MQ Telemetry Transport

MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport. It is useful for connections with remote locations where a small code footprint is required and/or network bandwidth is at a premium.



MQTT에 대해 이해하기 



MQTT 소프트웨어 참조 방법


MQTT Broker Java 버전을 만들기 위해한 스터디


MQTT Prototyping 해보기 

'Protocols' 카테고리의 다른 글

Advanced Message Queueing Protocol (AMQP) 란 무엇인가  (0) 2012.11.28
MQTT 사용하기 - 1  (1) 2012.09.11
posted by Peter Note




결핍은 새로운 가능성을 만들어 낸다. 대기업처럼 왠만한 것은 갖추어진 집단에서 과연 새로운 가능성을 만들어 낼 수 있을까 라는 생각마저 든다. 그래서 애플이나 구글의 조직은 작은 단위로 팀을 나누어 마치 스타트업 기업처럼 움직인다고 하니 그부분에서 이해가 간다. 


오늘 에버노트의 기업환경 기사를 읽으며 새로운 Enterprise Social Network 서비스인 Yammer를 알게되었다. 그래서 바로 인큐베이팅 그룹 멤버들끼리 Private  소셜 네트워킹을 해보자는 의도에서 바로 신청을 했다. 


  - Facebook처럼 얘네도 청록색맹 끼가 있다. Facebook과 같이 모든 이에게 노출되는 것이 아니라 회사의 @xxx.co.kr 로 그룹이 된다. 즉, 한 회사(Enterprise)나 그룹에서만 사용 할 수 있다. 

  - 인큐베이팅 멤버가 10명이 넘지 않아 우리는 google application에서 등록하여 gmail을 사용하고 있는 것을 등록했다. 예) xxx@yuwin.co.kr 

  - PC버전-Adobe Flex Air 애플리케이션, Android/iOS 앱등이 존재하여 다양한 기기에서 Private SNS를 할 수 있다. 

  - 기능으로 파일첨부하여 메세지 보내기, 실시간 채팅, 새로운 부서나 그룹을 만들어 자유로인 그룹핑을 할 수 있다. 


아 이런게 있어으면 좋겠다 하는 결핍을 메워주는 좋은 서비스로 보여지는데, 우선 멤버들끼리 사용해 보고 Feedback을 받아 보아야 겠다. 



▶ 운영하고 있는 인큐베이팅 모임의 Yammer PC 버전 사용 화면

  - 그룹 SNS

  - 문서파일 공유

  - 설문조사

  - 칭찬하기

  - 질문&응답

  - 이벤트


등의 서로 특색있는 UI를 메세지박스에서 보여준다. 
iPad에서의 UX 경험은 PC보다 좀 더 색다르고 재미있다. 




▶ 지원하는 기기


posted by Peter Note