jenkins jobs backup

macos 에서 운영중인 jenkins job 들을 백업한다.

1. 터미널 구동

2. jenkins 디렉토리로 이동

3. 명령

% find jobs -name config.xml -type f -print 0 | xargs -0 tar cvfz jobs_20231227.tar.gz

jobs 폴더 안에 job 들에 builds 폴더에 시도한 빌드의 로그가 너무 커서, 설정만 백업한다.

맥OS 디스크 지우기 안될 때

윈도우가 설치된 구형 맥북을 다시 복구하기 위해 설치중에 디스크 지우기가 안된다.

원인은 파티션맵이 GUID 형식이 아니라 다시 설정해야 한다.

Option + Command + R 을 눌러 전원을 켜고 복구 모드로 진입

터미널 창을 열어서, 대상 디스크 (disk0)를 포맷한다.

# diskutil eraseDisk JHFS+ ELGAR GPT disk0

위 명령에서 중요한 것은 GPT를 붙여줘야 한다!!

데이터베이스 #2 – 관계형 데이터 모델

관계형 데이터 모델(RDM;Relational Data Model)

관계형 데이터 모델은 현대 가장 많이 사용되는 데이터베이스 설계 모델이다. Postgres, MySQL, Oracle, MSSQL 등 이 있다. 이 모델의 이해를 통해서 데이터베이스의 정보 시스템 구축을 위한 설계 개념을 이해하는데 도움이 될 수 있다. 다음은 그 RDM의 구성 요소이다.

용어 정리

RDM은 관계라는 개념을 기반으로 한다. 관계는 어떤 실체들 간의 관계를 나타내는 2차원의 테이블이다.

엔티티(Entity)는 학생, 선생님, 자동차, 책 등과 같은 객체들의 추상화이다.

관계(Relationship)는 엔티티가 어떻게 상호 연결되는지에 대해 정의한다. 예를 들어 학생과 교실에서 학생은 반드시 하나의 교실에 소속되어야 한다면, 우리는 이 엔티티들의 관계를 다대일 관계라고 부를 수 있다.

관계는 속성(attribute)과 튜플(Tuple)로 구성된다. 아래 표를 보자.

학생 번호이름성별생년월일
20230503정규2010년 3월 5일

이 표에서 값을 정의하는 위 열 들을 속성이라고 한다. 그리고, 각 속성에 값들의 모임인 행을 튜플이라고 한다. 위 표의 경우, 20230503, 최, 정규, 남, 2010년 3월 5일 가 된다.

제한 사항(Restrictions)

관계형 데이터 모델의 ‘관계’는 다음과 같은 제약 사항이 있다.

  1. 데이터베이스에 동일 이름의 관계가 존재하면 안된다.
  2. 같은 관계내의 속성들은 다른 이름을 가져야 한다.
  3. 각 셀에는 하나의 값만 있어야 한다.
  4. 관계에서 행과 열의 순서는 중요하지 않는다.

엔티티의 무결성(Integrity)

무결성은 데이터 모델이 정해진 규칙에 부합하는 것이다. 무결성에는 엔티티 무결성과 참조 무결성 두 가지 종류가 있다.

엔티티 무결성은 테이블에서 두 개의 동일한 튜플(행)이 있을 수 없다는 것이다. 현실에서 절대적으로 동일한 물체는 없다는 것을 의미한다. 위에서 학생의 경우, 동일한 학생은 없도록 하는 무결성을 위해, 기본 키(PK)의 개념이 도입된다. 기본 키는 테이블의 각 레코드를 고유하게 식별하는 데 사용되는 필드 또는 필드의 집합으로, 두 개의 레코드가 동일하지 않도록 하는 것을 보장한다. 또한 특정 레코드에 효율적으로 접근할 수 있는 방법도 제공한다.

학생 번호(PK)이름성별생년월일반(FK)
20230503정규2010년 3월 5일20230201
학생

반(PK)담임 선생님교실번호교실전화번호
20230201김순희F04S0602-3333-4444
20230202이봉길F04S0702-3333-4445

위와 같은 환경에서 다음과 같은 신규 학생을 추가하는 경우를 생각해보자.

20230504규민2010년 6월 10일20230210

이 때, 반으로 입력하는 20230210이 반 테이블에 없는 경우, 우리는 학생의 엔티티 무결성을 해치는 경우라고 말할 수 있다.

참조 무결성

위에서 설명하는 테이블을 보면, 학생 테이블의 반의 속성(FK)이 반 테이블의 반 속성(PK)을 가리킨다. 이것은 하위 혹은 종속의 관계를 갖는다. 참조 무결성은 위와 같이 관계에서 기본 테이블의 튜플의 값중에 하위 테이블의 키를 참조하는 값이 존재하지 않는 경우 이 무결성을 위반하는 것이다.

위 테이블들의 관계에서 FK는 다대일(일대다) 관계를 만들어준다.

관계

앞서 일대다의 관계를 구성하는 테이블의 예를 보았다.

관계에는 다음과 같은 유형이 있다.

  • 일대일 관계(1-1) : 사람 – 주민등록증 과 같이 첫 번째 관계의 튜플 외에 다른 관계의 튜플이 연관될 수 없다.
  • 일대다 관계(1-M) : 학생 – 교실 같이 여러 튜플들이 소속되는 단일 그룹의 연관이 지정될 수 있다.
  • 다대다 관계(M-M) : 학생 – 공부 같이 여러 학생들이 다양한 공부를 할 수 있는 것과 같이 연관이 서로 하나 이상이 될 수 있다.

RDM은 다대다 관계가 존재하지 않는다. 구현은 두 개의 일대다 관계로 나뉘며 중간에 두 테이블의 기본키들을 외래키로 하는 연관 테이블이 구성된다.

장단점

RDM의 대중화를 이끈 기능은 쿼리 언어 SQL이다. 하지만, 최신 데이터베이스들에 비해 볼륨 확장성이 떨어질 수 있고, 중간 번역 계층 때문에 코드 복잡성이 증가될 수 있다.

데이터베이스 #1 – 소개

데이터베이스를 정리하는 시간을 갖는다.

데이터베이스

데이터 베이스는 컴퓨터가 처리하는 데이터의 모음이다. 이 데이터들은 빠른 검색을 제공하고, 이를 위해 특별하게 구성되어 있다.

현재 이러한 데이터베이스는 여러 개발사와 오픈 단체등의 의해 다양하게 존재하고 있다. 이전부터 다양하게 사용중인 대표 관계형 데이터베이스에는 Microsoft 의 MS-SQL, Azure SQL, Oracle 사의 Oracle과 오픈되어 관리되는 MySQL이 있다.

데이터베이스와 파일은 구분될 수도 있다. 데이터베이스의 구성이 파일에 의해서 구성되어질 수도 있지만, 이는 부분이고, 다양한 형태로 데이터를 구성하고 관리될 수 있다. 이런 데이터들을 제어하는 프로그램을 우리는 데이터베이스 관리 시스템(DBMS)이라고 부른다.

데이터베이스 관리 시스템

데이터베이스 관리 시스템은 사용자가 데이터를 정의, 생성하고 제어할 수 있는 소프트웨어다.

DBMS는 사용자의 질의(쿼리)를 최적화하고, 최적 방식으로 데이터베이스에서 데이터를 검색할 수 있다. 즉 사용자와 데이터베이스 사이의 중재자 역할을 제공한다. 사용자를 위해 제공되는 다양한 인터페이스를 통해서 우리는 데이터에 접근할 수 있다. 즉 데이터에 접근할 수 있는 인터페이스는 여러 형태의 방법을 통해서 데이터와 분리될 수 있다.

데이터에 대한 접근

데이터베이스에 데이터 항목이 증가할 수록 검색 속도에 영향이 생긴다. 이 때 최대한 데이터를 빠르게 검색하기 위해 데이터베이스는 스키마와 메타 데이터를 제공한다. (스키마는 데이터의 구성에 대한 방법을 설명한다. 메타 데이터는 데이터들의 구조적, 통계적 정보를 갖고 있다.)

DBMS마다 다양한 접근 방법을 제공하고 있다. 앞으로 정리한다.

데이터 일관성

우리가 데이터베이스를 사용하는 이유는 데이터가 정의된 바에 맞게 올바르게 유지하고, 복원하는 기능 때문이다. 물론, 구성과 스키마로 정의된 규칙에 의해서 데이터가 효율적으로 구성이 될지에 대한 유무를 갖을 수 있다. 특히 여러 사람들이 함께 사용하는 데이터베이스의 경우에는 이런 무결성을 유지하기 위해 더욱 더 이런 조건들을 고려해야 충돌의 영향을 줄일 수 있다.

또한 운영중에 저장공간의 손상에 의해서 데이터를 영원히 잃어버릴 수 있다. 이 때, 충분한 백업을 통해서 피해를 최소화 할 수 있도록 복원 시스템을 구성할 수 있다.

정리

  • 데이터베이스 제공 기능
    • 데이터를 저장하고 검색 및 업데이트를 할 수 있다.
    • 메타 데이터를 구성해서 효율적으로 구성한다.
    • 다양한 접근방법을 제공한다.
    • 여러 사용자들이 동시에 접근이 가능하다
    • 백업과 복원을 제공한다.
    • 데이터의 일관성을 위해 규칙을 정의할 수 있다.

Visual Studio 2022 for MAC 기능 체험 #1

오늘은 맥용 Visual Studio 2022 버전을 사용합니다.

다운로드 – https://learn.microsoft.com/ko-kr/visualstudio/releases/2022/mac-release-notes

하지만, 이 툴은 2024년 8월 31일까지 제공되는 걸로 안내됩니다. 이후에는 VS Code 등의 환경으로 안내될 수 있을 거 같습니다.

콘솔 애플리케이션 만들어보자.

프레임워크를 선택할 수 있네.

현재 .NET 7.0, .NET 6.0 선택 가능

필요 시 프로젝트 속성에 빌드 > 일반 탭에서 대상 프레임워크를 교체할 수 있다.

아래 탭에 커서를 올리면, 자동으로 팝업 된다. 실행 결과는 터미널에 나타난다.

기본적으로 프로젝트에서 게시 기능을 선택해서 폴더에 게시할 수 있다.

게시된 파일은 실행할 수 있다.

게시된 실행 파일은 dll 파일을 로드해서 동작합니다.

MacOS Homebrew로 설치된 Jenkins 홈디렉토리 변경

상황 설명

설치한 Jenkins workspace 가 프로젝트 사이즈가 커지면서, 용량이 부족한 상황이 자주 발생되었다.

생성되는 결과물들이 쌓인 이유도 있지만, 기본적으로 이런 쌓인 결과물을 정리하는데, 에너지가 많이 소비되었다.

작업 준비

새로운 SSD를 장착하고, 여기에서는 workspace 라는 이름의 볼륨으로 추가를 했다.

homebrew 로 설치된 위치가 $HOME/.jenkins 폴더이다

데이터 복사

먼저 .jenkins 폴더를 신규 대상 볼륨에 복사한다.

cp -R $HOME/.jenkins /Volumes/workspace/.jenkins

homebrew jenkins 서비스 파일 수정

vi /usr/local/Cellar/jenkins/2.341/homebrew.mxcl.jenkins.plist
<dict>
...
   <key>EnvironmentVariables</key>
   <dict>
      <key>JENKINS_HOME</key>
      <string>/Volumes/workspace/.jenkins</string>
   </dict>
</dict>
</plist>

서비스 다시 시작

brew services restart jenkins

M1용 Unity 2022.1 베타 잠깐 써보기

주로 윈도우 환경에서 유니티를 사용했었고, M1에서도 가끔 유니티를 돌려보기도 했다.

유니티 허브도 3.x 가 되면서 UI도 깔끔해지고, 새로워진 느낌이 확 든다.

Pre-releases 에는 이제 Intel 버전과 Silicon 버전을 구분해서 설치할 수 있다. 마찬가지로, Android 플랫폼 빌드를 위한 OpenJDK, NDK 등도 함께 설치가 된다.

새 프로젝트를 생성할 때, 템플릿을 다운로드해서 선택할 수 있다. Learning 탭에서는 현재 버전이 베타 버전이라 표시는 안되고 있지만, 미니 게임들을 설치하고, 레슨과 함께 진행해 볼 수도 있다.

간단하게 2D Project 를 생성해봤다.

Scene 뷰에 Floating Toolbar 가 눈에 띈다.

씬뷰에서 사용하는 기본 도구 단축키는 같고, 기즈모가 좀 더 잘 보인다.

GameObject 의 UI 쪽에 많은 부분이 TextMeshPro 기반으로 사용을 권하는 것 같다. 물론 Legacy 에 가면 이전 버튼 등을 사용할 수 있다.

Preferences 에 External Script Editor로 Visual Studio Code도 지정해서 쓸 수 있다.

탬플릿을 모바일 버전으로 해서인지 Mobile Notifications 패키지도 기본으로 설치된다.

최근에 iOS에서 Remote Push가 동작을 안해서 이 패키지로 해결을 했었는데, 기본적으로 유니티가 이 부분을 제대로 지원하는 거 같다.

Project Settings > Mobile Notifications

Jobs 메뉴가 보인다.

컴파일된 어셈블리 정보도 보이는데, 이건 좀 더 봐야겠다.

Import Activity 창이 있다.

Import 되는 각 항목들을 볼 수 있어서, 에디터에서 병목이 될 수 있는 부분을 좀 더 명확히 볼 수 있겠다.

Visual Script 기능도 포함되었구나. 볼트가 녹아져 있구나.

여튼, 개인 프로젝트를 할 때는 자주 써봐야겠다~