해보고 싶은게 많은 주니어
저장만 해두고 미뤄두었던 글들과 링크들을 하나씩 살펴보며 공부하는 요즘. 해보고 싶은 것들이 많이 생겼습니다.
- SDK 만들어보기 or npm 패키지 만들어보기
- 대량의 메시지, 이벤트 처리해보기(Kafka)
- 인텔리제이 플러그인 만들어보기
- 오픈소스 기여해보기
- 플러터로 앱 만들어보기
- 쿠버네티스로 CI/CD 구축해보기
- …
이렇게 여러 가지를 시도하고 싶어 하는 모습이 다소 난잡해 보일 수도 있지만, 제게는 재미와 흥미가 가장 큰 동력입니다. 그렇기에 하나도 놓치지 않고, 다 해보기로 결심했습니다. 비록 작은 것이라도 말이죠.
현재 플러터와 쿠버네티스는 강의와 스터디를 하고있고 오픈소스에 기여하기를 시도해봤습니다.
혼자서 처음부터 끝까지 하기 어려워 저장해 두었던 두 가지 링크를 참고했습니다.
위 글들은 각각 용기와 실질적인 도움을 주었고, 그 덕분에 한 걸음 더 나아갈 수 있었습니다.
khyojun
님과 망나니개발자
님께 감사드립니다.
기여한 코드
제가 기여한 코드는 아래와 같습니다.
private Class<? extends ConfigurableEnvironment> deduceEnvironmentClass() {
Class<? extends ConfigurableEnvironment> environmentType = this.applicationContextFactory
.getEnvironmentType(this.properties.getWebApplicationType());
if (environmentType == null && this.applicationContextFactory != ApplicationContextFactory.DEFAULT) {
environmentType = ApplicationContextFactory.DEFAULT
.getEnvironmentType(this.properties.getWebApplicationType());
}
if (environmentType == null) {
return ApplicationEnvironment.class;
}
return environmentType;
}
private ConfigurableEnvironment getOrCreateEnvironment() {
if (this.environment != null) {
return this.environment;
}
ConfigurableEnvironment environment = this.applicationContextFactory
.createEnvironment(this.properties.getWebApplicationType());
if (environment == null && this.applicationContextFactory != ApplicationContextFactory.DEFAULT) {
environment = ApplicationContextFactory.DEFAULT.createEnvironment(this.properties.getWebApplicationType());
}
return (environment != null) ? environment : new ApplicationEnvironment();
}
위 코드에서는 environmentType과 environment 두 객체를 생성하고, 조건에 맞지 않을 경우 디폴트로 생성된 객체를 반환합니다.
아쉬웠던 점과 수정 코드
- deduceEnvironmentClass 메서드에서 environmentType이 null일 때 ApplicationEnvironment.class를 반환하는 부분을 삼항 연산자를 활용해 코드를 간결하게 만들 수 있었습니다.
- this.properties.getWebApplicationType()을 두 메서드 모두에서 여러 번 호출하는 점이 아쉬웠습니다. 변수를 선언하여 재사용하는 것이 더 효율적이라 생각되었습니다.
수정된 코드는 다음과 같습니다.
private Class<? extends ConfigurableEnvironment> deduceEnvironmentClass() {
WebApplicationType webApplicationType = this.properties.getWebApplicationType();
Class<? extends ConfigurableEnvironment> environmentType = this.applicationContextFactory
.getEnvironmentType(webApplicationType);
if (environmentType == null && this.applicationContextFactory != ApplicationContextFactory.DEFAULT) {
environmentType = ApplicationContextFactory.DEFAULT
.getEnvironmentType(webApplicationType);
}
return (environmentType != null) ? environmentType : ApplicationEnvironment.class;
}
private ConfigurableEnvironment getOrCreateEnvironment() {
if (this.environment != null) {
return this.environment;
}
WebApplicationType webApplicationType = this.properties.getWebApplicationType();
ConfigurableEnvironment environment = this.applicationContextFactory
.createEnvironment(webApplicationType);
if (environment == null && this.applicationContextFactory != ApplicationContextFactory.DEFAULT) {
environment = ApplicationContextFactory.DEFAULT.createEnvironment(webApplicationType);
}
return (environment != null) ? environment : new ApplicationEnvironment();
}
webApplicationType을 선언해서 재사용하였고 environmentType이 null이 아닐 때 삼항연산자를 통해 반환하게 처리하였습니다.
PR
(참고: PR 하는 방법)
코드를 수정하였지만 사실 크지 않은 부분이고 그저 가독성을 높이고 살짝만 재사용한 정도라서 이것도 기여가 되는건가? 하면서 너무 큰 기대는 하지 않았지만 두근거려서 죽을 뻔 했습니다.
결국 작은 기여로도 task 라벨을 받으며 컨트리뷰터가 될 수 있었습니다.
커밋 내역
소소했지만 너무 신기하고 동력원이 되는 경험이었습니다. 리팩토링을 열심히 했던 경험과 노력들이 뿌듯하게 느껴졌고, 다음엔 좀 더 시간을 가지고 개선까지 해볼 수 있도록 노력해보겠습니다.