[디자인(설계)] 팩토리 메소드 패턴과 Class 타입을 활용 객체 생성 시 참조 관계 제거

2017.04.25 16:30

데브맥스 프레임워크를 개발하고 있습니다. 데브맥스에서 사용하는 기술을 틈틈히 정리 및 공유하려 합니다.

(데브맥스 프레임워크에 대한 소개는 다음에 진행하겠습니다.)


이번 글에서는 팩토리 메소드 패턴(부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴)과 클래스 타입을 활용해, 여러가지 객체 생성 시 참조 관계를 제거하는 방법을 소개합니다.


배경

1) 메인UI에서 여러가지 서브UI를 동적으로 생성하고 싶다.

2) 메인UI 소스에서 서버UI 소스 참조시 서브UI가 많아질 수록 메인UI 소스가 복잡해 진다.


과제

메인UI에서 서브UI Id로 서브UI 객체를 생성할 수 있어야 한다.

메인UI 소스에서 서브UI 소스를 직접 참조하지 않아야 한다.

서브UI가 늘어나도 메인UI 소스는 변경되지 않아야 한다.


방안

팩토리 메소드 패턴 활용

Class 타입을 이용해 확장성 제공


구현

아키텍처

위 그림과 같이 서브UI들은 ClassTypeFactory에 등록하고, 메인UI는 ClassTypeFactory를 참조해 객체를 생성하는 구조이다.


클래스 타입 지정

  TViewItemClass = class of TControl;
  TViewItemClassInfo = record
    Id: string;
    ViewItemClass: TViewItemClass;

    constructor Create(AId: string; AItemClass: TViewItemClass);
  end;
서브UI(TViewItem)의 클래스 타입(TViewItemClass)을 지정한다.
클래스의 종류는 현재 TControl로 정의 되어 있지만 폼(TForm), 여러분들이 만든 객체(또는 컴포넌트)  등으로 정의해 사용할 수 있다.
클래스 정보 구조체를 선언한다.

Factory 클래스

type
  TViewItemClass = class of TControl;
  TViewItemClassInfo = record
    Id: string;
    ViewItemClass: TViewItemClass;

    constructor Create(AId: string; AItemClass: TViewItemClass);
  end;

  TViewItemFactory = class
  private
    class var FInstance: TViewItemFactory;
  private
    FViewItems: TDictionary;
    function GetList: TArray;
  public
    constructor Create;
    destructor Destroy; override;

    procedure Regist(AId: string; AItemClass: TViewItemClass);
    function GetClass(AId: string): TViewItemClass;
    function CreateControl(AId: string): TControl;

    property List: TArray read GetList;

    class function Instance: TViewItemFactory;
    class procedure ReleaseInstance;
  end;

{ TViewItemFactory }

class function TViewItemFactory.Instance: TViewItemFactory;
begin
  if not Assigned(FInstance) then
    FInstance := Create;
  Result := FInstance;
end;

class procedure TViewItemFactory.ReleaseInstance;
begin
  if Assigned(FInstance) then
    FInstance.Free;
end;

constructor TViewItemFactory.Create;
begin
  FViewItems := TDictionary.Create;
end;

function TViewItemFactory.CreateControl(AId: string): TControl;
var
  ItemClass: TViewItemClass;
begin
  ItemClass := GetClass(AId);
  if not Assigned(ItemClass) then
    Exit(nil);
  Result := ItemClass.Create(nil);
end;

destructor TViewItemFactory.Destroy;
begin
  FViewItems.Free;

  inherited;
end;

function TViewItemFactory.GetClass(AId: string): TViewItemClass;
var
  Info: TViewItemClassInfo;
begin
  Result := nil;
  if FViewItems.TryGetValue(AId, Info) then
    Result := Info.ViewItemClass;
end;

function TViewItemFactory.GetList: TArray;
begin
  Result := FViewItems.Values.ToArray;
end;

procedure TViewItemFactory.Regist(AId: string; AItemClass: TViewItemClass);
begin
  FViewItems.Add(AId, TViewItemClassInfo.Create(AId, AItemClass));
end;

initialization
finalization
  TViewItemFactory.ReleaseInstance;

Factory 클래스가 싱글톤 패턴이 적용되어 약간 복잡하다

주요 메소드는 클래스 타입을 등록하는 Regist 메소드와 클래스 타입을 제공하는 GetClass 메소드이다.


서브UI에서 클래스 등록

type
  TFrame1 = class(TFrame)
    Label1: TLabel;
    Circle1: TCircle;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

uses
  ClassTypeFactoryType;

{$R *.fmx}

initialization
  TViewItemFactory.Instance.Regist('프레임1', TFrame1);

서브UI에서는 ClassTypeFactory(TViewItemFactory)에 id('프레임1')와 클래스 타입(TFrame1)을 등록한다.


메인UI에서 서브UI 생성

uses
  ClassTypeFactoryType;

{$R *.fmx}

procedure TForm1.Button1Click(Sender: TObject);
var
  Info: TViewItemClassInfo;
  Item: TListBoxItem;
begin
  for Info in TViewItemFactory.Instance.List do
  begin
    Item := TListBoxItem.Create(ListBox1);
    Item.Parent := ListBox1;
    Item.Text := Info.Id;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Id: string;
  ItemClass: TViewItemClass;
begin
  if Assigned(FActiveControl) then
    FActiveControl.Free;

  Id := ListBox1.Selected.Text;
  ItemClass := TViewItemFactory.Instance.GetClass(Id);
  FActiveControl := ItemClass.Create(Self);
  FActiveControl.Parent := Layout1;
  FActiveControl.Align := TAlignLayout.Client;
end;

메인UI에서는 ClassTypeFactory에 등록된 서브UI를 참조할 수 있다.

메인UI는 Id 값으로 서브UI 클래스(TViewItemClass)를 가져와 동적으로 생성할 수 있다.

메인UI 소스에서는 서브UI 소스를 참조하지 않는다.(결합도를 낮출 수 있다.)


샘플코드

다운로드 :  01_ClassTypeFactory.zip

활용 : https://github.com/devgear/DevMax/blob/master/View/DevMax.View.Factory.pas



PS

짧은 시간을 할애해 정보를 자주 올리기 위해 두서없이 글을 작성했습니다. 혹시 이해되지 않는 내용이 있으면 댓글로 질문주시면 앞으로 보강하도록 하겠습니다.

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 Team Thoth/DevMax

Github 메인화면(README.md) 꾸미기

2014.07.19 15:42


Github를 통해 소스관리를 하는데요. 

이왕이면 첫화면에 설명도 넣고 하면 방문자들에게 도움이 됩니다.

(물론 첫화면 꾸미는 것 보다 안의 오픈소스의 내용이 더 중요합니다.)


README.md 파일은 마크다운(Markdown) 문법을 이용합니다. 위키등에서 사용하는 문법인데 익혀놓으면 다양하게 사용할 수 있습니다.


README.md 파일은 메인 디렉토리 외에 어떤 서브디렉토리에도 파일을 생성하면 Github 페이지에 출력됩니다.


마크다운 문법을 설명하는 내용의 링크를 소개합니다.


저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 Team Thoth/오픈소스

  1. 잘 봤습니다. 앞으로도 종종 들러서 참고하겠습니다. ^^

  2. 네 도움이 되셨으면 좋겠습니다.

[작업일지] 느슨하지만 괜찮아~

2013.02.25 23:26

작업 중단한지 어언 한달이 다되어 간다. ㅠㅜ


본래 마냥 쉬면 불안하기 마련인데

이번은 다르다...


요즘 읽는 사이먼 사이넥의 "나는 왜 이일을 하는가?"의 영향이 큰 것 같다.


요즘 나에게 왜?라는 질문을 많이 한다.

그리고 답을 찾으려 이런 저런 고민을 한다.


하지만 대부분 기존에 생각했던 것들이 다시 답으로 나오는 걸 보니

내가 우리가 고민하고 생각했던 것들이 헛된게 아니라는 확신이 든다.


아무쪼록 생각이 정리되고 난 후 다시 작업을 시작 할 수 있을 것 같다.


아자아자

재밌는 일 가치있는 일을 마음껏 하고, 행복해 지자~ 끝~

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 Team Thoth

[작업일지] 문자입력은 보류 중.

2013.01.29 02:23

2월 20일 발표가 잡혔다. 그래서 발표준비를 해야한다. ㅠㅜ

(살짝쿵 홍보 RT:FM 프로그래머로 사는 법

 http://onoffmix.com/event/12062)


난 천상 개발자인가보다 발표보다 개발이 더 좋으니...


문자입력을 어떻게 처리할까 고민하고 참고소스도 들여다 보는데...

음... 예상대로 많이 어렵다.


에디터를 만든다는 것 만만치 않다.


우선 클릭하고 입력하고 선택, 이동만 되게 하고

다음 더블클릭해서 수정되게 하고

다음 여러줄 입력 할 수 있게 하고

나중에 글자별 스타일 적용 시키고~


후후 쉽게 가야지~ 

IME처리가 문제예요~ 영어만하면 입력받아서 문자 그려주면 될 것 같구먼...


아무튼 문자입력은 잠정 보류 입니다.


PS - 미래를 준비하기 위해 딴일도 해야하는뎅 ㅠㅜ 동시에 몇개씩 일을 하니 내가 집중을 못하징(행복한 볼멘소리)





글만쓰면 서운하니까 팁하나!!


GUI와 Unittest입니다.

자세한 내용은 없고 아래 동영상 한번 보시고...

힌트는 "이벤트를 발생"

FIremonkey와 DUnit으로 작업된 Thoth Canvas 테스트입니다.


혹시 자세한 정보(방법, 샘플)를 원하시면 댓글 주세요^^



저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 Team Thoth DUnit, Firemonkey, TDD, Thoth Canvas, unittest

[작업일지] 그루핑 완료(alpha 0.4)

2013.01.24 02:17

그루핑에 대한 작업이 일단락 됐다.

겹치면 그룹화 되는 좀 일반적(파워포인트 등에서는 그룹 메뉴가 있다.)이지 않은 방식이지만 편한 것 같아서 시도해 봤다.

초반에 방향을 잘못잡아 반정도 작업한 것을 완전히 갈아 엎었지만

오히려 갈아 엎으며 코드도 짧고 깨끗해 지고 

내가 모든 것을 구현하지 않고 프레임워크(파이어몽키)의 메소드들을 이용했다.

(DoAddObject, DoRemoveObject)


그리고 Unittest의 도움을 대단히 많이 봤다.(해보니 좋다 TDD)

아직은 어설프지만 리펙토링 및 대규모 코드 갈아 엎기 할때 놓치지 않아서 마음이 편하다.


어쨌든 그루핑을 끝내서 0.4 버전이 완료가 됐고

마음같아서는 다음버전 기능인 문자입력을 들어가고 싶지만 더 큰것을 준비해야 하기에 잠시 멈춰야 겠다.

다음달 20일 발표 준비를 해야겠다.


제목은 "나무를 심는 프로그래머".





글만쓰면 아쉬우니 팁을 가끔 하나씩 넣어야 겠다.


팁이라고 할것 까진 없고 인터페이스를 사용하는 이유중 하나인 implement이다.


구현하다보면 전혀 다른 객체(클래스)인데 동일한 구현이 필요한 경우 사용된다.


예를들면 

드로윙 툴(토트캔버스)에서 

아이템을 캔버스(컨텐츠)에 올릴 수도 있고 아이템위에 아이템을 올릴 수도 있다.


그리고 캔버스에서 아이템으로 부모아이템 간 옮길 수 도 있다.

즉 부모가 어떤 놈인지 구분하기 대단히 어렵다.


위 상황에서 부모(Object.Parent)의 클래스 타입에 따라 분개하는 방법도 있지만

인터페이스를 사용하면 짧고 편리하게 구현이 가능하다.


아래와 같은 구조가 있다고 치자.

아이템과 컨텐츠가 IThItemContainer라는 인터페이스를 상속 받는다.


  IThItemContainer = interface
  ['{76A11805-EA40-40B6-84A1-71B4DF277DCD}']
    procedure ContainChildren(AContainer: TThItem);
  end;

  TThItem = class(TControl, IThItem, IThItemContainer)
  public
    procedure ContainChildren(AContainer: TThItem);
  end;

  TThContents = class(TControl, IThItemContainer)
  private
    procedure ContainChildren(AContainer: TThItem);
  end;

아래와 같이 부모를 찾았는데 FindParent

부모의 타입(Parent는 TFmxObject이다) 과는 상관없이 ContainChildren 메소드를 호출한다.(15번째 줄)

팁은 Supports라는 함수이다. COM을 사용할 때 많이 사용되는 좋은 함수이다.


procedure TThCanvasEditor.MouseUp(Button: TMouseButton; Shift: TShiftState; X,  Y: Single);
var
  ItemContainer: IThItemContainer;
begin
  inherited;

  if IsDrawingItem and Assigned(FDrawItem) then
  begin
    FDrawItem.Selected := True;

    // Set Parent
    FDrawItem.Parent := FContents.FindParent(FDrawItem); // 부모 찾기

    // Contain Children
    if Supports(FDrawItem.Parent, IThItemContainer, ItemContainer) then
      ItemContainer.ContainChildren(FDrawItem);

    if Assigned(FOnItemAdded) then
      FOnItemAdded(FDrawItem);
  end;
end;

인터페이스 사용하면 어렵지만 유용한 놈입니다^^


끝~

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 Team Thoth implement, Interface, Supports, 델파이, 인터페이스

[작업일지] 그루핑 처리

2013.01.23 01:48

토트캔버스 작업하며 느끼고 배우는 것들을 기록해야 겠다는 생각에 작업일지를 쓴다.

나중에 어떤 생각을 하며 작업했는지 되돌아 보면 재미있을 것 같다.


오늘은 아이템 그루핑 작업을 했다.

그루핑 작업에 대한 테스트케이스만 45개나 된다.

하지만 Zoom과 Rotate기능이 들어가면 또 생기겠지...하하


이제 3가지 항목만 처리하면된다.

TopLeft로 크기 조정 시 예외

중간크기 아이템을 큰아이템 위의 작은아이템이 덮을때 중간아이템에 작은 아이템을 추가하는게 맞을까? 하는 사용성

원의 경우 원의 영역에 아이템이 포함되는지 체크


얼른 그룹핑 끝나고 5단계로 넘어가고 싶다~

저작자 표시 비영리 동일 조건 변경 허락
신고

험프리.김현수 Team Thoth

Github for Windows 소개

2012.09.04 20:38

Github for Windows

우연히 Github 홈페이지를 서성이다. 새로운 물건이 보이네요.

그 물건은 바로 "Github for Windows"입니다.

Mac 환경에서 Github for mac을 보며 "맥에서는 참 편하구나..." 하고 생각했던 물건이 윈도우에도 나왔네요.

워낙 UX가 편하게 되어 있어 따로 설명하지 않고 화면만 추가합니다.

다운로드 및 설치

아래의 Github 홈페이지에서 다운로드 받을 수 있습니다.

github:windows - http://windows.github.com/

환경설정 - local repository 설정 등


저장소 가져오기 - clone. Github repository -> Local repository

수정 후 commit - 수정된 항목이 있을 경우 우측 노란 박스에 작업내용 추가 후 [COMMIT] 가능

서버(github) 반영 - 상단의 Sync 버튼 클릭하여 우측의 "unsynced commits"를 서버에 반영

편하네요^^ 끝~

신고

험프리.김현수 Team Thoth/오픈소스 github, Github for windows

  1. Blog Icon
    하하하하

    안녕하세요. 글 정말 잘보고 갑니다.ㅎ
    저도 이번에 github를 써보려고 공부중인데 궁금한점이 있어서요.
    그럼 이 github for windows는 기존의 tortoiseGit과 github의 역할을 하는건가요?
    아니면 다른 추가적인 역할이 있나요?

  2. 네... 간단하게 tortoiseGir과 git의 역할을 합니다.
    다만 약간의 기능이 적다고 보는게 맞을 것 같네요.

    저도 tortoiseGit을 주로 사용해서 Gitub for Windows와 자세한 기능 차이를 설명드리기는 어렵네요^^
    그래도 간단히 써봤을때는 유용하더라구요.

TortoiseGit을 이용해 Github에 저장소 생성 및 데이터 올리기

2012.03.25 03:24

이번 포스트에서는 실질적으로 Github의 원격저장소에서 소스를 가져오고 수정하여 올리는 내용을 설명합니다.

 아래의 절차대로 진행하겠습니다.
1, Github에 저장소 만들기
2, 로컬 저장소 만들기
3, 로컬저장소에 저장
4, 원격저장소에 저장(Github에 반영)
 

Github에 저장소 만들기

우선 원격저장소를 생성하기 위해 Github(https://github.com)에 접속 후 로그인합니다.

저장소 생성
메인화면 우측의 "Your repositories" 옆의 [New repository] 버튼을 클릭합니다.


아래와 같은 화면이 나오면 Project Name에 생성할 프로젝트 명(현재는 테스트를 위해 TEST입력)을 넣고 [Create reposityry] 버튼을 눌러 저장소를 생성합니다.


아래와 같은 내용이 표시됩니다.

이후의 절차를 설명한 내용인데 우선은 무시하셔도 됩니다. 우리는 GUI를 이용할 것이기 때문입니다.

로컬 저장소 만들기

Global setup
탐색기를 열고 저장소로 사용할 적절한 위치(저는 C:\hjfactory)로 이동합니다.
이후 탐색기 빈공간에 우측마우스를 클릭하여 TortoiseGit > Settings 메뉴를 호출합니다.


좌측 메뉴 중 Git 항목을 선택한 후 아래와 같이 본인의 이름과 이메일 주소를 입력합니다. 그리고 [확인] 버튼을 클릭하여 저장
(※ 이름의 경우 History 및 Log에 사용되므로 여러대의 환경에서 사용할 경우 구분되도록 합니다.)


로컬 저장소 생성
위의 탐색기에서 저장소로 사용할 폴더(저는 C:\hjfactory\TEST)를 생성합니다. 그리고 그 폴더를 우측 마우스를 눌러 Git Create repository here... 메뉴를 호출합니다.


위의 메뉴를 누르면 아래와 같은 화면이 나오고 그대로 [OK] 버튼을 클릭합니다.
(체크박스는 해당 저장소에서 작업을 안할경우 체크합니다.)


아래와 같은 메시지가 표시되면 성공입니다.(다른 메시지는 본적이 없네요^^)


로컬저장소에 저장

저장 데이터 준비
위에서 생성한 폴더(C:\hjfactory\TEST)에 들어가 Readme.txt파일을 생성합니다.
(변경된 내용이 있어여 저장소에 저장할 수 있기 때문입니다.)


데이터 저장
다시 이전 경로(C:\hjFactory)로 이동 후에 우측마우스를 눌러 Git Commit -> "master".. 메뉴를 선택합니다.


아래와 같은 Commit 창이 보이면 수정된 내용과 적용할 파일(체크박스)를 선택 하고 [OK] 버튼을 클릭하여 저장소에 저장합니다.


아래와 같은 메시지가 나오면 수정한 내용이 로컬 저장소에 저장된것 입니다.
(이후 Push 버튼을 눌러 원격저장소에도 저장 할 수 있습니다.)


원격 저장소에 저장(Github에 반영)

원격지 정보 등록

위의 화면에서 [Push] 버튼을 클릭합니다. 그러면 아래와 같은 창이 나오고 원격지정보를 등록하기 위해 [Manage] 버튼을 클릭합니다.


위의 버튼을 누르면 아래와 같은 창이 뜨고 원격지 이름(Remote)와 원격지 주소(URL)만 입력하고 [Add New/Save] 버튼을 클릭하여 원격지 정보를 저장합니다. 이후 [확인] 클릭

(※ 원격지 주소는 Github에서 저장소 만든 후 표시된 화면을 참고합니다.)


원격 저장소에 저장
위에서 원격지 정보를 등록하면 아래와 같이 Destination 목록에 위의 원격지 이름이 등록됩니다. 위에서 선택한 항목 선택 후 [OK] 클릭


드디어 마지막 단계 아래와 같이 성공 메시지를 보실 수 있습니다.
(마지막 단계여서 메시지를 확대했습니다^^)


Github 등록 확인
다시 Github 사이트로 이동하여 페이지를 새로고침 하면 아래와 같이 Readme.txt가 등록된 것을 확인 할 수 있습니다.


이것으로 저장소 생성 및 등록하는 내용을 마쳤네요.
다음에는 원격 저장소의 소스를 받아서 수정 후 올리는 부분을 설명하겠습니다.


저작자 표시 비영리 변경 금지
신고

험프리.김현수 Team Thoth/오픈소스 git, Git for windows, Git 소개, github, github commit, Github 소개, TortoriseGit, 깃허브, 오픈소스, 윈도우즈 Git

  1. 감사합니다. 잘 보고 갑니다.

  2. 네^^ 감사합니다. 또 오세요~

  3. Blog Icon
    안녕하세요

    안녕하세요 ,,, git 설치하려고 똑같이 따라했는데
    push이후에 다 입력하고 ok를 누르면 거북이가 몇초간 날아가더니
    git did not exit cleanly (exit code 1)
    라고 뜹니다. 해결방법이 없을까요..?

  4. 답변이 많이 늦었습니다.^^

    저도 구글링으로 검색을 해봤는데 검색이 안되는군요..-_-;
    혹시 제 환경에서 동일한 오류가 발생하거나
    관련정보 검색하게되면 꼭 답변 드릴게요.

  5. Blog Icon
    허..

    저도 안녕하세요 님과같이 똑같이 단계별로 진행했는데요
    git did not exit cleanly (exit code 1)가 뜹니다.
    해결법 혹시 아시는지요??ㅠㅠ

  6. 저도 궁금합니다. 왜 그럴까요?
    알게되면 답변드릴게요.^^

  7. Blog Icon
    IS

    스카이드라이브에 파일 넣어놓고 쓰려는데
    이거 로컬 저장소 지우는 방법좀;;
    그리고 제가 윈도우 8.1이라 스카이드라이브가 통합되어 있는데;;;
    제 계정명탓에 경로 인식이 안되네요 ㅠㅠ

  8. 우선 클라우드 서비스의 경우 파일을 동기화하는 부분이라
    Git과는 의미가 많이 다릅니다.

    스카이드라이브의 경우 (제가 사용해 보지는 않았지만) 실시간으로 PC1과 PC2의 특정 디렉토리를 동기화 하는 방식이구요.
    Git의 경우 여러사람이 소스코드 등의 문서를 공동작업하기 위해 합치고 나누는 작업등이 목적입니다.

    만약 혼자서 Git을 사용하시려면 로컬의 (스카이 드라이브 외의)특정 경로에서 Git으로 동기화 하는 것을 추천해 드려요.
    아무래도 수정이력과 가지치기(Branch) 등의 이점을 취할 수 있을테니까요.

  9. Blog Icon
    blueasa

    좋은 정보 감사합니다. :)

  10. 네~감사합니다^^

  11. Blog Icon
    초보코더

    우아.. git 뭐가 뭔지 하나도 몰랐는데 이거 따라해서 처음으로 성공했어요 ㅠㅠㅠ

    아직도 뭐가 원리인지는 잘 모르겠지만 좋은 정보 감사합니다.

  12. Blog Icon
    김덕현

    git을 처음접하는데 이글을 보고 저장소까지 잘올렸습니다.
    원격 저장소의 소스를 받아서 수정 후 올리는 부분 글도 기대하고 있겠습니다.
    감사합니다.

  13. Blog Icon
    금싸라기

    Azure Storage 와 같은 것인가요?

  14. 제가 Azure Storage를 정확히 알지는 못하지만 클라우드 저장소 개념인 것으로 예상되는데요.

    Github와는 다른 개념입니다
    Github는 소스코드를 저장하고, 이력을 관리할 수 있는 소스코드 저장소 역할이구요.
    Azure Storage는 소스코드 보다는 다양한 파일을 저장할 수 있는 클라우드 저장소로 이해하면 될 것 같습니다.

음력달력 생성기(hjLunarCalendarGenerator), 음력양력변환, 달력파일 생성(소스공개)

2012.02.07 10:48

2012-11-07 추가 - 블로그 정리하다. 기존 게시물을 날려먹어 다시 글을 등록했습니다.(아까운 소중한 댓글과 좋아요 ㅠㅜ)

2012-03-29 추가 -  하단에 소스공개 정보가 있습니다.

2015-12-28 추가 - 2017년 1월과 2월의 대월/소월 정보가 바뀐 버그를 바로잡았습니다.(JiNN 님의 댓글 감사합니다.)(v.0.9.2)


아이폰 캘린더 및 구글캘린더를 사용하면서 소소한 문제가 되는 음력일정을 자동 변환해 주는 프로그램입니다.

개인적으로 구글캘린더와 아이폰 연동 시 어르신 생신을 관리하기 어려워 직접 제작하여 공유합니다.
(소스코드도 곧 공개할 예정입니다.)  

음력달력 생성기(hjLunarCalendarGenerator)


기능은 아래의 3가지 입니다.

1, 음력 / 양력 변환
2, 음력일자 표시 달력 파일 생성
3, 음력 기념일 달력 파일 생성


1, 음력/양력 변환

음력변환 : 음력 년/월/일을 넣고 [음력을 양력으로 변환] 버튼을 누르면 변환된 양력 일자가 화면에 표시됩니다.
  - 윤달인 경우 [위 음력 일자가 윤달인 경우 선택하세요.] 체크박스를 체크하고 시도
양력변환 : 양력 년/월/일을 넣고 [양력을 음력으로 변환] 버튼을 누르면 변환된 음력 일자가 화면에 표시됩니다.

2, 음력일자 표시 달력 파일 생성

☞ 달력파일(ICS 포맷)을 생성하여 구글캘린더 등에 등록하는 기능입니다.

1, 달력범위 조정 : 달력 범위를 조정하여 연도를 조정 합니다.(해당 연도의 달력 파일이 생성됩니다.)   
2, 음력달력 표시 형식 선택
3, [달력파일 생성] 버튼 클릭
4, 파일저장 경로 선택 후 [저장] 버튼 클릭하여 달력 파일 생성    
5, 구글 캘린더 등록

 - 음력달력 테스트(녹색) : 음력이름으로 표시 항목으로 파일 생성 후 등록
 - 음력달력 테스트2(적색) : 5일 간격으로 표시 항목으로 파일 생성 후 등록 

3, 음력 기념일 달력 파일 생성

☞ 음력생일, 제사일 등과 같은 음력 기념일을 등록하고, 달력파일을 생성하는 기능입니다.

1, 달력범위 조정 : 달력 범위를 조정하여 연도를 조정 합니다.  
2, 기념일 추가 : [추가] 버튼을 클릭하여 “기념일 등록” 창을 호출합니다.
3, 기념일 등록 : 음력일자 및 기념일 내용을 입력하구 [저장] 버튼을 클릭합니다.

- 음력일자 : 음력 월과 음력 일을 입력합니다.(말일을 선택해야 하는 경우 [월의 말일로 처리] 체크박스를 선택합니다.) 

- 기념일내용 : 달력에 표시될 기념일 내용을 입력합니다.
4, [기념일 앞에 일자 표시] 체크박스 선택 시 달력에 표시되는 기념일 종류 앞에 일자가 표시됩니다.
5, [달력파일 생성] 버튼 클릭
6, 파일저장 경로 선택 후 [저장] 버튼 클릭하여 달력파일 생성    
7, 구글 캘린더 등록 


혹시 필요하신 기능이 있으시면 댓글달아 주세요.

2012-03-29 추가

해당 프로그램 소스를 공개합니다.

라이센스는 GPL이구요 Github를 이용하여 공개합니다.

프로그램은 델파이(Delphi 2010)라는 RAD Tool로 작성되었습니다.

GIthub 정보

 - https://github.com/hjfactory/hjLunarCalendarGenerator

 - Github 사용법([SW / Dev/오픈소스프로젝트] - GIT과 Github 안내

관심있으신 분은 참여해주시고 Follow도 신청해 주세요^^;

2012-03-29 추가 끝


개선된 내용

  • 2012-05-29 : v0.9.1 - 기념일 추가(신규) 창에서 [삭제] 버튼 누르면 오류 발생 해결


관련글


저작자 표시 비영리
신고

험프리.김현수 Team Thoth/공개소프트웨어 ICS파일, 구글캘린더, 음력 양력 변환기, 음력계산, 음력달력, 음력달력생성기, 음력변환, 음력일자 조회, 태그를 입력해 주세요.

  1. 구정이 다가오고 있습니다. 예전에 제가 만든 음력달력생성기입니다.
    이 참에 새해 음력생일 잊지 마시고 미리미리 등록해 놓으시라고 추천해 드립니다^^

  2. Blog Icon
    unity

    감사합니다. 정말 유용하게 잘 썼습니다.
    다만, 제 사용 환경 win7 64bit 에서 작은 문제가 있는 듯 하여 버그 리포팅 남깁니다.

    1. 기념일 달력 생성-추가-기념일 등록 창에 기념일 내용 입력시 커서가 네모나게 깜빡일 때 저장을 누르면 커서가 위치에 있던 곳의 글자가 사라립니다. 엔터를 누르면 안 사라지고요. 다 입력한 후 방향키로 오른쪽으로 한 칸 이동하거나, 스페이스바로 공백을 한 칸 넣어줘서 커서가 네모 모양이 아닌 1자가 되면 저장을 누르더라도 잘림없이 다 나타납니다. 추가한 기념일 내용을 다시 수정하는 경우에도 위와 동일하게 네모 모양 커서일때 커서가 위치한 곳의 한 글자가 사라지는 경우가 있습니다.

    2. 이건 기능 추가 건의인데요. 달력 파일 만들 때 SpecifiedData 파일이 폴더에 생기길래 창을 닫아도 입력 기념일 내용을 기억하는구나 싶어 달력 파일 생성 후 창을 닫고 다시 열어봤더니 47개 목록중 처음 9개만 빼고 (스크롤 바 생긴 이후의 목록은 전부) 다 사라졌습니다. 다시 시험해보려고 다 ㅈ우고 12개 정도 목록을 넣은 후 달력 파일을 생성하고 창을 닫았다 열었더니 이번엔 목록이 전부 다 사라졌습니다. 아까 9개 남았던 게 버그였겠지요. ㅎㅎ 한 번 입력한 기념일 목록을 txt나 db로 저장해 다시 불러내 쓸 수 있으면 좋겠습니다. 1~2년 단위로 음력 일정을 넣었다 전체 삭제하고 다시 새로 생성하는 일을 하려면 기존에 만들어놨던 기념일 목록을 다시 불러오는 기능이 필요할 것 같습니다. 뭐 안되면 할 수 없겠죠? ^^

  3. 버그레포팅 및 기능건의 감사합니다. 우선 기능의 경우 적극적으로 반영하겠습니다. 그리고 버그의 경우 확인하고 처리해야죠^^ 노력하겠습니다~ 다시한번 감사드립니다.

  4. 올려주신 버그 확인해 봤는데 환경문제인 것 같아요.
    제 테스트 환경도 윈도우7 64bit인데 동일한 버그가 나타나지 않네요.

    그리고 입력한 목록은 SpecifiedData.dat라는 파일이 실행파일과 같은 경로에 생성됩니다. 참고해주세요.

  5. 자료 감사합니다. 정말 구글캘린더에서 음력처리때문에 골치아팠는데 정말 좋은자료 만나 편안하게 사용할 수 있게 되었네요. ^^

  6. 편하게 사용하셨다니 그간 작업에 보람이 있네요^^
    앞으로도 잘 사용하시고 필요한 기능있으면 말씀해 주세요^^
    감사합니다.

  7. 마침 좋은 프로그램을 만나게 되어 고맙게 잘쓰고 있는데요
    음력달력을 설치했더니 핸드폰 바탕화면에 음력날짜가 10일마다 일정처럼 떠서 불편합니다
    삭제하고 싶은데 방법을 모르겠네요
    일일이 하나씩 삭제하려고 하니 엄두가 안나구요
    혹시 삭제하는 방법이 있나요?
    캘린더 초기화 말고 삭제하는 방법도 있었으면 합니다...

  8. 에고 기존 달력에 음력을 추가하셨나 보네요. 음력달력은 음력을 양력으로 변경해서 건건히 등록하기 때문에 캘린더를 하나 생성해서 등록하셔야 합니다. 안타깝게도 기존달력에 추가하신 것을 일괄적으로 지울 방법이 현재로는 없네요. 도움이 되지 못해 죄송해요 ㅠㅜ

  9. Blog Icon
    땡큐

    아. 그렇군요
    잘 모르고 설치한 제 탓이지요 ^^
    답변 감사드리구요
    앞으로 하시는 일 다 잘 되시고 좋은 일 있으시길 바랍니다 ^^

  10. Blog Icon
    망또차차

    구글링하다가 좋은프로그램 찾아서 편하게 잘쓰고 갑니다~

  11. 감사합니다^^ 좋다고 하시니 작업한 보람이 있네요^^

  12. Blog Icon
    bagnad

    매번 음력 기념일 입력한다고 고생했는데, 덕분에 달력을 한방에 정리했습니다.
    감사합니다. ^^

  13. 잘 사용하셨다고 하니 보람이 있네요^^

  14. Blog Icon
    오이김치

    감사합니다. 어르신들 생신이 문제였는데 해결됐네요^^

  15. 저도 처음 어르신 생신때문에 작업을 했지요^^
    잘 사용하시기 바랍니다.

  16. Blog Icon
    메롱꼬마별

    유용하게 잘 쓰겠습니다. 감사합니다.

  17. 네^^ 감사합니다.

  18. Blog Icon
    봉돌이

    고민을 한 방에 해결하는 프로그램이네요. 더 이상 확실한 방법이 없을 듯 합니다.
    정말 감사히 쓰겠습니다. ^^

  19. 네^^ 좋은말씀 감사합니다.~!!

  20. Blog Icon
    KY

    감사합니다. 덕분에 음력기념일을 구글 캘린더에 추가하여 잘 사용하고 있습니다. 누락된 음력 기념일을 추가하고 같은 파일명으로 저장한후, 구글캘린더에서 가져오기 실행하였더니, 추가한 기념일만 구글캘린더에 추가 된 것이 아니라 모든 기념일이 하루에 두개씩 표시됩니다. 구굴캘린더에 표시된 기존 기념일 전체를 한번에 삭제할 수 없나요?

  21. Blog Icon
    전경수

    와우 대박자료네요. 정말 잘 쓰겠습니다 감사합니다.

  22. 네 유용하게 사용하시기 바랍니다^^

  23. Blog Icon
    기발

    아이폰5 ios8.1 사용중인데
    기념일을 생성하면 한글폰트가 깨져 기호로 나옵니다.

  24. Blog Icon
    굿

    아이폰6에서 사용중인데 기념일 한글 폰트가 깨지네요
    또한 이벤트 추가말고 삭제법은없나요? 너무많아서 일일히 삭제하기가 힘들어요..

  25. 안타깝게도 삭제 기능이 없네요 ㅠㅜ
    그래도 새로운 캘린더를 만들고 해당 캘린더에 음력정보를 넣어 사용하기바랍니다. 그러면 캘린더를 통째로 지우면 음력정보도 통째로 지워집니다.

  26. Blog Icon
    경주

    달력 컴포넌트에서 우측상단의 년도를 클릭시 20개의 범위 안에서 선택할수있는데 이 범위를 늘릴 방법은 없나요?

  27. Blog Icon
    무척 유용

    아주 유용한 자료를 찾게 된 기념으로 댓글 한 방. ^^;

    올 초에 음력 달력이 필요해서 검색을 해 봤더니, 초장기간의 음력달력 ics 파일이 돌아다니던데, 아무래도 이 프로그램으로 생성한 파일 인듯?

    저건 너무 기간이 길어서 버리고(?), 다른 파일을 찾아서 사용 중인데 10일 간격으로 음력이 표시되고 어쩌고 하는걸 보니, 이 파일 역시, 김현수님이 만드신 이 프로그램으로 생성한 ics 파일 인 듯.

    여하튼 아주 대박인 프로그램입니다.

    이 프로그램 사용시 유의할 점은요.

    ******************************주의*********************************

    반드시 반드시 새로운 달력을 등록하셔서, 저 달력에서 이 프로그램으로 만든 ics파일을 불러 오세요.

    이 내용을 본문에 대문작만하게 하나 박아주세요. ^___^

    음력을 항상 확인할 것도 아닌데, 음력이 항상 켜져 있으면 귀찮잖아요? 그래서 필요할 때마다 저걸 켰다 껐다 하면서 사용하셔야 됩니다.

    위에 댓글을 보니, 벌써 기존 달력에 병합하신 분이 한 분... 쿨럭~

    공휴일이나 기념일 같은 경우에도 입맛에 따라, 새로운 달력으로 만드는 것도 괜춘. ^^;

    여하튼 이 프로그램 만드신 분이나 사용하시는 분이나 대박 나세요.

  28. Blog Icon
    JiNN

    안녕하세요. 좋은 자료 고맙게 썼습니다.
    그런데 오래된 글이라 이 댓글을 확인하실지는 모르겠지만 음력 2017년에 오류가 있는 것 같습니다. 다음, 네이버, 천문우주포털에서는 1월이 29일까지, 2월이 30일까지인데 이 프로그램에서는 1월이 30일, 2월이 29일까지네요. 이전이나 이후에도 이런 차이가 있는지는 잘 모르겠습니다. 우연히 내년과 내후년 기념일을 입력하다 보니 따로 검색해 직접 입력한 기념일과 이 프로그램으로 입력한 기념일이 차이가 나서 발견했거든요. 혹시 괜찮으시다면 이후 사용하실 다른 분들을 위해 수정해 주시면 좋겠습니다.
    다시 한번 감사드립니다.

  29. 천문우주지식정보(http://astro.kasi.re.kr/)를 참고해 음력 2017년 1월과 2월의 대월/소월이 뒤바뀐 부분을 수정했습니다.(v.0.9.2에 반영되었습니다.)
    의견 감사합니다.

  30. 구글스토어에서 캘린더 어플 마음에 드는 걸 찾았는데, 외국개발자가 만든 어플이라, 음력이 안 되서 아쉬웠는데, 사용후기에 여기서 음력달력 생성하고, 구글캘린더로 올리면 그 어플에서도 이용가능하다고 해서 방문했습니다.
    지금 달력은 잘 만들었습니다. 사용이 기대됩니다. 감사하게 잘 사용하겠습니다.

  31. 감사합니다.^^ 잘 사용하시기 바래요.

  32. Blog Icon
    unity

    잘 쓰고 있습니다!
    오류를 하나 더 발견해서 댓글 남깁니다.
    위 JiNN 님 댓글처럼
    2015년 12월이 29일까지, 2016년 1월이 30일까지인데
    이 프로그램에서는 12월이 30일, 1월이 29일까지네요
    올 음력 1.1~1.30의 생일이 하루씩 밀려서 뭔가 하다가 알았습니다.
    저야 기껏 개인적인 용도니 몇 명 안되서 수작업으로 금방 고쳤지만요. ^^
    좋은 프로그램 만들어 주셔서 합니다!

git에서 파일 무시하기(ignore pattern)

2012.01.27 10:59
제가 사용하는 TortoiseGit에는 TortoiseSVN과 다르게 GUI에서 ignore pattern을 제공하지 않습니다.

그래서 무시할 패턴을 작성한 파일을 수동으로 생성해야 합니다.

2가지 방법이 있습니다. ".gitignore" 파일 생성, ".git/info/exclude" 파일 변경
두가지 모두 파일의 내용은 동일합니다.

우선 .gitignore 방식으로 설명합니다.

1, 작업 디렉토리 최상위에 ".gitignore"파일을 생성합니다.
(또는 작업 디렉토리 최상위의 ".git/info/exclude"파일을 오픈합니다.)

2, 위의 파일을 메모장 등으로 엽니다.

3,  원하시는 제외 패턴을 작성하고 파일을 저장 합니다.(끝)

패턴 작성 시 참고사항은

# 이후의 내용은 주석 처리 됩니다.

제가 사용하는 델파이의 무시 패턴은 아래와 같습니다.(.gitignore 파일은 첨부합니다.)

*.dcu

*.~*

*.dproj.local

*.identcache

__history

*.drc

*.map

*.zip

*.exe

*.dll

*.elf

.gitignore
다른 패턴은 아래 링크를 확인하세요.
https://github.com/github/gitignore  


신고

험프리.김현수 Team Thoth/오픈소스

  1. 두가지 방식중 .gitignore를 사용하는 방법은 저장소에도 영향을 미치므로 clone 하는 사람도 동일하게 적용이 가능한 것이고, .git/info/exclude로 무시하는 방법은 자신만 영향을 미치는 방법입니다. 상황에 맞게 사용하면 되지요 ^^

Github와 로컬 환경 설정

2012.01.13 12:27
이번 포스트에서는 Github의 사용자 인증을 위한 SSH Key 등록에 관하여 설명합니다.
현재 저는 TortoiseGit을 사용하므로 Puttygen 및 pageant를 이용하여 SSH Key 생성 및 인증작업을 진행 하는 방식으로 설명합니다.

 
SSH Key 등록은 아래의 절차로 진행합니다.
1, SSH 생성(with PuTTY Key Generator)
2, 인증 에이전트(Pageant.exe)에 Key 등록
3, Github에 public key 등록

SSH 생성

 해당 작업은 TortoiseGit의 설치가 선행되어야 합니다. 만약, 설치 전이시면 설치를 먼저 해주세요.

PuttyGen 실행

시작 메뉴를 이용하여 TortoiseGit의 PuttyGen를 실행합니다.


Open SSH key 생성

 화면이 나오면 [Generate] 버튼을 클릭하면 아래와 같은 화면이 나옵니다. 아래의 붉은 큰박스에다 마우스를 올리고 임의로 마우스를 움직이면 상단의 프로그레스바가 증가하여 생성이 완료됩니다.


Private key 저장

 생성이 완료되면 아래와 같이 "Public key for pashing into OpenSSH authorized keys file" 등이 생성됩니다.
 
 우선 우리에게 필요한 Key 종류는 private key 이므로 [Save private key] 버튼을 클릭하여 저장할 경로를 선택(e.g.> C:\Users\<사용자명>\ssh 등)하여 PPK파일을 저장합니다.
 (선택사항)Key passphrase 항목에 암호를 입력하여 암호를 사용 할수도 있습니다.


우선 위의 윈도우는 닫지 않고 그냥 둡니다.(위의 Public key를 복사하여 Github에 등록해야 합니다.)

인증 에이전트에 Key 등록

Pageant 실행
 시작메뉴를 이용하여 Pageant를 실행합니다.


만약 화면이 보이지 않으면 트레이 아이콘을 확인하여 로드하세요.



Key 등록
 [Add key] 버튼을 눌러 위에서 저장한 Private key를 선택하여 Key를 등록합니다.(SSH Key의 passphrase를 입력하셨다면 입력하신 암호를 입력합니다.)


위 처럼 목록이 하나 생기면 성공입니다.

☞ 참고 : 위의 작업(Pageant 실행 및 Key 등록)은 윈도우 시작 시 자동으로 실행되지 않으므로 추가적인 작업이 필요합니다.

시작프로그램에 등록
시작메뉴에서 시작프로그램 항목의 팝업메뉴를 호출하고, 열기버튼을 선택하여 시작메뉴 윈도우탐색기를 호출합니다.


위에서 열린 윈도우에서 "새로 만들기 > 바로가기"를 선택합니다.


그리고, 위의 그림처럼 "pageant.exe"의 경로를 선택하고 그 뒤에(공백 한칸) SSH Private key 경로를 입력하여 바로가기를 만듭니다.

Github에 public key 등록

Github에 접속 후 로그인을 합니다.

SSH Public Keys 화면으로 이동
상단의 Account Settings 버튼을 클릭 후 SSH Public Keys 메뉴로 이동합니다.
Add another public key를 눌러 SSH key 등록 화면을 호출합니다.


Keys 등록
아래와 같은 화면이 나오면 PuttyGen의 Key를 복사하여 붙여넣기 합니다. Title 항목은 비우거나 구분이 가능한 제목을 입력하시면 됩니다. 그리고 Add key를 눌러 추가 합니다.



이것으로 SSH Key 등록까지 마쳤습니다.
다음 장에는 실제 저장소를 만들고 로컬에 가져와 수정하여 서버적용하는 부분을 설명하겠습니다.

 


신고

험프리.김현수 Team Thoth/오픈소스

Windows용 Git Client(msysgit: Git for Windows, TortoriseGit) 설치

2012.01.13 02:05
이번 포스팅에서는 윈도우즈에서 Git을 사용할 수 있는 환경을 구성하는 방법을 설명합니다.
앞선 글에서 말씀드린 것과 같이 msysgit과 TortoiseGit을 대상으로 합니다.

msysgit은 윈도우용 Git 프로그램입니다.
TortoiseGit은 Git의 편한사용을 위한 사용자 인터페이스라고 보시면 됩니다.

설치는 아래 순서로 진행 됩니다.
 1, msysgit(Git for windows) 설치
 2, TortoiseGit 설치
 3, 설치 확인


msysgit 설치

제품 홈페이지가 변경이 되었습니다.(Github로 이동했습니다.) 다운로드 및 설치과정은 동일합니다.

  • http://msysgit.github.io/
이전주소
  • 제품 홈페이지(http://code.google.com/p/msysgit/) 방문
다운로드 탭에서 최신 파일을 다운로드 받아 실행합니다.
(첨언: Git-X.X.XpreviewYYYYMMDD.exe 형태의 파일을 받으세요.)


설치화면이 나오면 각 화면 확인하시고 다음, 보시다싶이 GPL 라이센스 입니다.

설치경로 선택 및 설치항목 선택하시고 다음

시작메뉴와 명령어 처리방식인데 그냥 다음 누르세요.

아래 화면에서 Use(Tortoise) Plink 선택

설치를 진행합니다.


설치를 완료합니다.

 

TortoiseGit 설치

 제품 홈페이지(http://code.google.com/p/tortoisegit/) 방문
다운로드 탭에서 환경에 맞는 파일 다운로드 후 실행합니다.


설치화면이 나오면 내용확인 후 다음버튼 누릅니다.

SSH client는 위의 msysgit과 동일하게 TortoisePLink를 선택합니다.

설치를 진행하시고

설치를 완료합니다.


설치 확인

설치는 어렵지 않게 끝나셨지요?
이후 제가 삽질한 SSH key 등록을 하시고 사용하시면 됩니다.

그전에 우선 설치 확인부터 해볼까요?

PC의 임의의 디렉토리에 마우스 오른쪽 버튼을 누르면 아래와 같이 "TortoiseGit" 메뉴가 나오면 정상 설치 된것입니다.
(Git Init Here, Git Gui, Git Bash의 경우 msysgit의 메뉴입니다. 64bit 환경에서는 보이지 않습니다.)


위 메뉴에서 Settings 메뉴를 선택하시고, 좌측 메뉴트리에서 Network 항목 선택하여 "SSH client"항목의 경로를 확인합니다.


이상으로 설치는 완료되었습니다.
설치된 프로그램으로 설정하고 사용하는 내용은 다음글에서 안내합니다.


신고

험프리.김현수 Team Thoth/오픈소스 git, Git for windows, Git 소개, github, Github 소개, msysgit, TortoriseGit, 윈도우즈 Git, 토토이즈깃

  1. Blog Icon
    wooheaven

    msysgit 다음에 tortoisegit 을 설치했는데요...

    msysgit 설치 과정에서

    Git Setup 창에서

    Choosing the SSH executable 창이 보이질 않습니다.

  2. 버전이 업데이트 되면서 일부 과정에 차이가 있네요.
    "Use Plink"가 기본설정인 것으로 본것 같은데 설치할때 유심히 보시면 SSH관련된 항목이 보이실테니 잘 보시고 기본으로 설치하셔도 문제되지 않을 겁니다.^^

  3. Blog Icon
    hi

    Git Init Here, Git Gui, Git Bash 버튼이 안보여서 꽤나 고생해쓴데
    64비트라서 그렇군요ㅠㅠ..이 버튼이 없어도 정상적으로 사용할 수 있나요?

GIT과 Github 안내

2012.01.13 01:44

개인적으로 진행하는 오픈소스에서 Github를 이용하기로 하여, Github 사용법을 조사하여 포스팅 합니다.

순서는 아래와 같이 순서로 진행하겠습니다.


새로 시작하시는 분들에게 참고가 됐으면 하네요.

우선 기본적인 개념을 정리해 볼게요.

Git이란?

공식사이트 : http://git-scm.com/

 리누스 토발즈가 linux kernel 소스 관리를 위해 만든 소스 버전 관리 프로그램입니다.

 Git은 속도에 중점을 둔 분산형 버전관리 시스템(DVCS)이며, 대형 프로젝트에서 효과적이고 실제로 유용합니다.

 Git은 SVN과 다르게 commit은 로컬 저장소에서 이루어 지고 push라는 동작으로 원격 저장소에 반영됩니다.(로컬 저장소에서 작업이 이루어져 매우 빠른 응답을 받을 수 있습니다.)
 또한 받을때도 pull 또는 fetch로 서버에서 변경된 내역을 받아 올 수 있다.


공식 사이트에 나온 Git의 특징은 아래와 같습니다.


1, Distributed development  

 전체 개발 이력을 각 개발자의 로컬로 복사본을 제공하고 변경된 이력을 다시 하나의 저장소로 복사한다.

 이러한 변경은 추가개발지점을 가져와, 로컬개발 지점과 동일하게 병합(merge)할 수 있다.저장소는 Git protocol 및 HTTP로 쉽고 효율적(특별한 웹서버 구성없이)으로 접근할 수 있다.


2. Strong support for non-linear development

 신속하고 편리항 branch 및 merge 지원, 비선형(여러갈래) 개발 이력을 시각화하고 탐색 할 수 있는 강력한 도구를 제공한다.

  
3. Efficient handling of large projects

 Git은 매우 빠르고, 대형프로젝트나 이력이 많은 작업에 매우 합리적이다. Git은 대부분의 다른 버전관리시스템보다 빠르게 요청한다. 그리고 일부 작업에서는 더 빠르게 진행한다.
 또한, 최근의 정상급 오픈소스 버전관리 시스템보다 장기간의 수정내역을 매우 효율적인 압축방법을 사용한다.


4. Cryptographic authentication of history

 GIt의 이력은  성공한 개발이력의 commit에 의해 개정명으로 저장된다. 일단 그것이 배포되면, 그것을 모르고 예전버전으로 변경하는것은 불가능하다. 또한, 그것들을 암호화 할수 있다.

  

5. Toolkit design

 UNIX의 전통에 따라, GIT은 C로 작성된 많은 소규모 도구모음이다, 그리고 많은 스크립트들이 기능 보강을 제공한다. Git은 새로운 기발한 작업을 위한 손쉬운 사용과 쉬운 스크립팅을 위한 도구를 제공한다.

원문 - http://git-scm.com/about/


Github란?

공식사이트 : http://github.com/ 


 소셜코딩을 모토로 다른 사람들과의 협업할 수 있는 제일 좋은 방법이라 소개하네요. 
 이미 세계적으로는 큰 인기 몰이 중이나 우리나라에서는 아직 많이 알려지지 않았습니다. twitter, facebook, rackspace, digg, Yahoo, shopify, EMI, siz apart 등 쟁쟁한 업체들이 이미 github를 사용하고 있습니다.
 Github는 공개용 저장소(무료)와 개인저장소(유료)로 사용가능하며, 공개용 저장소의 경우 Github 사이트에 노출이 되어 다른 사람들과 쉽게 공유 할 수 있습니다. 

 Github는 본인인증을 위해 SSH Key를 사용하여 개인을 인증합니다. 사용방법은 다음장에서 설명하겠습니다.

 더 자세한 정보는 홈페이지를 통해서 확인 해주세요.


Github 가입 및 저장소 생성

github 홈페이지에 방문하여 "Plans, Pricing and Signup" 메뉴를 선택하여 가입합니다

무료 계정 생성 버튼을 이용하여 회원가입 하세요.

로그인 후 저장소를 생성합니다. 

Project Name이 저장소 명이 됩니다. 


우선은 저장소까지만 만들고 프로그램 설치 후 연동 해 보겠습니다.

프로그램 설치 등은 다음 글을 참고해 주세요.

관련글



신고

험프리.김현수 Team Thoth/오픈소스 git, github, msysgit, TortoriseGit, 소셜코딩, 오픈소스

  1. Blog Icon
    제갈식

    좋은팁이네요, 좀 퍼가겠습니다.

    감사합니다.

    http://cafe.naver.com/iphonediy

  2. 네^^ 감사합니다.

  3. 좋은 정보 감사합니다.

    제 블로그에 링크 좀 할게요. :)

  4. 네 마음껏 퍼가세요^^ 조금 지난정보지만 유용하시길~

  5. Blog Icon
    SJKIM

    깃허브 개념을 가장쉽게 설명한 블러그중에 하나일것 같습니다. 감사합니다.

  6. Blog Icon
    seungyeon

    좋은정보 감사해요! 링크좀 할께용~!!

  7. Blog Icon
    이은영

    좋은글이네요 출저 표시해서 퍼갈게요 ㅎㅎ
    https://www.facebook.com/programmmmer

  8. Blog Icon
    야채소

    좋은 정보 감사드립니다! 깃 구조및 차이점.. 제가 궁금했던 것들 시원하게 긁어주시네요ㅎㅎ
    비공개스크랩 해갑니당...^^ (blog.naver.com/gayoun3)