Skip to content

moon201595/oss_git_example

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

오픈소스소프트웨어 강의 내용 정리 by 201595 문준혁

오픈소스 로고

전남대학교 인공지능학부 2025학년도 2학기 오픈소스소프트웨어(SAI0003-2) 강의 요약 및 학습 정리


♧ 강의 개요

교과목명: 오픈소스소프트웨어(SAI0003-2) 담당교수: 최광훈 강의시간: 화1목1 강의실: AI융합-301 학점: 3.0

♧ 수업 목표 및 역량

이 과목은 3가지 목표를 지향합니다:

  1. 오픈소스소프트웨어 개발 기초
    • 소스코드 버전 컨트롤
    • 패키지 관리
    • 프로젝트 빌드
  2. 애자일 기반 개발 방법론
    • 짝 프로그래밍
    • 테스트 주도 개발
    • 클라우드 기반 데브옵스
  3. 자기주도 학습 능력
    • 새로운 개발환경 적응
    • 협력적 소프트웨어 개발 주도
역량 세부 목표
컴퓨팅사고 함수형 프로그래밍 언어 스타일 익히기
융합 LLM/ChatGPT를 새로운 프로그래밍 학습에 활용
글로컬 Git/Github를 통한 협업 방식 학습
문제해결능력 오픈소스 소프트웨어 기본 개념과 도구 습득

♧ 수업 방법

플립러닝 방식으로 진행:

  • 사전 동영상 학습
  • 매 강의 시작 시 10분 퀴즈
  • 요약 강의 및 연습문제 풀이

♧ 평가 방법

  • 중간고사: 30%
  • 기말고사: 40%
  • 개별과제: 20%
  • 수업참여도: 10%

참고: 모든 시험은 지필고사로 진행되며, 개별과제는 주로 프로그래밍 과제입니다.

♧ 주요 교재

  • 주교재: 별도 교재 없이 강의 자료 사전 배포
  • 부교재: Haskell MOOC - Joel Kaasinen & John Lang
  • 참고자료: YouTube 강의



Week 1-2: 오픈소스소프트웨어 개요

♧ 오픈소스 소프트웨어 정의

오픈소스 소프트웨어란 소프트웨어 저작권 소유자가 모든 사람에게 소스 코드를 게시, 사용, 복사, 수정 및 배포할 권리를 부여한 소프트웨어.

♧ 상용 SW vs 오픈소스 SW 비교

주요 차이점

  • 라이선스 방식 - 상용 SW: 개별 이용허락 (EULA) - OSS: 일괄 사전 이용허락
  • 비용 - 상용 SW: 로열티 지급 필요 - OSS: 비용 부담무료
  • 소스코드 - 상용 SW: 바이너리만 제공 - OSS: 소스코드 공개
  • 수정 권한 - 상용 SW: 복제, 배포, 수정 불가 - OSS: 복제, 배포, 수정 허용
구분 상용 소프트웨어 오픈소스 소프트웨어
라이선스 개별 이용허락(EULA) 일괄 사전 이용허락
비용 로열티 지급 무료
소스코드 바이너리만 제공 소스코드 공개
수정권한 수정 불가 수정 허용

♧ 주요 기업의 오픈소스 프로젝트

글로벌 기업들의 OSS 기여:

♧ 오픈소스 라이선스 비교

주요 라이선스별 특징

라이선스 상용SW 연동 수정시 공개의무 특허보호
GPL 2.0
LGPL
MIT/BSD
Apache 2.0
MPL 1.0/1.1

라이선스 특징 상세

  1. GPL (GNU General Public License)
    • 강력한 카피레프트
    • GPL 코드와 링크된 소프트웨어는 전체가 GPL을 따라야 함
  2. LGPL (GNU Lesser General Public License)
    • 라이브러리 수준에서 링크 허용
    • 수정한 부분만 공개하면 됨
  3. MIT/BSD License
    • 매우 자유로운 라이선스
    • 상업적 이용 가능



Week 2-1: 버전 관리 개요

♧ 왜 버전 관리 시스템이 필요한 이유

버전 관리 없이 작업하면:

  • 단순 백업 복사본 생성 (파일명_v1.doc, 파일명_v2.doc)
  • 파일명에 버전 번호나 날짜 추가
  • 공유 폴더에서 동시 편집으로 인한 충돌

문제점: 파일 충돌, 변경 이력 추적 어려움

♧ VCS (Version Control System)의 핵심 기능

  1. 체크인/체크아웃: 파일 수정 이력 관리
  2. 브랜치: 별도 개발 라인 생성
  3. 머지: 브랜치 간 변경사항 통합
  4. 충돌 해결: 동시 수정 시 충돌 처리
  5. 태깅: 특정 버전에 라벨 부여 (Release 1.0)

♧ VCS 종류 비교

중앙집중식 VCS

  • 특징: 하나의 중앙 저장소
  • 예시: CVS, SVN
  • 장점: 단순한 구조, 관리 용이
  • 단점: 중앙 서버 의존성, 오프라인 작업 제한

분산형 VCS

  • 특징: 개별 로컬 저장소 보유
  • 예시: Git, Mercurial, Darcs
  • 장점: 오프라인 작업 가능, 빠른 속도
  • 추가 기능: fork, pull request

♧ VCS 워크플로우 예시

Joe와 Sue의 협업 시나리오:

  1. Joe와 Sue가 동일한 파일 r3를 체크아웃
  2. Joe: -Eggs, +Cheese 수정
  3. Sue: -Eggs, +Hot Dog 수정
  4. Joe가 먼저 커밋하여 r4 생성
  5. Sue는 충돌로 인해 커밋 불가 ⚠️

충돌 해결 방법:

  • Sue의 변경사항을 Joe의 r4에 재적용
  • Joe의 변경사항을 Sue의 것으로 덮어쓰기

충돌 해결 개념도

♧ 태깅 (Tagging)

특정 리비전에 라벨을 부여하여 쉽게 참조할 수 있게 함

  • 예시: r4Release 1.0
  • 중요한 버전이나 마일스톤에 의미있는 이름 부여

♧ 실제 사례: Windows 개발

Microsoft Windows Media Player 11과 Internet Explorer 7 통합:

  • Forward Integration (FI): 브랜치에서 메인으로 통합
  • Reverse Integration (RI): 메인에서 브랜치로 역통합

FI와 RI 개념도




Week 2-2: Git

♧ Git 개발 배경

개발자: Linus Torvalds (Linux 커널 창시자) 목적: Linux 커널 공동 개발을 위한 도구 특징: 분산 버전 관리 시스템

♧ Git의 4가지 영역

  1. Workspace (작업 디렉토리)
    • 실제로 작업 중인 파일들
  2. Index/Stage (스테이징 영역)
    • 다음 커밋에 포함될 파일들
  3. Local Repository (로컬 저장소)
    • 로컬에 커밋된 파일들
  4. Remote Repository (원격 저장소)
    • GitHub 등 원격 서버에 푸시된 파일들

Git의 4가지 영역 개념도

♧ 주요 Git 명령어

저장소 초기화 및 복제

git init # 로컬 저장소 초기화
git clone <repository-url> # 원격 저장소 복제

파일 추가 및 커밋

git add <filename> # 특정 파일을 스테이징
git add . # 모든 변경 파일을 스테이징
git commit -m "메시지" # 커밋 생성
git commit -a # 수정된 모든 파일 자동 add + commit

원격 저장소 연동

git remote add origin <url> # 원격 저장소 추가
git push origin main # 로컬 → 원격 업로드
git fetch origin # 원격 → 로컬 다운로드 (병합 X)
git pull origin main # fetch + merge 동시 실행

상태 및 이력 확인

git status # 현재 상태 확인
git log # 커밋 히스토리 확인
git diff # 변경사항 비교
git diff HEAD # 워크스페이스와 최신 커밋 비교

♧ Git 워크플로우 상세

단계별 데이터 흐름:

  1. git clone - 원격 저장소를 로컬로 복제
  2. git add - 워크스페이스에서 스테이징 영역으로
  3. git commit - 스테이징 영역에서 로컬 저장소로
  4. git push - 로컬 저장소에서 원격 저장소로
  5. git fetch - 원격 저장소에서 로컬 저장소로 (병합 X)
  6. git merge - 가져온 변경사항을 현재 브랜치에 병합
  7. git pull - fetch + merge를 한 번에 실행

Git의 4가지 워크플로우 개념도




Week 2-3: GitHub, Fork, Pull Request

♧ GitHub란?

GitHub은 Git 기반의 소셜 코딩을 위한 소스코드 호스팅 서비스입니다.

주요 기능:

  • Fork, Pull Request, Code Review 기능
  • Issue 추적 및 프로젝트 관리
  • 협업을 위한 소셜 네트워킹

♧ Fork & Pull Request 워크플로우

협업 과정 (6단계)

  1. Fork: 원본 저장소를 내 계정으로 복사
  2. Clone: Fork한 저장소를 로컬로 가져오기
  3. Branch: 새로운 기능을 위한 브랜치 생성
  4. Commit: 로컬에서 변경사항 커밋
  5. Push: Fork한 저장소에 변경사항 업로드
  6. Pull Request: 원본 저장소에 변경사항 제안

Fork & Pull Request 개념도

실제 협업 시나리오

1.Fork한 저장소 클론

git clone https://github.com/내아이디/oss_git_example.git

2.원본 저장소를 upstream으로 추가

git remote add upstream https://github.com/kwanghoon/oss_git_example.git

3.최신 변경사항 가져오기

git fetch upstream

4.충돌 해결 후 리베이스

git rebase upstream/main

5.내 Fork에 푸시

git push origin main

♧ 코드 리뷰 문화

Pull Request의 장점:

  • 코드 품질 향상: 동료 검토를 통한 버그 발견
  • 지식 공유: 팀원 간 기술 및 도메인 지식 공유
  • 표준화: 일관된 코딩 스타일 유지

리뷰 방법:

  • 라인별 댓글을 통한 구체적 피드백
  • 전체적인 설계 및 아키텍처 검토
  • 테스트 코드 및 문서화 확인

♧ 실습 예제: oss_git_example

과제: https://github.com/kwanghoon/oss_git_example을 fork하여 본인의 원격 저장소를 만들고, 이를 로컬로 가져와 수정한 다음 다시 올린 후 kwanghoon의 저장소에 pull request

협업 후 동기화 방법

다른 개발자들의 변경사항을 내 저장소에 반영:

1. git remote add pb https://github.com/kwanghoon/oss_git_examples
2. git fetch pb
3. git diff pb/master # 충돌 확인
4. git rebase pb/master
5. git commit -a -m "merge 3rd party contributions"
6. git push origin master



Week 2-4: Git Advanced Topics

♧ Rebase vs Merge

Merge 방식

A---B---C topic
/
D---E---F---G main
  • 브랜치들을 통합하며 머지 커밋(G) 생성
  • 기존 커밋 이력 완전 보존
  • 복잡한 그래프 형태의 히스토리

Rebase 방식

A---B---C topic
/
D---E---F main
  ↓ git rebase main

    A'--B'--C' topic
           /
D---E---F main
  • 커밋들을 재배치하여 선형 이력 생성
  • 깔끔하고 읽기 쉬운 프로젝트 히스토리
  • 주의: 공유된 커밋은 리베이스 금지!

♧ 고급 Git 명령어

인터랙티브 리베이스

git rebase -i HEAD~3 # 최근 3개 커밋 수정

pick → edit, squash, drop 등으로 변경 가능

특정 파일 변경 이력 추적

git blame filename.c # 각 줄의 최종 수정자 확인
git log -p filename.c # 특정 파일의 상세 변경 이력

변경사항 임시 보관

git stash # 현재 변경사항 임시 저장
git stash list # 저장된 stash 목록 확인
git stash pop # 가장 최근 stash 적용 및 삭제

♧ Git Flow 브랜치 전략

표준 브랜치 구조:

  • main/master: 배포 가능한 안정 버전
  • develop: 개발 진행 중인 브랜치
  • feature/기능명: 새로운 기능 개발 브랜치
  • release/버전: 배포 준비 브랜치
  • hotfix/버그명: 긴급 수정 브랜치

브랜치 전략 워크플로우

main ──●────●────●────●──
╲ ╱ ╱
develop ───●──●──●──●──●───
╱ ╲
feature/A ●─●─●─● ╲
╱
feature/B ●─●─●

♧ Git 고급 문제 해결

커밋 메시지 수정

git commit --amend # 직전 커밋 메시지 수정 git rebase -i HEAD~3 # 여러 커밋 메시지 수정

실수로 커밋한 파일 제거

git reset --soft HEAD1 # 커밋 취소, 변경사항 보존 git reset --hard HEAD1 # 커밋 및 변경사항 완전 삭제 (주의)

커밋 되돌리기 vs 재설정

  • git reset: 커밋 히스토리 자체를 변경 (위험)
  • git revert: 이전 커밋을 취소하는 새로운 커밋 생성 (안전)

자주 묻는 질문들과 간단한 답변

  1. Git과 Github의 차이는?
    • Git은 각 컴퓨터(local)에 설치되어 소스코드관리가 가능한 프로그램
    • Github는 remote 저장소가 있는 외부서버를 지칭
  2. Commit과 Pushd의 차이는?
    • commit은 local 작업폴더에 history를 쌓는 것이어서 외부망을 사용하지 않음
    • push는 remote 저장소에 history를 쌓는 것이어서 외부망이 필요함
  3. Fetch와 Pull의 차이는?
    • fetch는 가져와서 임시폴더(.git)에 저장
    • pull은 바로 현재 branch에 merge 작업을 동반함
    • Remote 저장소로부터 최신 commit 정보들을 가져오는 것은 매한가지
  4. Rebase와 Merge의 차이는?
    • rebase는 합치기 전에 되감기(rewinding)를 함
    • merge는 되감기를 안하고 합침
    • 두 branch의 차이점(commits)를 합치는 것은 매한가지



Week 3: Markdown

♧ Markdown이란?

Markdown은 존 그루버(John Gruber)와 아론 스워츠(Aaron Swartz)가 2004년에 개발한 경량 마크업 언어입니다.

주요 특징:

  • 일반 텍스트 에디터로 작성 가능
  • GitHub README 파일에서 널리 사용
  • HTML로 쉽게 변환 가능
  • 배우기 쉽고 사용하기 편함

♧ Markdown 주요 문법

제목 (Headers)

# H1 제목 (가장 큰 제목)

## H2 제목 (두 번째 크기)

### H3 제목 (세 번째 크기)

#### H4 제목 (네 번째 크기)

강조 (Emphasis)

  • 이탤릭체: *이탤릭체*
  • 볼드체: **볼드체**
  • 볼드 이탤릭: ***볼드 이탤릭***
  • 취소선: ~~취소선~~

목록 (Lists)

  • 순서 없는 목록 (- 항목)
  • 순서 있는 목록 (1. 항목)
- 항목 1
- 항목 2
    - 하위 항목 2-1
    - 하위 항목 2-2
- 항목 3

링크 및 이미지

  • 링크: [텍스트](https://example.com)
  • 이미지: ![대체 텍스트](https://example.com/image.png)

인용문 (Blockquotes)

> 이것은 인용문입니다.
> 여러 줄에 걸쳐 작성할 수 있습니다.

> 중첩 인용문도 가능합니다.

코드 블록

# 여러 줄 코드 블록은 backtick 3개로 감쌉니다.
git status
git log

표 (Tables)

항목 가격 수량
사과 1000원 10개
바나나 1500원 5개
오렌지 2000원 8개

Editors

  • VSCode
    • Edit and preview(Ctrl + Shift + V)
  • StackEdit

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Ruby 100.0%