본문 바로가기

Spring|Spring-boot117

Spring Boot Actuator 스프링 부트는 애플리케이션에 대해 관리하고 모니터링을 도울 수 있는 추가적인 기능이 포함되어 있습니다. 이때 HTTP endpoints, JMX 둘 중 어떠한 방법으로 모니터링하고 관리할 것인지 선택할 수 있습니다. Auditing, health, metrics 수집까지 거의 대부분 자동적으로 애플리케이션에 적용할 수 있습니다. spring-boot-actuator module을 dependency에 추가함으로 써 매우 쉽게 적용할 수 있습니다. gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' } Actuator의 용어에 대한 정의는 다음과 같습니다. 액추에이터(actuator)는 무언가.. 2023. 2. 16.
Spring Boot 좀 더 자세히. 도메인이 정해지면 개발자는 기술 스택에 대한 수많은 결정을 진행한다. 우리는 언어와, 빌드툴을 선택하고 어떤 플랫폼인지 확인한다. 1. 웹인가?, 웹이면 서블릿 기반인가 리액티브 기반인가? 2. 데이터접근기술이 필요하다면 하나의 데이터접근 방식만 사용할 것인가? 아니면 여러 데이터접근 방식을 사용하게 될 것인지. 3. 보안은 어떻게 할 것이며 4. 캐싱을 적용해야 하는지 5. API 문서는 어떻게 할 것인지 6. 클라우드 관련 기술을 무엇을 사용할 것인지 7. 어떤 아키텍처를 따를 것인지 8. 테스트 코드의 비율은 어떻게 맞출 것인지 9. 타 시스템과의 의사소통을 위해 이벤트가 필요하다면 어느 정도의 수준으로 처리될 것인지? 별도의 메시징 중개인을 사용해야 하는지 10. 코드는 어디에 저장할 것인지 11.. 2023. 2. 4.
Properties Bean PostProcessor Properties를 등록하기 위해 설정 정보를 담고 있는 클래스를 만든다. @Component public class ServerProperties { private String contextPath; private int port; public String getContextPath() { return contextPath; } public void setContextPath(String contextPath) { this.contextPath = contextPath; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } } 이는 ServletWebServerFactory Bean의 속성 .. 2023. 2. 2.
Environment Properties 스프링 부트를 사용해 자동 구성 정보의 일부 내용을 변경하거나 설정해야 할 때 Environment를 통해서 프로퍼티의 값을 가져와 활용할 수 있다. 실제 커스텀 빈을 등록해야 하는 과정은 연관되고 주입되어야 하는 빈들 간의 연관관계가 많은 경우 매우 복잡해지는데, 스프링 부트는 간단하게 자동 구성의 디폴트 설정을 변경하는 게 가능하다. 스프링 부트는 기본적으로 application.properties. xml, yml 등의 프로퍼티를 읽어오는 기능을 추가했다. 자동 구성에서 Environment 프로퍼티를 주입받아서 속성값을 읽고 싶을 때 스프링 부트의 모든 초기화 작업이 끝나고 나면 실행되는 코드를 만드는 방법 중에 ApplicationRunner 인터페이스를 구현한 오브젝트 또는 람다식을 빈으로 등.. 2023. 1. 30.
Spring boot AutoConfiguration and Conditional Spring-boot-autoconfigure.AutoConfiguration.imports 파일을 보자. 더보기 org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration org.springframework.boot.autoconfigure.aop.AopAutoConfiguration org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration org.springframework.boot.autoconfigure.cache.C.. 2023. 1. 26.
Spring Boot @AutoConfiguration @AutoConfiguration은 스프링에 있던 기술을 스프링 부트가 효과적으로 활용하여 제공하는 것이다. Meta-Annotaion. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component // Meta Annotation public @interface Service { } 애노테이션에 적용한 애노테이션을 메타 애노테이션이라고 한다. 스프링은 코드에서 사용된 애노테이션의 메타 애노테이션의 효력을 적용해 준다. 실제 예시처럼 @Service 애노테이션이 부여된 클래스는 @Service의 메타 애노테이션인 @Component가 적용되어 컴포넌트 스캔 대상이 된다. Composed-annotation Targ.. 2023. 1. 24.
Standalone Application 스프링 부트의 특징 중 하나는 독립실행형 애플리케이션이라는 것이다. 스프링 부트를 만드는 과정에서는 서블릿 컨테이너를 감추는 작업이 필요했다. 이러한 서블릿 컨테이너를 구현한 구현체들에 대한 별도의 설치나 설정을 하지 않고 개발을 할 수 있는 환경을 만들어야 함을 의미하는데, 스프링 부트의 main() 메서드에서는 실제 서블릿 컨테이너를 별도의 설치하지 않아도 main 메서드 실행 시 기본 구현체로 서블릿 컨테이너의 구현체인 톰캣이 기본 포트 8080으로 뜨는 것을 확인할 수 있다. tomcat은 자바로 작성된 하나의 프로젝트이다. tomcat의 개발자들은 별도의 설치를 통해 사용하는 것 대신 embedded 된 tomcat을 사용할 수 있도록 제공하는 라이브러리가 존재한다. 이번에는 이러한 내장 톰켓라.. 2023. 1. 22.
스프링 부트란? 스프링 부트를 조금 더 자세히 알기 전 내가 생각하는 스프링 부트란 무엇일까? 스프링을 통해 개발을 한다면 수많은 관행을 따라야 합니다. 관행에 맞춰서 프레임워크의 도구를 사용해 여러 가지 설정을 해주어야 하며, 개발부터 테스트, 배포까지 모든 과정을 매우 자세하게 커스텀해야 합니다. 스프링 부트는 이러한 스프링 기반의 관행을 기본적인 옵션으로 가져가되 필요한 부분을 커스텀하여 독립적으로 실행할 수 있는 애플리케이션을 많은 고민 없이 빠르게 개발할 수 있는 여러 도구(라이브러리, 설정.. 등)를 제공하는 프레임 워크라고 생각합니다. 기존의 스프링으로 애플리케이션을 개발하는 것은 복잡한 고민이 필요했습니다. 스프링을 어떻게 사용할 것인지 많은 고민이 동반됩니다. 다양한 표준기술, 라이브러리 중 어떻게 사용.. 2023. 1. 21.
도메인간 바운디드 컨텍스트 강결합의 대책 "이벤트" 이벤트 발생과 출판을 위해서 스프링이 제공하는 ApplicationEventPublisher를 사용할 수 있다. ApplicationEventPublisher의 publishEvent() 메서드를 통해 이벤트를 발생시킬 수 있다. 참고로 ApplicationContext는 ApplicationEventPublisher를 상속하고 있기에 초기화 클래스로 사용할 수 있다. 빈 설정 시 다음과 같이 설정할 수 있다. @Bean public InitializingBean eventsInitializer(){ retun () -> Events.setPublisher(applicationContext); } ApplicationEventPublisher를 setPublisher메서드로 주입받는 Events 클래스는.. 2023. 1. 4.
Projections 엔티티 대신에 DTO를 편리하게 조회할 때 사용 public interface UsernameOnly { String getUsername(); } get + Entity.property 조건 List findProjectionsByUsername(@Param("username") String username); 이후 JpaRepository를 가진 인터페이스에 위와 같은 시그니처를 등록하면 끝이다. 이렇게 하면 해당 구현체가 담겨서 온다. 확인해보자. @Test public void testMember () throws Exception { //given Member member = Member.builder() .username("username") .build(); Member member2 = M.. 2022. 12. 3.