Spring/Spring 이야기 27

스프링 핵심 원리 기본편 강의 - ComponentScan과 의존 관계 자동 주입

@ComponentScan 자동으로 @Component가 붙은 컴포넌트를 해당 빈 등록을 해준다. (싱글톤) 빈 이름은 기본전략은 MemberServiceImpl class -> memberServiceImpl로 앞의 글자만 소문자로 바꿔서 등록 해준다. 이름을 수정 할 수 있음. 15:47:41.702 [Test worker] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@d049e53 15:47:41.708 [Test worker] DEBUG org.s..

스프링 핵심 원리 기본편 강의 - Bean Definition

BeanDefinition 스프링은 어떻게 이런 다양한 설정 형식을 지원하는 것일까? 그 중심에는 BeanDefinition 이라는 추상화가 있다. BeanDefinition 정보 BeanClassName: 생성할 빈의 클래스 명(자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음) factoryBeanName: 팩토리 역할의 빈을 사용할 경우 이름, 예) appConfig factoryMethodName: 빈을 생성할 팩토리 메서드 지정, 예) memberService Scope: 싱글톤(기본값) lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때 까지 최대한 생성을 지연처리 하는지 여부 InitMethodName: 빈을 생성하고, 의존관계를 적용한 뒤에 호출..

스프링 핵심 원리 기본편 강의 - Bean scope & Bean lifecycle

빈 스코프 스프링 빈은 스프링 컨테이너의 시작과 함께 생성 되어서 스프링 컨테이너가 종료될 때까지 유지 되는데, 이는 기본적으로 싱글톤 스코프로 생성 되기 때문이다. 다양한 스코프 지원 싱글톤 프로토 타입 스프링 컨테이너는 프로토 타입 빈의 생성과 의존관계 주입까지만 관여 하고 그 후는 관리 하지 않음. (매우 짧음) 웹 관련 스코프 request 웹 요청이 한번 들어왔다 나갈때까지 유지 session 웹 세션이 생성되고 종료될 때까지 유지 application 웹 서블릿 컨텍스트와 같은 범위로 유지 component scan 자동등록 @Scope("prototype") @Component public class HelloBean {} 수동 등록 @Scope("prototype") @Bean Protot..

스프링 핵심 원리 기본편 강의 - 스프링

스프링이란? Spring framework / Spring boot 필수 Spring batch, Spring Session, Spring Data 등등 스프링프레임워크 핵심기술 웹기술 데이터 접근 기술 기술 통합 테스트 언어 스프링 부트 최근에 기본으로 사용 Spring Application을 쉽게 생성 내장 톰캣 지원 손쉬운 빌드 구성을 위한 starter 종속성 제공 프로덕션 준비 기능 제공 간결한 설정 스프링 부트만 사용 할 수 없고, 실제는 스프링 프레임워크를 사용한다. 스프링이란 단어? 스프링 생태계 스프링 프레임워크 스프링 DI 컨테이너 기술 스프링 진짜 핵심 자바 언어 - 객체 지향 언어 스프링은 객체 지향 언어가 가진 강력한 특징으로 개발 할 수 있도록 돕는 프레임워크 다형성 / 객체 역..

스프링 핵심 원리 기본편 강의 - 싱글톤

우리가 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청을 할 때 마다 객체를 새로 생성한다. 고객 트래픽이 초당 100이 나오면 초당 100개 객체가 생성되고 소멸된다! 메모리 낭비가 심하다. 해결방안은 해당 객체가 딱 1개만 생성되고, 공유하도록 설계하면 된다. 싱글톤 패턴 싱글톤 패턴: 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. 싱글톤 방식의 주의점 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다..

스프링 핵심 원리 기본편 강의 - OOP와 스프링

https://www.inflearn.com/course/스프링-핵심-원리-기본편 [스프링 핵심 원리 - 기본편 강의 - 인프런 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢 www.inflearn.com](https://www.inflearn.com/course/스프링-핵심-원리-기본편) 좋은 객체 지향 설계의 5가지 원칙의 적용 여기서 3가지 SRP, DIP, OCP 적용 SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 클라이언트 객체는 직접 구현 객체를 생성하고, 연결하고, 실행하는 다양한 책임을 가지고 있음 SRP 단일 책임 원칙을 따르면서 관심..

spring boot 3 + Hibernate 6 logging config

spring boot 3 + Hibernate6를 쓰면서 쿼리를 로깅 하기 위해서는 기존과 달라진 점이 있는데, 기존은 아래처럼 설정 했다. spring: jpa: show-sql: false properties: hibernate: format_sql: true logging: level: org.hibernate.SQL: debug org.hibernate.type.descriptor.sql: trace 아래처럼 설정 하면, 쿼리의 parameter가 잘 보인다. spring: jpa: show-sql: false properties: hibernate: format_sql: true logging: level: sql: debug org.hibernate.orm.jdbc.bind: trace

localhost HTTPS 적용 (spring boot)

mkcert install brew install mkcert brew install nss # firefox 사용 예정이라면, 추가mkcert localhost 명령어 mkcert -install [-uninstall 삭제] > mkcert -install The local CA is now installed in the system trust store! ⚡️ The local CA is now installed in the Firefox trust store (requires browser restart)! 🦊> mkcert -pkcs12 localhost Created a new certificate valid for the following names 📜 - "localhost" The PKCS..

[Spring framework] Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider

Netty를 쓰는 환경에서는 해당 오류가 M1 Apple chip 부터 발생한다. Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS 해당 이슈는 MacOS에서만 발생한다. 해결방법은 netty issue에 나와 있는데, 보통 아래 디펜던시를 추가해주면 해결 된다. io.netty:netty-resolver-dns-native-macos 그런데, 좋은 방법이 며칠전에 추가 되었는데, 실행 하는 OS를 구분하여 runtimeOnly로 해당 모듈을 추가 해주는 방식이다.O..

@ConfigurationProperties (Spring Boot)

kafka: topic: {topic name} producer-config: bootstrap.servers: {server info} key.serializer: org.apache.kafka.common.serialization.StringDeserializer value.serializer: org.apache.kafka.common.serialization.StringDeserializer acks: all batch.size: 16384 linger.ms: 1000 위와 같은 정보를 클래스 형태로 가져오고 싶다면 어떻게 해야 할까? 이럴때 쓸 수 있는 것이 @ConfigurationProperties 이다. kotlin에서 특히나 불변 값으로 가져오고 싶다면, @ConstructorBindin..

반응형