2024년 7월 9일 화요일

Laravel : 내부용 공통모듈은 composer + github

Laravel : 내부용 공통모듈은 composer + github

Composer + Github Repo(private)

내부에서 여러 프로젝트를 동시에 진행하는데, 서비스가 비슷하다 보니 같은 로직을 반복사용할때가 있다. 이럴때 composer 로 관리하고 싶은데 내부용 프로젝트라 packagist.org에는 공개하고 싶지 않다.

Satis라는 툴이 있지만 간단하게 사용하고 싶었는데 github를 이용해서도 된다고 한다.

사용자 라이브러리 생성

  1. 아무 폴더가 가서 my-first-library 처럼 대충 폴더를 만든다.
  2. 폴더로 들어가서 composer init을 하면 여러가지 질문이 나오는데,
    이름 : vendor/package 식이다. ( mytest/my-first-library 처럼 입력한다.)
    require : 이 패키지가 의존하는 다른 패키지를 나열한다. 여러개의 모듈로 되어 있거나, 다른 패키지를 의존한다면 적어주자. (package-name: 버젼값) 형식이다.
    autoload : autoload로 앱구동시 라이브러리를 로딩하는 방법을 정의한다. namespace-prefix:directory 형식으로 namespace-prefix로 네임스페이스를 use선언하면 directory에서 파일을 찾는다는 의미이다
    (“MyLibrary\”:“src”) 라고 선언한다면 MyLibrary\MyClass는 해당패키지폴더의 src\MyClass.php을 찾는다
{
    "name": "mytest/my-first-library",
    "description": "A simple library",
    "type": "library",
    "require": {},
    "autoload": {
        "psr-4": {
            "MyLibrary\\": "src/"
        }
    }
}

  1. 위에서 src폴더를 지정했으니 src폴더를 만들고 간단한 소스를 만들어 보자.
    MyFirstLibrary.php 이다.
<?php

namespace MyLibrary;

class MyFirstLibrary {
    public function sayHello() {
        return "Hello, World!";
    }
}
  1. github에 현재 작업중인 폴더내용을 master에 올리자.

사용해보기

  1. 앞에서 github의 적당한 주소(https://github.com/my-repository-account/my-first-library)에 올렸으니 현재 프로젝트의 composer.json에 repository를 추가하자.
    변경될 부분은 아래와 같다.
{
....
    "require": {
....
        "mytest/my-first-library": "master"
    },
....
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/my-repository-account/my-first-library"
        }
    ]
}

2.Private Repository를 이용할것이기 때문에 접속시 Token이 필요하다. 프로젝트 폴더에서 auth.json 을 만들고 github의 개인프로필에서 개발용 token 을 생성하여 토큰값을 적어보자


{
    "github-oauth": {
        "github.com": "ghp_D12345678asdfgh"
    }
}
  1. 이제 composer insatll 혹은 composer update(실제 운영중인 프로젝트라면 update에 조심하자)를 하자
    아래 처럼 패키지가 추가되고 vendor/mytest/ 하위에 파일들이 설치된것을 볼수있다.
.....
  - Installing mytest/my-first-library (dev-master 010203c): Extracting archive
....

설치가 안되었다면 composer clear-cache 를 한에 다시 해보거나 composer install -vvv 로 로그를 확인해보자.

  1. 라라벨 controller나 기타 다른 곳에서 사용해보자.

use MyLibrary\MyFirstLibrary;

$lib = new MyFirstLibrary();
echo $lib->sayHello();  // 출력: Hello, World!

  1. 잘된다. 라이브러리 팀에서 라이브러리를 갱신하면 다시 composer update 하여 최신 버젼을 가져오도록 한다.
<?php

namespace MyLibrary;

class MyLibrary {
    public function sayHello() {
        return "Hello, World!";
    }
    public function toUpperCase(string $userData): string {
        return strtoupper($userData);
    }
}

composer update

  1. 사용할 곳에서 추가된 함수를 사용하면 된다.
$lib = new  MyLibrary();

echo  $lib->sayHello(); // 출력: Hello, World!

echo  $lib->toUpperCase("dx-ninja");

담엔 Satis 를 이용해서 전용 서버에서 패키지 관리가 될수있도록 해보자.

0 comments:

댓글 쓰기