FOSSLIGHT
Fosslight는 LG전자에서 자체 개발하여 사용하고 있는 오픈소스 관리 통합 시스템을 누구나 사용할 수 있도록 2021년 오픈소스로 공개한 프로젝트이다. 매년 oss에서 오픈소스 컨트리뷰션을 통해 자체적으로 멘토와 멘티를 선발하고 있으며 좋은 기회에 참여할 수 있게 되었다.
이슈 내용
ISSUE - #817 Project List, 3rd Party List > Add watcher search
PR - Added watcher search box in Project List, 3rd Party List
내가 맡았던 이슈는 위의 사진처럼 검색을 할 때 Watcher 값도 입력 받아 검색 결과를 조회하는 것이었다.
구현 과정
우선 이 프로젝트의 변수는 많은 사람들의 손을 거쳐갔다는 것이다. 그래서 이 프로젝트에 대한 전반적인 이해와 그에 따라 사람들이 어떻게 구현했는지 코드를 잘 이해해 보려고 노력했다.
3rd Party 와 같은 용어는 이번에 처음 들어보았는데 알고 보니 되게 자주 쓰이는 용어였다. 해당 프로젝트에서는 3rd Party 페이지에 쓰이는 모든 domain 및 변수명이 Partner로 바뀌어 쓰이고 있는데, 프로젝트에서 이런 용어들이 어떤 의미로 쓰이는지 이해한 후에야 기여할 준비를 할 수 있었다.
우선 이 이슈에 기여하기 위해 차례대로 어떻게 구현하면 좋을지 액션 아이템들을 뽑아두었다.
해당 action item들을 바탕으로 수정해야 할 프로젝트 경로와 내용들은 아래와 같았다. 어떤 경로에서 어떤 페이지의 내용을 사용하는지를 파악하는 것이 중요한데, 이 때 정리를 잘 안 해두면 이후에 계속 URL들이 비슷해서 경로명을 헷갈리는 불상사가 발생할 수 있어 나는 아래와 같이 정리하면서 수정하니 안 헷갈릴 수 있어서 좋았다!
가장 main이 되었던 코드 부분은 아래와 같다. 처음으로 mybatis 코드를 수정해보았는데, MYSQL과 비슷한 방식으로 접근하여 코드 작성을 빠르게 해볼 수 있었다.
MYSQL과는 조금 다른 Mybatis의 foreach 명령어에 대해 간단히 설명해보자면,
SELECT
*
FROM MN_CS
WHERE CS_ID IN
<foreach collection='list' index='index' item='csId' open='(' close=')' separator=','>
#{csId}
</foreach>
는 아래의 mysql 쿼리와 동일하다.
SELECT
*
FROM MN_CS
WHERE CS_ID IN ('moon', 'sun', 'water)
이와 같은 원리로 아래의 코드를 수정하였다.
아래 코드는 내가 watcher 검색을 'user'로 했다면 문자열 패턴에 user가 들어가는지 와일드카드 문자열 %을 사용하여 파악하는 로직이다.
WATCHER table에서 USER_ID나 USER_EMAIL 칼럼을 확인하여 만약 'user'가 들어가는 문자열이 있다면 그에 해당하는 칼럼의 PARTNER_ID를 도출한다.
PR 이후 시행착오
오픈소스에 기여하는 과정 중에 멘토 분들께 코드리뷰를 받을 수 있다.
해당 Issue가 어디까지를 요구하는지를 잘 이해하지 못해 추가적인 곳까지 건드린 것들이 있었고, 관련 없는 이슈로 생각되는 부분들을 제외할 것을 리뷰받을 수 있었다.
MERGE 과정
이후 깃과 관련한 추가적인 이슈들(IntelliJ Indent 오류, commit history 오류)을 해결한 이후에 MERGE를 성공할 수 있었다!
후기
오픈소스 프로젝트의 코드는 여러 사람들의 다양한 코드 스타일이 섞여 있어서 코드를 읽다 보면 일관성이 없다는 것을 느낄 수 있다. 하지만 이런 경우 해당 프로젝트의 Issue와 Pull Request 섹션을 살펴보면서 코드에 대한 설명을 찾아보면 코드 구조와 의도를 더 이해할 수 있었다.
내가 작성한 코드도 사실 제대로 동작하는 것 같아도 더 나은 방법이 있을 것이라고 생각한다. 오픈소스는 코드의 정답보다는 개발자들이 모여 더 협업하고 공유하는 것이 더 중요한 생태계(?)라고 느껴졌고 이후에는 K8S나 kafka 같은 좀 더 큰 생태계에서 기여해보고 싶다 !! 💖
'BackEnd > JAVA\SPRING' 카테고리의 다른 글
[SPRING] IOC (0) | 2023.09.03 |
---|---|
[SPRING] DAO의 분리와 확장 (5) | 2023.09.03 |
[SPRING+JAVA] Whisper API와 ChatGPT API 연동 (2) | 2023.06.29 |
[Spring] Spring으로 JWT 구현하기2 - Spring Security 라이브러리 (0) | 2023.02.11 |
[SPRING] Swagger, 프론트와의 소통을 편하게 하는 자동 툴 (2) | 2023.02.11 |