Sunday, July 27, 2014

Jenkins 서버 설치 (CentOS 6.5 - 64 bit)

  1. Jenkins 서버 설치 전에 필요한 것
    1. CentOS 6.5 (64-bit)가 설치된 시스템 (또는 VM)
    2. Java 설치 (최소 1.7 버전 이상)
  2. 설치 절차
    1. YUM을 이용한 Jenkins 서버 설치
      1. sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
      2. sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
      3. sudo yum install jenkins
    2.  Jenkins 서비스 시작 또는 정지
      1. sudo service jenkins start/stop/restart
    3.  Jenkins의 웹 UI 화면 Access
      1. IE나 크롬 또는 Firefox 같은 웹브라우저를 오픈한 후 주소란에 IP 주소와 포트번호 8080을 입력하면 메인 페이지에 접속 가능 (예: http://192.168.2.15:8080) 
      2. 만약 접속이 안된다면 Firewall 설정을 다시 한 번 점검. Firewall 설정에 대해 잘 모른다면 iptables를 정지한 후 다시 한 번 접속. (예: service iptables stop)
  3. Source
    1. https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+RedHat+distributions

Jenkins 서버란?

Jenkins 서버란?
젠킨 서버는 Open Source CI (Continuous Integration) Tool로써 여기서 CI 란 팀의 구성원들이 작업한 내용을 정기적으로 통합하는 것을 의미합니다. 말이 약간 어려운데 쉽게 이야기하면 하나의 프로젝트를 여러 명으로 구성된 한 팀이 작업할 때 프로젝트를 리드하는 매니저가 일을 여러가지로 나눠서 팀멤버들한테 분배하고 팀멤버들은 각각 할당된 부분만 작업을 하게 됩니다. 그리고 팀멤버들은 자신이 담당해서 하고 있는 부분의 소스코드를 정기적으로 SVN과 같은 Version Control System에 Submit 하는데 이 각각의 팀멤버들로부터 Submit된 소스코드들을 정기적으로 통합하는 것을 CI라고 하고 이것을 시행해주는 프로그램을 CI tool이라고 합니다.

왜 사용하나요?
Jenkins 서버를 사용하는 이유는 여러 가지인데 제 개인적인 경험으로 봤을 때 가장 큰 이유는 아래와 같습니다.
  1. 프로젝트의 빌드가 정상적으로 되고 있는지 체크할 때
  2. 자동으로 유닛 테스트와 통합 테스트 (integration test)들의 정기적인 실행. 만약 테스트 결과에 문제가 있을 때 이메일을 통해 리포트
  3. SonarQube 같은 코드의 질을 확인할 수 있는 모니터링 시스템과의 연동으로 코드의 질을 조절 

위의 내용을 짧게 이야기하면 Jenkins 서버는 현재 진행 중인 프로젝트가 정상적으로 빌드가 되고 있는지를 정기적으로 체크해서 결과를 팀원들한테 알려주고 문제가 발생했을 때 조기에 알려줄 수 있게 해줌으로써 여러 팀 멤버들이 큰 문제없이 각자의 맡은 부분만을 작업할 수 있도록 도와줍니다. 또한 프로젝트 빌드시 자동으로 유닛 테스트와 통합 테스트를 실행해줘서 잘 못된 점이 있으면 알려주고 또한 현재 얼마만큼의 소스코드를 유닛 테스트가 커버하고 있는지 및 어떤 부분에 문제가 있을 수 있는지 등의 정보도 SonarQube와 같이 연동시 모니터링 할 수 있도록 도와줍니다.


Wednesday, July 16, 2014

WebRTC란?

WebRTC는 구글이 2011년에 릴리즈한 오픈소스 프로젝트로 쉽게 말해서 브라우저 상에서 별도의 추가적인 설치 없이 (플러그 인이나 익스텐션없이) Web-based Video Conferencing (화상회의/ 화상채팅)을 구현할 수 있게 하는 기술입니다. 여기서 중요한 사실은 별도의 추가적인 설치(Plug-in) 없이 작동한다는 점인데 이 점이 왜 중요하냐면 개발하는 쪽에서는 추가적인 개발이 없이 원천 기술을 무료로 사용할 수 있기 때문에 관련 사업을 시작하기가 좋고 (큰 추가적인 비용이 없이) 사용하는 쪽에서는 매번 사용할 때마다 팝업이 떠서 추가적인 소프트웨어를 설치해야 하는 귀찮음을 덜 수 있어서 편리합니다.

그렇지만 이런 WebRTC를 사업화하는데 여러 가지 문제가 있으며 아래는 그에 해당하는 리스트입니다.
1. 지원하는 브라우저 수의 한계: WebRTC는 구글이 주도하는 프로젝트이고 마이크로 소프트와 애플은 여러가지 이유로 현재 지원하고 있지 않습니다. (코덱 표준 설정에 대한 의견 불일치 등) 그리고 Firefox나 Opera도 지원을 하고 있지만 Chrome과 세부적인 부분에서 약간의 차이가 있거나 특정 기능의 지원이 안되는 경우가 있습니다.
2. Firewall 문제 해결: 구글에서 제공하는 WebRTC API와 node.js 를 이용하면 간단한 화상채팅 프로그램을 만들수 있지만 STUN이나 TURN서버 없이는 같은 네트워크 상에서만 사용이 가능하고 만약 다른 네트워크나 방화벽이 설치된 네트워크에 있는 컴퓨터에서 접속하려면 위에 이야기한 STUN/TURN 서버를 설치한 후 ICE candidate에 포함시켜야 합니다. 서버 구축은 어렵지 않으나 여러가지 네트워크 상황에서도 일정하게 동작하게 하는데는 (Availability) 많은 시간과 노력이 필요합니다.
3. Signaling: 구글에서 제공하는 WebRTC API는 Signaling 관련된 사항은 포함이 안되어 있기 때문에 시크널링을 어떻게 구현할 것인지도 해결해야할 큰 문제 중에 하나입니다.
4. 확장성 (Scalability): MCU(Multipoint Control Unit)없이 사용하는 WebRTC 어플리케이션은 Mesh call이기 때문에 하나의 화상회의에 참가할 수 있는 인원이 최대 10명 (구글 측에서 제시한 자료에 따르면)이지만 사실 상 유저의 컴퓨터 사양과 네트워크 상태에 따라 틀리며 7명만 넘어가면 화면이 깨지는 현상이 발생합니다. 이런 확장성 문제를 해결하기 위해서는 위에 언급한 MCU를 제작해서 포함시켜야 하는데 이 또한 많은 시간과 노력 그리고 기술이 필요합니다.

위와 같은 제약에도 불구하고 많은 장점을 가지고 있기 때문에 (코덱의 무료 사용 및 여러가지 웹컨퍼런싱기술 제공) WebRTC는 미래가 밝은 기술입니다.

WebRTC의 공식 웹사이트는 www.webrtc.org이며 관련 소스는 아래와 같습니다.
- WebRTC Application: https://apprtc.appspot.com
- Sample Source Code: github.com/GoogleChrome/webrtc

Tuesday, July 15, 2014

FOUC란?

FOUC는 Flash of Unstyled Content의 약자로 웹브라우저가 웹 페이지를 로딩할 때 일시적으로 외부의 CSS stylesheet이 적용되지 않는 컨텐트를 로딩하여 화면에 출력하는 현상을 의마하는 말입니다.

원인: 이 현상은 브라우저마다 틀리지만 보통 아주 짧게 진행되며 이 현상이 생기는 이유는 웹브라우저가 컨텐트를 로딩할 때 한 번에 모든 컨텐트와 관련 화일을 로딩하여 출력하는 것이 아니라 우선 순위의 컨텐트를 먼저 로딩하기 때문에 (그리고 로딩이 다 끝나기 전에 화면에 출력이 되기 때문에) 발생합니다.

해결방법: HTML 파일의 Body tag에 'unresolved'라는 pseudo class를 포함하면 이런 현상이 생기는 것을 방지할 수 있습니다.
<body unresolved>

Sources:
http://en.wikipedia.org/wiki/Flash_of_unstyled_content
http://www.polymer-project.org/docs/polymer/styling.html#fouc-prevention
http://ko.wikipedia.org/wiki/FOUC