https://www.youtube.com/watch?v=lwpnWx8E8aU "어두운 안갯속을 걷고 있는 답답한 기분" 이 말이 많이 와닿았다. 영상을 보며 끄적이던 것들을 남겨본다. 우선적으로 프레임워크를 공부할 것프레임 워크 자체가 구조를 가지고 있다. 어떤 상황에 대한 일련의 절차가 있다.왜 이렇게 설계 했을까? 7~10년 하다 보면 이유가 보일 것이다.프레임워크 구조를 공부하고 파생 이론을 공부하면서 연결을 해야 한다. 왜 저렇게 했을까? 표준 문서 전체를 볼 필요는 없다. 전체를 읽고 공부하는 건 학술의 영역이다. 알맹이만 봐도 충분하다. 사이드 프로젝트? 메신저나 WebRTC 공부해서 프로젝트 만들어 봐라. 결과가 눈에 보여서 재밌을 거다.
Resource 추상화
·
Programming/Spring
Resource 추상화Spring은 java.net.URL을 org.springframework.core.io.Resource로 감싸서 추상화한 클래스이다.스프링 내부에서 많이 사용하는 인터페이스이다추상화 한 이유java.net.URL 이 기본적으로 여러 prefix를 지원하는 프로토콜은 http,https, ftp, file, jar이지만 classpath 기준으로 리소스를 읽어오는 기능이 없다.ServletContext를 기준으로 상대 경로로 읽어오는 기능이 없다.새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족하다.ApplicationContext스프링의 핵심 인터페이스:단순히 빈 팩토리로서의 역할뿐만 아니라, 리소스 로딩 기능을 포함하..
ApplicationEventPublisher
·
Programming/Spring
ApplicationContext는 ApplicationEventPublisher 인터페이스를 구현하고, 이를 통해 스프링 애플리케이션에서 이벤트를 발행(publish)할 수 있는 기능을 제공한다.Spring 4.2 버전 이전 버전에서는 발행되는 Event 객체가 ApplicationEvent로부터 확장되고 (extends), EventListener 객체는 ApplicationListener 를 구현해야(implements) 했었다.public class ExampleEvent extends ApplicationEvent { private int data; public ExampleEvent(Object source, int data) { super(source); ..
@Component와 @Bean
·
Programming/Spring
@Component와 @Bean의 차이특징@Component@Bean사용 위치클래스 레벨메서드 레벨자동 감지스프링의 컴포넌트 스캔으로 자동 감지 가능스프링이 명시적으로 메서드를 호출하여 빈 생성소스 코드 의존성클래스의 소스 코드가 수정 가능해야 사용 가능제3자 라이브러리 클래스에도 적용 가능유연성간결하지만 인스턴스 생성 로직에 대한 제어 제한로직 추가를 통해 다양한 조건에 따른 빈 생성 가능@Component는 수정 가능한 클래스에만 적용될 수 있다는 점이 의문이 들었지만, 외부 라이브러리 클래스는 코드 수정이 불가능하므로 @Component 애노테이션을 붙일 수 없다는 점을 생각하면 당연하다. 따라서, 외부 라이브러 클래스는 @Bean을 통해 빈 생성이 가능하다.BeanExample might repr..
Autowired
·
Programming/Spring
@Autowired 빈 주입 방식 3가지생성자필드Setter@Autowired와 빈 주입 과정 이해@Autowired로 빈을 주입할 때, required = false 옵션을 사용하면 빈 주입이 이루어지지 않아도 객체가 생성될 수 있다. 하지만 생성자 주입 방식은 주입할 빈이 반드시 필요하므로, 주입 대상 빈이 없으면 객체 생성에 실패한다.@Componentpublic class ExampleService { private final DependencyService dependencyService; // 생성자 주입 @Autowired public ExampleService(DependencyService dependencyService) { this.dependency..
ApplicationContext 2가지 빈 설정 방식
·
Programming/Spring
ApplicationContext의 빈 설정 방식ClassPathXmlApplicationContext:XML 파일을 통해 Spring 빈을 정의하고 로드하는 과거 방식입니다.주로 applicationContext.xml과 같은 파일에서 빈 정의를 작성했습니다.AnnotationConfigApplicationContext:Java 기반의 빈 설정을 사용하는 방식입니다.XML 대신 자바 클래스를 사용하여 빈을 정의하고 구성합니다.Java 기반 빈 설정자바로 빈을 등록할 때는 @Configuration과 @ComponentScan 애너테이션을 활용합니다.@Configuration: 설정 클래스를 나타냅니다. 이 클래스는 하나 이상의 @Bean 메서드를 포함하며, 이러한 메서드들이 생성하는 객체를 Spring..
RequestBody 자바 객체 매핑
·
Programming/Spring
기본 생성자가 없음에도 @RequestBody를 통해 Java 객체가 올바르게 생성되었다. 기본적으로 리플렉션과 기본 생성자를 사용해 매핑된다고 알고 있었기에 의문이 들었다.@Getter@Builderpublic class SignupRequest { @NotBlank(message = "Email is required") @Email(message = "Invalid email format") private String email; @NotBlank(message = "Password is required") @Size(min = 6, max = 20, message = "Password must be between 6 and 20 characters") private String passw..
RabbitMQ와 Kafka
·
Kafka
RabbitMQ메시지를 생산자(Producer)로부터 받아 큐에 저장하고, 이를 소비자(Consumer)가 관리.메시지가 처리되면 큐에서 제거됨(일회성 메시지 처리).AMQP (Advanced Message Queuing Protocol) 표준을 따름. Kafka메시지를 토픽으로 저장하며, 파일 시스템 기반의 로그 관리.메시지는 여러 소비자가 독립적으로 읽을 수 있음.메시지는 제거되지 않고, 지정된 기간 동안 유지.특징RabbitMQKafka메시지 전달 방식Push (브로커가 소비자에게 전달)Pull (소비자가 직접 가져감)메시지 보관처리 후 큐에서 삭제됨토픽에 로그 형태로 저장, 유지기간 동안 재처리 가능메시지 순서 보장큐 단위에서만 보장파티션 단위에서 보장내구성디스크 또는 메모리에 저장 가능디스크에 ..
spring kafka vs apache kafka
·
Kafka
apache kafkaapache Kafka 공식 라이브러리.Kafka 클라이언트를 제공하여 Kafka 브로커와 직접 통신하도록 지원.spring kafkaSpring Framework의 Kafka 통합 라이브러리.org.apache.kafka를 기반으로 하고 있으며, Spring 애플리케이션에 친화적인 기능을 추가.spring boot에서 apache kafka를 조금 더 편리하게 사용할 수 있도록 한 라이브러리가 spring kafka이다.예시apache kafka(저수준 API) producer.close()를 명시적으로 호출해야 자원을 적절히 해제할 수 있음.Spring과의 통합 기능이 없어 별도로 관리해야 함. import org.apache.kafka.clients.producer.KafkaP..