해보고 싶은게 많은 주니어

저장만 해두고 미뤄두었던 글들과 링크들을 하나씩 살펴보며 공부하는 요즘. 해보고 싶은 것들이 많이 생겼습니다.

  1. SDK 만들어보기 or npm 패키지 만들어보기
  2. 대량의 메시지, 이벤트 처리해보기(Kafka)
  3. 인텔리제이 플러그인 만들어보기
  4. 오픈소스 기여해보기
  5. 플러터로 앱 만들어보기
  6. 쿠버네티스로 CI/CD 구축해보기

  7. 이렇게 여러 가지를 시도하고 싶어 하는 모습이 다소 난잡해 보일 수도 있지만, 제게는 재미와 흥미가 가장 큰 동력입니다. 그렇기에 하나도 놓치지 않고, 다 해보기로 결심했습니다. 비록 작은 것이라도 말이죠.

현재 플러터쿠버네티스는 강의와 스터디를 하고있고 오픈소스에 기여하기를 시도해봤습니다.

혼자서 처음부터 끝까지 하기 어려워 저장해 두었던 두 가지 링크를 참고했습니다.

위 글들은 각각 용기와 실질적인 도움을 주었고, 그 덕분에 한 걸음 더 나아갈 수 있었습니다.
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 두 객체를 생성하고, 조건에 맞지 않을 경우 디폴트로 생성된 객체를 반환합니다.

아쉬웠던 점과 수정 코드

  1. deduceEnvironmentClass 메서드에서 environmentType이 null일 때 ApplicationEnvironment.class를 반환하는 부분을 삼항 연산자를 활용해 코드를 간결하게 만들 수 있었습니다.
  2. 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 라벨을 받으며 컨트리뷰터가 될 수 있었습니다.

커밋 내역
소소했지만 너무 신기하고 동력원이 되는 경험이었습니다. 리팩토링을 열심히 했던 경험과 노력들이 뿌듯하게 느껴졌고, 다음엔 좀 더 시간을 가지고 개선까지 해볼 수 있도록 노력해보겠습니다.

출처