spring

토비님의 유튜브 영상을 보던 중 내부 클래스를 스프링 컨테이너에 등록 가능한지 확인해보는 컨텐츠가 있었다. 제목을 읽고 확실히 답을 해볼 수 없었기에 영상을 기반으로 정리를 해보고자 한다. 내부 클래스 vs 정적 중첩 클래스 분석에 앞서, 기존에 헷갈렸던 개념에 대해 한번 정리를 하고자 한다. @Configuration public class NestedClass { @Component public static class StaticNestedClass{ } public static void main(String[] args) { // 외부 클래스와 상관 없이 생성 가능! StaticNestedClass staticNestedClass = new StaticNestedClass(); } } 위의 코드에서..
📌 김영한님의 강의를 바탕으로 정리한 글입니다. [ @Aspect란? ] 스프링 어플리케이션에 프록시를 적용하려면 포인트컷과 어드바이스로 구성된 어드바이저를 스프링 빈으로 등록해야 한다. 자동 프록시 생성기는 스프링 컨테이너에서 어드바이저를 찾아서 나머지 스프링 빈들에 프록시를 자동으로 적용해준다. 스프링은 @Aspect 라는 어노테이션을 사용해서 어드바이져를 쉽게 만들수 있게 해준다. @Aspect는 AspectJ 프로젝트에서 제공해주는 어노테이션이다. 하지만 AspectJ 프로젝트 자체를 사용하는것은 아니다. 스프링은 AspectJ의 기능을 차용해서 사용하는 것이다. @Aspect를 사용하는 방법을 살펴보자 @Component @Aspect // 해당 클래스를 어드바이져로 만들 수 있게 해준다. @S..
스프링 타입 컨버터란? HTTP 쿼리스트링을 통해 전해지는 모든것은 문자로 인식된다. 하지만 localhost:8080/test?itemId=10 처럼 쿼리스트링을 보냈을때, 컨트롤러에서는 Long itemId의 숫자 타입으로 입력받을 수 있다. 이처럼 형변환이 되려면 매개변수를 처리하는 과정에서 자동으로 호출되는 변환 기능이 있어야 한다. 이것이 스프링 타입 컨버터이다. 스프링 타입 컨버터의 아래의 어노테이션을 대상으로 사용 가능하다. - @RequestParam - @ModelAttribute - @PathVariable 스프링 타입 컨버터 사용 스프링 타입 컨버터는 Converter라는 인터페이스를 구현해서 사용할 수 있다. Converter 형태에서 S는 입력값의 형태를, T에는 변환하길 원하는 ..
Redis 인메모리 데이터이기 때문에 RDBMS에 비해 접근 속도가 빠르다. 사용방법 EC2 메모리 직접 사용 레디스 클라우드로 원격 사용 사용하기 좋은 곳 I/O 작업이 빈번한 곳 (실시간 조회수를 계속 COUNT 해야하는 서비스) 사용자 세션 관리 Springboot에 redis 간편 적용 spring: cache: type: redis redis: time-to-live: 10000 cache-null-values: true redis: host: localhost port: 6379 application.yml 설정법 @EnableCaching // 추가해주기 @EnableJpaAuditing @SpringBootApplication public class JpaToyprojectApplicati..
SpringBootApplication이 동작하는 방식 run 메서드 안에 파라미터로 집어넣으면 스프링 빈으로 등록된다. run 메서드 내부적으로 ConfigurableApplicationContext를 생성한다. 이것이 스프링 컨테이너 자체이다. ComponentScan을 사용하려면 해당 어노테이션이 붙어있는 클래스가 스프링 빈으로 등록되야 한다. 빈을 찾으려면 따로 DL 기능을 제공하는 ObjectProvider를 사용하기 ObjectProvider로 찾아올때 객체의 생성, 의존관계 주입 및 초기화 까지는 스프링 컨테이너가 제공해준다. 그 뒤 반환하고 나면 컨테이너가 관리하지 않는다. 싱글톤 방식 정리 ComponentScan은 무조건 객체를 스프링 빈으로 싱글톤 등록해준다. 설정 정보에 @Confi..
스프링 빈은 생성부터 종료까지 일정한 생명주기를 가진다. 스프링 컨테이너 생성 -> 스프링빈 객체 생성 -> 의존 관계 주입 -> 기능 동작 -> 스프링 빈 종료 -> 프로그램 종료 스프링 빈으로 등록된 객체를 정상 사용하려면 의존 관계까지 완벽하게 주입 완료된 상태여야 한다. 만약 의존 관계 주입이 완료되지 않은 상태에서 의존 관계 주입 대상을 사용한 로직을 수행한다면 NULL 값이 뜰 수 밖에 없다. 또한 스프링 빈으로 등록된 객체에서 네트워크 소켓 연결이나 DB 연결을 사용한다면 어플리케이션 종료 시점에 커넥션을 잘 끊어줘야 자원의 낭비나 오류를 막을 수 있다. 이를 해결하려면 우리는 스프링 빈의 의존관계 주입 완료 시점과 스프링빈 종료 시점을 파악할 수 있어야 한다. 스프링에서는 이 시점들을 알려..
싱글톤 패턴 싱글톤 패턴은 애플리케이션이 시작 될 때 static을 통해 인스턴스를 메모리에 딱 하나 할당하고, 뒤의 호출 시 마다 해당 인스턴스를 반환해주는 디자인 패턴이다. 생성자를 private으로 설정하기 때문에 외부에서 생성자를 통해 인스턴스를 만들 수 없다. public class NoteBook { private static NoteBook noteBook = new NoteBook(); public static NoteBook getInstance() { return noteBook; } private NoteBook(){}; } NoteBook이라는 클래스를 간단히 싱글톤 패턴으로 구현한 코드다. 보통의 경우 생성자를 public으로 열어서 사용자가 직접 인스턴스를 생성해서 사용하도록 한..
스프링은 객체 지향의 SOLID 원칙을 지키기 위해 어플리케이션을 동작 시키는 사용 영역과, 각 객체들의 생성과 의존관계 주입을 책임지는 구성 영역으로 코드를 분리 시킵니다. 단순 자바코드로 config 클래스를 만든 후 사용 영역에 주입할 수도 있지만 스프링은 어노테이션 기반으로 사용할 수 있는 스프링 컨테이너와 스프링 빈을 제공합니다. 스프링 컨테이너 생성 스프링 컨테이너는 ApplicationContext 라는 인터페이스를 통해 사용할 수 있습니다. ApplicationContext ac = new AnnotationConfigApplicationContext(); 코드를 보면 ApplicationContext의 실제 구현체로는 AnnotationConfigApplicationContext 가 들어..
Jemlog
'spring' 태그의 글 목록