JavaRush /Java Blog /Random-KO /면접 시험이 오픈 소스 라이브러리로 변한 방법
Roman Beekeeper
레벨 35

면접 시험이 오픈 소스 라이브러리로 변한 방법

Random-KO 그룹에 게시되었습니다
안녕하세요, JavaRush 커뮤니티 여러분! 제 소개: 저는 2016년 봄부터 Java 소프트웨어 엔지니어로 일하고 있습니다. 저는 여기에 와서 공부하는 동안 해결하지 못한 문제를 해결하는 것을 좋아합니다. 오늘은 라이브러리에 대해 말씀 드리겠습니다 - 이미지 비교 . 이는 GitHub 에서 공개적으로 사용할 수 있는 오픈 소스 라이브러리입니다 . 인터뷰 테스트 작업이 오픈 소스 라이브러리로 전환된 방법 - 1이 글의 목적은 오픈 소스 제품을 만드는 것이 단지 시간 낭비가 아니라는 점을 전달하는 것입니다. 이는 전체 개발 프로세스를 제어할 수 있고 모든 세부 사항을 조사해야 할 때 다양한 측면에서 끌어온 풍부한 경험입니다. 오픈 소스는 당신 주변의 세계입니다. 농담이 아닙니다. 이 도서관이 존재하는 동안 저는 미국, 인도, 중국, 이집트, 러시아, 독일, 우크라이나, 스웨덴, 뉴질랜드, 노르웨이 등 다양한 국가의 사람들과 소통했습니다. 즉, 공동 개발, 타협점 찾기, 코드 확인 등의 실제 경험입니다. 이상으로 소개였습니다. 이제 순서대로 시작하겠습니다.

시험. 2017년 8월 초

모든 것은 제가 회사 중 한 곳과 인터뷰를 했다는 사실에서 시작되었습니다. 첫 번째 단계는 테스트 작업을 작성하는 것이었습니다. 임무는 같은 크기의 두 사진을 비교하고 차이점을 찾아 그룹화하고 주위에 직사각형을 그리는 코드를 작성하는 것이었습니다. 첫 번째 사진이 있습니다.
인터뷰 테스트 작업이 오픈 소스 라이브러리로 전환된 방법 - 2
두 번째 사진이 있습니다.
인터뷰 테스트 작업이 오픈 소스 라이브러리로 전환된 방법 - 3
차이점을 찾아 아래와 같이 동그라미를 치는 것이 필요했습니다.
인터뷰 테스트 작업이 오픈 소스 라이브러리로 변한 방법 - 4
보시다시피 빨간색 삼각형으로 둘러싸인 사용자 이름 필드에 차이가 있습니다. 작업에 대한 자세한 설명 . 기능적으로도 올바르게 할 뿐만 아니라, 부끄럽지 않도록 아름답게 하고 싶다고 결심했습니다. 이를 위해 나는 이것을 GitHub 에 프로젝트로 게시하기로 결정했습니다 . 나는 오랫동안 GitHub를 연구하고 작업 경험을 쌓고 싶었습니다. 잠깐 살펴본 후, 코드 품질 분석, 테스트를 통한 코드 커버리지 생성 등을 위해 타사 서비스를 추가하는 것이 좋겠다는 것을 알았습니다. 다음 도구가 추가되었습니다.
  • Codacy - 코드 품질. 정말 주목할 가치가 있습니다.

  • Travis CI는 프로젝트를 빌드하고 테스트를 실행하며 프로젝트가 성공적으로 빌드되었는지 여부를 알려주는 CI(지속적 통합) 도구입니다. 예를 들어, 새로운 변경으로 인해 테스트 중 하나가 통과하지 못한 경우 프로젝트 빌드가 실패했다는 메시지가 표시되고 빨간색으로 표시됩니다.

  • 작업복은 코드의 몇 퍼센트가 테스트에 포함되는지 보여주는 도구입니다.

  • BetterCode Hub는 코드 품질을 분석하기 위한 또 다른 도구입니다. 무엇이 나쁜지 알려줄 뿐만 아니라 그 이유를 설명하고 이에 대한 지식을 얻을 수 있는 책에 대한 링크를 제공하는 매우 유용한 것입니다.

이러한 각 서비스에는 코드 적용 프로젝트와 같은 데이터 결과가 포함된 자체 배지가 있습니다. 그리고 이 배지는 프로젝트의 주요 설명인 README 파일에 추가될 수 있습니다. 작업이 준비되었습니다. 검토를 위해 보냈습니다. 검토 후, 저는 즉시 새로운 기억을 통해 각 댓글에 대해 Github 이슈를 생성했고 , 이는 이 프로젝트를 개선하는 데 도움이 되었습니다. 사업주로부터 개선과제가 없어 한동안 프로젝트를 잊어버렸는데...

도서관 경로. 2018년 7월

심벌 마크

어느 순간 사람들이 내 프로젝트를 자주 방문하고 이런 일이 매일 일어난다는 것을 알게 되었습니다. 나는 이것에 놀랐고, 약 1년 후에 특정 그래픽 디자이너가 나에게 내 프로젝트를 위한 로고를 만들 것을 제안했다는 내용의 ISSUE가 만들어졌다는 사실에 더욱 놀랐습니다. 그들은 오픈소스 제품에 대해 이 작업을 수행하는 것을 좋아하며 완전히 무료로 수행할 것이라고 말했습니다. 우리는 협력을 시작했습니다. 몇 가지 옵션이 제안되었지만 최종적으로는 다음과 같이 결정했습니다.
인터뷰 테스트 작업이 오픈 소스 라이브러리로 전환된 방법 - 5
그 당시 저는 아직 어렸고, 오픈소스 커뮤니티도 낯설었는데, 그런 제안을 했다는 사실 자체가 너무 황당해서, 저 사람이 왜 이러는 걸까요? 이에 그는 "ㅋㅋㅋ 아, 오픈 소스 프로젝트에 기여하는 것을 좋아하기 때문입니다. 일종의 인생 목표 같은 것..."( 문제 자체는 여기에 있습니다 ). 그때 저는 오픈소스 프로젝트를 통해 다양한 사람들이 당신을 찾아 이렇게 흥미로운 것들을 제공한다는 것이 얼마나 멋진 일인지 처음으로 느꼈습니다!

첫 번째 측면 결함

저는 중국의 특정 개발자가 저를 위해 문제를 생성했다는 것을 알았습니다 . 그는 라이브러리 작업에서 결함을 발견했으며 큰 이미지를 사용하면 StackOverflowError가 발생한다고 설명했습니다 . 그 남자는 이점을 이용하기로 결정했고 실수를 발견했습니다. 그리고 나는 단지 그것을 찾은 것이 아닙니다. 그리고 그녀에 대해서도 썼습니다. 이는 도서관 발전의 새로운 단계입니다. 게다가 딱히 해결책도 없었어요. 어느 시점에서 러시아의 테스터 중 한 명이 해결책을 제안했습니다. 하지만 그것은 날것이었고 제대로 만들어지지 않았으며 나는 그것을 받아들이지 않았습니다. 그리고 Maven Central에 라이브러리를 게시할 때가 되었을 때, 이 결함을 뭔가 해결해야 했는데, 나는 그것을 함께 게시하고 싶지 않았습니다. 게다가 한번도 고치지 못한 결함이 또 있어서 많은 불편함을 안겨주었습니다.

명령줄 사용법. 2018년 가을

개발의 다음 단계는 명령줄을 통해 라이브러리를 사용하기를 원하는 스웨덴인(Renato Athaydes)과의 통신이었으며 이를 위해 몇 가지 변경과 추가가 필요했습니다. 저는 이 사실에 또 놀랐습니다. 그래픽 디자이너가 나에게 편지를 보낸 후, 나의 놀라움은 다소 줄어들었지만 여전히 매우 높았습니다. 누군가 내 코드가 정말로 필요하다는 생각은 나를 믿을 수 없는 감정으로 가득 채웠습니다. 그는 필요한 변경을 하고 코드를 준비했습니다. 코드 검토를 수행했습니다. 즉, 변경 사항을 살펴보았는데 변경된 주석이 있었고 변경 사항이 이미 라이브러리에 있었습니다. 이러한 변경 사항을 버전 v2.0 으로 지정했습니다 . 다음 단계는 중앙 저장소인 Maven Central에 라이브러리를 추가하는 것이었습니다. 여기에서 모든 프로젝트에 대해 다운로드하여 종속성으로 사용할 수 있습니다. 당시에는 원격으로도 어떻게 해야 할지 몰랐기 때문에 바쁘다며 프로젝트 설정에 필요한 모든 단계를 그에게 해달라고 부탁했습니다. 그러나 이것만으로는 전혀 충분하지 않은 것으로 밝혀졌고 가장 흥미로운 점은 Maven Central과의 연결을 설정하는 것이었습니다. 이것은 처음에는 할 수 없는 엄청난 고통이었고, 4월 15일에야 Maven Central에 프로젝트를 게시할 수 있었습니다. 쉽지는 않았지만 다른 사람들이 말했듯이 "Java 코드를 게시하려는 모든 사람은 이 과정을 거친다." 라이브러리를 출판하기 전에, 오랫동안 계속되어 왔던 결함에 대해 마침내 무엇을 어떻게 해야 하는지 발견하고 새로운 버전 v2.0.2 를 출시했습니다 . v2.0.2에서는 저를 도와주신 모든 분들께 감사를 표하고 제가 무엇을 어떻게 했는지 설명했습니다. .

Maven Central에 게시. 2019년 봄

라이브러리를 올바르게 게시하려면 버전 관리와 버전을 올바르게 설정하는 방법을 잘 이해해야 합니다. 나는 이 계획을 고수할 것이다:
  • XX.YY.BBBB , 여기서 XX는 이전 버전과 호환되지 않는 변경 사항(예: 메서드에서 반환 결과 변경)을 수반하는 주요 버전 업데이트입니다.
  • YY 는 사소한 업데이트입니다. 즉, BBBB를 변경하지 않는 내부 변경 또는 확장입니다 . 이는 수정된 결함입니다.
  • 예를 들어 버전 2.0.2 는 메이저 버전이 2이고, 마이너 업데이트가 없었고, 결함에 대한 업데이트가 2개 있다는 뜻이다.
다음으로, groupIdArtifactId 를 올바르게 설정하는 방법을 알아내는 것이 중요했습니다 . 한 번 선택하고 계속 사용해야 했습니다. 그리고 코드가 저장되는 패키지를 구성합니다. 이전: ua.comparison.image 현재: com.github.romankh3.image.comparison 그리고 이것은 분명히 더 좋습니다. 모두가 이것이 GitHub의 프로젝트이고 romankh3라는 별명을 가진 사람에게서 찾을 수 있다는 것을 알고 있기 때문입니다. 이 모든 작업을 수행한 후 새 버전 v2.1.0 을 출시했습니다 .

스웨덴과의 의사소통. 2019년 5월

내가 도서관을 출판한 후, 또 다른 스웨덴인(Mika Kytöläinen)이 나에게 이메일을 보내 그의 친구에게 내 도서관을 변경해 달라고 요청했습니다. 그는 이것이 정말로 필요하다고 말하며 우리가 그것을 빨리 하면 매우 기뻐할 것이라고 말했습니다. 물론 나는 필요한 변화에 반대하지 않았습니다. 그는 직사각형을 그리는 선 두께 구성을 추가할 것을 제안했습니다. 시력이 좋지 않은 사람들에게는 이것이 유용한 변화가 될 것입니다. 코드를 준비했습니다 . 몇 가지 변경 사항을 더 추가하여 v2.2.0 버전을 출시했습니다.

독일인과의 의사소통. 2019년 5월

이후 한 독일인이 테스트용으로 사용하고 싶은데 기능이 부족하다는 문제를 제기했다. 그는 매우 흥미로운 많은 제안을 했으며, 비교 결과와 함께 결과 그림만 반환하는 대신 비교된 내용, 결과(필요한 경우) 및 상태 등 일련의 데이터를 반환할 것을 제안했습니다. MATCH, MISMATCH, SIZE_MISMATCH 입니다. 심지어 변경도 했습니다. 그러나 이전 코드를 전혀 고려하지 않고 성급하게 만들어졌습니다. 나는 그것을 거부하고 내가 적절하다고 생각하는 대로 수행하겠다고 제안했습니다. 그럼에도 불구하고 그는 더 많은 반응을 보였고 나는 그것을 직접하고 새 버전을 출시하기로 결정했습니다. 동시에 Mika Kytöläinen은 비교에 포함되지 않을 영역을 추가하는 또 다른 흥미로운 기능을 제안했습니다. 이것은 실제 사례입니다. 그리고 이 모든 것이 v3.0.0 에서 출시되었습니다.

실제 프로젝트에서 사용

5월 말에 키예프의 자동화 테스터가 나에게 편지를 보냈는데, 그는 도서관에 관심을 갖게 되었고 돈을 벌 수 있는 실제 프로젝트에 도서관을 사용하고 싶어했습니다. 획기적인 일이었습니다! 애완동물 프로젝트 어딘가에서 사용하는 것과 실제 프로젝트에서 사용하는 것은 완전히 다른 문제입니다. 우리는 그것이 무엇이며 어떻게 작동하는지 논의했습니다. 이 응용 프로그램은 매우 흥미롭습니다. 해당 응용 프로그램에는 인쇄된 수표가 있으며 수표가 특정 템플릿에 따라 생성되고 변경되지 않는지 확인해야 했습니다. 하지만 날짜, 시간 등의 부분이 항상 바뀌어서 무시해야 하는 문제가 있었습니다. 우리는 일부 영역을 무시하는 기능을 이미 추가했지만 실제 사용하기에는 여전히 매우 원시적인 것으로 판명되었으며 이에 대해 몇 주 동안 계속 함께 유익하게 작업했습니다. 그 결과 버전 v3.1.1 이 출시되었습니다.

틈새 시장 찾기

그 후, 나는 내 도서관의 진짜 틈새 시장이 그것을 테스트에 사용하고 있다는 것을 깨달았습니다. 이를 위해 나는 피드백을 받고 명성을 높이기 위해 테스터를 위한 일종의 포럼을 찾아 이에 대해 글을 쓰기로 결정했습니다. 나는 러시아어 포럼을 발견하고 거기에 기사를 게시했습니다. 이미지 테스트 조직 - 유사한 두 이미지 비교 . 그 안에서 코드와 기능에 대한 실제 피드백을 받았고, 새 버전 v3.2.0을 적용하고 출시한 다음 v.3.3.0을 출시했습니다 .

지금

현재 라이브러리에는 Github에 60개의 별이 있고 33개의 포크가 있습니다. 자동화기 포럼의 기사 외에는 어떤 방식으로도 홍보하지 않았다는 점을 고려하면 매우 멋지다고 생각합니다. 끝까지 읽어주신 모든 분들께 감사드립니다. 생각보다 정말 긴 글이 되었네요. Maven Central에 라이브러리를 게시하는 방법에 대한 기사입니다. 추가할 내용이 있으면 적어주세요! 도서관 개선을 위해 제안할 사항이 있다면 적어주세요! 나는 모든 것을 읽고 적절한 시간을 할애하겠습니다. 기사를 좋아하고 유용하다고 생각하는 사람은 누구나 평가하고 댓글을 작성하세요. 또한 내 github 계정 romankh3을 구독하세요. 내 다른 기사도 참조하세요.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION