오늘의 과제가 오픈소스를 UML(Unified Modeling Language)로 분석해보는 것이었는데 내친김에 오픈소스를 정복해보자!
사실 오픈소스에 기여해본적은 한번도 없는데.. 이런 나같은 사람이 쉽게 다가갈 수 있도록 만들어 놓은 저장소가 있다
들어가서 태극기를 눌러서 친절하게 한국어로 볼 수 있당
이 프로젝트는 초보자가 처음으로 오픈소스에 기여할 수 있도록 쉽게 안내하는 것을 목표로 합니다. 첫 번째 기여를 하고 싶다면, 아래의 설명을 따라주세요.
너무 친절하다 설명을 따라서 하나씩 진행해주면 된당
오픈소스에 기여하는 것에 대한 뭔지 모른 두려움이 있었는데 정말 쉽게 실습할 수 있었다. 이렇게 기여를 쉽고 재밌게 연습해볼 수 있도록 만들어 놓은 이 아이디어가 정말 좋은 것 같다.
유명한 오픈소스를 분석해서 평소에 관심있던 @SpringBootApplication 애너테이션이 동작하는 과정을 분석해보자
여기서 스프링 부트에 대한 코드를 확인해볼 수 있는데
여기서 @SpringBootApplication의 직접적인 코드를 확인해볼 수 있다.
@Target(ElementType.TYPE) // 클래스에만 적용 가능
@Retention(RetentionPolicy.RUNTIME) // 런타임에 유지
@Documented // JavaDoc 생성 시 포함
@Inherited // 하위 클래스가 상속받음
@SpringBootConfiguration // = @Configuration + Spring Boot 특화 기능
@EnableAutoConfiguration // 자동 설정 활성화
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)
})
@AliasFor(annotation = ComponentScan.class, attribute = "nameGenerator")
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;
@AliasFor 을 통해 @SpringBootApplication의 속성이 내부 애너테이션의 속성과 연동된다
ComponentScan의 nameGenerator와 동일하게 동작!
@AliasFor(annotation = Configuration.class)
boolean proxyBeanMethods() default true;
SpringBoot의 오픈소스를 분석하면서 @SpringBootApplication가 어떻게 메타데이터들을 수집하는 지 작동방식에 대해서 코드로 확인해볼 수 있었다. ☺️
이슈가 643개 있던데 언젠간 기여할 수 있길...
와 이젠 오픈소스까지..