본문 바로가기

분류 전체보기

(21)
오픈소스 라이브러리 Maven Central Repository에 배포하기 (#2) 지난 글에서는 Maven Repository와 Central Repsitory에 대해 간단히 알아봤다. 2020/11/08 - [SW 아키텍처 이야기] - 오픈소스 라이브러리 Maven Central Repository에 배포하기 (#1) 이제 본격적으로 OSS Repository Hosting을 활용해 라이브러리를 Central Repository에 배포해 보자. OSS Repository Hosting은 오픈소스 프로젝트의 바이너리에 대한 무료 호스팅 서비스를 제공하는데, Sonatype의 Nexus Repository Manager로 운영이 된다. 사이트 주소는 https://oss.sonatype.org이며 Maven repository에 대한 표준과 함께 다음과 같은 서비스를 제공한다. 개발 버..
오픈소스 라이브러리 Maven Central Repository에 배포하기 (#1) 오픈소스로 개발된 라이브러리를 다른 프로젝트에서 활용하게 하려면 Maven의 Central Repository 등과 같은 public repository에 배포를 해야 한다. 하지만, 배포를 위해 준비해야 할 것들이 생각보다 많다. 이에 대한 얘기를 SOSCON(Samsung Open Source Conference, 2019)에서 발표한 것이 있는데, 여기서 다시 정리해 보고자 한다. Maven Central Repository? 무엇보다도 Maven의 repository와 Maven Central Repository, 그리고 이에 대한 운영 방식을 먼저 이해해야 한다. Maven Repositories Maven은 Java 애플리케이션 빌드를 지원하는 도구로서 라이브러리에 대한 의존성 관리 메커니즘을..
CSV 파일 기반 List 활용 (Code Analyst 코드 이야기 #3) Code Analyst는 여러 점검을 수행하고 그 결과를 제공한다. 일부 점검은 결과가 크기도 한데, 몇 천 정도가 나오기도 한다. 예를 들면 전체 소스에 중복 코드 목록이 그렇게 되는 경우가 많다. 문제는 이런 여러 결과를 메모리에 보관해야 하는 부담이다. 그래서 생각한 방식이 List 인터페이스를 갖으면서 리스트 내용이 파일로 보관하는 것이다. 오픈소스SW를 여기 저기 찾아봤지만, 그런 기능을 제공하는 것을 찾지 못했다. 그래서 직접 구현하기로 했고, 이를 Code Analyst에서 잘 사용하고 있다. 우선, 해당 코드는 github.com/RedCA-Family/code-analyst/blob/development/src/main/java/com/samsungsds/analyst/code/util/..
System.exit() 무효화 하기 (Code Analyst 코드 이야기 #2) 외부 오픈소스SW 라이브러리를 사용하다 보면, 가끔 정상적이든 비정상적이든 System.exit()로 끝나는 경우가 있다. 주로 커맨드 라인(Command Line) 방식에서 그렇게 사용된다. Code Analyst에서도 CheckStyle을 사용할 때 오류가 발생하면 강제 종료가 되는데, 이를 간단하게 무효화 할 수 있다. 2020/10/28 - [SW 개발 이야기] - Code Analyst(코드분석) 오픈소스SW 개발 이야기 package com.samsungsds.analyst.code.util; import java.security.Permission; public class SystemExitDisabler { public static class ExitTrappedException exten..
Log4j 실시간 로그 레벨 변경하기 (Code Analyst 코드 이야기 #1) 지난번에 오픈소스로 공개한 Code Analyst에 대해 잠깐 소개한 적이 있다. 2020/10/28 - [SW 개발 이야기] - Code Analyst(코드분석) 오픈소스SW 개발 이야기 그리고 특징적인 부분을 정리하기로 했는데, 첫번째로 간단하게 Log4j에 대한 로그 레벨을 실시간으로 변경할 때 사용할 수 있는 코드를 소개한다. 로깅은 보통 SLF4J(Simple Logging Facade for Java)를 앞에 두고 실제 구현체만 log4j를 많이 사용하지만, Code Analyst에는 log4j를 그대로 사용했으며, 다음과 같은 처리를 통해 쉽게 원하는 로거의 레벨을 실시간으로 변경을 할 수 있다. package com.samsungsds.analyst.code.util; import org...
특허 출원 이야기 : 부분 소스 코드의 컴파일 장치 및 방법 자바 언어의 정적 분석 도구들은 주로 소스를 분석하기도 하지만, 바이너리인 바이트코드 class 파일을 분석하는 경우가 많다. 소스를 분석하는 대표적 툴이 PMD이고, SpotBugs 같은 툴이 클래스를 분석하다. 또 Sonar Java Analyzer와 같은 툴을 둘 다 사용하기도 한다. 이 Sonar Java의 경우, 이전 버전에서는 소스만을 분석하다가 특정 버전부터 이후부터 클래스 파일도 같이 분석한다. 정적 분석툴이 소스보다 클래스 파일을 활용하는 것은 아무래도 정확도가 높기 때문이다. 실제로 소스 기반 파서가 주는 정보보다 클래스 파서가 주는 정보가 많다. 정보가 많다는 것은 그만큼 정확한 분석이 더욱 가능하다는 것이다. 다만, 라인 정보와 같은 경우 클래스 파일에는 일부만 있다 보니 소스 분석..
첫 번역서(gRPC 시작에서 운영까지) 예약판매 시작!! gRPC 시작에서 운영까지 www.kyobobook.co.kr/product/detailViewKor.laf?ejkGb=KOR&mallGb=KOR&barcode=9791161754635&orderClick=LAG&Kc= gRPC 시작에서 운영까지 - 교보문고 클라우드 및 마이크로서비스 아키텍처의 출현으로 오늘날 애플리케이션은 프로세스간 통신 기술을 사용해 연결되며, gRPC는 가장 널리 사용되는 효율적인 통신 기술 중 하나이다. 이 책은 gRPC를 www.kyobobook.co.kr 올해 3월부터 준비한 첫 번역서가 드디어 나온다. 아직까지 번역서를 포함해 gRPC에 대한 도서가 없었는데, 나름 gRPC에 대해 제대로 설명하는 책이라 의미가 있는 것 같다. 개인적으로도 첫 번역이라 기대도 되지만, 염려도..
Code Analyst(코드분석) 오픈소스SW 개발 이야기 회사 업무 상 여러 inspection 툴과 지표(metrics)들을 측정하고 개선을 가이드하던 적이 있다. 이 때 개인적인 필요에 의해, 종합적으로 여러 지표들을 분석하는 Code Analyst라는 툴을 만들어 사용했다. 처음 만들 때에 다음과 같은 기준과 목표로 개발을 시작했던 것 같다. 인터넷 연결이 되지 않더라구 사용 가능해야 한다. 당연히 여러 지표들을 한번에 측정해야 한다. 손쉽게 사용할 수 있도록 별도 설치 없이 CLI(Command Line Interface)로 실행 가능 확장성을 위해 API 제공 오픈소스SW 라이선스를 준수한다. Apache License 2.0, MIT, BSD 등의 대부분 문제 없는 라이선스 오픈소스 활용 GPL 라이선스 배제 : 상업적 활용이 어렵고, 개발된 소스의..
Generic Methods를 통해 Spring Bean을 casting 없이 처리하는 Utility 클래스 Generics를 사용하면 여러 개별적인 데이터 타입들을 아우르는 공통 기능을 손쉽게 만들 수 있다. 그 중에서 잘 사용되진 않지만 static 메소드에 파라미터의 타입을 통해 리턴 타입을 처리할 수 있는 generic method를 사용하면 객체가 아닌 메소드 수준에서 generics를 손쉽게 적용할 수 있다. 이를 활용하여 casting 없이 지정한 타입을 통해 바로 Spring Bean 객체를 얻어오는 유틸리티 클래스를 만들 수 있다. import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.Applicatio..
TDD를 하면 코드품질이 좋아질까? 아마 애자일에 대해 조금이라도 알고 있는 개발자라면, 테스트 주도 개발(Test-Driven Development)에 대해 들어봤을 것이다. 그러나 대부분의 개발팀은, TDD에 대한 여러 이점에도 불구하고, 이를 도입하기에 주저하는 경우가 많다. 아마 TDD에 들어가는 노력에 비해 얻어지는 이익이 높은지 확신이 없기 때문인 것 같다. 사실 TDD를 도입하기에는 여러 장벽이 있지만, 이를 통해 얻어지는 장점들도 많은 것 같다. 그 중 "코드품질" 측면에서 실제로 어떤 점들이 좋아질 수 있는지 알아보자. 2018년 OKKYCON을 통해 "코드 품질을 위한 테스트 주도 개발"이라는 주제를 발표했다. 발표를 통해 TDD 및 코드 품질에 대한 개략적인 소개와 TDD가 어떻게 SW 품질에 영향을 줄 수 있는지, 그..