본문 바로가기
728x90

Back-end63

[Spring] 컴포넌트 스캔 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지 스프링 빈을 등록할 때에는 자바 코드의 @Bean이나 XML의 등을 통해 설정 정보에 직접 등록할 스프링 빈을 나열했다. 예제에서는 몇 개가 안되었지만, 실제 구현 상황에서는 이렇게 등록해야 할 스프링 빈이 수십, 수백 개가 되면 일일이 등록하기 귀찮고, 설정 정보가 커지며 누락하는 상황도 발생 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존 관계를 자동으로 주입해 주는 @Autowired라는 기능도 제공한다. 코드를 통해 컴포넌트 스캔 + 의존관계 자동 주입을 알아보자. 먼저 기존의 AppConfig.java를 남겨두고, 새로운 코드인 AutoAppConfig.java를 만든다. pac.. 2023. 1. 3.
[Spring] 싱글톤 컨테이너 개념 정리 웹 애플리케이션과 싱글톤 사실 애플리케이션은 굉장히 종류가 많다. 온라인에 대한 처리뿐만 아니라 서버의 백그라운드 데몬 같은 프로세스와 더불어 하나의 단위로 묶어 배치로 처리해주는 등 다양한 종류의 애플리케이션이 존재한다. 그중에서도 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 가능하다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 이렇게 되면, 고객의 요청이 들어올 때마다 뭔가를 계속해서 만들어내게 된다. -> 이것이 문제가 된다. 진짜 고객 요청 시마다 객체를 만드는지 테스트해 보자. 위와 같이 매번 새로운 객체가 생성됨을 확인할 수 있다. 이는 고객의 요청이 참 많은.. 2023. 1. 2.
[Spring] 스프링 컨테이너와 스프링 빈 개념 정리 스프링 컨테이너 ApplicationContext를 스프링 컨테이너라고 한다. 기존에는 개발자가 AppConfig를 사용해 직접 객체를 생성해서 DI 했지만, 스프링 컨테이너를 사용하면 스프링 컨테이너가 이 역할을 대신해 준다. 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용한다. 이때 이 안에서 @Bean이라는 어노테이션이 붙은 메서드를 모두 호출해서 반환된 객체를 모두 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 부른다고 한다. 스프링 컨테이너를 사용하게 되면, 기존의 AppConfig를 사용한 조회와 다르게 스프링 컨테이너를 통해서 필요한 스프링 빈(객체)을 찾도록 바뀌어야 한다. 필요한 스프링 빈은 applic.. 2022. 12. 31.
IoC, DI 그리고 컨테이너 개념 정리 제어의 역전 IoC(Inversion of Control) 제어의 역전은 스프링에만 국한된 단어가 아니라 일반적인 개발자가 모든 것을 제어(control)하는 흐름에서 벗어나 내가 호출하는 것이 아니라 프레임워크 같은 것이 대신 호출해 주는 구조를 의미합니다. (한 마디로 제어에 대한 권한이 뒤바뀌는 것을 의미한다고) 기존의 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고 실행하는 구조를 따랐습니다. 한 마디로 구현 객체가 프로그램의 제어 흐름을 스스로 조종하는 구조이며 개발자의 입장에서는 자연스러운 흐름이었죠 그런데, 지난번 DI에 대한 정리글에서 설명한 AppConfig가 의존 관계를 주입하는 등의 역할을 가져감으로써, 프로그램에 대한 제어의 흐름을 가져간 바가 .. 2022. 12. 28.
Dependency Injection: 의존관계(의존성) 주입 개념 정리 DI의 정의 DI는 Dependency Injection의 줄임말로, 우리 말로는 의존관계 주입 또는 의존성 주입이라고 표현합니다. 의존이라고 하는 단어 자체가 관계 속에서 의존하는 느낌이기 때문에, 저는 의존관계 주입이라는 용어가 더 적합하다고 이해했습니다. 그렇다면, 여기서 말하는 의존관계가 무슨 말일 까요? "A가 B에 의존한다."라고 했을 때, 이것이 의미하는 바를 다음과 같은 설명을 통해 이해할 수 있었습니다. 의존대상 B가 변하면, 그것이 A에 영향을 미친다. - 토비의 스프링 3.1 즉, B의 기능이 추가 또는 변경될 때, A에 영향을 미치는 경우 "A가 B에 의존한다."라고 표현할 수 있는 것입니다. 그렇다면, Dependency Injection은 무엇일까요? 말 그대로 의존 관계를 주입.. 2022. 12. 27.
[모든 개발자를 위한 HTTP 웹 기본 지식] 8. HTTP 헤더 2 - 캐시와 조건부 요청 캐시의 기본 동작 캐시가 없을 때 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. 인터넷 네트워크는 매우 느리고 비쌈 (pc의 메모리나 하드디스크에 비해 상대적으로) 브라우저의 로딩 속도가 느리다. 이로 인해 느린 사용자 경험이 발생한다. 캐시 적용 이렇게 캐시를 적용하게 되면, 일정 시간 동안 같은 요청을 보낼 때, 네트워크를 통해서 결과를 받아오지 않고, 브라우저 캐시에 접속해서 결과를 받아오기 때문에 이 과정에서 시간이 크게 단축된다. 캐시 덕분에 캐시 가능 시간동안 네트워크를 사용하지 않아도 된다. 비싼 네트워크 사용량을 줄일 수 있다. 브라우저 로딩 속도가 매우 빠르다. 빠른 사용자 경험을 만들어준다. 웹 브라우저 이용시 한 번 들어갔던 사이트를 재방문할 때 매우.. 2022. 12. 26.
728x90