Dev Tools

Print

Dev Tools 메뉴에서는 개발 과정에 필요한 Open Source 툴 들을 제공합니다. 제공되는 도구로는 형상 관리 도구인 Gitea, 소프트웨어 Binary 관리 및 Proxy 를 위한 Sonatype Nexus, Image 저장을 위한 Harbor 가 있습니다. 이 페이지에서는 각 툴의 간단한 사용 방법에 대해 알아보겠습니다.

Source Repository - Gitea

Git 솔루션은 크게 구축형 솔루션과 클라우드 솔루션으로 나뉩니다. 대표적인 클라우드 솔루션으로 Github 이 있습니다. 클라우드 솔루션을 사용하는 경우 퍼블릭 망이기 때문에 보안 문제나 비용 문제가 발생할 수 있습니다. Modernization Platform 에서는 구축형 솔루션인 Gitea 를 기본으로 제공합니다. Gitea 의 계정과 권한은 Modernization Platform 의 계정, 권한과 연동이 됩니다.

Gitea 에 접속하기

콘솔 화면의 프로젝트 메뉴 Dev Tools > Source 를 통해 접근 가능합니다.

Gitea 의 계정은 콘솔에 로그인한 계정과 연동됩니다. 최초 접속 시 비밀번호를 입력하게 되며, 이때 입력하는 비밀번호를 통해 Git 에 pull, push 등의 명령어를 수행할 수 있습니다.

사용자에게 사용 권한 부여하기

프로젝트 멤버에게 Gitea 의 사용 권한을 부여하는 것은 프로젝트 어드민 또는 user-administrator 역할을 가진 사용자만 가능합니다.

콘솔 화면의 프로젝트 메뉴 Administrator > Members 로 이동합니다. 권한을 부여 할 사용자 ID 또는 edit 버튼을 클릭하여 상세 화면으로 이동합니다.

사용자에게 Role 을 직접 부여하거나 Role 을 가지고 있는 Group 에 사용자를 추가하여 권한을 부여할 수 있습니다. 사용자에게 여러가지 권한이 동시에 부여된 경우 가장 높은 권한이 적용되게 됩니다.

Repository(저장소) 생성하기

Git Repository 란 파일이나 폴더를 저장하여 관리하는 저장소입니다. 보통 어플리케이션 별로 Repository를 하나씩 생성하여 사용합니다.

Gitea 에서 Repository 는 자신의 계정 또는 조직(Organization) 하위에 생성할 수 있습니다. 자신의 계정 하위에는 누구나 Repository 생성이 가능합니다. 조직의 하위에 Repository 를 생성하려면 해당 조직에 Repository 를 생성할 수 있는 권한이 필요합니다. 콘솔에서 git-administrator 또는 git-writer 역할을 부여받은 사용자만 조직 하위에 Repository 생성이 가능합니다. Modernization platform v2.0 에서 Gitea 의 조직은 콘솔의 Project 와 1:1 로 맵핑되어 관리됩니다. 조직 명은 {realm}-{project} 로 생성됩니다.

조직 우측 상단의 + 버튼을 클릭하여 새 저장소를 선택하거나 조직명 아래에 있는 새 저장소 버튼을 클릭합니다.

필수값인 소유자와 저장소 이름을 입력하고 저장소 만들기 버튼을 클릭합니다.

  1. 소유자 : 저장소를 개인 계정 하위에 생성할지 조직 하위에 설정할지 결정합니다.

  2. 저장소 이름 : 저장소 (Repository) 의 이름을 입력합니다.

  3. 가시성 : Repository 를 public 으로 만들지 여부를 선택합니다. public 으로 만들 경우 Gitea 에 로그인하지 않은 anonymous 사용자도 Repository 의 소스를 볼 수 있습니다.

  4. 설명 : Repository 에 대한 설명을 입력합니다.

  5. Issue Labels : Repository 에 Issue 를 등록할 때 사용 할 수 있는 Label set 을 지정 할 수 있습니다.

  6. .gitignore : Gitea 에서는 Language 별로 .gitignore 파일 샘플을 제공합니다. 원하는 .gitignore 를 선택합니다.

  7. 라이센스 : 해당 Repository 의 라이센스를 선택할 수 있습니다.

  8. README : Repository 의 Readme 파일 생성 여부를 선택할 수 있습니다.

  9. 저장소 초기화 : 체크하고 저장소 만들기를 할 경우 6, 7, 8 에서 선택한 파일들이 자동으로 추가됩니다.

  10. 저장소 만들기 : 저장소가 생성됩니다.

소스 내려 받기

레파지토리의 소스 코드는 git cli 를 통해 내려받을 수 있습니다. 레파지토리의 메인 화면에서 체크아웃 URL 을 확인할 수 있습니다.

$ git clone https://GITEA-URL/realm-myproject/my-application.git
Cloning into 'my-application'...
Username for 'https://GITEA_URL': testuser
Password for 'https://testuser@GITEA_URL':
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.

소스 코드를 최초에 내려받는 경우 git clone 커맨드를 사용해 내려받을 수 있습니다. 한번 소스를 내려받은 후 변경 사항을 내려받을 때는 git pull 을 사용합니다.

소스 올리기

로컬에 추가, 변경한 소스 코드를 git cli 를 통해 업로드 할 수 있습니다.

  1. 변경 된 소스 코드 목록 확인 - git status

    1. $ git status
      On branch master
      Your branch is up to date with 'origin/master'.
      
      Untracked files:
        (use "git add <file>..." to include in what will be committed)
      
              Application.java
      
      nothing added to commit but untracked files present (use "git add" to track)

      Application.java 라는 파일이 추가되었지만 Untracked 상태인 것을 확인할 수 있습니다. Git 은 Untracked 상태인 파일들을 Commit 대상에 넣지 않습니다.

  2. 변경 한 소스 코드 추적(tracking)하기 - git add

    1. $ git add Application.java
      
      $ git status
      On branch master
      Your branch is up to date with 'origin/master'.
      
      Changes to be committed:
        (use "git reset HEAD <file>..." to unstage)
      
              new file:   Application.java

      git add 실행 후 다시 status 를 확인하면 파일이 추적 목록에 포함된 것을 확인할 수 있습니다.

  3. 소스 코드 commit 하기 - git commit

    1. $ git commit -m "Add Application.java"
      [master 76f4940] Add Application.java
       1 file changed, 0 insertions(+), 0 deletions(-)
       create mode 100644 Application.java

      git commit 명령어를 사용하면 변경 된 파일을 commit 할 수 있습니다. 이때 commit 은 Local Repository 에 commit 한 것을 의미하며, remote (Gitea 서버) 에 업로드 하기 위해서는 git push 까지 실해야 합니다.

    2. git commit 전에 commit 할 사용자 정보가 설정되어 있어야 합니다.

    3. $ git config --global user.email "testuser@sk.com"
      $ git config --global user.name "user name"
  4. 소스 코드 업로드 하기 - git push

    1. $ git push origin BRANCH_NAME
      Username for 'https://GITEA_URL': testuser
      Password for 'https://testuser@GITEA_URL':
      Counting objects: 3, done.
      Delta compression using up to 8 threads.
      Compressing objects: 100% (2/2), done.
      Writing objects: 100% (3/3), 289 bytes | 289.00 KiB/s, done.
      Total 3 (delta 0), reused 0 (delta 0)
      remote: . Processing 1 references
      remote: Processed 1 references in total
      To https://GITEA_URL/realm-myproject/my-application.git
         40cddcc..76f4940  master -> master
    2. git push 명령어 뒤의 origin 은 remote 레파지토리 (gitea 서버) 를 의미합니다. BRANCH_NAME 은 소스를 업로드 할 git 의 branch 명을 입력합니다.

참고 문서

Gitea 공식 가이드

Git 사용법

Nexus

Nexus 는 Sonatype 에서 만든 저장소 관리 툴입니다. Java Library, Node module, Container Image 등 다양한 Format 의 저장소를 만들 수 있습니다. 직접 개발한 Library 를 업로드 하거나, 메인 저장소 (Maven Repository, NPM Repository 등) Mirror 로 사용할 수 있습니다.

일반 사용자는 Nexus 에 로그인할 수 있는 계정을 발급하지 않으므로, Repository 생성 등 사용이 필요한 경우 관리자에게 요청하셔야 합니다.

콘솔 화면의 프로젝트 메뉴 Dev Tools > Nexus 를 통해 접근 가능합니다.

Nexus 의 Browse 메뉴에 접속하면 Repository 목록을 확인할 수 있습니다. Repository 의 maven, npm 등의 Format 이 존재합니다. 각 Format 별로 proxy, hosted, group 3가지 타입을 설정할 수 있습니다. proxy 는 말 그대로 외부의(M2 repository 등) Repository 를 proxy 하는 Repository 입니다. 이 proxy 타입의 Repository 를 통해 외부 Repository 의 데이터를 캐시하고 폐쇄된 환경에서도 라이브러리를 받을 수 있게 됩니다. hosted 는 직접 만든 라이브러리를 업로드 할 수 있는 Repository 입니다. group 은 proxy 와 hosted Repository 들을 묶을 수 있는 Repository 입니다. Group 으로 묶어놓은 순서에 따라 차례대로 라이브러리가 존재하는지 검색합니다.

Maven Mirror 로 사용하기

로컬 개발 환경이나 CI 빌드 환경이 private(폐쇄망)인 경우 public (internet) 에 있는 메인 저장소에서 라이브러리를 받지 못하는 경우가 있습니다. 이런 경우 Nexus 를 Mirror 로 사용하여 라이브러리를 받을 수 있습니다.

settings.xml 파일을 이용하면 pom.xml 파일을 수정하지 않고 maven 의 동작 방식을 변경할 수 있습니다.

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <mirrors>
    <mirror>
      <id>modernizationplatform</id>
      <name>Modernization Platform Nexus</name>
      <url>NEXUS_REPOSITORY_URL</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>
  ...
</settings>

Nexus 의 Repository 는 각각 URL 을 가지고 있습니다. Repository 목록에서 URL copy 버튼을 클릭하면 해당 Repository 의 URL 을 얻을 수 있습니다. settings.xml 파일의 NEXUS_REPOSTIROY_URL 은 Repository 의 URL 을 입력합니다. 일반적으로 proxy와 hosted 를 묶은 group type 의 Repository 를 사용합니다.

mirrorOf 는 pom.xml 파일에 지정해둔 repository 의 id 를 입력합니다. Maven 에서는 pom.xml 파일에 repository 를 따로 지정하지 않은 경우 default 로 central (https://repo.maven.apache.org/maven2) 을 사용합니다. 모든 라이브러리를 Nexus 를 통해 받으려면 mirrorOf 를 * 로 지정합니다.

예시처럼 settings.xml 파일을 작성하고 사용중인 IDE (eclipse, vscode, intelliJ 등) 환경에 맞춰 settings.xml 파일을 바라보도록 설정합니다.

Gradle Proxy 로 사용하기

Gradle 을 사용할 경우에도 Nexus 를 라이브러리 저장소로 활용하여 빌드를 수행할 수 있습니다.

프로젝트의 build.gradle 파일의 내용을 아래처럼 수정합니다.

repositories {
    // mavenCentral()
    maven {
        url "NEXUS_REPOSITORY_URL"
    }
}

일반적으로 mavenCentral() 을 통해 maven central (https://repo.maven.apache.org/maven2) 을 사용합니다. 이 부분을 제거하고 Nexus 를 바라보도록 설정을 변경하면 됩니다.

Harbor

어플리케이션을 Container 로 실행하려면 Container Image 를 빌드해야 하고, 해당 Image 를 저장 할 Image 저장소가 필요합니다. 가장 널리 알려진 서비스 형태의 저장소로 Docker Hub 이 있습니다. Docker Hub 을 사용 할 경우 비용이나 보안 문제가 있을 수 있기 때문에, Modernization Platform 에서는 설치형 저장소인 Harbor 를 제공합니다.

Harbor 는 설치형 오픈 소스 Image 저장소입니다. Container Image, Helm chart 의 저장소로 사용되며, 역할에 따른 접근 제어, 이미지 취약점 검사 등의 기능을 제공합니다.

Harbor 접속하기

콘솔의 프로젝트 메뉴에서 Dev Tools > Images 를 통해 접속 가능합니다.

Harbor 의 계정은 콘솔의 계정과 연동됩니다. Modernization platform v2.0 에서 최초 사용자 생성 시에는 아직 Harbor 에 계정이 없는 상태가 됩니다. 해당 계정으로 Modernization platform 콘솔에 로그인 후 Harbor 에 접속하면 자동으로 Harbor 계정이 생성됩니다.

사용자에게 Harbor 사용 권한 부여하기

프로젝트 멤버에게 Harbor 의 사용 권한을 부여하는 것은 프로젝트 어드민 또는 user-administrator 역할을 가진 사용자만 가능합니다.

Harbor 의 권한 관리는 프로젝트 별로 설정이 가능합니다. Modernization platform v2.0 에 프로젝트를 생성하면 Harbor 에 프로젝트가 자동으로 생성이 되고, 콘솔에서 사용자에게 권한을 부여하면 Harbor 의 프로젝트에 자동으로 권한이 추가됩니다.

콘솔 화면의 프로젝트 메뉴 Administrator > Members 로 이동합니다. 권한을 부여 할 사용자 ID 또는 edit 버튼을 클릭하여 상세 화면으로 이동합니다.

사용자에게 Role 을 직접 부여하거나 Role 을 가지고 있는 Group 에 사용자를 추가하여 권한을 부여할 수 있습니다. 사용자에게 여러가지 권한이 동시에 부여된 경우 가장 높은 권한이 적용되게 됩니다.

Image 업로드 하기

업로드 할 Image 에 tag 추가하기

Harbor 에 Image 를 업로드 하려면 해당 Image 에 Harbor 의 URL 과 tag 를 부여해야 합니다.

$ docker tag {IMAGE_NAME}:{TAG} {HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG}
  • IMAGE_NAME : 업로드 할 원본 이미지의 이미지 명입니다.

  • TAG : 업로드 할 원본 이미지의 이미지 태그입니다.

  • HARBOR_URL : Harbor 의 접속 URL 입니다. 프로토콜을 제거한 Harbor 의 도메인명만 사용합니다. ex) harbor.cloudzcp.net

  • PROJECT : Harbor 에 생성되어 있는 프로젝트 명을 입력합니다.

Docker login

로컬 환경의 Image 를 Harbor 에 업로드 하려면 Harbor 의 계정과 CLI Secret 으로 인증 (docker login)을 해야 합니다. 이때 사용하는 로그인 계정 명은 콘솔의 사용자 계정명과 동일합니다. CLI Secret 은 아래처럼 조회할 수 있습니다.

Harbor 화면에서 우측 상단의 사용자 명 > User Profile 메뉴를 클릭합니다.

팝업 창의 CLI secret copy 버튼을 클릭하면 secret 이 클립보드에 복사됩니다.

$ docker login tworld-registry.skt.cloudzcp.com
Username: {USERNAME}
Password: {CLI_SECRET}
Login Succeeded
  • USERNAME : 사용자의 로그인 계정을 입력합니다.

  • Password : 위에서 복사한 CLI secret 값을 입력합니다.

Image 업로드

docker push 커맨드를 이용해 Harbor 에 Image 업로드를 수행합니다.

$ docker push {HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG}
The push refers to repository [{HARBOR_URL}/{PROJECT}/{IMAGE_NAME}]
cfd97936a580: Pushed
latest: digest: sha256:febcf61cd6e1ac9628f6ac14fa40836d16f3c6ddef3b303ff0321606e55ddd0b size: 527

{HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG} 값은 위에서 tag 를 추가한 값을 사용합니다.

Image 다운받기

docker pull 커맨드를 이용해 Harbor 에서 Image 를 다운받습니다.

Harbor 의 프로젝트가 Private 인 경우 (대부분 Private 입니다.) Image 업로드할때처럼 docker login 을 먼저 수행해야 합니다.

$ docker pull {HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG}
latest: Pulling from {PROJECT}/{IMAGE_NAME}
24fb2886d6f6: Pull complete
Digest: sha256:febcf61cd6e1ac9628f6ac14fa40836d16f3c6ddef3b303ff0321606e55ddd0b
Status: Downloaded newer image for {HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG}

{HARBOR_URL}/{PROJECT}/{IMAGE_NAME}:{TAG} 값은 위에서 tag 를 추가한 값을 사용합니다.

이 답변이 유용합니까? 아니오

Send feedback
도움이 되어드리지 못해 죄송합니다. 아티클 개선을 위해 의견을 제공해 주시기 바랍니다.