일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- unix
- JdbcTemplate
- @Spring-Test
- JDBC TEMPLATE
- java spring
- spring aop
- @AspectJ
- Linux
- 리눅스
- Di
- XML
- @test
- Dependency Injection
- Spring JDBC
- spring
- pointcut
- Framework
- STS
- SpringJDBC
- 프로퍼티
- 컨테이너
- @JUnit
- spring framework
- Spring Boot
- AOP
- Ubunt
- 마이바티스
- myBatis
- POJO
- java
- Today
- Total
목록전체 글 (307)
개키우는개발자 : )
요약 및 핵심 개념스프링 부트의 자동 구성(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을 이용하여 패키지 내의 모든 컴포넌트를..
결론 및 요약팩토리 메서드를 사용하여 Java 코드로 스프링 빈(Bean)을 등록하고 의존성을 주입하는 방법을 다뤘습니다. 또한, 이를 구성하는 스프링 컨테이너에서의 구성 정보 처리 방법을 학습했습니다. 이는 스프링 애플리케이션에서 좀 더 유연하고 복잡한 빈 생성 및 의존성 주입을 지원하기 위해 사용될 수 있습니다.주요 내용 요약팩토리 메서드를 통한 빈 생성:스프링에서 제공하는 팩토리 메서드는 자바 메서드를 사용해 오브젝트를 생성하고, 이를 빈으로 등록할 수 있는 방식입니다.예를 들어, HelloController와 HelloService와 같은 빈 오브젝트를 팩토리 메서드에서 생성하여 스프링 컨테이너에 등록할 수 있습니다.팩토리 메서드의 이점:복잡한 빈 초기화: 복잡한 초기화나 의존성 주입이 필요한 경..
결론 및 요약서블릿 컨테이너의 초기화 작업을 스프링 컨테이너의 초기화 과정에 통합하는 방법을 다뤘습니다. 이전에는 서블릿 컨테이너와 스프링 컨테이너의 초기화 작업이 별도로 이루어졌으나, 이번에는 스프링 컨테이너가 자동으로 서블릿 컨테이너를 초기화하도록 코드 구조를 변경했습니다.주요 내용 요약두 파트로 나뉘었던 초기화 작업:첫 번째 파트는 스프링 컨테이너(SpringContainer) 초기화 및 Bean 등록 작업.두 번째 파트는 서블릿 컨테이너(Servlet Container) 초기화 및 DispatcherServlet 등록 작업.이제 이 두 작업을 하나로 통합하여 스프링 컨테이너가 초기화되는 과정에서 서블릿 컨테이너의 초기화 작업이 자동으로 이루어지도록 설정했습니다.Spring의 onRefresh 메소..
결론 및 요약컨트롤러 클래스 내부에 맵핑 정보를 애노테이션으로 직접 추가하여, 더 간결하게 웹 요청을 처리하는 방법을 배웠습니다. 기존에 서블릿 코드에서 맵핑 작업을 수동으로 처리하던 방식을 스프링의 애노테이션 기반 맵핑으로 전환하는 작업을 했습니다. 이를 통해 코드가 훨씬 간결해지고, 스프링이 제공하는 자동 맵핑 및 바인딩 기능을 활용할 수 있게 되었습니다.주요 내용 요약애노테이션 기반 맵핑:@GetMapping, @RequestMapping 등의 애노테이션을 사용하여, 웹 요청을 처리할 컨트롤러 메소드에 대한 URL 및 HTTP 메소드 매핑을 설정했습니다.RequestMapping을 클래스 레벨에 선언하면, 그 클래스 내부의 메소드들이 URL을 처리하는 기본 경로를 지정하게 됩니다.메소드 레벨에 선언..
결론 및 요약DispatcherServlet을 도입하여, 기존에 우리가 직접 작성했던 서블릿 코드와 맵핑 작업을 제거하고 스프링의 전통적인 서블릿 컨트롤러인 DispatcherServlet이 이를 대신 처리하도록 구현하였습니다. 이를 통해 Servlet Container-less 애플리케이션으로의 전환을 진행했습니다.주요 내용 요약기존 서블릿의 복잡성 제거:이전에는 FrontController 서블릿을 직접 작성하여 모든 웹 요청을 처리하고, 매핑을 수동으로 설정했지만, 이번 시간에 DispatcherServlet을 사용함으로써, 이 복잡한 작업을 대신 처리하도록 하였습니다.이를 통해 서블릿을 다루는 복잡한 코드를 단순화할 수 있었습니다.DispatcherServlet의 역할:DispatcherServl..
결론 및 요약스프링 컨테이너를 이용하여 의존성 주입(Dependency Injection, DI)을 구현하는 방법을 학습했습니다. HelloController와 SimpleHelloService 간의 의존 관계를 인터페이스를 통해 관리하고, 스프링 컨테이너가 이를 자동으로 처리하여 개발자가 의존성을 명시적으로 관리하지 않아도 되도록 만들었습니다.주요 내용 요약인터페이스 도입 및 의존성 분리:기존 SimpleHelloService 클래스는 인터페이스를 구현하지 않았으나, 이를 HelloService라는 인터페이스로 추상화하였습니다.HelloService 인터페이스는 sayHello 메소드를 정의하고, SimpleHelloService는 이를 구현하는 방식으로 변경하였습니다.이렇게 인터페이스를 도입하면, H..
결론 및 요약스프링의 핵심 개념인 의존성 주입(Dependency Injection, DI)에 대해 학습했습니다. DI는 클래스 간의 의존 관계를 효과적으로 관리하여 코드의 유연성과 재사용성을 높이는 방법입니다. 스프링 컨테이너가 DI를 통해 객체들 간의 관계를 설정하고, 개발자가 직접 의존성을 관리하지 않아도 자동으로 객체를 주입하도록 구성할 수 있습니다. 이로 인해 코드가 더 모듈화되고 변경에 대한 유연성이 확보됩니다.주요 내용 요약의존성 주입(DI) 개념:클래스가 다른 클래스에 의존할 때, 직접 인스턴스를 생성하는 대신 외부에서 필요한 객체를 주입받는 방식입니다. 이로 인해 클래스 간의 강한 결합을 피하고 유연한 코드 작성이 가능합니다.HelloController가 SimpleHelloService..
결론 및 요약스프링 컨테이너를 사용하여 애플리케이션에서 객체를 효율적으로 관리하고 재사용하는 방식을 배웠습니다. 특히, 싱글톤 패턴을 적용하여 중복된 객체 생성을 방지하고, 기존의 HelloController의 역할을 분리해, SimpleHelloService라는 서비스 객체를 통해 비즈니스 로직을 위임하는 방식으로 개선했습니다. 이를 통해 코드의 유지보수성을 높이고 책임을 분산시켜 더 효율적인 구조를 만들었습니다.주요 내용 요약스프링 컨테이너의 역할:스프링 컨테이너는 객체를 생성하고 관리하며, 객체를 한 번만 생성하여 재사용하는 방식으로 동작합니다. 이를 통해 여러 요청이 동일한 객체를 사용하게 되며, 이는 싱글톤 패턴과 유사한 효과를 제공합니다.getBean() 메소드를 사용해 스프링 컨테이너에 등록..
결론 및 요약스프링 컨테이너를 활용하여 독립 실행이 가능한 스프링 애플리케이션을 만들었습니다. 기존 Servlet 기반의 애플리케이션에서 직접 객체를 생성하고 관리하던 방식에서, 스프링 컨테이너를 통해 객체를 생성 및 관리하고 이를 필요할 때 가져와 사용하는 방식으로 전환했습니다. 이를 통해 더 유연하고 관리하기 쉬운 애플리케이션 구조를 구축할 수 있었습니다.주요 내용 요약스프링 컨테이너와 Servlet 컨테이너의 역할 분리:Servlet 컨테이너는 여전히 HTTP 요청을 처리하고 응답을 생성하는 역할을 맡지만, 객체(빈)의 생성과 관리는 스프링 컨테이너가 담당하게 되었습니다.기존에는 FrontController가 직접 객체를 생성하고 관리했지만, 이제는 스프링 컨테이너가 이 역할을 맡으며, 스프링 컨테..
결론 및 요약FrontController 패턴을 적용하여, 모든 웹 요청을 중앙에서 처리하고 이를 개별 로직으로 위임하는 방식으로 코드를 개선했습니다. 이를 통해 로직을 분리하고 재사용성을 높였으며, 웹 요청과 관련된 공통 기능을 처리하는 구조를 확립했습니다. 또한, 스프링 없이 순수 서블릿을 사용하여 독립적으로 실행 가능한 프론트 컨트롤러 시스템을 구축했습니다.주요 내용 요약FrontController와 로직 분리:모든 요청을 FrontController가 받아 처리하는 구조를 만들었습니다. 기존의 /hello와 같은 요청을 단일 서블릿에서 처리하던 방식에서, 요청을 처리할 핸들러로 분리하여 로직을 관리하는 방식으로 전환했습니다.HelloController와 같은 로직은 독립적으로 분리되었으며, Fro..
결론 및 요약프론트 컨트롤러 패턴을 적용하여 중앙에서 모든 요청을 관리하고, 각 요청을 적절한 핸들러로 전달하는 방식을 구현했습니다. 기존의 개별 서블릿 방식에서 벗어나, URL과 HTTP 메소드에 따라 요청을 처리할 수 있도록 프론트 컨트롤러가 요청을 분기하는 역할을 맡습니다. 이를 통해 공통된 작업을 중앙에서 처리하고, 더 유연한 요청 처리 로직을 구현할 수 있게 되었습니다.주요 내용 요약프론트 컨트롤러 도입:기존에는 각각의 서블릿이 특정 URL에 맵핑되어 그 요청을 직접 처리했으나, 프론트 컨트롤러를 도입함으로써 중앙에서 모든 요청을 받아 처리하게 되었습니다. 이를 위해 슬래시("/") 이하의 모든 요청을 프론트 컨트롤러가 처리하도록 설정합니다.요청의 분기 처리:프론트 컨트롤러는 요청을 받아 URL..