Study/TIL(Today I Learned)

24.08.06 C#, 젠킨스

에린_1 2024. 8. 6. 19:38
728x90

C#

Datatime 연산

주로 사용되는 연산

  1. 날짜 간 차이 계산
    • DateTime 객체를 서로 빼면 TimeSpan 객체가 반환된다.
    DateTime date1 = new DateTime(2023, 1, 1);
    DateTime date2 = new DateTime(2023, 12, 31);
    TimeSpan difference = date2 - date1;
    
    Console.WriteLine($"Days between: {difference.Days}");
    
  2. 날짜에 시간 더하기/빼기
    • DateTime에 TimeSpan을 더하거나 뺄 수 있다.
    DateTime now = DateTime.Now;
    DateTime future = now.AddDays(7);
    DateTime past = now.AddHours(-3);
    
  3. 날짜 비교
    • DateTime 객체는 비교 연산자를 사용할 수 있다.
    if (date1 < date2)
    {
        Console.WriteLine("date1 is earlier than date2");
    }
    
  • DateTime 연산은 게임 서버에서 시간 기반 이벤트, 쿨다운, 세션 관리, 로그 기록 등

GeneratedClrTypeInfo

  • Protobuf 메시지 파일을 C#으로 컴파일 할 때 생성되는 클래스들에서 사용되는 메타데이터 클래스이다.
  • 이 클래스는 주로 Protobuf 메시지의 메타데이터를 설명하고, 메시지의 필드와 속성에 대한 정보를 제공하는 데 사용된다.
  • Google Protocol Buffers(Protobuf)는 데이터 직렬화 형식으로, 여러 프로그래밍 언어에서 사용될 수 있도록 설계되었다. C#의 경우, Protobuf 메시지를 정의한 .proto 파일을 컴파일러로 컴파일하여 C# 클래스로 변환한다.

역할과 기능

  • GeneratedClrTypeInfo 클래스는 Protobuf메시지와 관련된 다음과 같은 메타데이터를 포함한다.
    1. CLR 유형 정보
      • Protobuf 메시지에 해당하는 C# 클래스의 이름, 네임스페이스 등의 정보를 포함한다.
    2. 필드 정보
      • Protobuf 메시지의 각 필드에 대한 정보를 포함한다. 예를 들어, 필드의 이름, 데이터 타입, 필드 번호 등을 나타낸다.
    3. 속성 정보
      • 메시지 클래스에 대한 속성 정보를 포함할 수 있다.

사용 사례

  • 일반적으로 사용자가 직접 사용하는 경우는 거의 없고, Protobuf 메시지 파일을 컴파일 하여 생성된 C# 코드를 내부적으로 지원하는 데 사용된다. Protobuf의 자동 생성 코드는 GeneratedClrTypeInfo를 사용하여 메시지의 구조와 필드에 대한 메타데이터를 관리한다. 이를 통해 Protobuf 런타임은 메시지 직렬화 및 역직렬화, 필드 접근, 디버깅 등을 효율적으로 수행할 수 있다.

partial

  • 클래스를 정의할 때 사용하는 특수한 키워드로, 하나의 클래스를 여러 파일에 걸쳐서 정의할 수 있게 해준다. 이를 통해 코드를 모듈화하고, 클래스 정의를 논리적으로 구분하여 관리할 수 있다.
  • partial 키워드는 클래스, 구조체, 인터페이스, 메서드에 사용할 수 있다.

partial 클래스

  • 하나의 클래스 정의를 여러 파일로 분할할 수 있으며, 모든 부분 클래스는 컴파일 타임에 하나의 클래스 정의로 결합된다. 이는 특히 큰 클래스나 자동 생성된 코드를 사용하여 코드 생성과 사용자 정의 코드를 분리하고자 할 때 유용하다.

사용 사례

  1. 자동 생성된 코드와 사용자 코드의 분리
    • 예를 들어, Windows Forms 디자이너, WPF 디자이너, Entity Framework 등에서 자동 생성된 코드를 사용자 정의 코드와 분리하여 관리할 수 있다.
  2. 큰 클래스의 분리
    • 클래스가 너무 커지는 것을 방지하기 위해 논리적인 부분으로 분리하여 관리할 수 있다. 이렇게 하면 특정 기능이나 부분을 별도의 파일로 관리할 수 있어 가독성과 유지보수성이 향상된다.
  3. 팀 작업에서의 협업
    • 여러 개발자가 동시에 동일한 클래스의 다른 부분을 작업할 수 있도록 지원한다. 이렇게하면 병합 충돌을 줄이고 작업 효율성을 높일 수 있다.

주의사항

  • 접근 제한자
    • partial 클래스의 각 부분에는 접근 제한자를 따로 지정할 수 없으며, 모든 부분이 동일한 접근 제한자를 공유한다. 만약 다른 접근 제한자를 지정하려고 하면 컴파일 오류가 발생한다.
  • 상속
    • partial 클래스는 하나의 클래스만 상속할 수 있으며, 각 부분에 상속 관계를 정의할 수 없다. 이는 컴파일러가 결합 시 혼동을 방지하기 위함이다.
  • 일관성 유지
    • partial 클래스의 각 부분은 동일한 네임스페이스 내에 있어야 하며, 동일한 제네릭 매개변수를 공유해야 한다.

젠킨스(Jenkins)

  • 젠킨스는 소프트웨어 개발 시 지속적으로 통합 서비스를 제공하는 툴이다.
  • CI(Continuous Integration) 툴 이라고 표현한다.
  • 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유영역에 있는 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해준다.

장점

  • 프로젝트 표준 컴파일 환경에서의 컴파일 오류 검출
  • 자동화 테스트 수행
  • 정적 코드 분석에 의한 코딩 규약 준수여부 체크
  • 프로파일링 툴을 이용한 소스 변경에 따른 성능 변화 감시
  • 결합 테스트 환경에 대한 배포작업
  • 이외 500여가지가 넘는 플러그인을 온라인으로 간단하게 인스톨 할 수 있는 기능을 제공하고 있으며 파이썬과 같은 스크립트를 이용해 손쉽게 자신에게 필요한 기능을 추가 할 수도 있다.

각종 배치 작업의 간략화

  • 프로젝트 기간 중에 개발자들은 순수한 개발 작업 이외에 DB셋업이나 환경설정, Deploy 작업과 같은 단순 작업에 시간과 노력을 들이는 경우가 빈번하다.
  • 데이터베이스의 구축, 어플리케이션 서버로의 Deploy, 라이브러리 릴리즈와 같이 이전에 CLI로 실행되던 작업들이 젠킨스 덕분에 웹 인터페이스로 손쉽게 가능해졌다.

Build 자동화의 확립

  • 빌드 툴의 경우 JAVA는 maven과 gradle이 자리잡고 있으며, 이미 빌드 관리 툴을 이용해 프로젝트를 진행하고 있다면 젠킨스를 사용하지 않을 이유가 하나도 없다.
  • 젠킨스와 연동하여 빌드 자동화를 통해 프로젝트 진행의 효율성을 높일 수 있다.

자동화 테스트

  • 자동화 테스트는 젠킨스를 사용해야 하는 가장 큰 이유 중 하나이며, 사실상 자동화 테스트가 포함되지 않은 빌드는 CI 자체가 불가능하다고 봐도 무방하다.
  • 젠킨스는 Subversion이나 Git과 같은 버전관리시스템과 연동하여 코드 변경을 감지하고 자동화 테스트를 수행하기 때문에 만약 개인이 미처 실시하지 못한 테스트가 있다 하여도 든든한 안전망이 되어준다.

코드 표준 준수여부 검사

  • 자동화 테스트와 마찬가지로 개인이 미처 실시하지 못한 코드 표준 준수 여부의 검사나 정적 분석을 통한 코드 품질 검사를 빌드 내부에서 수행함으로써 기술적 부채의 감소에도 크게 기여한다.

빌드 파이프라인 구성

  • 2개 이상의 모듈로 구성되는 레이어드 아키텍처가 적용 된 프로젝트에는 그에 따른 빌드 파이프라인 구성이 필요하다.
  • 예를 들면, 도메인 → 서비스 → UI와 같이 각 레이어의 참조 관계에 따라 순차적으로 빌드를 진행하지 않으면 안된다.
  • 젠킨스에서는 이러한 빌드 파이프라인 구성을 간단히 할 수 있으며, 스크립트를 통해서 매우 복잡한 제어까지도 가능하다.

단점

  • 규모가 작은 프로젝트의 경우, 설정하는데 리소스 낭비가 발생할 수 있다.
  • 호스팅을 직접해야하기 때문에 서버 운영 및 관리 비용이 발생한다.

참조

https://inpa.tistory.com/entry/Jenkins-📚-젠킨스란-무엇인가

 

[Jenkins] 🤵 젠킨스란 무엇인가? (CI /CD)

선행학습 👩‍💻 CI / CD 파이프 라인 이란? CI(Continuous Integration) CI/CD의 "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다. CI를 성공적으로 구현할 경우 애플

inpa.tistory.com

 

728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.08.08 Dev, C#  (0) 2024.08.08
24.08.07 C#  (0) 2024.08.07
24.08.05 C#  (0) 2024.08.05
24.08.02 C#, DEV  (0) 2024.08.02
24.08.01 C#, 데이터베이스 샤딩  (0) 2024.08.01