HANCO

오픈소스 프로젝트 2차과제 본문

OSS/OSSP

오픈소스 프로젝트 2차과제

HANCO 2018. 1. 10. 16:33

오픈소스 프로젝트 2차 과제
==

## 공개 라이선스

#### 공개라이선스 이용률

**[표 1-1]** 자주 사용되는 공개SW 라이선스 TOP

<img src="https://user-images.githubusercontent.com/25076970/34637628-9839eee2-f2fd-11e7-821a-bf144e60e4a0.png">

#### 라이선스 3가지 정리

**1. BSD License:**
> **Note:** <br>
> - SW의 코드를 공개하지 않아도 되는 대표적인 공개 라이선스이다.
> - 미국 국민의 세금으로 지불한 미국정부의 재원으로 운영되어지는 라이선스이기 때문에 그들이 원하는 방식으로 소프트웨어를 사용하도록 만들었다.

**2. MIT License:**
> **Note:** <br>
> - The MIT License is a permissive free software license originating at the Massachusetts Institute of Technology (MIT). As a permissive license, it puts only very limited restriction on reuse and has, therefore, an excellent license compatibility. The MIT license permits reuse within proprietary software provided that all copies of the licensed software include a copy of the MIT License terms and the copyright notice. The MIT license is also compatible with many copyleft licenses, such as the GNU General Public License (GPL); MIT licensed software can be integrated into GPL software, but not the other way around.

**3. GPL**
> **Note:** <br>
> - GPL은 자유소프트웨어 재단에서 만든 프리 소프트웨어 라이선스이다.
> - GPL의 대표적인 예로 리눅스 커널을 들 수 있다.

###### GPL License 사용의 의무
> - 컴퓨터 프로그램을 어떠한 목적으로든지 사용할 수 있다. 다만 법으로 제한하는 행위는 할 수 없다.
> - 컴퓨터 프로그램의 실행 복사본은 언제나 프로그램의 소스 코드와 함께 판매하거나 소스코드를 무료로 배포해야 한다.
> - 컴퓨터 프로그램의 소스 코드를 용도에 따라 변경할 수 있다.
> - 변경된 컴퓨터 프로그램 역시 프로그램의 소스 코드를 반드시 공개 배포해야 한다.
> - 변경된 컴퓨터 프로그램 역시 반드시 똑같은 라이선스를 취해야 한다. 즉 GPL 라이선스를 적용해야 한다.
 

#### Node.js OSS의 역사

##### Node.js 란?

Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.

내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.

##### Node.js의 시작

2009년 Ryan Dahl은 플리커의 파일 업로드 진행 표시줄을 보았을 때, 파일이 얼마나 업로드되었는지 알기 위해서는 서버에 쿼리를 전송해야 한다는 점을 보고 조금 더 쉬운 방법을 찾다가 고안해 내었으며, 그가 일하던 Joyent라는 회사에서 개발 및 운영을 담당하고 있다.

최초 버전은 2009년 리눅스 기반으로 출시되었고, Inangural JSConf EU conference에서 Ryan Dahl의 발표 직후 국제적인 관심을 끌기 시작했다. 패키지 매니저인 npm은 2011년에 처음 소개되었다.

2011년 6월 마이크로소프트는 Joyent와 파트너십을 맺고 같은 해 7월 윈도용 최초 버전을 출시했다.

**[표 2-1]** Node.js 버전 별 출시일

<img src="https://user-images.githubusercontent.com/25076970/34637794-fb0c5b60-f300-11e7-83a3-13e654c894ed.png">

#### Node.js의 버그픽스

**[표 3-1]** Node.js 업데이트 및 버그픽스

<img src="https://user-images.githubusercontent.com/25076970/34637879-fe34a5f2-f302-11e7-828e-3830927a1598.png">

아래의 링크를 통해 Node.js의 모든 버그픽스를 확인할 수 있다.

<https://github.com/nodejs/node/labels/confirmed-bug>


## Git 사용방법

#### OSX에서의 깃의 사용방법

> Git은 Master저장소의 서버와 master저장소의 완전한 사본을 가지는 클라이언트 저장소로 구성되어진다.

##### Git 사용순서

1. 로컬 및 원격 저장소 생성
2. 로컬 저장소에 파일 생성 및 추가
3. 수정내역을 로컬 저장소에 제출
4. 파일 수정 내역 추적
5. 원격 저장소에 제출된 수정 내역을 로컬 저장소에 적용
6. master에 영향을 끼치지 않는 브랜치 생성
7. 브랜치 사이의 병합
8. 브랜치를 병합하는 도중에 충돌 감지

##### Git 다운로드

아래 링크에서 다운로드 받을 수 있다

<https://git-scm.com/>

<img src="https://user-images.githubusercontent.com/25076970/34637944-734bd0f8-f304-11e7-9a86-22112074164b.png">

> **Note:**
>
> Git의 세가지 상태
> 1. commited : 데이터가 로컬에 안전하게 저장되어짐
> 2. modified : 수정한 파일을 아직 commit 하지않은 상태
> 3. staged : 수정한 파일을 곧 commit 하겠다고 표시한 상태


#### Git 시작

git을 사용할 곳을 초기화하는 명령어 :
```
git init
```
git 상태를 확인하는 명령어 :
```
git status
```
현재 폴더에 있는 파일들을 git에서 사용함을 명시 :
```
git add --all
```
커밋 메시지 작성하기 :
```
git commit -m "test message"
```
원격저장소랑 연결 하기 :
```
git remote add origin master http://github.com/
```
브런치 생성하기 :
```
git branch joonyoung
```
사용할 브런치로 이동하기 :
```
git checkout joonyoung
```
원격 저장소에 파일 올리기 :
```
git push -u origin joonyoung
```

원격저장소 파일 가져오기 :
```
git pull
```

#### git , github, gitlab 특징

**1. Gitlab**

Gitlab은 Git의 원격 저장소 기능과 이슈 트래커 기능등을 제공하는 소프트웨어다. 설치형 Github라는 컨셉으로 시작된 프로젝트이기 때문에 Github와 비슷한 면이 많이 있다. 서비스 형 원격저장소를 운영하는 것에 대한 비용이 부담되거나, 소스코드의 보안이 중요한 프로젝트에게 적당하다.

>**Note:**
>
> - 설치형 버전관리 시스템 - 자신의 서버에 직접 설치해서 사용할 수 있다.
> - 클라우드 버전 관리 시스템 - gitlab.com을 이용하면 서버 없이도 Gitlab의 기능을 이용할 수 있다. 10명 이하의 프로젝트는 무료로 사용할 수 있다.
> - Issue tracker 제공
> - Git 원격 저장소 제공
> - API 제공
> - Team, Group 기능 제공

**2. Git**

프로그램 등의 소스 코드 관리를 위한 분산 버전 관리 시스템이다. 기하학적 불변 이론을 바탕으로 설계됐고, 빠른 수행 속도에 중점을 두고 있는 것이 특징이다. 최초에는 리누스 토르발스가 리눅스 커널 개발에 이용하려고 개발하였으며, 현재는 다른 곳에도 널리 사용되고 있다.

깃의 작업 폴더는 모두, 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하고 있으며, 완전한 형태의 저장소이다. 네트워크에 접근하거나 중앙 서버에 의존하지 않는다.

현재 주니오 하마노(Junio Hamano)가 소프트웨어 관리를 감독하고 있다. 깃은 GNU 일반 공중 사용 허가서 v2 하에 배포되는 자유 소프트웨어이다.

**[표 4-1]** Git 버전별 진화

<img src="https://user-images.githubusercontent.com/25076970/34639235-8dabf0ca-f31f-11e7-8efc-fffa9ac7003a.png" height="550px;">

**3. GitHub**

GitHub 는 웹 기반 Git 버전 제어 저장소 호스팅 서비스 입니다. 그것은 주로 컴퓨터 코드에 사용됩니다. Git의 모든 분산 버전 제어 및 SCM ( 소스 코드 관리 ) 기능을 제공하고 자체 기능을 추가합니다. 버그 관리 , 기능 요청 , 작업 관리 및 모든 프로젝트의 위키 와 같은 액세스 제어 및 여러 공동 작업 기능을 제공합니다.

GitHub는 공개 소스 소프트웨어 프로젝트를 호스팅하는 데 일반적으로 사용되는 동일한 계정 에 개인 저장소 와 무료 저장소 에 대한 계획을 제공합니다. 2017 년 4 월 현재, GitHub는 거의 2 천만 명의 사용자와 5 천 7 백만 개의 저장소를 가지고 있다고보고하고 있으며 세계에서 가장 많은 소스 코드 를 제공합니다.

#### Git Repository

Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공합니다.

>**Note:**
>
>1. 원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소입니다.
>
>2. 로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소입니다.

평소에는 내 PC의 로컬 저장소에서 작업하다가 작업한 내용을 공개하고 싶을 때에 원격 저장소에 업로드 합니다. 물론 원격 저장소에서 다른 사람이 작업한 파일을 로컬 저장소로 가져올 수도 있습니다.


## 참조 문서

[표 1-1]: <http://kossa.kr/>
[표 2-1]: <https://ko.wikipedia.org/wiki/Node.js#%EC%B6%9C%EC%8B%9C>
[표 3-1]: <https://github.com/nodejs/node/labels/confirmed-bug>
[표 4-1]: <https://ko.wikipedia.org/wiki/%EA%B9%83_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)>

- <http://kossa.kr/>
- <https://ko.wikipedia.org/wiki/Node.js#%EC%B6%9C%EC%8B%9C>
- <https://github.com/nodejs/node/labels/confirmed-bug>
- <https://ko.wikipedia.org/wiki/%EA%B9%83_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)>

#