⚡ 개요
최근 회사 일정과 다른 일정들이 겹치게 되면서 작업한 내용들을 노션에서만 정리를 하고 있다...😭기존 프로젝트를 리뉴얼 하는 과정에서 자주 사용하고, 중복된 코드도 많이 나오는 부분을 최대한 공통화 시켜서 관리 하자는 얘기가 나오게 되었고 이를 바탕으로 준비 했던 내용을 정리 하려고 한다.
(참고) 코드적인 내용은 나오지 않습니다.
⚡ 사용 이유
우리 회사를 기준으로 공통화 라이브러리를 관리하고 사용 해야 겠다고 생각한 내용을 정리했다.
- 코드 중복 방지 및 일관성 유지
- 개발 진행간에 작업 범위도 크고, 코드량이 많다보니 매번 사용하는 코드를 각자의 방법으로 개발해서 사용하는 경우가 많으며, 이때 간혹 프로세스가 변경됨에 따라서 일부 코드는 정상 동작 하지 않는 경우가 발생해서 이슈가 나오는 경우가 있다.
- 유지보수 및 관리 용이성
- 프로세스가 변경이 되서 해당 로직이 변경되는 경우 공통 라이브러리만 수정하고 공유하면 전체 로직이 변경되는 장점 (개발 진행간에 공통 라이브러리를 사용하면 실수가 없어짐)
- 개발 속도 향상
- 코드를 직접 개발하지 않고 공통 라이브러리에서 필요한 코드를 호출해서 사용 하도록 가이드 필요.
- 이부분의 경우는 어떤 코드를 공통 라이브 러리로 정의 할지에 대한 고민이 필요 하다.
- 이부분의 경우는 어떤 코드를 공통 라이브 러리로 정의 할지에 대한 고민이 필요 하다.
- 코드를 직접 개발하지 않고 공통 라이브러리에서 필요한 코드를 호출해서 사용 하도록 가이드 필요.
- 배포 및 의존성 관리 편의성
- 버전을 업그레이드 하게 되더라도, 의존성 관리를 하게되면 각 버전에 맞게 가져다 사용하면 된다.
- 버전별로 관리가 필요하기 때문에 이부분은 좀 귀찮을거 같아서 단점이라고 생각한다.
- 확장성 및 재사용성 증가
- 신규 개발을 하는 경우에도 대부분 동일하게 코드를 재사용 하는 경우가 있는데 이때 공통 라이브러리를 추가해서 사용하면 굳이 코드를 찾아서 넣어줄 필요가 없다.
⚡ 관리 방식
패키지 관리 방식
공통 라이브러리를 사용하게 되는 경우, 형상 관리를 통해서 버전을 관리 하고, 패키지를 배포 하는 방식을 사용 한다.
내부적으로도 위와 동일한 방식을 사용 해보려고 gitHub에서 테스트 코드를 작업 했을때 정상적으로 베포 되고 패키지가 연결되는 부분을 확인 했다.
내부적 형상관리 툴에서 사용을 하려고 했으나 보안상의 이유로 인해서 https를 연결 해야지만 패키지 배포가 가능한 부분을 확인 했다. 현재 기준으로는 공통 라이브러리 하나를 배포 하자고 보안 관련된 부분까지 설정하는것은 좀 과하다고 판단하여 따로 설정하지는 않았다. (내부망에서 많이들 사용하는 방법으로는 nexus repository 를 구축해서 사용 하는것으로 보임)
내부적으로는 특정 폴더에 패키지 파일을 넣어 놓고 폴더에서 버전을 관리하고 사용하는 방식을 사용했다.
⚡ 구조 및 추가 설정
기본적으로 패키지를 배포 하게 되면 나오는 구조 이다.
아래와 같은 형태로 배포를 해야 maven, gradle 에서 읽을수가 있다.
(참고)
빌드시 생성되는 파일의 경우는 위의 파일 내용과 함께 암호화된 파일도 같이 생성이 되는데 기존 *.jar 파일의 변조 위험으로 인해서 크로스 체크를 하기 위해서 존재하는 파일이며, 동작과는 무관하여 삭제해도 상관 없다.
기본 골격)
<base-directory>/
└── <groupId>/
└── <artifactId>/
└── <version>/
├── <artifactId>-<version>.jar
├── <artifactId>-<version>.pom
└── 기타 파일 (예: sources, javadoc 등)
예시)
/path/to/local/repository/
└── com/
└── example/
└── library/
└── my-library/
└── 1.0.0/
├── my-library-1.0.0.jar // 라이브러리 JAR 파일
├── my-library-1.0.0.pom // POM 파일
├── my-library-1.0.0-sources.jar // 소스 코드 (선택)
└── my-library-1.0.0-javadoc.jar // Javadoc (선택)
gradle 관련 설정
// 위 예시 코드를 기준으로 작성
implementation 'com.example.library:my-library:1.0.0'
'Java' 카테고리의 다른 글
[JPA] QueryDsl에서 동적 쿼리 및 배치 쿼리 사용 방법 (0) | 2024.03.30 |
---|---|
[JPA] CascadeType 사용시 주의 사항 (0) | 2024.02.24 |
[JAVA] 날짜 변환 하기 (Date, Time, LocalDate, Timestamp등) (1) | 2024.01.21 |
[JAVA] Connection leck 관련 Apparent connection leak detected 경고 관련 내용 (0) | 2023.12.29 |
[Pythod] 파이썬 개발 도전 (2) (0) | 2023.12.10 |