일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- XML
- 리눅스
- 컨테이너
- spring framework
- @AspectJ
- Spring JDBC
- Ubunt
- Framework
- pointcut
- Spring Boot
- STS
- JDBC TEMPLATE
- Linux
- spring
- java
- 프로퍼티
- 마이바티스
- @JUnit
- JdbcTemplate
- SpringJDBC
- Dependency Injection
- java spring
- myBatis
- @test
- POJO
- spring aop
- @Spring-Test
- Di
- AOP
- unix
- Today
- Total
목록2024/10 (54)
개키우는개발자 : )
요약 및 핵심 개념서버 프로퍼티 설정을 관리하는 방법과 이를 빈으로 등록하는 과정을 설명했습니다. 특히, 자동 구성 클래스에 조건부 애노테이션을 사용하고, 빈 후처리기(Post Processor)를 통해 프로퍼티 바인딩을 보다 효율적으로 처리하는 방법을 다뤘습니다.핵심 내용프로퍼티 클래스를 빈으로 등록:서버 설정에 필요한 프로퍼티를 별도의 클래스로 분리하고, 이를 빈으로 등록하여 톰캣이나 다른 서버 설정 시 쉽게 재사용할 수 있도록 합니다.하지만 설정 클래스가 많아질 수 있으며, 서블릿 컨테이너(Tomcat, Jetty, Undertow)별로 다른 설정을 적용해야 한다는 문제점이 발생합니다.자동 구성 클래스의 조건부 애노테이션:특정 상황에서만 프로퍼티 빈을 생성하기 위해 @Conditional 애노테이션..
요약 및 핵심 개념 프로퍼티 값을 클래스로 분리하고, 이를 빈으로 등록하여 여러 곳에서 재사용할 수 있는 방식을 설명했습니다. 또한, 스프링 부트에서 프로퍼티를 관리하는 Binder 유틸리티를 활용하여 프로퍼티 파일의 값을 자동으로 바인딩하는 방법도 다루었습니다.핵심 내용프로퍼티 클래스로 분리:프로퍼티 값들을 별도의 클래스로 분리하여 관리하면, 중복된 코드를 줄이고 재사용할 수 있습니다.예를 들어, ServerProperties 클래스를 만들어 서버 설정에 필요한 프로퍼티들을 이 클래스로 관리하고, 이 빈을 생성하여 여러 곳에서 재사용할 수 있습니다.프로퍼티 기본값 설정:@Value 애노테이션에서 기본값을 설정하려면, 플레이스홀더 뒤에 콜론(:)을 붙이고 기본값을 지정할 수 있습니다.이 방식으로 프로퍼티..
요약 및 핵심 개념스프링의 @Value 애노테이션을 활용하여 프로퍼티 값을 필드에 주입하는 방법을 살펴보았습니다. 또한, 프로퍼티를 자동으로 치환해주는 스프링의 후처리기(PropertySourcesPlaceholderConfigurer)에 대해 다루고, 자동으로 프로퍼티 값을 주입받을 수 있도록 설정하는 방법을 소개했습니다.핵심 내용@Value 애노테이션을 통한 프로퍼티 주입:@Value("${property.name}") 방식으로 프로퍼티 값을 필드에 주입할 수 있습니다.이 방식은 Environment로 매번 프로퍼티를 읽어오는 코드보다 선언적이고 간결하며, 필드에 직접 프로퍼티 값을 주입할 수 있습니다.프로퍼티 치환 후처리기 (PropertySourcesPlaceholderConfigurer):@Va..
요약 및 핵심 개념스프링의 Environment 추상화를 활용하여 외부 프로퍼티 설정과 우선순위 처리 방식을 테스트하는 방법을 소개했습니다. 이를 통해 스프링 부트 애플리케이션의 초기화 후 작업 실행 방법과 프로퍼티 관리의 우선순위 처리에 대해 이해할 수 있습니다.핵심 내용스프링의 Environment를 통한 프로퍼티 읽기:Environment 추상화는 다양한 소스에서 프로퍼티 값을 읽어오는 메커니즘을 제공합니다.프로퍼티 소스는 application.properties, 환경 변수, 시스템 프로퍼티 등이 있으며, 이를 활용해 프로퍼티 값을 쉽게 설정하고 수정할 수 있습니다.우선순위 적용:우선순위는 시스템 프로퍼티 > 환경 변수 > application.properties 순으로 적용됩니다. 각 소스에서 ..
요약 및 핵심 개념스프링 부트의 외부 설정과 이를 활용한 자동 구성에 대해 다루었습니다. 외부 설정은 자동 구성된 빈의 기본값을 커스터마이즈하는 데 사용되며, 이를 통해 애플리케이션의 유연성과 재사용성을 높일 수 있습니다.핵심 내용자동 구성과 외부 설정:스프링 부트는 자동으로 150개 이상의 구성 클래스를 제공하며, 기본적으로 제공되는 값들을 쉽게 수정할 수 있도록 외부 설정을 활용합니다.예를 들어, Tomcat의 기본 포트는 8080이지만, 외부 설정을 통해 포트를 9090으로 변경할 수 있습니다.외부 설정과 프로퍼티 변경:Spring의 Environment 추상화는 프로퍼티를 읽어오는 메커니즘을 제공합니다. 이를 통해 외부 설정 파일에서 지정된 값들을 읽어 자동 구성된 빈의 기본값을 변경할 수 있습니..
요약 및 핵심 개념스프링 부트의 조건부 자동 구성의 확장 애노테이션에 대해 다루었습니다. 조건부 애노테이션은 자동 구성에서 빈 등록 여부를 제어하기 위해 사용되며, 다양한 조건을 기반으로 빈의 존재, 클래스의 포함 여부, 프로퍼티 값 등을 검사할 수 있습니다.핵심 내용조건부 애노테이션의 역할과 역사:@Conditional 애노테이션은 스프링 프레임워크의 기본 기능으로, 빈을 조건에 따라 등록할지 결정합니다. 스프링 4.0부터 도입되었으며, 스프링 부트에서 더 다양한 조건부 애노테이션이 확장되었습니다.예를 들어, @Profile 애노테이션은 특정 환경(개발, 테스트, 운영)에 따라 빈 구성을 다르게 할 수 있게 해줍니다.주요 조건부 애노테이션:@ConditionalOnClass와 @ConditionalOn..
요약 및 핵심 개념스프링 부트의 자동 구성(Autoconfiguration)을 직접 정의하고 기존의 자동 구성을 대체하는 방법을 설명했습니다. 이를 통해 특정 기술과 관련된 커스텀 인프라스트럭처 빈을 등록하고, 이를 활용하여 기본 제공되는 구성 정보 대신 사용자 정의 빈을 우선 적용할 수 있는 방법을 배웠습니다.핵심 내용자동 구성의 원리:스프링 부트는 EnableAutoConfiguration과 ImportSelector를 통해 자동 구성 클래스를 로딩하고, 각 클래스에 있는 @Conditional 애노테이션을 사용하여 빈 등록 여부를 결정합니다.사용자는 ConditionalOnClass, ConditionalOnMissingBean과 같은 조건부 애노테이션을 통해 자동 구성 정보의 적용 여부를 세밀하게..
요약 및 핵심 개념@Conditional 애노테이션을 사용하여 조건에 따라 Tomcat과 Jetty 웹 서버 중 하나를 선택하는 방법을 다루었습니다. 기존의 학습 테스트에서 구현한 조건부 로직을 실제 자동 구성 시나리오에 적용하여, 특정 라이브러리가 프로젝트에 포함되어 있는지 여부에 따라 자동으로 웹 서버를 선택하는 방법을 배웠습니다.핵심 내용Tomcat과 Jetty 선택 기준:프로젝트에 특정 라이브러리(Tomcat 또는 Jetty)가 포함되어 있는지를 기준으로 웹 서버를 선택합니다.스프링의 ClassUtils.isPresent 유틸리티 메소드를 사용해 해당 클래스가 존재하는지 확인하여 true 또는 false를 반환하는 방식으로 구현했습니다.조건부 애노테이션의 활용:@Conditional 애노테이션을 ..
요약 및 핵심 개념스프링 부트의 @Conditional 애노테이션을 테스트하는 방법과, 조건부 로직을 활용한 빈 등록 제어에 대해 학습했습니다. 학습 테스트를 통해 조건부 자동 구성의 동작 방식과 활용 방법을 이해하는 것이 목표입니다.핵심 내용학습 테스트 구성:@Conditional 애노테이션을 테스트하기 위해 조건이 true와 false인 경우의 빈 등록 여부를 확인하는 테스트를 작성했습니다.ApplicationContextRunner를 활용하여 스프링 애플리케이션 컨텍스트에서의 빈 등록 상태를 손쉽게 테스트할 수 있도록 했습니다.조건부 로직 구현:조건부 클래스 (Condition)의 matches 메소드에서 true나 false를 반환하여, 빈이 등록될지 여부를 결정했습니다.애노테이션 메타 정보를 활..
요약 및 핵심 개념스프링 부트에서 조건부 자동 구성을 다루었습니다. 조건부 자동 구성은 특정 조건에 따라 Configuration 클래스나 Bean을 등록할지 말지 결정하는 기능으로, 이를 통해 애플리케이션의 불필요한 자원 사용을 줄이고 성능을 최적화할 수 있습니다.핵심 내용조건부 자동 구성 개념과 적용 방법:@Conditional 애노테이션을 사용해 특정 조건에 따라 Configuration 클래스나 Bean을 등록할지 결정할 수 있습니다.@Conditional 애노테이션의 엘리먼트로 Condition 인터페이스를 구현한 클래스를 지정하고, matches 메소드가 true를 반환하면 해당 Bean이나 Configuration이 등록.서블릿 컨테이너 예제 (Tomcat과 Jetty):Tomcat과 Jet..
요약 및 핵심 개념스프링 부트의 자동 구성(Auto Configuration) 중 조건부 자동 구성에 대해 학습했습니다. 특히 톰캣과 제티 같은 서블릿 컨테이너의 자동 구성 조건 설정을 다루며, 여러 가지 서블릿 컨테이너 중 하나를 선택해 사용할 수 있도록 하는 방법을 설명했습니다.핵심 내용조건부 자동 구성의 개념:스프링 부트의 자동 구성은 애플리케이션이 필요로 하는 다양한 빈들을 자동으로 등록하지만, 조건부 자동 구성을 통해 특정 조건이 만족될 때만 구성 클래스를 로딩하고 빈을 등록.조건부 자동 구성의 필요성은 모든 기능을 사용하지 않는 애플리케이션에 불필요한 빈 등록을 방지하고, 불필요한 메모리 사용과 성능 저하를 예방하는 데 있음.자동 구성 클래스의 예시:스프링 부트에는 144개의 기본 자동 구성 ..
요약 및 핵심 개념@Configuration 애노테이션과 ProxyBeanMethods 설정이 스프링에서 어떻게 동작하는지에 대해 학습하고, 자동 구성 시 프록시 적용 여부가 애플리케이션에 미치는 영향을 다뤘습니다.핵심 내용@Configuration 애노테이션의 특징:@Configuration이 붙은 클래스는 기본적으로 프록시 패턴을 사용하여 스프링 빈을 관리. 이는 빈 메서드 호출 시 동일한 객체를 반환하기 위함.기본값으로 ProxyBeanMethods=true 설정 시, 프록시를 통해 빈을 생성하고, 공유된 객체를 반환.ProxyBeanMethods=false로 설정하면, 프록시를 생성하지 않고 빈 메서드를 직접 호출. 공유되지 않는 서로 다른 객체가 생성됨.프록시의 동작 방식:@Configurati..
요약 및 핵심 개념외부 설정 파일을 이용한 자동 구성과, MyAutoConfiguration 애노테이션의 역할을 정리하고, ProxyBeanMethods의 설정에 따른 차이에 대해 소개했습니다.핵심 내용자동 구성 애노테이션과 외부 설정 파일:MyAutoConfiguration 애노테이션을 생성하여 자동 구성 대상인 Configuration 클래스에 적용.애노테이션의 Full Qualified Name(FQN) 뒤에 .imports를 붙여 외부 설정 파일 이름을 지정하고, 이를 통해 자동 구성 대상 클래스를 관리.외부 설정 파일에서 설정된 Configuration 클래스 목록을 ImportSelector가 로드해, 동적으로 로딩.MyAutoConfiguration의 적용 및 메타 애노테이션:기존의 Conf..
요약 및 핵심 개념외부 설정 파일을 활용한 자동 구성 정보 관리에 대해 다루었습니다. ImportSelector를 이용해 외부 파일에서 Configuration 클래스 정보를 동적으로 로드하는 방법을 중심으로 설명했습니다.핵심 내용외부 설정 파일을 통한 구성 정보 관리:기존에는 코드 내에 Configuration 클래스 정보를 직접 지정했지만, 외부 파일을 활용해 설정 정보를 관리하는 방법으로 변경함.설정 파일을 통해 자동 구성의 후보 클래스를 지정하고, 이를 동적으로 선택하여 사용.구성 파일의 작성:설정 파일은 클래스패스 내 META-INF/spring 디렉토리에 애노테이션의 FQN(Full Qualified Name) 뒤에 .imports 확장자를 붙여서 생성.파일 내에 자동 구성에 사용할 Confi..
요약 및 핵심 개념스프링 부트의 자동 구성(Auto-Configuration)을 동적으로 관리하는 방법에 대해 설명했습니다. 특히, ImportSelector를 활용해 구성 정보를 동적으로 가져오는 원리를 중심으로 학습했습니다.핵심 내용자동 구성 문제점 및 개선 필요성:기존에는 고정된 Configuration 클래스를 하드코딩하여 @Import를 통해 설정했지만, 모든 애플리케이션에서 항상 동일한 구성 정보를 사용하지 않을 수도 있음.동적인 자동 구성이 필요하며, 이를 통해 환경에 맞는 구성 정보를 유연하게 관리할 수 있어야 함.ImportSelector의 사용:ImportSelector 인터페이스는 구성 정보를 동적으로 선택할 수 있는 기능을 제공.selectImports() 메소드를 통해 가져올 구성..
요약 및 핵심 개념스프링 부트의 자동 구성(Auto-Configuration)을 설정하고 적용하는 방법에 대해 다뤘습니다. 이를 통해 스프링 부트 애플리케이션의 구성 정보와 빈 설정을 좀 더 유연하게 관리할 수 있는 방식을 학습했습니다.핵심 내용컴포넌트 스캔과 구성 정보 관리:컴포넌트 스캔을 통해 패키지 내의 빈을 자동으로 등록할 수 있지만, 특정 구성 정보(예: TomcatWebServer나 DispatcherServlet과 같은 빈)는 스캔 대상에서 제외해야 할 때가 있음.컴포넌트 스캔 대상에서 제외된 클래스를 등록하기 위해 @Import 애노테이션을 사용해 구성 정보에 추가할 수 있음.자동 구성 클래스 분리:자동 구성을 위해 설정 클래스를 분리하고, 개별적인 Configuration 클래스를 생성해..
요약 및 핵심 개념스프링의 빈(Bean) 오브젝트를 여러 유형으로 구분하고, 그에 따른 구성 정보 작성 전략을 설명했습니다. 또한 애플리케이션 빈과 인프라스트럭처 빈의 차이를 이해하고, 자동 구성(Auto-Configuration)을 통해 스프링 부트에서 필요한 빈이 어떻게 설정되는지에 대해 다뤘습니다.핵심 내용빈의 종류와 구분:애플리케이션 빈: 개발자가 명시적으로 구성 정보를 제공한 빈으로, 애플리케이션의 비즈니스 로직이나 도메인 로직을 담당.인프라스트럭처 빈: 스프링 컨테이너가 내부적으로 사용하는 빈으로, 컨테이너의 기능 확장이나 환경 설정 등을 위한 빈이 포함됨. 예를 들어, Environment, BeanPostProcessor 등이 있습니다.애플리케이션 빈도 로직 빈과 인프라스트럭처 빈으로 구분..
요약 및 핵심 개념스프링 애노테이션 기법을 사용해 기존 코드의 구조를 개선하고 자동 구성(Auto-Configuration)을 적용하는 방법을 다루었습니다. 특히, 메타 애노테이션과 합성 애노테이션을 활용해 애플리케이션 코드를 간결하게 만드는 데 중점을 두었습니다.핵심 내용메타 애노테이션과 합성 애노테이션 적용:스프링에서 제공하는 애노테이션을 직접 사용하지 않고, 사용자 정의 애노테이션을 통해 여러 애노테이션의 기능을 결합할 수 있습니다.@MySpringBootAnnotation을 정의하여 기존의 @Configuration과 @ComponentScan 애노테이션을 메타 애노테이션으로 설정하고, 이를 하나의 애노테이션으로 통합해 사용.애노테이션 설정:Retention을 runtime으로 설정하여 애노테이션..
요약 및 핵심 개념스프링 부트의 자동 구성(Auto-Configuration), 메타 애노테이션(Meta-Annotation), 그리고 합성 애노테이션(Composed Annotation)의 개념을 다루었습니다. 특히 애노테이션을 활용해 스프링 애플리케이션의 구성을 더욱 간편하게 하는 방법을 설명했습니다.핵심 내용스프링 부트의 자동 구성:스프링 부트는 자동 구성(Auto-Configuration) 기능을 통해 애플리케이션 개발을 빠르고 편리하게 만듦.자동 구성은 기존의 스프링 프레임워크 기능을 효과적으로 활용하는 방법으로, 개발자가 일일이 설정하지 않아도 자동으로 적절한 빈을 등록.메타 애노테이션(Meta-Annotation):메타 애노테이션이란, 다른 애노테이션을 메타 데이터로 사용하는 애노테이션.예를..
요약 및 핵심 개념의존성 주입(Dependency Injection)과 데코레이터 패턴(Decorator Pattern), 그리고 프록시 패턴(Proxy Pattern)에 대해 심도 있게 다루었습니다. 특히 Spring 프레임워크에서 의존성 주입을 통해 객체 간의 관계를 관리하고 확장성을 제공하는 방법을 설명했습니다.핵심 내용의존성 주입과 의존성 역전:초기 코드는 HelloController가 SimpleHelloService 클래스에 직접 의존하는 구조로 설계되었지만, 이를 인터페이스 기반 의존성 주입으로 변경해 유연성을 제공.의존성 주입(DI)의 핵심은 클래스들이 서로 직접 의존하지 않고, 스프링 컨테이너가 이들을 연결해주는 것.이를 통해 코드 변경 없이도 다양한 HelloService 구현체를 교체..
요약 및 결론단위 테스트와 통합 테스트의 차이점, 그리고 더 효율적인 테스트 방식을 소개하며, 테스트 코드의 작성과 개선을 다루었습니다. 핵심 내용테스트 대상의 정의:앞서 작성한 테스트 코드들은 API와 그 의존 객체인 SimpleHelloService의 기능을 검증하는 테스트.테스트는 단순한 자바 메서드를 통해서도 가능하며, 이를 통해 테스트 속도를 크게 줄일 수 있음.단위 테스트 (Unit Test) 작성:SimpleHelloService와 같은 자바 클래스를 직접 테스트하는 단위 테스트는 서버를 실행할 필요가 없으며, 이를 통해 테스트 속도가 매우 빠름.예시로 HelloService에 대해 단위 테스트를 작성해, isEqualTo 메서드를 사용해 예상한 인삿말과 응답을 비교함.HelloControl..
요약 및 결론테스트 코드를 사용한 Spring Boot 애플리케이션 검증 방법을 다루고, JUnit5 및 AssertJ를 사용해 HelloController API의 동작을 검증하는 과정을 설명했습니다.핵심 내용수동 테스트의 한계:기존에는 서버를 띄우고 직접 HTTP 요청을 보내 응답을 확인하는 방식으로 테스트를 진행했으나, 수동 검증 방식의 번거로움과 실수 가능성 때문에 자동화된 테스트가 필요함.테스트 코드 작성:JUnit5와 AssertJ를 사용하여 테스트 코드 작성.RestTemplate과 TestRestTemplate을 사용해 HTTP 요청을 테스트 코드 내에서 자동으로 실행.세 가지 요소를 검증:상태 코드 (Status Code): 응답이 200 OK로 왔는지 확인.헤더 (Headers): Co..
요약 및 결론리팩토링을 통한 코드 정리와 스프링 부트의 동작 원리를 다루고, 기존 코드를 리팩토링해 SpringApplication.run()과 비슷한 코드를 작성하며 스프링 부트의 작동 방식을 알아보았습니다. 핵심 내용리팩토링과 코드 추출:run() 메소드로 추출: 메인 메소드에서 반복되는 코드를 추출하여 run 메소드로 분리하고, 클래스 타입과 명령어 라인 인수를 파라미터로 받는 메소드를 작성.이 과정을 통해 재사용 가능한 메소드를 만들어 코드의 유연성과 유지보수성을 높임.SpringApplication.run()과 유사한 동작:MySpringApplication.run() 메소드를 만들어 다양한 클래스에서 사용할 수 있도록 코드를 정리. 이는 스프링 부트의 SpringApplication.run()..
요약 및 결론스프링 컨테이너의 빈 등록 방식을 활용하여, Factory 메소드에서 DispatcherServlet과 같은 객체를 빈으로 관리하는 방법과 ApplicationContextAware 인터페이스를 사용하여 스프링 컨테이너가 빈에 필요한 정보를 어떻게 주입하는지 살펴봤습니다.핵심 내용스프링 빈 등록 방식:Factory 메소드를 활용한 빈 등록:기존의 TomcatServletWebServerFactory와 DispatcherServlet 같은 객체를 스프링 빈으로 등록하는 방법을 학습.이러한 빈들을 스프링 컨테이너가 관리하게 함으로써 유연한 확장성을 확보할 수 있습니다.Factory 메소드에서 반환 타입으로 추상화된 타입을 사용하는 것이 좋은데, 이는 나중에 Tomcat이 아닌 다른 서블릿 컨테이..
결론 및 요약컴포넌트 스캔과 애노테이션을 이용해 스프링 빈(Bean)을 등록하는 방법과 이를 더 효율적으로 사용하는 메타 애노테이션(Meta-Annotation)에 대해 배웠습니다. 스프링 부트에서 자주 사용되는 컴포넌트 스캔 방식을 통해 빈 등록을 간소화하고, 메타 애노테이션을 활용한 사용자 정의 애노테이션을 만들어 사용하는 방법을 익혔습니다.주요 내용 요약컴포넌트 스캔을 통한 빈 등록:@Component 애노테이션을 클래스에 붙이면, 스프링 컨테이너의 컴포넌트 스캐너가 해당 클래스를 빈으로 자동 등록합니다.스프링 애플리케이션의 구성을 간소화하며, 별도의 설정 파일이나 명시적인 등록 코드 없이도 자동으로 빈이 등록됩니다.스프링 부트에서는 @ComponentScan을 이용하여 패키지 내의 모든 컴포넌트를..