본문 바로가기

김영한

(4)
Lombok 라이브러리의 @RequiredArgsConstructor 롬복과 최신 트랜드 막상 개발을 해보면, 대부분이 다 불변이고, 그래서 다음과 같이 필드에 final 키워드를 사용하게 된다. 그런데 생성자도 만들어야 하고, 주입 받은 값을 대입하는 코드도 만들어야 하고...(매우 귀찮다) 필드 주입처럼 좀 편리하게 사용하는 방법은 없을까? -> 롬복으로 해결 가능하다! [롬복 추가] 프로젝트 시작할 때 롬복을 설치하지 않았기 때문에 build.gradle에 다음과 같은 코드를 추가하자(처음에 롬복을 추가했으면 이 과정을 뛰어넘어도 된다) //lombok 설정 추가 configurations{ compileOnly{ extendsFrom annotationProcessor } } dependencies { implementation 'org.springframework..
@ComponentScan과 @Autowired 스프링은 설정 정보가 없어도 1) 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 2) 또 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. ✔️ 컴포넌트 스캔의 필요성 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열하는 방법이 있다. 하지만 등록해야 할 스프링 빈이 많아진다면 하나씩 다 입력하는 것은 한계가 있고 누락할 가능성도 있다. => 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. ✔️ 컴포넌트 스캔 방법 ✏️[ 1 ] 다음과 같이 설정 정보 클래스에 @ComponentScan 어노테이션을 붙이면 된다. @Configuration @Comp..
싱글톤 방식 주의점_무상태(stateless) 싱글톤 방식의 주의점!!(완전 중요) 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 💡 무상태(stateless)로 설계해야 한다! 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다! 가급적 읽기만 가능해야 한다.(가급적 수정하지 않도록 해야 한다) 필드 대신에 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다. 스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다!!! [상태를 유지할 경우 발생..
스프링 컨테이너와 스프링 빈 스프링 컨테이너란? : 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할 스프링 빈이란? : 자바 객체를 스프링에서는 빈(Bean)이라고 부름 컨테이너와 빈이라는 걸 계속 개념 정리는 해왔지만 확 와닿지 않는다. 컨테이너가 뭐지?.. 공사장 근처에 있는 회색 컨테이너가 생각난다.빈?? 원빈인가?ㅋㅋ 다음 스프링 컨테이너를 생성하는 과정을 통해 개념을 더 잘 이해해보도록 하자! ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 위의 코드는 스프링 컨테이너를 생성하는 코드인데 여기서 ApplicationContext 를 '스프링 컨테이너'라 한다...