jam2in / arcus-test-container

Apache License 2.0
0 stars 1 forks source link

스냅샷 버전 배포 #6

Open brido4125 opened 3 months ago

brido4125 commented 3 months ago

🔍 Description

arcus-test-container의 배포를 위해 필요한 단계들을 구현한다

⏰ Implementation Idea

  1. 깃헙 액션 CI 추가
  2. 리드미, 라이센스 파일 추가
  3. 랜덤 포트 설정
  4. 배포

위 단계에서 더 필요하다고 생각되는 부분있으면 의견 남겨주세요.

brido4125 commented 3 months ago

@uhm0311 @oliviarla

배포 전에 필요한 부분 있으면 말씀해주세요

uhm0311 commented 3 months ago

redis-test-container와 같이 다른 test-container 구현체 레포지토리에서 참고할만한 사항은 없을까요?

brido4125 commented 3 months ago

라이센스 설정도 필요할것 같네요.

redis test container와 spring data arcus 모두 Apache License 2.0 를 사용해서 따라가면 될 것 같습니다.

oliviarla commented 3 months ago

기능 관점에서 궁금한건데, redis에는 컨테이너 내부에서는 6379로 띄우고 외부에서는 랜덤포트로 바인딩되는 기능이 있는데 arcus container에도 해당 기능이 제공되나요?

brido4125 commented 3 months ago

@oliviarla

기능 관점에서 궁금한건데, redis에는 컨테이너 내부에서는 6379로 띄우고 외부에서는 랜덤포트로 바인딩되는 기능이 있는데 arcus container에도 해당 기능이 제공되나요?

포트 인자로 줄 경우 (호스트 포트 : 컨테이너 포트) 모두 동일하게 컨테이너 띄우도록 했습니다.

호스트 포트를 랜덤으로 제공하면 사용자가 해당 컨테이너에 접근 시 host 포트를 알아내기 위한 절차가 필요하여 제공하지 않았습니다.

인자를 주지 않을 경우는 11211이 디폴트로 매핑 됩니다.

이 외 랜덤 호스트 포트를 사용할 경우의 이점이나 요구사항이 있으실까요?

oliviarla commented 3 months ago

로컬에 해당 포트를 사용하는 프로그램이 구동중인 경우, 테스트 컨테이너를 실행하기 위해 해당 프로그램을 종료하고 테스트를 진행해야 하는 불편함이 있습니다. 랜덤으로 제공한다면 로컬환경과 무관히 테스트를 실행할 수 있다는 장점이 있습니다.

클라이언트 객체를 생성할 때 ContainerState의 getFirstMappedPort() 메서드를 사용하면 랜덤으로 바인딩된 포트 정보를 간단히 알아낼 수 있어 보입니다. (확실하진 않습니다)

brido4125 commented 3 months ago

@oliviarla

말씀하신 코멘트 적용하려고 하니, 다음과 같은 문제가 발생하네요. ArucsCluster 사용 하면 내부적으로 n개의 ArcusContainer를 사용합니다.

즉, n개의 ArcusContainer들이 <랜덤포트>:11211 과 같이 띄워지는데, 이를 start()를 통해 시작하려면 미리 zkContainer가 동작해야합니다.

zkContainer가 동작하려면 cache_server_mappling에 적어야 할 <랜덤포트>를 미리 알고 있어야 하는데 해당 시점에는 ArcusContainer가 정상적으로 start() 될 수 없기에 <랜덤포트>를 알아낼 수 없는 문제가 발생합니다.

현재 구현으로도 포트를 변경할 수 있으니
로컬에 띄워진 프로세스를 피해서 테스트 컨테이너를 사용할 수 있다고 생각됩니다.

uhm0311 commented 3 months ago

Random 객체를 사용해서 랜덤 포트를 미리 결정하는 방식으로는 구현 가능한가요?

brido4125 commented 3 months ago

Random 객체를 사용해서 랜덤 포트를 미리 결정하는 방식으로는 구현 가능한가요?

불가능할것 같진 않은데 내부 로직이 복잡해질 것 같아서 우선은 보류해두었습니다.

1번 캐시노드의 특정 포트번호를 선정하면, 해당 포트가 사용 가능한지 확인해야합니다. 그리고 n개까지 늘어날 수 있기에 n번 수행해줘야합니다.

그래서 TestContainer에서 랜덤 포트를 가져오는 로직을 찾아보려하는데, 내부 구현이 복잡하게 되어있어서 시간이 좀 걸릴 것 같습니다.

uhm0311 commented 3 months ago

그럼 일정 범위 내의 포트 번호가 들어간 Collection 객체를 만들고 Collections.shuffle() 기능을 사용하면 어떤가요? 순서가 랜덤으로 섞인 Collection 객체 내에서 맨 앞의 n개 원소만 가져오는 것입니다.

brido4125 commented 2 months ago

@uhm0311

스냅샷 버전 배포 진행이 가능할까요? 남은 이슈가 리드미 추가라서 진행해도 될 것 같습니다.

uhm0311 commented 2 months ago

다른 레포지토리 참고하여 릴리즈 PR 올려주세요.