오픈소스 (06.27)

한강섭·2025년 6월 27일
1

학습 & 숙제

목록 보기
97/102
post-thumbnail

오늘의 과제가 오픈소스를 UML(Unified Modeling Language)로 분석해보는 것이었는데 내친김에 오픈소스를 정복해보자!


Contribution

사실 오픈소스에 기여해본적은 한번도 없는데.. 이런 나같은 사람이 쉽게 다가갈 수 있도록 만들어 놓은 저장소가 있다

first-contributions

[github]

들어가서 태극기를 눌러서 친절하게 한국어로 볼 수 있당

이 프로젝트는 초보자가 처음으로 오픈소스에 기여할 수 있도록 쉽게 안내하는 것을 목표로 합니다. 첫 번째 기여를 하고 싶다면, 아래의 설명을 따라주세요.

너무 친절하다 설명을 따라서 하나씩 진행해주면 된당

1. fork

2. git clone

3. branch 생성&이동

4. vscode에서 편집

5. 내 저장소에 push

6. pr 날리기

7. Merged

결과

오픈소스에 기여하는 것에 대한 뭔지 모른 두려움이 있었는데 정말 쉽게 실습할 수 있었다. 이렇게 기여를 쉽고 재밌게 연습해볼 수 있도록 만들어 놓은 이 아이디어가 정말 좋은 것 같다.


오픈소스 분석 (UML)

유명한 오픈소스를 분석해서 평소에 관심있던 @SpringBootApplication 애너테이션이 동작하는 과정을 분석해보자

스프링 부트 github

여기서 스프링 부트에 대한 코드를 확인해볼 수 있는데

https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/SpringBootApplication.java

여기서 @SpringBootApplication의 직접적인 코드를 확인해볼 수 있다.

간단하게 코드 분석

1. 메타 애너테이션 구성

@Target(ElementType.TYPE)           // 클래스에만 적용 가능
@Retention(RetentionPolicy.RUNTIME) // 런타임에 유지
@Documented                         // JavaDoc 생성 시 포함
@Inherited                          // 하위 클래스가 상속받음

2. 핵심 컴포지션 애너테이션

@SpringBootConfiguration  // = @Configuration + Spring Boot 특화 기능
@EnableAutoConfiguration  // 자동 설정 활성화
@ComponentScan(excludeFilters = { 
    @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) 
})

3. Bean 네이밍 전략

@AliasFor(annotation = ComponentScan.class, attribute = "nameGenerator")
Class<? extends BeanNameGenerator> nameGenerator() default BeanNameGenerator.class;

@AliasFor 을 통해 @SpringBootApplication의 속성이 내부 애너테이션의 속성과 연동된다
ComponentScan의 nameGenerator와 동일하게 동작!

4. 프록시 모드 설정

@AliasFor(annotation = Configuration.class)
boolean proxyBeanMethods() default true;

Mermaid (UML) 로 만든 동작 방식

SpringBoot의 오픈소스를 분석하면서 @SpringBootApplication가 어떻게 메타데이터들을 수집하는 지 작동방식에 대해서 코드로 확인해볼 수 있었다. ☺️
이슈가 643개 있던데 언젠간 기여할 수 있길...

profile
기록하고 공유하는 개발자

4개의 댓글

comment-user-thumbnail
2025년 6월 27일

와 이젠 오픈소스까지..

1개의 답글
comment-user-thumbnail
2025년 6월 27일

진짜 개발자시네요

1개의 답글