전체 글

728x90
반응형

명령어

$ git log

git의 히스토리를 조회하는 명령어이다.

해당 명령어를 실행하면, 아래와 같이, git 커밋의 히스토리가 보여지게 된다. 

 

xxxxx@NP-PC0000015 MINGW64 /e/999.Github/sample_project (master)
$ git log

commit 6c516f5dde5a03fddf1424e04bf3b09a51b22d49 (HEAD -> master, origin/master, origin/HEAD)
Author: jeje <jeje@xxxxxx.com>
Date:   Mon Dec 9 19:48:44 2019 +0900

    인터페이스 수정

commit 5efe981f572d6dd9b52bc12238b79cd5e335c25e
Author: jeje <jeje@xxxxxx.com>
Date:   Thu Dec 5 18:18:35 2019 +0900

    샘플 추가

commit d874adb9ef530fd4605ce44d1fedbe771483bd4e
Author: jeje <jeje@xxxxxx.com>
Date:   Wed Dec 4 23:41:19 2019 +0900

옵션

수량 제어

$ git log -10

git log 명령어 뒤에 -10 의 숫자를 붙이게 되면, 최근 커밋한 10개의 히스토리만 보여준다.

 

 

로그 포멧 변경

$ git log -10 --pretty=format:"%an - [%h] %s\n"

나만의 포맷으로 결과를 출력하고 싶을 때 사용한다. 특히 결과를 다른 프로그램으로 파싱하고자 할 때 유용하다. 이 옵션을 사용하면 포맷을 정확하게 일치시킬 수 있기 때문에 Git을 새 버전으로 바꿔도 결과 포맷이 바뀌지 않는다.

 

위 옵션으로 출력을 하게 되면,

아래와 같이 간결한 형태로 커밋 히스토리를 볼 수 있다.

이는 Jenkins 와 연동하여 사용하면, 어떠한 커밋이 최근에 있었는지 보여줄수 있고, 추가적인 작업도 다양하게 할 수 있다.

xxxxx - [6c516f5] 인터페이스 수정\n
xxxxx - [5efe981] 샘플 추가\n
xxxxx - [d874adb] using 제거\n
xxxxx - [878d2ca] Mock 샘플 테스트\n
xxxxx - [27091e8] 프로젝트 생성\n
xxxxx - [58cd4dd] Initial commit\n

 

git log --pretty=format 에 쓸 몇가지 유용한 옵션

옵션 설명
%H 커밋 해시
%h 짧은 길이 커밋 해시
%T 트리 해시
%t 짧은 길이 트리 해시
%P 부모 해시
%p 짧은 길이 부모 해시
%an 저자 이름
%ae 저자 메일
%ad 저자 시각
%ar 저자 상대적 시각
%cn 커미터 이름
%ce 커미터 메일
%cd 커미터 시각
%cr 커미터 상대적 시각
%s 요약

 

 

https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%BB%A4%EB%B0%8B-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0
728x90
728x90
반응형

C# 인터페이스와 추상클래스의 차이점

  Interface Abstract Class
접근 지정자

- 함수에 대한 접근 지정자를 가질수 없습니다.
- 기본적으로 public 입니다.

- 함수에 대한 접근 지정자를 가질 수 있습니다. 
구현 - 구현이 아닌 서명만 가질 수 있습니다.  - 구현을 제공할 수 있습니다. 
속도 - 인터페이스가 상대적으로 느립니다.  - 추상 클래스가 빠릅니다.
인스턴스화 - 인터페이스는 추상적이며 인스턴스화 할 수 없습니다.  - 추상클래스는 인스턴스화 할 수 없습니다. 
필드 - 인터페이스는 필드를 가질 수 없습니다. - 추상클래스는 필드와 상수를 정의 할 수 있습니다.
메소드 - 인터페이스에는 추상메소드만 있습니다. - 추상클래스에는 비추상메소드가 있을 수 있습니다.

 

  • C#에서 클래스는 하나 이상의 인터페이스를 상속합니다. 그러나 클래스는 하나의 추상클래스만 상속 할 수 있습니다.
  • C#에서 인터페이스는 생성자를 선언할 수 없습니다. 추상 클래스는 생성자를 선언할 수 있습니다.
  • C#에서 인터페이스는 클래스의 외부 능력을 정의하는 데 사용됩니다. 추상 클래스는 클래스의 실제 ID를 정의하는 데 사용되며 객체 또는 동일한 유형으로 사용됩니다.
  • C#에서 다양한 구현이 메소드 서명 만 공유하는 경우 인터페이스가 사용됩니다. 다양한 구현이 동일한 종류이고 동일한 동작 또는 상태를 사용하는 경우 추상 클래스가 사용됩니다.
  • C#에서 새 메소드가 인터페이스에 추가 된 경우 모든 인터페이스가 구현 된 위치를 추적하고 해당 메소드의 구현도 추가해야합니다.  추상 클래스에서 새 메소드가 추가 된 경우 기본 구현을 추가 할 수있는 옵션이 있으므로 모든 기존 코드가 올바르게 작동합니다.

 


정리


C#은 데이터 추상화에 사용되었습니다. 여러 클래스가 인터페이스를 구현해야하는 경우 인터페이스가 추상 클래스보다 낫습니다. 인터페이스 멤버는 정적일 수 없으며, 추상 클래스의 유일한 완전한 멤버는 정적 일 수 있습니다.


C#은 다중 상속을 지원하지 않으며 인터페이스는 주로 다중 상속을 구현하는 데 사용됩니다.

클래스는 하나 이상의 인터페이스를 구현할 수 있으며 하나의 추상 클래스에서만 상속합니다.

인터페이스는 주로 메서드 나 기능을 구현할 필요가없는 경우에만 사용됩니다.

추상 클래스는 최소한의 기본구현을 필요할때 사용됩니다.

 

C# 인터페이스와 추상클래스는 요구 사항에 따라 응용 프로그램을 개발하는 데 많이 사용되는 객체 지향 프로그래밍 개념입니다. 그것은 더 편안하고 비즈니스 요구 사항에 맞는 기술 리드에 의해 순수하게 선택됩니다.

C# 인터페이스와 추상 클래스는 모두 사용하기 쉽고 모든 프로그래밍 언어에서 쉽게 배울 수 있습니다.

728x90
728x90
반응형

 

 

프로젝트 생성

Jenkins 좌측 메뉴중 "새로운 Item" 을 등록하는 메뉴를 선택하면, 아래와 같은 화면으로 전환이 됩니다. 

 

Enter an item name 부분에 프로젝트를 구분할 이름을 명시 해 줍니다.

일반적인 프로젝트라면, Freestyle Project 메뉴를 선택 한 후 저장해주시면 됩니다.

 

프로젝트를 생성하게 되면, 

일반적인 구성을 할 수 있는 메뉴로 넘어가게 되며, 

Gitlab과 소스 연동을 위한 소스 코드 관리 메뉴로 이동합니다. 

 


소스 코드 관리

 

Git 과 연동을 하기 위해서, Repositories URL 에 Gitlab 프로젝트 URL을 명시해 주고, 

아래 서명 부분은 최초 연동시 Add 버튼을 클릭하여, Gitlab의 계정을 등록해줍니다.

 


빌드 유발

지속적인 통합 CI 를 위해서는, 주기적으로 빌드를 진행시켜, 항시 배포 가능한 상태인지 확인을 해야 하는데요.

저희는 10분 마다 체크하여, Commit 발생하였을때, 빌드를 진행하는 프로세스로 등록을 해 놨습니다. 

 


빌드

저희는 Nuget 패키지를 사용하여, 의존성을 관리하고 있습니다. 

물론 일부는 Third-Party 의존성을 가지고 있지만, 대부분 Nuget package를 이용하고 있습니다.

빌드시, 항상 Nuget Package 를 최신화 하여 빌드를 진행하고 있으며, 

위 command 는 누겟 패키지를 복구하는 명령어 입니다.

 

C:\nuget restore WebServer.sln

 

 

그리고 Build는 지난번에 등록한 MSBuild 와 연계하여 빌드를 진행하도록 구성하였고, 

xml 파일을 이용해서 빌드를 진행하도록 설정하였습니다. 

 


파라메터를 이용한 빌드 구분

빌드 진행시, 추가 Parameter 를 이용하여 빌드를 진행 할 수 있습니다.

간혹 Brunch 별로 빌드를 할 경우가 있다면, 매개변수 이용을 체크해서 진행하면 도움이 됩니다. 

 

 

 

위에 매개변수를 셋팅하게 되면, 이와같이 Brunch 를 로드하여, 빌드를 진행 할 수 있게 해줍니다. 

 

728x90
728x90
반응형

 

 

개요

젠킨스에서 MSBuild 를 이용해서 빌드 및 배포를 진행하려면 MSBuild Plugin 이 설치 되어 있어야 하며, 

기본적으로 .NET Core 로 개발된 프로젝트가 아닌이상, Windows 에 Jenkins가 설치되어 있어야 합니다.

 


Plugin 설치

 

Jenkins 관리 > 플러그인 관리

 

플러그인 메뉴 내에 있는 MSBuild 플러그인을 설치 해줍니다.

 

 


MSBuild 설정

Jenkins 관리 메뉴에 접속하면, Global Tool Configuration 메뉴를 찾으실 수 있으며, 해당 메뉴에서 MSBuild에 대한 기본 셋팅을 진행 할 수 있습니다. 

 

 

저희 프로젝트는 지속적으로 Framework를 업그레이드 해왔기 때문에, 다양한 형태로 MSBuild 를 설정해놨으며, 프로젝트에 성격에 맞게 MSBuild를 설정 해서 사용하였습니다. 

 

 

위 설정이 Jenkins에서 MSBuild 를 사용하기 위한 기본 설정이며, 

Jinkins가 설치되어 있는 서버 혹은 장비에는 MSBuild 와 관련된 툴이 설치 되어 있어야 합니다. 

 

 

https://visualstudio.microsoft.com/ko/downloads/?rr=https%3A%2F%2Fwww.google.com%2F

 

다운로드 | IDE, Code & Team Foundation Server | Visual Studio

Visual Studio Community, Professional 및 Enterprise를 다운로드하세요. 지금 무료로 Visual Studio Code 또는 Team Foundation Server를 체험해 보세요.

visualstudio.microsoft.com

 

728x90
728x90
반응형

 

 

방화벽

-- 방화벽 정지하기
[root@localhost /]# systemctl stop firewalld

-- 방화벽 시작하기
[root@localhost /]# systemctl start firewalld

 

-- 방화벽 설정
[root@localhost /]# firewall-cmd --permanent --zone=public --add-port=6379/tcp
[root@localhost /]# firewall-cmd --reload


-- 방화벽 체크
[root@localhost /]# vi /etc/firewalld/zones/public.xml

IP 확인 및 변경

[root@localhost /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:15:5d:12:a2:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.88/24 brd 192.168.137.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe12:a200/64 scope link
       valid_lft forever preferred_lft forever

 

-- 네트워크 설정 경로
[root@localhost /]# cd /etc/sysconfig/network-scripts/


-- 네트워크 설정 파일
[root@localhost network-scripts]# ls
70-persistent-ipoib.rules  ifdown           ifdown-bnep  ifdown-ippp  ifdown-post    ifdown-sit     ifup-Team      ifup-bnep  ifup-ippp  ifup-plip   ifup-ppp     ifup-tunnel       network-functions
ifcfg-eth0                 ifdown-Team      ifdown-eth   ifdown-ipv6  ifdown-ppp     ifdown-tunnel  ifup-TeamPort  ifup-eth   ifup-ipv6  ifup-plusb  ifup-routes  ifup-wireless     network-functions-ipv6
ifcfg-lo                   ifdown-TeamPort  ifdown-ib    ifdown-isdn  ifdown-routes  ifup           ifup-aliases   ifup-ib    ifup-isdn  ifup-post   ifup-sit     init.ipv6-global

ip addr 명령어로 네트워크를 확인하였을때, lo와 eth0 두개의 네트워크가 보이는 걸 알 수 있다. 

lo 는 항상 보여지는 것 같고 (정확히는....)

eho0 네트워크가 기본적으로  UP 상태인 것을 확인 할 수 있다.

 

[root@localhost network-scripts]# vi ifcfg-eth0




TYPE=Ethernet
BOOTPROTO=dhcp	-- dhcp 설정상태
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=d7790772-01fe-426c-a759-ade7a7159902
DEVICE=eth0
ONBOOT=yes		-- 최초 no 로 설정되어 있으며, 재부팅시 계속사용한다면 yes로 변경

 

변경 후에는, network를 재시작 혹은 재부팅 해주면 됩니다.

[root@localhost network-scripts]# systemctl restart network

혹은

[root@localhost network-scripts]# service network restart

728x90
728x90
반응형

 

Windows Server와 Linux를 혼용해서 사용하다보니, Windows 쪽으로 작업이 쏠리다 보면, 

어느순간 Linux 쪽 디렉토리 구조가 낫설때가 있습니다.

CentOS 에만 적용된 구조는 아닌 공통된 구조입니다.

잊지 않기 위해서 정리해봅니다.

 

Linux Directory 구조

[root@localhost /]# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

 

/

최상위 디렉토리(root directory). 모든 디렉토리는 최상위 디렉토리를 기준으로 위치된다.

 

/bin

대부분의 중요한 실행 파일들이 담겨 있다.

 

/boot

시스템 부팅에 관련된 파일들이 담겨 있다.

 

/dev

디바이스 파일들이 담겨 있다.

 

/etc

시스템 설정 상태를 담고 있는 파일들이 담겨 있다.

 

/home

일반 계정 사용자들의 홈 디렉토리를 담고 있다.

 

/lib, lib64

공유 라이브러리 파일들이 담겨 있다.

 

/mnt

다른 장치들을 마운트하는 디렉토리

 

/proc

프로세스 정보를 담고 있는 파일들이 담겨 있다.

 

/root

root의 홈 디렉토리.

 

/sbin

root가 시스템 운영을 위해 필요한 실행 파일을 담고 있다.

 

/tmp

임시 디렉토리

 

/usr

사용자들을 위한 대부분의 프로그램들과 설정 파일들이 담겨 있다.

 

/var

로그 파일 등의 시스템 관리와 관련된 정보들이 저장되는 디렉토리.

728x90

+ Recent posts