장고(Django)는 파이썬으로 작성된 오픈 소스 웹 애플리케이션 프레임워크로, 모델 - 뷰 - 컨트롤러(MVC) 패턴을 따르고 있습니다.

고도의 데이터베이스 기반 웹사이트를 작성하는 데 있어서 수고를 더는 것이 장고의 주된 목표입니다.

장고는 컴포넌트의 재사용성과 플러그인화 가능성, 빠른 개발 등을 강조하고 있습니다.


1. Django의 역사

  장고(Django)는 2003년과 2004년에 로렌스 저널-월드라는 신문사의 인턴 웹 프로그래머였던 에이드리안 홀로바티와 사이먼 윌리슨이 파이썬 이용해 애플리케이션을 만들기 시작하면서 처음 개발되었습니다. 홀로바티와 윌리슨은 PHP가 규마가 큰 웹사이트에 적합하지 않다고 생각하였고 이를 계기로 파이썬을 웹 개발 언어로 사용하기로 결심했습니다. 하지만 규모가 큰 웹 개발에 적합한 파이썬 도구가 없다는 것을 깨닫고 그들은 장고를 개발하게 되었습니다.




2. Django의 특징

  Django는 Python을 기반으로 만들어진 웹 프레임워크[각주:1]입니다. 웹 개발에서 번거로운 요소들을 새로 개발할 필요 없이 내장된 기능만을 이용해 빠른 개발을 할 수 있다는 장점이 있습니다. Django의 대표적인 특징을 몇 가지 정리해보도록 하겠습니다.


MVC 패턴 기반 MTV

  장고는 MVC(Model - View - Controller)를 기반으로 한 프레임워크입니다. 하지만 장고에서는 View를 Template, Controller를 View라고 부릅니다. 장고에서 View는 데이터를 가져오고 변형하는 컴포넌트인 반면에 Template는 데이터를 사용자에게 보여주는 컴포넌트입니다. 그래서 장고를 흔히 MTV(Model - Template - View) 프레임워크라고 부르기도 합니다.


우아한 URL 설계

  웹 프로그래밍을 할 때 URL 디자인은 필수적인 요소입니다. 장고에서는 유연하면서도 강력한 기능을 제공합니다. 장고는 파이썬 프레임워크의 일반적인 우아한 URL 방식을 채택하여 다른 프레임워크에서도 사용할 수 있습니다. 또한 URL 형태를 개발자가 직접 결정할 수 있고, 각 URL 형태를 파이썬 함수에 직접 연결하도록 되어 있어 개발이 편리하고 이해하기도 쉽습니다.


관리자 웹 인터페이스 제공

  보통 웹 어플리케이션 작성에 있어서 관리자 인터페이스는 꼭 필요한 것이면서도, 일반적인 기능과도 많이 중복되어 구현이 번거롭던 것이 사실입니다. 사용자관리, 사용자 그룹관리, 사용자 별 권한에 대한 것 뿐 아니라, 각각의 모델 객체에 대해서, 목록/추가/삭제/변경의 기능이 관리자 인터페이스에서 모두 제공됩니다. 이는 특히, 데이터베이스, 웹 어플리케이션을 실험적으로 작성하기 좋습니다. 데이터베이스 모델링만으로 웹 어플리케이션의 작동을 실험해 볼 수 있습니다.


객체 관계 매핑(ORM; Object-Relational Mapping)

  장고의 객체 관계 매핑은 데이터베이스 시스템과 데이터 모델을 연결시키는 다리와 같은 역할을 합니다. 이런 ORM 기능을 통해 다양한 데이터베이스 시스템을 지원하고 있으며, 이미 구축한 데이터베이스 시스템을 다른 데이터베이스로 변경하는 경우에도 설정을 조금만 변경하면 가능하도록 쉽고 편리해졌습니다.


자체 템플릿 시스템

  장고는 내부적으로 확장이 가능하고 디자인이 쉬운 강력한 템플릿 시스템을 갖고 있습니다. 이를 통해 화면 디자인과 로직에 대한 코딩을 분리하여 독립적으로 개발 진행이 가능합니다. 장고의 템플릿 시스템은 HTML과 같은 텍스트형 언어를 쉽게 다룰 수 있도록 개발되었습니다. 


캐시 시스템

  동적인 페이지를 만들기 위해서 데이터베이스 쿼리를 수행하고 템플릿을 해석하며, 관련 로직을 실행하서 페이지를 생성하는 일은 서버에 엄청난 부하를 주는 작업입니다. 그래서 캐시 시스템을 사용하여 자주 이용되는 내용을 저장해 두었다가 재사용하는 것이 성능을 높여주는 방법입니다.

  장고의 캐시 시스템은 캐시용 페이지를 메모리, 데이터베이스 내부, 파일 시스템 중 아무 곳에나 저장할 수 있습니다. 또한 캐시 단위를 페이지에서부터 사이트 전체 또는 특정 뷰의 결과, 템플릿의 일부 영역만을 지정하여 저장해 둘 수도 있습니다.


다국어 지원

  장고는 동일한 소스코드를 다른 나라에서도 사용할 수 있도록 텍스트의 번역, 날짜/시간/숫자의 포맷, 타임존의 지정 등과 같은 다국어 환경을 제공합니다. 간단한 작업만으로 메시지를 하나 이상의 언어로 번역해주기 때문에 다국어를 제공하는 웹 사이트에 아주 유용하게 사용할 수 있습니다.


풍부한 개발 환경

  장고는 개발에 도움이 될 수 있는 여러 기능을 제공합니다. 대표적으로 테스트용 웹 서버를 포함하고 있어서 개발 과정에서 아파치 등의 사용 웹 서버가 없어도 테스트를 진행할 수 있습니다. 또한 디버깅 모드를 사용할 경우에는 에러를 쉽게 파악하고 해결할 수 있도록 아주 상세한 메시지를 보여줍니다.


소스 변경사항 자동 반영

  장고에서는 *.py 파일의 변경 여부를 감시하고 있다가 변경이 되면 실행 파일에 변경 내역을 바로 반영해줍니다. 그래서 장고 테스트용 웹 서버를 실행 중인 상태에서 소스 파일을 수정할 경우에도 웹 서버를 다시 시작할 필요 없이 자동으로 새로운 파일이 반영됩니다.



. References


  1. 웹 프레임워크는 다양한 웹 프로그램들을 손쉽게 만드는 기반인 플랫폼의 개념으로, 이를 활용하면 CMS와 같은 복잡한 웹 프로그램을 비교적 적은 노력을 들여서 만들 수 있습니다. [본문으로]

본격적으로 Git을 사용하여 파일 버전 관리하는 방법을 배워보도록 하겠습니다.

Git은 리눅스와 같은 큰 프로젝트를 염두에 두고 디자인 되었기 때문에, 아주 많은 명령어들을 가지고 있습니다.

그러나, Git의 기본을 사용할 때에는 몇 개의 명령어만 인지하고 있으면 됩니다.


1. git init 

  깃 저장소를 초기화 합니다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 일반적인 폴더에 불과하지만, 이 명령어를 입력한 이후에는 Git 명령어를 사용할 수 있게 됩니다. 저장소로 지정할 디렉토리에서 아래의 명령을 입력합니다.

$ git init

  위와 같은 명령어를 입력하면 아래와 같은 화면이 나타나게 됩니다. (저의 경우에는 이미 해당 디렉토리를 저장소로 지정해 놓았기 때문에 Reinitialized 라고 표현되었습니다.

  


2. git status

  저장소의 상태를 체크하는 명령어입니다. 어떤 파일들이 저장소에 있는지, Commit이 필요한 변경사항이 있는지, 현재 저장소의 어떤 Branch에서 작업하고 있는지 등에 대한 정보들을 확인할 수 있습니다.

$ git status

  modified에 나타나는 파일은 경우 기존에 저장소에 저장되어 있던 파일이 수정 되었을 경우에 나타나게 됩니다. 저같은 경우에는 'codefights/intro' 디렉토리 속 boxBlur.py 파일이 수정된 것을 확인할 수 있습니다. 만약 아무것도 수정되지 않았다면 어떠한 파일도 나타나지 않게 됩니다.

  Untracked files에는 기존 저장소에 저장되어 있지 않은 파일이 새로 추가된 것을 알려줍니다. 'minesweeper.py' 파일이 추가된 것을 확인할 수 있습니다.



3. git add

  add 명령은 저장소에 새 파일을 추가하진 않지만, Git이 해당 파일(들)을 지켜보게 합니다. add 명령이 수행된 파일은 Git의 저장소인 'SnapShot'에 포함되게 됩니다.

$ git add [파일 이름] --> (단일 파일)

$ git add * --> (모든 파일)

  add 명령을 통해 'intro/boxBlur.py'를 스냅샷에 추가하였습니다. modified의 전체적인 부분이 초록색으로 변한 것을 확인할 수 있습니다. add 명령을 사용하지 않은 'minesweeper.py' 파일은 여전히 빨간색임을 확인할 수 있습니다.



4. git commit

  Git에서 가장 중요한 명령어라고 할 수 있습니다. 어떤 변경사항이라도 만든 후, 저장소의 'SnapShot'을 찍기 위해 이 명령어를 사용합니다. commit 단위로 파일의 버전 관리가 진행됩니다. 일반적으로 'commit' 명령은 메시지와 함께 입력됩니다. 예시에서는 "-"와 같이 의미없는 메시지를 입력해두었지만, "modified boxBlur.py"와 같이 변경 내용을 한 눈에 알 수 있도록 적는 것이 좋습니다. 입력한 메시지는 추후 Github에 다음과 같이 나타나게 됩니다.

$ git commit -m ["메시지 입력"]

  intro 디렉토리 내의 boxBlur.py 파일이 status 결과 화면에서 사라진 것을 확인할 수 있습니다. 하지만 'minesweeper.py'파일은 사라지지 않았습니다. add 명령을 사용하지 않은 파일의 경우에는 commit되지 않습니다. 




5. git push

  git push 명령은 마지막으로 커밋한 사항을 git repsoitory에 올리겠다는 뜻입니다. 'push'를 하지 않으면 원격 서버에 변경 사항이 저장되지 않습니다. 다시말해서, 프로젝트를 공유하고 싶을 때 리모트 저장소에 'push'할 수 있습니다. 'commit'까지만 명령을 실행했다면 현재의 변경 내용은 아직 로컬 저장소의 HEAD안에 머물고 있을 것입니다. 이제 변경 내용을 원격 서버로 올리기 위해 아래 명령을 실행합니다.

$ git push [리모트 저장소 이름] [브랜치 이름]

  실행 화면의 명령어 중 'origin'과 'master'는 각각 리모트 저장소와 브랜치를 의미합니다. 또한 '-u'는 원격 저장소로부터 업데이트를 받은 후 'push'를 한다는 의미이므로 습관적으로 '-u'의 사용을 권장합니다.

  만약, 기존에 있던 원격 저장소를 복제(Clone)한 것이 아니라면, 원격 서버의 주소를 git에게 알려주어야 합니다.

$ git remote add origin [원격 서버 주소] --> (원격 서버 주소 설정)

$ git remote -v --> (현재 서버 주소 확인)

  'git remote -v'를 했을 때, 위와 같은 주소가 나타나고, 'git push -u origin master' 명령을 입력했을 때 오류가 발생하지 않는다면 정상적으로 원격 서버 주소가 설정된 것입니다.




References


'Git' 카테고리의 다른 글

[GIT] macOS에서 Git 사용하기 (1)  (0) 2018.01.18
[GIT] GIT이란 무엇인가?  (0) 2018.01.08


물이 끓기 전 99도의 상태를 집중이라고 한다면, 물이 끓기 시작하는 100도는 몰입의 상태라고 할 수 있다.

좋아하는 일에는 쉽게 '몰입' 할 수 있지만, '집중' 에는 '조절' 이라는 정서가 기본적으로 깔려 있다.



'집중'과 '몰입'에 대해 국어사전에서 정의한 내용은 다음과 같습니다.


[명사] 집중 : 한 가지 일에 모든 힘을 쏟아 부음

[명사] 몰입 : 깊이 파고들거나 빠짐                 


 어찌 보면 하나의 일을 지속적으로 수행한다는 의미에서 비슷한 의미를 가집니다. 

일상 생활에서 두 단어를 의미 구분 없이 사용하여도 크게 문제 되지 않습니다.

하지만 조금 더 자세히 살펴본다면 이 두 개의 단어는 아주 큰 차이점을 가집니다.




1. 집중 (Concentration, Sustained Attention)

  중요한 일을 할 때 사람들은 '집중력을 높이고 싶다' 고 생각합니다. 그러나 혼자서 일에 전념하려고 해도 좀처럼 진척이 없거나, 생각대로 되지 않는 경우가 많습니다. 집중력을 높이기 위해 집중력을 높이는 방법에 대해 찾아보기도 하지만 큰 효과를 보지 못하는 경우가 다반사입니다.

  일본의 심리교육 컨설팅 사쿠라이 카츠히코 대표는 집중에 대해 '불필요한 언어적 사고가 존재하지 않는 상태' 라고 말합니다. 그는 '무언가에 집중하고 있을 때 뇌는 알파파가 나오거나 도파민이 분비되지만, 심리적으로는 어떤 언어적 사고도 존재하지 않고 작업이나 행위에 몰두하고 있는 상태가 된다" 라고 설명했습니다.

  다시 말하자면 어떤 일을 진행할 때 "성공하고 싶다", "만약 실패하면 어떻게 하지" 등 잡념이 떠오르지 않는 상태 뿐만 아니라 다음에 수행할 동작을 이런저런 언어로 생각하지 않고 실행하는 상태를 말합니다. 즉 '무심'의 상태를 뜻합니다. 집중이 극에 달하는 상태가 되었을 때 뇌가 어떤 움직임을 하고 있는지는 완전히 알 수 없습니다. 하지만 집중이 높아지면 뇌의 움직임이 고도화되고 정보처리기능이 활발하게 됩니다. 스포츠 선수는 간혹 집중된 상태에서 어떤 움직임을 보고 '슬로 모션으로 보였다' 라고 하는데, 이는 시각으로 파악한 정보를 뇌가 빠르고 세밀하게 처리하기 때문입니다.

  심리학용어사전에서 '집중'은 '특정한 과제 혹은 활동에 일정 시간 동안 연속적으로 주의를 주는 것. 좀 더 전문적으로는 '지속적 주의' 라고 정의합니다. 사전적 정의에서 '연속적으로 주의를 주는 것' 이라 하였는데, 이는 자신의 의지를 바탕으로 의식적으로 한 가지 일에 모든 힘을 쏟는 것을 의미합니다. 힘든 상황을 견디는 능력, 하고 싶지만 해야 할 때 하는 행동, 남이 시켜서 해야 하는 것들을 하는 것, 내가 좋아하는 것을 하고 있는 상태에서 자신의 행동을 변화시키는 능력, 즐거움이나 행복을 위해서 뭔가를 하고 싶지만 참는 능력을 '집중'이라고 할 수 있습니다.  




2. 몰입 (Flow)

  몰입은 주위의 모든 잡념, 방해물들을 차단하고 원하는 어느 한 곳에 자신의 모든 정신을 집중하는 일입니다. 몰입하는 사람의 심리 상태는 에너지가 쏠리고, 완전히 참가해서 활동을 즐기는 상태입니다. 본질적으로, 몰입은 한가지에 완전히 흡수 되는것, 무의식적으로 물 흐르듯 자연스럽게 집중되는 상태를 의미합니다.


칙센트 미하이와 몰입

  몰입 이론의 창시자라고 할 수 있는 헝가리의 심리학자 칙센트 미하이는 몰입 했을 때의 느낌을 '물 흐르는 것처럼 편안한 느낌', '하늘을 날아가는 자유로운 느낌' 이라고 표현하였습니다. 일단 몰입을 하면 몇 시간이 한 순간처럼 짧게 느껴지는 시간 개념의 왜곡 현상이 일어나고 자신이 몰입하는 대상이 더 자세하고 뚜렷하게 보입니다. 그리고 몰입 대상과 하나가 된 듯한 일체감을 가지며 자아에 대한 의식이 사라집니다.

  첫째로, 몰입은 삶이 고조되는 순간, 마치 하늘을 날아가는 듯한 느낌이나 물이 흐르는 것처럼 편안하고 자연스럽게 행동이 나오는 상태에서 일어난다고 하였습니다. 칙센트 미하이는 "몰입은 의식이 경험으로 꽉 차 있는 상태이다. 이때 각각의 경험은 서로 조화를 이룬다. 느끼는 것, 바라는 것, 생각하는 것이 하나로 어우러지는 것이다."라고 말했습니다. 모든 것이 하나로 어우러질 때 비로소 완전한 몰입을 경험하게 됩니다.

  둘째, 몰입 상태에서는 행위와 인식의 융합이 일어납니다. 현재 하고 있는 활동에 푹 빠져 그 활동을 관찰하고 평가하는 인식이 존재하지 않습니다. 따라서 자아 의식도 사라져 흔히 이러한 상태를 '무아지경' 또는 '몰아지경' 이라고 부릅니다. 자아는 완전히 기능하지만 스스로 그것을 인식하지 못하는 것입니다.

  셋째, 몰입 상태에서는 자기와 환경의 구분이 거의 사라질 뿐만 아니라 시간의 흐름도 망각됩니다. 시간의 흐름에 대한 지각이 변형되어 시간이 보통 때보다 빨리 지나가고 많은 일들이 짧은 시간 안에 펼쳐지는 것처럼 느껴집니다.

  넷째, 몰입 상태에서는 현재 하고 있는 활동을 장악하고 있는 듯한 강력한 통제감을 느낍니다. 활동의 진행이나 성과에 대한 걱정이 사라지고 주의 집중이 일어남에 따라 완전한 통제력을 지니고 있는 것처럼 느끼게 됩니다.

  마지막으로 몰입 경험은 그 자체가 즐거운 것으로서 자기 충족적인 속성을 가집니다. 몰입하고 있는 활동은 다른 목적을 위한 것이 아니라 그 자체를 위한 내재적 동기에 의해 일어납니다.


몰입은 언제 잘 일어나는가?

  몰입을 촉진하는 요인은 자신이 하는 일에 적극적으로 전념하여 몰입 경험을 자주 하는 사람들에게서 발견됩니다. 칙센트 미하이는 몰입을 잘 하는 사람의 특징을 자기 목적적인 성격이라고 지칭한 바 있습니다. 이러한 성격을 지닌 사람은 어떤 일을 하더라도 적극적이고 열정적으로 합니다. 내재적 동기가 강한 사람들이어서 외부적 보상보다 일 그 자체를 위해 열심히 끈기 있게 일합니다. 이들은 자율성과 독립성이 강해 다른 사람의 간섭을 싫어하며, 개인적 목표나 야망으로부터 자유로운 경향이 있습니다. 즉, 성과에 집착하지 않으며 다른 사람의 시선과 평가에 신경을 쓰지 않습니다.

  첫째, 분명한 목표가 있는 활동에서 몰입이 잘 일어납니다. 현재 하고 있는 일의 목표가 모호하거나 장기적일 때에는 몰입이 잘 일어나지 않습니다. 너무 거창하고 원대한 목표보다는 그것을 이루기 위한 단기적 목표가 분명할 때 몰입이 쉬워집니다.

  둘째, 즉각적인 피드백이 주어지는 활동에서 몰입이 잘 일어납니다. 스포츠나 전자오락을 할 때 쉽게 몰입하는 이유는 추구해야 할 분명한 목표가 있을 뿐만 아니라 매 순간 즉각적인 피드백이 주어지기 때문입니다. 즉각적인 피드백은 목표 달성을 위해 현재 자신이 어떤 위치에 있으며 어떤 행위를 해야 하는지를 분명하게 알려주는 기능을 수행합니다.

  셋째, 몰입 상태를 촉발하기 위해서는 개인의 기술 수준과 과제의 난이도가 적절한 균형을 이루는 것이 아주 중요합니다. 분명한 목표와 즉각적인 피드백이 주어지더라도 너무 쉬운 과제는 몰입하기 어렵고 너무 어려운 과제는 흥미를 잃게 하거나 포기하게 만들기 쉽습니다. 따라서 상당한 기술을 요구하는 도전적인 과제를 할 때 몰입을 경험하기 쉽습니다.



  위 그림에서 볼 수 있듯이 과제의 도전 수준과 개인의 기술 수준이 모두 높을 때 몰입 상태를 경험하기 쉽습니다. 기술 수준에 비해 과제의 도전 수준이 높으면 걱정이나 불안을 경험하게 됩니다. 그와 반대로 기술 수준에 비해 과제의 도전 수준이 매우 낮으면 권태감을 느끼고, 적당히 낮으면 이완감을 느낍니다. 개인이 지닌 최고의 기술 수준을 발휘해야 하는 도전적 과제를 수행할 때 몰입이 잘 이루어집니다. 

  특히 강렬한 몰입 경험은 상황적 요구가 그 사람의 기술 수준에 압박을 가할 때 발생합니다. 즉, 상황적 요구 수준이 높아 잠시도 한눈을 팔지 못하고 매 순간 그 과제에 정밀한 주의를 기울이도록 요구해야 하고, 과제 수행 자체와 수행에 대한 평가가 분리되지 않아야 합니다.






References


macOS에는 기본적으로 'gcc', 'make'와 같은 컴파일 도구가 설치 되어 있지 않기 때문에 명령어 라인 도구(Command Line Tools)를 설치해야 합니다.

예전에는 Xcode를 전체 설치하고 추가로 명령어 도구를 설치해야 했으나, 용량이 꽤 크기 때문에 명령어 도구만 따로 설치할 수 있게 변경되었습니다.


1. Xcode 설치 없이 Command Line Tools 설치

  커맨드 라인 도구를 사용하기 위해서 Mac에서는 Xcode를 설치해야 합니다. 단순히 커맨드 라인 도구를 이용하기 위해 5GB에 육박하는 Xcode를 설치해야 한다는 것은 상당히 비효율적이고 부담스러운 일입니다. 따라서, Xcode를 설치할 필요 없이 OS X에 내장된 '터미널(Terminal)'만으로 명령어 라인 도구를 내려받을 수 있는 방법을 소개합니다.


설치 방법

Step 1. 아래 코드를 터미널에 입력합니다.

$ xcode-select --install


Step 2. 명령어 라인 도구 설치 대화상자가 나타나면 '설치' 버튼을 눌러줍니다


Step 3. 명령어 라인 도구를 다 내려받으면 '사용권 계약'이 담긴 대화상자가 나타납니다. 여기서 '동의' 버튼을 누르면 설치가 완료됩니다.


Step 4. 이제 터미널을 통해 명령어 라인 도구를 사용할 수 있습니다. 'gcc' 컴파일러를 실행해 개발자 도구가 잘 설치 되었는지 확인합니다.

$ gcc -v



2. Homebrew 설치

  Brew(Homebrew)는 각종 커맨드라인 프로그램을 손쉽게 설치해주는 macOS용 패키지 매니저입니다. 리눅스의 'apt', 'yum'과 비슷하며 brew 외에도 MacPorts 라는 패키지 매니저가 있지만, 몇몇 단점으로 요즘은 거의 brew를 사용하는 추세입니다. 다양한 프로그램을 복잡한 빌드과정 없이 손쉽게 설치할 수 있고 업데이트, 관리도 간단한 필수 프로그램입니다.


설치 방법

Step 1. Homebrew의 설치는 매우 단순합니다. macOS에 기본적으로 설치된 Ruby를 사용하여 설치를 진행합니다.

$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)”


Step 2. 설치 이후, 다음 명령을 실행하여 아래와 같은 메시지가 나오는지 확인합니다.

$ brew doctor

Your system is ready to brew.



3. Git 설치

  Homebrew를 사용하여 Git을 설치합니다.


설치 방법

Step 1. brew를 사용하여 Git을 설치합니다.

$ brew install git


Step 2. 설치 이후, 다음 명령을 실행하여 Git의 사용자 정보를 설정해줍니다.

$ git config --global user.name "Your Full Name"

$ git config --global user.email "Your Email Address"

  위의 명령어는 Git을 설치하고 나서 가장 먼저 해야하는 일입니다. Git은 Commit할 때마다 이 정보를 사용한다. 한 번 Commit한 이후에는 정보를 변경할 수 없습니다.



위의 3가지 기본 설정 및 설치를 마쳤다면, macOS에서 Git을 사용할 준비가 된 것입니다.

다음 포스팅에서는 본격적으로 Git을 통해 파일 관리를 해보도록 하겠습니다.



References


'Git' 카테고리의 다른 글

[GIT] macOS에서 Git 사용하기 (2)  (0) 2018.01.23
[GIT] GIT이란 무엇인가?  (0) 2018.01.08


(내용 출처 : https://tuwlab.com/ece/22202)



1. GIT이란?

 GIT은 소프트웨어를 중심으로 하는 프로젝트에서 빈번하게 발생할 수 있는 문제를 해결하기 위해 등장한 형상 관리 도구(Configuration Management Tool)입니다.

소프트웨어 공학의 프로젝트 진행 및 관리 방법에서 비중 있게 다뤄지는 영역 중 하나이기도 합니다.


 많이 쓰이는 형상 관리 도구로는 SVN과 GIT이 있습니다. SVN과 GIT은 모드 소스코드의 효율적인 관리를 위한 형상 관리 도구이지만, 비슷하면서도 많은 점이 다르다고 할 수 있습니다. SVN과 GIT의 가장 큰 차이점은 '분산'입니다. SVN은 중앙 집중식 소스코드 관리 방식인데 반해, GIT은 분산 소스코드 관리 방식입니다. 즉, GIT을 사용할 경우 중앙 저장소가 폭파되더라도 분산되어 있는 로컬 저장소를 이용해 중앙 저장소를 복원할 수 있습니다.


 SVN과 GIT은 상호 장단점에 대한 의견이 분분합니다. 하지만, 요즈음에는 SVN을 사용하던 대부분의 기업들이 GIT으로 점차 옮겨가는 추세이고, 형상 관리 도구에 처음 입문하는 사람들 중 대부분이 GIT으로 입문한다는 점으로 미루어 보았을 때, GIT을 사용하는 것을 추천합니다.




2. GIT을 사용하면 어떤 일들이 가능할까?

  1. 소스코드 주고받기가 필요 없고, 같은 파일을 여러 명이 동시에 작업하는 등 병렬 개발이 가능해지며, 버전 관리가 용이해져 생산성이 증가합니다. 

  2. 소스코드의 수정 내용이 Commit 단위로 관리되고, Fetch 형식으로 배포할 수 있기 때문에 프로그램의 변동 과정을 체계적으로 관리할 수 있고, 언제든지 지난 시점의 소스코드로 점프(Checkout)할 수 있습니다.

  3. 새로운 기능을 추가하는 Experimental Version을 사용하는 경우, Branch를 통해 충분히 실험을 한 뒤 본 프로그램에 합치는 방식(Merge)으로 개발을 진행할 수 있습니다.

  4. 분산버전관리이기 때문에, 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있으며, 중앙 저장소가 폭파되어도 다시 원상복구할 수 있습니다.

  5. 팀 프로젝트가 아닌, 개인 프로젝트일지라도 GIT을 통해 버전 관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는 과정도 간단해집니다.



3. GIT관련 주요 용어

  1. 저장소(Repository)
     소스코드가 저장되어 있는 여러 개의 브랜치(Branch)들이 모여 있는 디스크상의 물리적 공간을 의미합니다. GIT에서는 저장소가 로컬 저장소(Local Repository)와 원격 저장소(Remote Repository)로 나뉩니다. 

     작업을 시작할 때 원격 저장소에서 로컬 저장소로 소스코드를 복사해서 가져오고(Clone), 이후 소스코드를 변경한 다음 Commit을 합니다. 이 때, 커밋한 소스는 로컬 저장소에 저장되며, 푸시를 하기 전에는 원격 저장소에 반영되지 않습니다.

  2. 체크아웃(Checkout)
     특정 시점이나 Branch의 소스코드로 이동하는 것을 의미합니다. 체크아웃 대상은 Branch, Commit, Tag입니다. 체크아웃을 통해 과거 여러 시점의 소스코드로 이동할 수 있습니다.

  3. 스테이지(Stage)
     작업한 내용이 올라가는 임시 저장 영역입니다. 이 영역을 이용하여 작업한 내용 중 Commit에 반영할 파일만 선별하여 커밋을 수행할 수 있습니다.

  4. 커밋(Commit)
     작업한 내용을 로컬 저장소에 저장하는 과정입니다. 각각의 커밋은 의미 있는 변경 단위이고, 변경에 대한 설명을 커밋 로그로 남깁니다. 대개 하나의 커밋은 '회원 가입 기능 추가', '검색 버그 수정'과 같이 하나의 주제로 묶을 수 있는 변경 단위가 됩니다. 

  5. 태그(Tag)
     커밋의 임의 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표를 태그라 합니다. 태그가 붙여진 커밋은 Commit ID 대신 태그명을 입력하여 쉽게 체크아웃 할 수 있습니다.

  6. 푸시(Push)
     로컬 저장소의 내용 중 원격 저장소에 반영되지 않은 커밋을 원격 저장소로 보내는 과정입니다.

  7. 풀(Pull)
     푸시와 반대로 원격 저장소에 있는 내용 중 로컬 저장소에 반영되지 않은 내용을 가져와서 로컬 저장소에 저장하는 과정을 의미합니다. 이를 통해 다른 팀원이 변경하고 푸시한 내용을 로컬 저장소로 가져올 수 있습니다.

     푸시 과정에서 충돌(Collision)이 일어나서 푸시가 거절된 경우, 풀을 통해 원격 저장소의 변경 내용을 반영한 뒤 다시 푸시를 시도해야 합니다.

  8. 브랜치(Branch)
     커밋을 단위로 구분된 소스코드 타임라인에 분기해서 새로운 커밋을 쌓을 수 있는 가지를 만드는 것, 혹은 그 가지를 브랜치라 합니다. 브랜치 중에 개발의 주축이 되는 브랜치를 마스터 브랜치(Master Branch)라 하며, 모든 브랜치는 마스터 브랜치에서 분기되어 최종적으로 다시 마스터 브랜치에 병합(Merge)되며 개발이 진행됩니다.

  9. 포크(Fork)
     저장소를 복제해서 새로운 독립된 저장소를 만드는 작업을 의미합니다. 공개된 오픈 소스 프로젝트를 자신이 프로젝트 매니저가 되어 입맛대로 수정하고 싶을 때 사용하는 기능이 바로 Fork입니다. 원격 저장소를 로컬 저장소로 복제한 뒤 새로운 원격 저장소에 푸시하는 과정을 한 번에 해결할 수 있도록 도입한 기능이 Fork입니다.

  10. 병합(Merge)
     브랜치와 반대되는 개념으로, 하나의 브랜치를 다른 브랜치와 합치는 과정을 의미합니다.

     두 개의 브랜치를 합쳐 하나의 브랜치로 만드는 3-Way Merge가 모든 병합 작업의 기본이 됩니다. 병합의 대상이 되는 두 브랜치는 주종관계가 성립하며, 따라서 'A브랜치와 B브랜치를 병합한다'라는 말은 모호한 표현이 됩니다. 즉, 'A 브랜치를 B 브랜치에 병합'하는 작업과 'B 브랜치를 A 브랜치에 병합'하는 작업은 서로 다른 작업입니다.

      병합도 커밋의 한 종류입니다. 일반적인 커밋은 조상 커밋이 하나인 커밋인데 반해, 병합의 조상 커밋이 둘 이상인 경우입니다. 3-Way Merge는 '서로 다른 두 커밋으로부터 하나의 새로운 커밋을 생성하는 작업'입니다.

     병합 과정에서 두 개의 브랜치에서 파일의 같은 부분을 서로 다르게 수정한 경우 충돌이 발생하며, 병합이 일시정지 됩니다. 이 경우, 충돌이 발생한 부분을 직접 수정하거나, Merge Tool 등을 활용하여 충동을 해결한 뒤 병합을 계속 진행하면 됩니다.


'Git' 카테고리의 다른 글

[GIT] macOS에서 Git 사용하기 (2)  (0) 2018.01.23
[GIT] macOS에서 Git 사용하기 (1)  (0) 2018.01.18

Brain Science? Neuro Science?






  Brain Science란, '뇌 과학'이라 불리며, 뇌의 구조의 기능 원리에 대해 연구하는 과학 분야입니다. 건강한 뇌는 어떻게 정상적으로 작동하며, 지적 능력이 어떻게 기대 이상의 통찰력을 만들어 내는가 하는 물음에 대한 답을 구하려는 학문이라고 할 수 있습니다. 즉 뇌과학은 뇌의 복합적인 기능과 구조에 대한 해석을 통해 인간이 가진 가능성의 한계에 대해 답을 구하는 분야입니다.


  인간의 뇌를 연구하여 유전자의 법칙을 알아내는 것뿐만 아니라, 인간의 모든 행동 발생 원인과 이유 등을 과학적으로 심층 설명함으로써 인간의 마음까지도 연구할 수 있는 학문입니다. 뇌 과학은 뇌의 모든 국면을 연구 대상으로 삼고 있습니다. 뇌의 구조, 뇌의 발달, 뇌의 뉴런, 즉 신경 세포의 화학적, 전기적 현상, 여러 뉴런 간의 상호작용, 뇌의 독특한 소산인 행동과 경험을 유추하기도 합니다. 뇌 과학에 대한 연구는  IT와 접목되면서 인간의 뇌나 인간과 기기의 의사소통까지 확대되었습니다.


  1950년대 유전자 판독에 의해 뇌과학의 결정적인 혁명이 일어납니다. 유전자 판독은 현대 생물학의 탄생을 견인했고, 유전자에서 세포, 순환계, 인식에 이르기까지 오늘날 신경과학(neuroscience)의 엄청난 발전을 이루도록 합니다. 


  Neuroscience는 Brain Science의 일부 중 하나로 인지, 행동, 시스템, 임상신경과학 등 뇌와 행동의 관계에 대한 정상 및 이상 기전에 관련된 모든 분야의 연구를 뜻합니다. 전통적으로 생물학의 한 분야로 간주되어 왔으나 최근 인지 심리학, 신경 심리학, 컴퓨터 과학, 통계학, 물리학, 의학 등 많은 분야가 관련된 학재적 학문으로 통하고 있습니다.




 


 

'Brain Neuro Science > Brain' 카테고리의 다른 글

[Brain] 뇌파  (0) 2018.01.23



Node.js 환경 설정하기

 프로그래밍을 시작하면 맨 처음 보게되는 글귀인 'Hello, World!!'를 출력하는 것으로 Node.js 첫 포스팅을 시작하겠습니다.


개발 환경


Java version (JRE) : "1.7.0_21"

다운로드 ▶ http://www.oracle.com/technetwork/java/javase/downloads/index.html


Tool : Enide (Node Tool Suite) - Nodeclipse를 포함한 이클립스 패키지 버전으로 NTS라는 이름으로 발표되었습니다.

다운로드 ▶ http://sourceforge.net/projects/nodeclipse/files/Enide-Studio/ 에서 다운로드 할 수 있습니다.


Enide를 다운로드하고 실행해보면 HelloWorld 프로젝트를 제외한 아래와 같은 화면이 나오게 됩니다.


위의 화면이 Enide의 메인 화면이며 앞으로 이 툴을 사용하여 코딩을 하게 됩니다.


Hello, World !


프로젝트를 생성해 보겠습니다. 좌측 [Project Explorer] 창에서 마우스 오른쪽 버튼을 클릭하여 나타나는 메뉴에서 [New] - [Node Project]를 클릭합니다.

'New Node Project'라는 신규 Node.js Project를 생성하는 창이 나타나면 프로젝트 이름을 입력하고 [Finish] 버튼을 클릭합니다.



만든 프로젝트를 펼쳐보면 hello-world-server.js 파일 이외에 많은 파일들이 생긴 것을 확인할 수 있습니다. 내용을 확인해보면 node.js로 http 서버를 구동시키는 파일입니다. 코드를 간단하게 분석해보겠습니다.


var http = require('http'); // http 모듈을 불러옴


//서버 생성

http.createServer(function (req, res) {

res.writeHead(200, {'Content-Type' : 'text/plain'}); //content-type : text

res.end('Hello World\n'); //end()로 Hello World 출력하며 응답을 마무리

}).listen(1337, '127.0.0.1'); // 포트번호 & IP 주소 설정

console.log('Server running at http://127.0.0.1:1337/'); // console에 log 띄우기



위의 코드를 [Run] - [Run As] - [Node Application] 을 클릭하여 실행시키면 Console창에 이러한 메시지가 나오게 됩니다.



서버가 구동되었음을 알 수 있습니다. 웹 브라우저에서 'http://127.0.0.1:1337/' 주소를 호출해보겠습니다.



호출이 잘 되었습니다. Node.js에 세계에 오신 것을 환영합니다.









MongoDB 시작하기


웹 브라우저를 통해 www.mongodb.org를 검색한 후 우측 상단의 DOWNLOADS를 클릭하여 본인의 운영체제에 맞는 MongoDB를 다운로드 합니다.





.exe파일로 MongoDB설치를 완료하고, 콘솔창을 띄워줍니다. 이후 cd 명령을 통해 MongoDB를 설치한 경로의 bin 디렉토리에 접근합니다.

※이동 경로는 본인이 MongoDB를 설치한 위치에 따라 다를 수 있습니다.





'mongod' 명령어로 MongoDB 인스턴스를 활성화합니다. MongoDB를 설치한 bin 디렉토리에서 명령어를 실행하여야 합니다.

mongod --dbpath {경로}




위의 콘솔창을 종료하지 않은 채로, 또 다른 콘솔창을 실행합니다. 새로 띄운 콘솔창에서 'mongo' 명령어로 MongoDB를 실행합니다.


mongo



mongo를 입력했을 때, 콘솔창의 입력부가 '>'로 바뀌면 접속 성공입니다.


'show dbs' 명령으로 접속한 MongoDB의 데이터베이스들을 확인합니다.

 

show dbs



명령어를 실행한 모습입니다. SALES와 test부분은 제가 따로 만든 데이터베이스이고, 초기에는 Local 데이터베이스가 생성되어 있습니다.




use 명령어를 알아보겠습니다. use 명령어는 자신이 원하는 데이터베이스로 이동할 수 있도록 합니다.


use {데이터베이스 명}


use test 명령을 사용하면 test 데이터베이스로 바뀌는 것을 확인할 수 있습니다. 

※ test 데이터베이스가 존재하지 않아도 저 명령은 그대로 실행되는데, 그 경우는 첫 번째 Collection을 생성할 때 자동으로 데이터베이스가 생성됩니다.




실행한 인스턴스는 'db.shutdownServer()' 명령으로 종료합니다.

db.shutdownServer()



인스턴스를 종료하기 위해서는 admin으로 접속한 이후여야 합니다.

정상적으로 인스턴스가 종료되는 것을 확인할 수 있습니다.




'Database > NoSQL' 카테고리의 다른 글

[NoSQL with MongoDB] 2. MongoDB 소개  (0) 2017.06.30
[NoSQL with MongoDB] 1. NoSQL의 개념  (0) 2017.06.29

참고 포스팅 : NoSQL의 개념




MongoDB 특징

MongoDB는 관계형 데이터베이스가 아닌 문서 지향 데이터베이스 입니다. 문서 지향 데이터베이스에서는 '행'개념 대신에 보다 유연한 모델인 '문서'를 사용합니다. 내장 문서와 배열을 허용함으로써 문서 지향 모델은 복잡한 계층 관계를 하나의 레코드로 표현할 수 있습니다. 또한 문서의 키와 값을 미리 정의하지 않습니다. 따라서 고정된 형태의 스키마가 없습니다


  1. Humongos라는 회사의 제품 명이었으며, 현재 MongoDB inc로 회사명이 변경되었습니다.

  2. JSON Type의 데이터 저장 구조를 제공합니다.
    MongoDB는 유럽에서 컴퓨터의 표준화를 위해 설립된 비영리 표준화 기구인 ECMA에서 만들어진 경량의 데이터 표현 방식과 JavaScript 형태를 근거로 하는 JSON(Java Script Object Notation)타입으로 데이터를 관리합니다.

  3. Sharding(분산) / Replica(복제) / MapReduce(분산/병렬처리) 기능을 제공합니다.
    빅 데이터를 처리하는 기업 환경에서는 데이터를 안전하게 보관하고 운영하는 것이 중요합니다. MongoDB는 Replica기능과 Shard 기능을 통해 복제 및 분산 처리가 가능한 기능을 제공하며 MapReduce 기능을 통해 빅 데이터에 대한 빠른 추출이 가능합니다.

  4. CRUD(Create, Read, Update, Delete)  위주의 다중 트랜잭션 처리도 가능합니다.
    관계형 데이터베이스의 주요 기능인 CRUD 위주의 다중 트랜잭션 처리도 가능합니다. 관계형 데이터베이스는 트랜잭션 위주의 데이터를 보다 효율적으로 처리하기 위한 기술이라면, NoSQL은 빅 데이터의 빠른 저장과 추출 및 분석을 용이하게 하기 위한 기술이기 때문에 용도가 다르다고 할 수 있습니다.

  5. Memory Mapping 기술을 기반으로 Big Data 처리에 탁월한 성능을 제공합니다.
    메모리 매핑 기술을 통해 빅 데이터의 효율적 처리에 최적화된 데이터베이스 구조를 제공하고 있습니다.

MongoDB 용어 소개

관계형 데이터베이스의 논리적 구조에 대한 용어와 MongoDB의 논리적 구조에서 사용하는 용어를 비교하여 설명하겠습니다.


관계형 DB / MongoDB


     1) TABLE / COLLECTION                         

     2) ROW / DOCUMENT                           

     3) COLUMN / FIELD                               

     4) PRIMARY KEY / OBJECT_ID Field           

     5) RELATIONSHIP / EMBEDDED & LINKING


사원번호 (PK / OBJECT_ID Field)

사원명

직급

부서번호(Column / Field)

1 (Row / Document)

김철수

차장

10

2

김영희

과장

30

3

이대리

대리

20

    




'Database > NoSQL' 카테고리의 다른 글

[NoSQL with MongoDB] 3. MongoDB 입문하기  (0) 2017.07.03
[NoSQL with MongoDB] 1. NoSQL의 개념  (0) 2017.06.29

NoSQL 이란?


 NoSQL을 단어 그대로 해석한다면 "SQL이 아니다"라고 해석할 수 있지만 실제 의미는 "Non Relational Operational Database SQL",  "관계형 데이터베이스가 아닌 SQL" 이라는 의미로 해석해야 합니다.


 4차 산업 혁명 시대가 도래하며 빅 데이터(Big Data)와 클라우드 컴퓨팅(Cloud Computing)이라는 단어가 주목을 받고 있습니다. 기존의 관계형 데이터베이스는 최근 클라우드 컴퓨팅 환경에서 발생하는 빅 데이터를 효과적으로 저장, 관리하는 데 여러 가지 문제점이 발생하고 있습니다. 이러한 문제점을 개선, 보완하기 위한 새로운 데이터 저장 기술이 요구되었는데 이것을 NoSQL이라고 합니다.


 NoSQL이 왜 급부상하고 있는지에 대한 이유를 살펴보기 위해서는 시간을 거슬러 올라가야 합니다. 국내에 PC가 보급되기 시작하던 1980년대에는 컴퓨터를 주로 문서 작업이 대부분이었기 때문에 컴퓨터에 대한 활용도가 떨어질 수 밖에 없었습니다. 이러한 문제점을 개선하기 위해서 서버에는 데이터를 배치하고 사용자의 PC에는 운영 프로그램을 배치하여 서버의 관리 비용은 줄이고 PC의 자원들은 최대한 활용하는 것이 효율적인 시스템 운용 방법이라는 것을 깨달았습니다. 이러한 개발 패러다임을 클라이언트 / 서버 환경이라고 합니다.


 이러한 클라이언트 / 서버 개발 환경에서는 서버에 배치된 데이터들을 많은 사람들이 서로 공유할 수 있어야 하는데 기존의 파일 시스템으로 한계가 있을 수 밖에 없었기 때문에 DBMS라는 새로운 데이터 저장 기술이 각광 받기 시작한 것이며 오늘날 까지 광범위한 분야에서 널리 활용되고 있습니다.


 클라이언트 / 서버 개발 환경을 통해 인트라넷, 인터넷에 접속하는 단계를 넘어 스마트 폰과 태블릿 장치들을 통해 무선 인터넷 환경에 접속할 수 있는 네트워크 기술에 대한 비약적인 발전이 이루어졌습니다.  이것은 우리가 예상하지 못했던 빅 데이터를 양산하게 되며 다양한 운영 프로그램들을 언제, 어디에서라도 설치, 사용할 수 있어야 한다는 것을 의미하게 되었습니다. 이러한 개발 패러다임을 클라우드 컴퓨팅 환경이라고 합니다.


 이러한 클라우드 컴퓨팅 환경을 구축하기 위해서는 기업 환경에 맞는 최적의 데이터베이스를 구축할 수 있어야 하며 필요에 따라 DBMS 소스 프로그램을 수정할 수 있어야 하고 저렴한 비용으로 구축될 수 있는 FreeWare 제품들이 요구될 수 밖에 없지만, 기존의 관계형 데이터베이스는 이러한 시대적 요구에 부합되지 않아 NoSQL이라는 새로운 데이터 저장 기술이 부상하게 되었습니다.


NoSQL의 장점?

  1. 클라우드 컴퓨팅 환경에 가장 적합합니다.
    클라우드 컴퓨팅 환경이 구축되기 위해서는 유연한 System 설계가 요구되어지는데 그 목적을 달성하기 위해서는 기업 환경에 맞는 최적의 데이터 베이스를 구축해야 합니다. 따라서 소스 프로그램을 수정할 수 있는 Open Source여야 하며 저렴한 비용으로 구축하기 위해서는 FreeWare 제품이어야 하는데 이 목적에 NoSQL이 가장 부합하다고 할 수 있습니다.

  2. 유연한 데이터 모델을 구축할 수 있습니다.
    NoSQL은 비정형화 데이터 구조로 설계되기 때문에 조인(Join)을 피할 수 있고 효과적인 관리와 빠른 성능을 보장 받을 수 있습니다.

  3. 빅 데이터 처리에 효과적입니다. 
    NoSQL 기술은 대부분 Memory Mapping 기술로 구현되기 때문에 일반적인 관계형 데이터베이스보다 빅 데이터에 대한 읽기 / 쓰기 작업이 빠르며     무엇보다도 기존의 OS와 HW에 그대로 구현할 수 있기 때문에 유연성과 확장성이 좋은 것이 특징입니다.


NoSQL이 위와 같은 장점을 가지고 있기는 하지만, 그렇다고 관계형 데이터베이스가 몰락하는가? 그것은 아닙니다. 왜냐하면, 관계형 데이터베이스와 NoSQL은 목적이 다르다고 할 수 있습니다. 관계형 데이터베이스는 클라이언트 / 서버 환경의 개발 패러다임에 맞는 데이터 저장 기술이라면 NoSQL은 클라우드 컴퓨팅 환경의 개발 패러다임에 맞는 최적의 데이터 저장 기술이기 때문입니다.


정리하면, 

NoSQL : 클라우드 컴퓨팅 환경의 개발 패러다임에 적합한 데이터 저장 기술

RDB : 클라이언트 / 서버 환경의 개발 패러다임에 적합한 데이터 저장 기술 


NoSQL의 종류

현재, NoSQL이라는 기술로 만들어진 제품의 종류는 150가지가 넘지만, 실제로 사용자 층을 확보하고 있고 꾸준한 기술 지원과 업그레이드를 하고 있는 제품은 다음과 같습니다.


1) MongoDB    2) Casandra    3) HBASE    4) CouchDB    5) Riak    6) Redis


MongoDB를 제외한 나머지 제품들은 읽기와 쓰기에서 일관되지 못한 성능을 보여주나, MongoDB는 성능에 큰 차이가 없는 안정적인 결과를 보여줍니다.

또한, 저장 공간의 효율성, 시스템 확장성, 관리성, 안정성 측면에서도 일관되게 좋은 평가를 받았으며 무엇보다도 사용자를 위한 기술지원, 새로운 버전에 대한 출시계획, 커뮤니티 지원 등에서도 MongoDB는 좋은 평가 결과를 받았습니다.


따라서 저는 MongoDB를 활용하여 이후 Posting을 진행할 예정입니다.

'Database > NoSQL' 카테고리의 다른 글

[NoSQL with MongoDB] 3. MongoDB 입문하기  (0) 2017.07.03
[NoSQL with MongoDB] 2. MongoDB 소개  (0) 2017.06.30

+ Recent posts