공부

스프링 빈 설정 메타 정보 - BeanDefinition 스프링은 어떻게 이런 다양한 설정 형식을 지원하는 것일까? 스프링 컨테이너는 왜 어노테이션을 활용한 자바코드(@bean)인지 xml로 빈을 등록한 건지 상관이 없는 걸까? 그 중심에는 BeanDefinition 이라는 추상화가 있다. 쉽게 이야기해서 역할과 구현을 개념적으로 나눈 것이다! XML을 읽어서 BeanDefinition을 만들면 된다. 자바 코드를 읽어서 BeanDefinition을 만들면 된다. 스프링 컨테이너는 자바 코드인지, XML인지 몰라도 된다. 추상화(역할)인 BeanDefinition을 사용하기 때문에, 오직 BeanDefinition만 알면 된다. BeanDefinition 을 빈 설정 메타정보라 한다. @Bean , 당 ..
다양한 설정 형식 지원 - 자바 코드, XML 스프링 컨테이너는 다양한 형식의 설정 정보를 받아드릴 수 있게 유연하게 설계되어 있다. 자바 코드, XML, Groovy 등등 애노테이션 기반 자바 코드 설정 사용 new AnnotationConfigApplicationContext(AppConfig.class) AnnotationConfigApplicationContext 클래스를 사용하면서 자바 코드로된 설정 정보를 넘기면 된다. xml 설정 사용 최근에는 스프링 부트를 많이 사용하면서 XML기반의 설정은 잘 사용하지 않는다. 아직 많은 레거시 프로젝트 들 이 XML로 되어 있고, XML을 사용하면 컴파일 없이 빈 설정 정보를 변경할 수 있는 장점이 있다. GenericXmlApplicationConte..
BeanFactory 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할 getBean()을 제공 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능 ApplicationContext BeanFactory기능을 모두 상속받아서 제공 그럼 BeanFacotory와의 차이는?? 애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능 + 알파(수 많은 부가기능) ApplicationContext가 제공하는 부가기능 메시지소스를 활용한 국제화 기능(MessageSource) 예를 들어, 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 환경 변수EnvironmentCapable) 로컬, 개발, 운영 등을 구분해서 처리 애플리케이션 이벤트(Applicati..
전체코드 보기 더보기 package hello.core.beanfind; import hello.core.AppConfig; import hello.core.dicsount.DiscountPolicy; import hello.core.dicsount.FixDiscountPolicy; import hello.core.dicsount.RateDiscountPolicy; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoUniqueBeanDefinitionException; ..
테스트 코드로 진행하겠다. 등록된 빈 보기 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class); SameBeanConfig에 타입이 MemberRepository인 것 2개 만들기 @Configuration static class SameBeanConfig { @Bean public MemberRepository memberRepository1() { return new MemoryMemberRepository(); } @Bean public MemberRepository memberRepository2() { return new MemoryMemberRepository(); ..
Test코드 진행로 진행해보겠다. 코드 전체보기 더보기 package hello.core.beanfind; import hello.core.AppConfig; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.annotation.AnnotationConfigApplicationCon..
AppConfig 스프링 기반으로 변경 // AppConfig는 애플리케이션의 실제 동작에 필요한 "구현 객체를 생성"한다. // AppConfig는 MemoryMemberRepository객체를 생성하고 그 참조값 MemberServiceImpl을 생성하면서 생성자로 전달한다. // 클라이언트인 MemberServiceImpl입장에서 보면 의존관계를 마치 외부에서 주입해주는 것 같다고 해서 DI(Dependency Injection) = 의존관계 주입 또는 의존성 주입이라고 한다. @Configuration : AppConfig에 설정을 구성 @Bean : 각 메서드에 사용. 스프링 컨테이너에 스프링 빈으로 등록 🟢🟡🟠 주의 빈 이름은 메서드의 이름을 사용하지만, 빈 이름을 직접 부여할 수도 있다.(@..
· 공부/Infra
Docker 다운로드 1. docker 다운로드 링크 : https://www.docker.com/get-started/ 2. 다운로드가 다 되면 wsl --update 를 하라는 경고문이 뜨는데 cmd 켜준 후 바로 진행. 3. 로그인 👁‍🗨 Docker를 다운로드 하면 작업관리자에 Vemmem가 생긴다. Docker에 약 4GB의 메모리가 주어진다. 👁‍🗨 Docker에서는 Image를 다운받아서 실행할 수 있는데 다운 받는 것은 쉽게 말하면, CD게임이라고 생각하면 된다. 요즘에는 CD드라이브가 없기 때문에 CD가 .iso 파일로 다운 받을 수 있게 변했다. 즉, .iso파일을 다운 받는다고 생각하면 된다. ✅ docker hub 에 들어가서 docs를 보면서 진행하면 여러가지 모듈들을 전부 설치없..
· 공부/Infra
jenkins란? Jenkins는 중앙 빌드 및 지속적인 통합 프로세스가 가능하며, Windows, macOS 및 기타 Unix 계열 운영 체제용 패키지가 포함된 독립형 Java 기반 프로그램이다. 수백개의 플러그인을 사용할 수 있는 Jenkins는 소프트웨어 개발 프로젝트의 빌드 파이프라인 구성, Build 자동화의 확립, 배포 및 테스트 자동화 등을 지원한다. jenkins 구축 Google Cloud에서 VM인스턴스 생성 후, 명령프롬프트에 연결(putty 사용했음) 1. jenkins 설치 다운로드 링크 : https://pkg.jenkins.io/debian-stable/ curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key |..
· 공부/Infra
CI/CD란? CI(Continuous Integration) 지속적인 통합 빌드, 테스트 자동화 1. 빌드(Build) 2. 테스트(Test) 3. 통합(Merge) ✔ CI 적용 전 : 개발을 마치고 배포 후 오류를 확인했다. ✔ CI 적용 후 : - 코드 변경 사항을 정기적으로 빌드, 테스트하여 공유 레포지토리에 통합되는 과정을 통해 품질을 유지하면서 개발을 진행한다. - 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리 가능하다. → ⌚ 하지만, 개발자가 직접 코드를 병합하고 빌드, 테스트를 검증하는 것은 시간이 많이 소요됨 ≫ 자동화 CI 순서 1. 개발자가 구현한 코드를 기존 코드와 병합 2. 변합된 코드가 올바르게 동작하고 빌드되는지 검증 3. 테스트 결과에 문제가 ..
sesam
'공부' 카테고리의 글 목록 (10 Page)