Skip to content
 
 

Latest commit

 

History

434 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Week1-1 강의 개요 (강의계획서)

교과목명 - 오픈소스소프트웨어

담당교수-최광훈

교과요목- 이 과목은 3가지 목표를 지향한다. 첫째, 오픈소스 소프트웨어 개발을 위한 기본 개념과 도구, 특히 소스 코드 버전 컨트롤과 패키지 관리, 프로젝트 빌드를 중점으로 배운다. 둘째, 애자일 기반 소프트웨어 개발 방법인 짝 프로그래밍, 테스트 주도 개발, 행위 주도 개발, 클라우드 기반 데브옵스를 공부한다. 셋째, 새로운/낯선 소프트웨어 개발 환경 및 도구를 스스로 배우는 태도를 배우는 것을 목적으로 한다. 새로운 추세의 컴퓨팅 환경에 빠르게 적응하여 협력적인 소프트웨어 개발을 주도할 수 있는 능력을 배운다.

Week1-2 오픈소스소프트웨어 개요

오픈소스 소프트웨어(Open Source Software, OSS)는 소스 코드가 공개되어 누구나 자유롭게 사용, 수정, 배포할 수 있는 소프트웨어를 말합니다. 이는 소유권이 있는 상용 소프트웨어와 대비되는 개념으로, 다음과 같은 특징을 가집니다.

  • 소스 코드 공개 및 자유로운 접근: 누구나 소프트웨어의 내부 코드(소스 코드)를 볼 수 있으며, 이를 자유롭게 활용할 수 있습니다.

  • 협업과 공동 개발: 전 세계의 수많은 개발자와 전문가들이 자발적으로 참여하여 소프트웨어를 함께 개발하고 개선합니다. 이를 통해 버그를 빠르게 찾아내고 수정하며, 새로운 기능을 추가하여 소프트웨어의 안정성과 기능성을 향상시킵니다.

  • 라이선스: 소스코드가 공개되었다고 해서 무조건적인 자유를 의미하는 것은 아닙니다. 오픈소스 소프트웨어는 저작자의 권리를 보호하고 사용 조건을 명확히 하기 위해 다양한 종류의 오픈소스 라이선스를 따릅니다. 이 라이선스는 소스 코드의 사용, 수정, 배포 방식에 대한 규칙을 명시합니다. 예를 들어, 일부 라이선스는 수정한 코드를 다시 공개해야 하는 의무를 부과하기도 합니다.

  • 비용 효율성: 대부분의 오픈소스 소프트웨어는 무료로 제공되므로 라이선스 비용이 들지 않아 초기 도입 비용을 절감할 수 있습니다.

  • 벤더 종속성 탈피: 특정 회사나 공급업체에 얽매이지 않고 자유롭게 소프트웨어를 선택하고 사용할 수 있습니다.

Week2-1 버전 관리 개요

버전 관리(Version Control)는 파일의 변경 사항을 추적하고 기록하여, 필요할 때 이전 상태로 되돌리거나 변경 내용을 확인할 수 있도록 돕는 체계적인 프로세스입니다. 특히 소프트웨어 개발 분야에서 소스 코드의 변경 이력을 관리하는 데 필수적인 기술로 사용됩니다.

버전 관리의 주요 기능 및 필요성

  1. 변경 이력 추적 및 기록:

    • 어떤 파일이, 언제, 누구에 의해, 왜 변경되었는지에 대한 모든 기록을 남깁니다.

    • 이를 통해 프로젝트의 진행 과정을 투명하게 관리할 수 있습니다.

  2. 이전 버전 복원:

    • 만약 현재 버전에서 심각한 오류가 발생하거나 원하는 결과가 나오지 않을 경우, 문제가 없었던 과거의 특정 시점으로 쉽게 되돌릴 수 있습니다.

    • 이는 개발 과정의 안전망 역할을 하며, 개발자들이 새로운 기능을 실험하거나 대규모 수정을 할 때 심리적 부담을 줄여줍니다.

  3. 협업 효율성 증대:

    • 여러 개발자가 동일한 프로젝트의 파일을 동시에 작업할 때 발생하는 충돌(overwrite) 문제를 효과적으로 해결합니다.

    • 각자가 독립적으로 작업한 내용을 통합(Merge)하여 전체 프로젝트에 반영하는 과정을 체계적으로 관리합니다.

    • 브랜치(Branch) 기능을 통해 메인 코드에 영향을 주지 않고 새로운 기능을 개발하거나 버그를 수정할 수 있습니다.

  4. 백업 및 안정성:

    • 중요한 파일을 실수로 삭제하거나 손상시켰을 때, 이전 버전을 통해 쉽게 복구할 수 있습니다.

    • 별도의 수동 백업 없이도 프로젝트의 모든 변경 사항이 기록되므로 데이터 손실 위험을 줄일 수 있습니다.

버전 관리 시스템(VCS)의 종류
버전 관리는 크게 세 가지 방식으로 발전해 왔습니다.

  1. 로컬 버전 관리 시스템:

    • 사용자의 로컬 컴퓨터 내에서만 버전을 관리하는 방식입니다.

    • RCS(Revision Control System)와 같은 간단한 데이터베이스를 사용하며, 주로 개인 작업에 사용됩니다.

  2. 중앙집중식 버전 관리 시스템(CVCS):

    • 하나의 중앙 서버에 모든 버전 이력을 저장하고, 여러 사용자가 이 서버에 접속하여 파일을 가져오고(Check out) 변경 내용을 반영(Commit)하는 방식입니다.

    • CVS, SVN(Subversion) 등이 대표적입니다.

    • 장점: 모든 클라이언트의 로컬 데이터베이스를 관리하는 것보다 관리하기 쉽습니다.

    • 단점: 중앙 서버에 문제가 발생하면 협업이 불가능하며, 서버의 이력 데이터가 손상될 경우 복구하기 어렵습니다.

  3. 분산 버전 관리 시스템(DVCS):

    • 중앙 서버가 존재하지만, 각 사용자의 로컬 컴퓨터에도 전체 저장소의 이력을 모두 복제하여 관리하는 방식입니다.

    • Git, Mercurial 등이 대표적입니다.

    • 장점: 네트워크가 연결되지 않은 상태에서도 작업이 가능하며, 중앙 서버가 손상되어도 다른 사용자의 로컬 저장소를 통해 복구가 가능합니다.

    • 단점: 처음 프로젝트를 복제할 때 전체 이력을 다운로드해야 하므로 초기 용량이 클 수 있습니다.

오늘날에는 특히 Git과 같은 분산 버전 관리 시스템이 협업과 효율성 측면에서 압도적으로 널리 사용되고 있습니다.

Week2-2 Git

Git은 오늘날 가장 널리 사용되는 **분산 버전 관리 시스템(DVCS)**입니다. 소스 코드와 같은 파일의 변경 사항을 효율적으로 추적하고, 여러 개발자가 동시에 협업할 수 있도록 돕는 데 특화되어 있습니다.

Git의 주요 특징

  • 분산형 구조: Git은 프로젝트의 전체 이력을 중앙 서버뿐만 아니라 각 개발자의 로컬 컴퓨터에도 모두 저장합니다. 덕분에 인터넷 연결이 끊겨도 작업할 수 있고, 중앙 서버에 문제가 생겨도 다른 개발자의 로컬 저장소를 이용해 쉽게 복구할 수 있습니다.

  • 브랜치(Branch): Git의 가장 강력한 기능 중 하나입니다. 메인 코드에서 독립된 작업 공간을 만들어 새로운 기능 개발이나 버그 수정을 안전하게 진행할 수 있습니다. 각자 작업한 브랜치를 나중에 메인 코드와 다시 합치면(merge) 됩니다.

  • 스냅샷 방식: Git은 파일의 변경 내용을 텍스트 기반의 차이점(diff)으로 저장하는 대신, 변경된 파일의 전체 스냅샷을 저장합니다. 이 방식은 효율성과 안정성을 높여줍니다.

  • 빠른 속도: Git은 대부분의 작업을 로컬에서 처리하기 때문에 중앙 서버에 의존하는 시스템보다 훨씬 빠릅니다.

Git이 중요한 이유 소프트웨어 개발은 여러 사람이 함께 일하는 경우가 많습니다. Git이 없다면 다음과 같은 문제가 발생할 수 있습니다.

  • 코드 충돌: 여러 개발자가 같은 파일을 수정하면 누가 작업했는지 알 수 없고, 한 사람의 작업물이 다른 사람의 작업물을 덮어쓰는(overwrite) 문제가 발생합니다.

  • 변경 이력 부재: 코드에 오류가 발생했을 때 언제, 누가, 무엇을 변경했는지 파악하기 어렵습니다.

  • 버전 관리의 어려움: 여러 버전을 일일이 수동으로 복사하고 관리해야 하므로 비효율적입니다.

Git은 이러한 문제를 해결하여, 개발팀이 더 효율적으로 협업하고 안정적으로 프로젝트를 관리할 수 있도록 해줍니다.

Git을 사용하면 로컬 컴퓨터에 코드를 저장하고, commit 명령어로 변경 이력을 남깁니다. 이후 push 명령어를 통해 이를 GitHub, GitLab과 같은 원격 저장소에 업로드하고, 다른 팀원들과 공유할 수 있습니다.

Week2-3 Github, fork, pull request

GitHub

GitHub는 Git 저장소를 관리하고 공유하는 웹 기반 호스팅 서비스입니다. 즉, Git을 사용해 만든 프로젝트를 인터넷에 올려 전 세계 사람들과 협업할 수 있게 해주는 플랫폼이라고 생각하면 됩니다.

GitHub의 주요 기능은 다음과 같습니다.

  • 원격 저장소(Remote Repository): 로컬 컴퓨터에 있는 Git 프로젝트를 온라인에 저장하여 팀원들과 공유할 수 있습니다.

  • 이슈 트래킹(Issue Tracking): 버그나 개선 사항을 관리하고 토론하는 공간을 제공합니다.

  • 위키 및 프로젝트 관리: 프로젝트 문서나 진행 상황을 체계적으로 관리할 수 있습니다.

  • 오픈 소스 커뮤니티: 수많은 오픈 소스 프로젝트들이 GitHub를 중심으로 개발되고 있어, 누구나 참여하고 기여할 수 있는 거대한 커뮤니티 역할을 합니다.

Fork

Fork는 다른 사람의 GitHub 저장소에 있는 프로젝트를 내 개인 계정으로 통째로 복사하는 기능입니다.

왜 Fork를 사용할까요? 원본 프로젝트의 소유자가 아닌 이상, 원본 저장소에 직접 코드를 수정할 권한이 없습니다. 따라서 Fork를 통해 나만의 독립적인 복사본을 만든 뒤, 그 복사본에서 자유롭게 코드를 수정하고 기능을 추가할 수 있습니다. 이렇게 복사된 저장소는 원본과는 완전히 분리되어 있어, 내가 어떤 수정을 하든 원본 프로젝트에 영향을 주지 않습니다.

Pull Request (PR)

Pull Request(PR)는 Fork한 저장소에서 수정한 내용을 원본 저장소에 반영해달라고 요청하는 기능입니다.

PR 과정은 보통 이렇게 진행됩니다.

  1. Fork: 원본 저장소를 내 계정으로 복사합니다.

  2. Clone: 복사한 저장소를 내 컴퓨터로 가져옵니다.

  3. 작업: 코드를 수정하거나 새로운 기능을 추가합니다.

  4. Push: 수정한 내용을 내 원격 저장소에 올립니다.

  5. Pull Request 생성: GitHub에서 원본 저장소 소유자에게 "내가 이렇게 수정했으니, 당신의 프로젝트에 이 내용을 병합(merge)해주세요"라고 요청합니다.

원본 프로젝트의 관리자는 PR을 검토하고, 내용이 적절하다고 판단되면 내 수정을 최종적으로 받아들여 원본 프로젝트에 통합합니다. 이 과정을 통해 수많은 개발자들이 전 세계의 오픈 소스 프로젝트에 기여하고 함께 발전시킬 수 있습니다.

Week2-4 Git: Advanced topics

Git 고급 주제

Git의 기본 사용법인 commit, push, pull 외에도, 효율적인 협업과 복잡한 상황을 해결하기 위한 여러 고급 기능들이 있습니다. 다음은 Git의 주요 고급 주제들입니다.

1.Rebase (리베이스)
Rebase는 Git 커밋 기록을 재정리(rearrange)하는 도구입니다. 특정 브랜치의 커밋들을 다른 브랜치 위에 깔끔하게 얹어놓는다고 생각하면 됩니다.

  • 동작 방식: rebase는 현재 브랜치의 커밋들을 임시로 저장한 뒤, 기준이 되는 브랜치(보통 main 또는 develop)의 최신 상태로 이동합니다. 그리고 임시 저장했던 커밋들을 그 위에 하나씩 다시 적용합니다.

  • Merge와의 차이: merge는 두 브랜치의 변경 이력을 하나로 합쳐주는 합병 커밋(merge commit)을 생성합니다. 반면 rebase는 합병 커밋 없이 커밋 이력을 마치 일직선처럼 만들어줍니다. 이 덕분에 커밋 기록이 더 깔끔하고 읽기 쉬워집니다.

  • 주의 사항: 이미 공개된(shared) 브랜치에 rebase를 사용하면 다른 사람들의 커밋 기록을 꼬이게 할 수 있습니다. 따라서 개인 작업 브랜치에서만 사용하는 것이 좋습니다.

2.Interactive Rebase (대화형 리베이스) git rebase -i 명령어를 사용해, 리베이스 과정에서 커밋들을 직접 편집할 수 있습니다.

  • 커밋 수정: 특정 커밋의 메시지를 변경하거나 내용을 수정할 수 있습니다.

  • 커밋 합치기: 여러 개의 작은 커밋들을 하나로 합쳐서 커밋 기록을 간결하게 만듭니다.

  • 커밋 삭제: 실수로 만든 커밋을 제거할 수 있습니다.

3.Cherry-pick (체리픽) Cherry-pick은 다른 브랜치의 특정 커밋 하나만 현재 브랜치로 가져오는 기능입니다.

  • 활용 예시: 긴급한 버그 수정 커밋이 다른 개발 브랜치에 있을 때, 그 커밋 하나만 현재 운영 브랜치로 빠르게 옮겨와 적용할 수 있습니다. merge나 rebase처럼 전체 브랜치를 합치는 것이 아니므로, 필요한 변경사항만 선택적으로 가져올 때 유용합니다.

4.Git Stash (스태시)
Git stash는 아직 커밋하고 싶지 않은 변경 사항들을 임시로 저장(stash)하는 기능입니다.

  • 활용 예시: 새로운 기능을 개발하던 중 갑자기 긴급한 버그를 수정해야 할 때, 작업 중인 내용을 커밋하지 않고 stash에 저장한 후 버그를 수정합니다. 버그 수정이 끝나면 다시 stash에 저장된 내용을 불러와 이어서 작업할 수 있습니다.

5.Git Reflog
Reflog는 Git이 내부적으로 기록하는 모든 이력을 보여줍니다. git reset, rebase 등으로 커밋이 사라진 것처럼 보일 때, reflog를 통해 이전 상태를 찾아 복구할 수 있습니다.

  • 동작 방식: Git은 commit이나 checkout 같은 중요한 동작마다 HEAD가 가리키는 위치를 기록합니다. reflog는 이 기록을 보여주므로, 만약 실수로 커밋을 삭제했더라도 해당 커밋의 해시(hash)를 찾아 복구할 수 있습니다. reflog는 일종의 되돌리기(undo) 기능의 최종 방어선 역할을 합니다.

이러한 고급 기능들은 Git을 더 유연하고 강력하게 사용하도록 도와줍니다. Git의 깊은 이해를 통해 프로젝트를 더 효율적으로 관리할 수 있을 겁니다. Git에 대해 더 궁금한 점이 있나요?

Week3 Markdown

마크다운은 텍스트를 쉽고 빠르게 꾸밀 수 있는 간단한 마크업 언어입니다. HTML처럼 복잡한 태그 대신, *, _, #, > 같은 특수 문자를 사용해 글의 구조와 스타일을 지정하죠.

마크다운의 주요 특징 간결성: 배우고 사용하기가 매우 쉽습니다. 몇 가지 규칙만 알면 누구나 멋진 문서를 만들 수 있어요.

  • 가독성: 마크다운 문서는 꾸밈이 없는 상태에서도 읽기 편합니다. 복잡한 코드가 섞여 있지 않아 내용에만 집중할 수 있죠.

  • 다양한 활용: README 파일, 기술 문서, 블로그 포스트, 온라인 게시판 등 웹 기반 콘텐츠를 작성하는 데 널리 사용됩니다.

자주 사용되는 마크다운 문법

  1. 제목 (Headings) 제목은 # 기호를 사용해 만듭니다. #의 개수에 따라 제목의 크기가 달라지며, # 1개는 가장 큰 제목(h1), # 6개는 가장 작은 제목(h6)을 나타냅니다.

제목 1

제목 2

제목 3

  1. 목록 (Lists) 순서 없는 목록: *, -, 또는 + 뒤에 한 칸을 띄고 내용을 씁니다.
  • 사과
  • 바나나
  • 딸기 순서 있는 목록: 1., 2., 3.과 같이 숫자를 쓰고 한 칸을 띄고 내용을 씁니다.
  1. 첫 번째 항목
  2. 두 번째 항목
  3. 세 번째 항목
  4. 강조 (Emphasis) 굵게: ** 또는 __를 사용합니다.

굵은 글씨 또는 굵은 글씨 기울여 쓰기: * 또는 _를 사용합니다.

기울인 글씨 또는 기울인 글씨 굵게 + 기울여 쓰기: *** 또는 ___를 사용합니다.

굵고 기울인 글씨 4. 링크 (Links) 링크 텍스트를 [ ]로 감싸고, 링크 URL을 ( )로 감싸서 만듭니다.

Google
5. 이미지 (Images) 링크 문법 앞에 !를 붙입니다. 이미지 URL에는 웹 주소나 로컬 파일 경로를 사용할 수 있습니다.

![이미지 설명](이미지 URL) 강아지 사진 6. 인용문 (Blockquotes)

기호를 문장 맨 앞에 붙여서 인용문을 만듭니다.

이 내용은 인용문입니다.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages