전체 글
-
[Git] Commit 히스토리 조회하기2019.12.13
-
[C#] interface 와 abstract class 의 차이2019.12.12
-
[Jenkins] Gitlab 연동 및 Build셋팅2019.12.11
-
[Jenkins] 젠킨스 MSBuild 셋팅2019.12.10
-
[CentOS 7] Network 관련 셋팅 명령어 정리2019.12.10
[Git] Commit 히스토리 조회하기

명령어
$ 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
'Git, SVN' 카테고리의 다른 글
[SVN] TortoiseSVN 설치하기 (0) | 2020.04.08 |
---|---|
[Git] Windows Tortoisegit 설치하기 - 거북이git 설치 (0) | 2020.01.16 |
[Git] 윈도우버전 Git설치하기 (Git for Windows) (0) | 2020.01.16 |
[Git] 프로젝트의 Git brunch 관리 정책 (0) | 2020.01.09 |
[Git] git 로컬 저장소 기준으로 원격 저장소 변경하기 (0) | 2019.11.20 |
[C#] interface 와 abstract class 의 차이

C# 인터페이스와 추상클래스의 차이점
Interface | Abstract Class | |
접근 지정자 |
- 함수에 대한 접근 지정자를 가질수 없습니다. |
- 함수에 대한 접근 지정자를 가질 수 있습니다. |
구현 | - 구현이 아닌 서명만 가질 수 있습니다. | - 구현을 제공할 수 있습니다. |
속도 | - 인터페이스가 상대적으로 느립니다. | - 추상 클래스가 빠릅니다. |
인스턴스화 | - 인터페이스는 추상적이며 인스턴스화 할 수 없습니다. | - 추상클래스는 인스턴스화 할 수 없습니다. |
필드 | - 인터페이스는 필드를 가질 수 없습니다. | - 추상클래스는 필드와 상수를 정의 할 수 있습니다. |
메소드 | - 인터페이스에는 추상메소드만 있습니다. | - 추상클래스에는 비추상메소드가 있을 수 있습니다. |
- C#에서 클래스는 하나 이상의 인터페이스를 상속합니다. 그러나 클래스는 하나의 추상클래스만 상속 할 수 있습니다.
- C#에서 인터페이스는 생성자를 선언할 수 없습니다. 추상 클래스는 생성자를 선언할 수 있습니다.
- C#에서 인터페이스는 클래스의 외부 능력을 정의하는 데 사용됩니다. 추상 클래스는 클래스의 실제 ID를 정의하는 데 사용되며 객체 또는 동일한 유형으로 사용됩니다.
- C#에서 다양한 구현이 메소드 서명 만 공유하는 경우 인터페이스가 사용됩니다. 다양한 구현이 동일한 종류이고 동일한 동작 또는 상태를 사용하는 경우 추상 클래스가 사용됩니다.
- C#에서 새 메소드가 인터페이스에 추가 된 경우 모든 인터페이스가 구현 된 위치를 추적하고 해당 메소드의 구현도 추가해야합니다. 추상 클래스에서 새 메소드가 추가 된 경우 기본 구현을 추가 할 수있는 옵션이 있으므로 모든 기존 코드가 올바르게 작동합니다.
정리
C#은 데이터 추상화에 사용되었습니다. 여러 클래스가 인터페이스를 구현해야하는 경우 인터페이스가 추상 클래스보다 낫습니다. 인터페이스 멤버는 정적일 수 없으며, 추상 클래스의 유일한 완전한 멤버는 정적 일 수 있습니다.
C#은 다중 상속을 지원하지 않으며 인터페이스는 주로 다중 상속을 구현하는 데 사용됩니다.
클래스는 하나 이상의 인터페이스를 구현할 수 있으며 하나의 추상 클래스에서만 상속합니다.
인터페이스는 주로 메서드 나 기능을 구현할 필요가없는 경우에만 사용됩니다.
추상 클래스는 최소한의 기본구현을 필요할때 사용됩니다.
C# 인터페이스와 추상클래스는 요구 사항에 따라 응용 프로그램을 개발하는 데 많이 사용되는 객체 지향 프로그래밍 개념입니다. 그것은 더 편안하고 비즈니스 요구 사항에 맞는 기술 리드에 의해 순수하게 선택됩니다.
C# 인터페이스와 추상 클래스는 모두 사용하기 쉽고 모든 프로그래밍 언어에서 쉽게 배울 수 있습니다.
'Programming' 카테고리의 다른 글
[DI] 의존성 관리하기 (1) (0) | 2019.12.17 |
---|---|
[DI] 의존성과 계층화 (0) | 2019.12.16 |
[C#] 인터페이스 (interface)에 대한 정리 (0) | 2019.12.06 |
MOCK을 활용한 .NET 단위 테스트 (0) | 2019.12.05 |
BDD 중심의 시나리오 테스트 (0) | 2019.12.02 |
[Jenkins] Gitlab 연동 및 Build셋팅

프로젝트 생성
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 를 로드하여, 빌드를 진행 할 수 있게 해줍니다.
'CI' 카테고리의 다른 글
[Jenkins] 파워쉘을 이용해서 git log 관리하기 (0) | 2020.07.02 |
---|---|
[MSBuild] MSBuild 웹 URL 호출 - MSBuild.Extension.Pack (1) | 2020.01.07 |
[Jenkins] 젠킨스 MSBuild 셋팅 (0) | 2019.12.10 |
[MSBuild] XML 을 이용한 Build (0) | 2019.12.10 |
[MSBuild] MSBuild를 이용한 프로젝트 빌드 (0) | 2019.12.09 |
[Jenkins] 젠킨스 MSBuild 셋팅

개요
젠킨스에서 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
'CI' 카테고리의 다른 글
[MSBuild] MSBuild 웹 URL 호출 - MSBuild.Extension.Pack (1) | 2020.01.07 |
---|---|
[Jenkins] Gitlab 연동 및 Build셋팅 (0) | 2019.12.11 |
[MSBuild] XML 을 이용한 Build (0) | 2019.12.10 |
[MSBuild] MSBuild를 이용한 프로젝트 빌드 (0) | 2019.12.09 |
[MSBuild] MSBuild 를 이용한 Package 시 XML 파일 포함 시키는 법 (0) | 2019.06.28 |
[CentOS 7] Network 관련 셋팅 명령어 정리

방화벽
-- 방화벽 정지하기
[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
'OS > Linux' 카테고리의 다른 글
[CentOS 7] CentOS 7 - NGINX 설치 방법 (4) | 2020.03.02 |
---|---|
[CentOS 7] 방화벽 해제하기 - firewall-cmd (0) | 2020.02.25 |
[Linux] CentOS, Ubuntu 등 OS 버전을 확인하는 명령어 (0) | 2020.02.08 |
[CentOS 7] 리눅스 디렉토리 구조 (1) | 2019.12.10 |
[CentOS 7] CentOS 7 부팅시 콘솔모드로 전환 (0) | 2019.12.04 |
[CentOS 7] 리눅스 디렉토리 구조

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
로그 파일 등의 시스템 관리와 관련된 정보들이 저장되는 디렉토리.
'OS > Linux' 카테고리의 다른 글
[CentOS 7] CentOS 7 - NGINX 설치 방법 (4) | 2020.03.02 |
---|---|
[CentOS 7] 방화벽 해제하기 - firewall-cmd (0) | 2020.02.25 |
[Linux] CentOS, Ubuntu 등 OS 버전을 확인하는 명령어 (0) | 2020.02.08 |
[CentOS 7] Network 관련 셋팅 명령어 정리 (0) | 2019.12.10 |
[CentOS 7] CentOS 7 부팅시 콘솔모드로 전환 (0) | 2019.12.04 |