Open brido4125 opened 3 months ago
@uhm0311 @oliviarla
배포 전에 필요한 부분 있으면 말씀해주세요
redis-test-container와 같이 다른 test-container 구현체 레포지토리에서 참고할만한 사항은 없을까요?
라이센스 설정도 필요할것 같네요.
redis test container와 spring data arcus 모두 Apache License 2.0 를 사용해서 따라가면 될 것 같습니다.
기능 관점에서 궁금한건데, redis에는 컨테이너 내부에서는 6379로 띄우고 외부에서는 랜덤포트로 바인딩되는 기능이 있는데 arcus container에도 해당 기능이 제공되나요?
@oliviarla
기능 관점에서 궁금한건데, redis에는 컨테이너 내부에서는 6379로 띄우고 외부에서는 랜덤포트로 바인딩되는 기능이 있는데 arcus container에도 해당 기능이 제공되나요?
포트 인자로 줄 경우 (호스트 포트 : 컨테이너 포트) 모두 동일하게 컨테이너 띄우도록 했습니다.
호스트 포트를 랜덤으로 제공하면 사용자가 해당 컨테이너에 접근 시 host 포트를 알아내기 위한 절차가 필요하여 제공하지 않았습니다.
인자를 주지 않을 경우는 11211이 디폴트로 매핑 됩니다.
이 외 랜덤 호스트 포트를 사용할 경우의 이점이나 요구사항이 있으실까요?
로컬에 해당 포트를 사용하는 프로그램이 구동중인 경우, 테스트 컨테이너를 실행하기 위해 해당 프로그램을 종료하고 테스트를 진행해야 하는 불편함이 있습니다. 랜덤으로 제공한다면 로컬환경과 무관히 테스트를 실행할 수 있다는 장점이 있습니다.
클라이언트 객체를 생성할 때 ContainerState의 getFirstMappedPort() 메서드를 사용하면 랜덤으로 바인딩된 포트 정보를 간단히 알아낼 수 있어 보입니다. (확실하진 않습니다)
@oliviarla
말씀하신 코멘트 적용하려고 하니, 다음과 같은 문제가 발생하네요. ArucsCluster 사용 하면 내부적으로 n개의 ArcusContainer를 사용합니다.
즉, n개의 ArcusContainer들이 <랜덤포트>:11211
과 같이 띄워지는데,
이를 start()를 통해 시작하려면 미리 zkContainer가 동작해야합니다.
zkContainer가 동작하려면 cache_server_mappling에
적어야 할 <랜덤포트>
를 미리 알고 있어야 하는데
해당 시점에는 ArcusContainer가 정상적으로 start() 될 수 없기에
<랜덤포트>
를 알아낼 수 없는 문제가 발생합니다.
현재 구현으로도 포트를 변경할 수 있으니
로컬에 띄워진 프로세스를 피해서 테스트 컨테이너를 사용할 수 있다고 생각됩니다.
Random 객체를 사용해서 랜덤 포트를 미리 결정하는 방식으로는 구현 가능한가요?
Random 객체를 사용해서 랜덤 포트를 미리 결정하는 방식으로는 구현 가능한가요?
불가능할것 같진 않은데 내부 로직이 복잡해질 것 같아서 우선은 보류해두었습니다.
1번 캐시노드의 특정 포트번호를 선정하면, 해당 포트가 사용 가능한지 확인해야합니다. 그리고 n개까지 늘어날 수 있기에 n번 수행해줘야합니다.
그래서 TestContainer에서 랜덤 포트를 가져오는 로직을 찾아보려하는데, 내부 구현이 복잡하게 되어있어서 시간이 좀 걸릴 것 같습니다.
그럼 일정 범위 내의 포트 번호가 들어간 Collection 객체를 만들고 Collections.shuffle() 기능을 사용하면 어떤가요? 순서가 랜덤으로 섞인 Collection 객체 내에서 맨 앞의 n개 원소만 가져오는 것입니다.
@uhm0311
스냅샷 버전 배포 진행이 가능할까요? 남은 이슈가 리드미 추가라서 진행해도 될 것 같습니다.
다른 레포지토리 참고하여 릴리즈 PR 올려주세요.
🔍 Description
arcus-test-container의 배포를 위해 필요한 단계들을 구현한다
⏰ Implementation Idea
깃헙 액션 CI 추가리드미, 라이센스 파일 추가위 단계에서 더 필요하다고 생각되는 부분있으면 의견 남겨주세요.