[Spring] 의존성 주입 (Dependency Injection, DI) 3가지 방법
·
Java/Spring
의존성 주입(Dependency Injection, DI) Inversion of Control(IoC)이라고도 불리는 의존성 주입(DI)은 클래스 간 의존관계를 관리하고 있는 Bean 중에서 필요한 것을 컨테이너가 자동으로 주입해 주는 것을 말한다. 즉, 어떤 객체가 사용하는 의존 객체를 직접 만들어서 사용하는 게 아니라, 주입받아서 사용하는 방법을 말한다. 의존성 주입 방법으로 대표적으로 3가지가 존재하는데 아래에서 알아보자. 의존관계 주입 방법 생성자 주입 생성자 주입 방식은 생성자를 통해서 의존 관계를 주입 받는 방법이다. @RestController public class PostController { private final PostService postService; // @Autowired..
[Spring] 스프링 싱글톤
·
Java/Spring
이전에 싱글톤 패턴에 대해 알아보고 사용하는 이유와 문제점을 살펴보았다. 싱글톤을 사용하는 이유보다 문제점이 훨씬 많아 안티패턴이라고도 불리는 싱글톤 패턴을 스프링을 이용하면 문제점을 보완하면서 장점을 누릴 수 있다고 한다. 스프링이 어떻게 싱글톤 패턴을 이용하는지 한번 알아보자. 스프링 컨테이너 Spring의 컨테이너는 이전 포스팅에서 언급한 싱글톤 패턴의 문제점을 보완하고, 싱글톤 패턴을 코드로 일일이 구현하지 않고 객체의 인스턴스를 1개만 생성해서 관리한다. 즉, 싱글톤으로 관리할 수 있게 해 준다. Spring은 특정 클래스에 @Bean을 적용하면 스프링 컨테이너는 해당 클래스에 대해 1개의 인스턴스를 만들어서 관리한다. 이 인스턴스는 클라이언트의 요청이 올 때마다 생성되는 것이 아니라 최초에 만..
싱글톤 패턴(Singleton)의 사용 이유와 문제점
·
Java/Spring
싱글톤(Singleton) 패턴이란? 싱글톤 패턴은 특정 클래스의 인스턴스를 1개만 생성되는 것을 보장하는 디자인 패턴이다. 즉 생성자를 통해서 여러 번 호출이 되더라도 인스턴스를 새로 생성하지 않고 최초 호출 시에 만들어두었던 인스턴스를 재활용하는 패턴이다. 싱글톤 패턴을 사용하는 이유 싱글톤 패턴을 사용함으로써 얻을 수 있는 이점 중 하나는 메모리 낭비를 방지할 수 있다. 사용자가 1초에 10번 똑같은 요청을 보내면 요청을 처리하기 위한 똑같은 객체를 1초에 10번 생성하고 소멸되는 메모리 낭비 문제가 발생하게 된다. 하지만 싱글톤 패턴을 사용하면 최초 한번 new로 객체를 생성하고 해당 객체를 이후에도 사용하도록 공유(static)하면 메모리 낭비 문제를 방지할 수 있다. 순수 Java코드로 Sin..
[JPA] OSIV(Open-Session-In-View)와 지연로딩에 대해서
·
Java/Spring
저번 포스팅에 이이서 이번에는 지연로딩과 OSIV에 대해서 더 구체적으로 알아보려고 한다. OSIV를 알기 위해 영속성 컨텍스트에 대해 공부한 글이다. https://seungjjun.tistory.com/232 [JPA] 영속성 컨텍스트란? (엔티티 생명주기) 오늘은 이전 프로젝트 진행할 때 실시간 알림 구현중 OSIV 때문에 connection이 반환되지 않아 문제가 발생했던 적이 있었는데 해당 문제가 왜 발생했는지 알아보기 위해 2번의 포스팅(영속성 컨텍 seungjjun.tistory.com OSIV를 켜두면 뷰단에서도 지연로딩을 사용할 수 있다고 배웠는데 지연로딩이 무엇인지 알아보자. 지연로딩에 대해 공부하기 이전에 프록시(Proxy)라는 개념을 알아야 한다. 프록시란? 프록시는 실제 클래스를 ..
[JPA] 영속성 컨텍스트란? (엔티티 생명주기)
·
Java/Spring
오늘은 이전 프로젝트 진행할 때 실시간 알림 구현중 OSIV 때문에 connection이 반환되지 않아 문제가 발생했던 적이 있었는데 해당 문제가 왜 발생했는지 알아보기 위해 2번의 포스팅(영속성 컨텍스트, 지연로딩과 OSIV)을 통해 알아보려고 한다. 우선 최종 목표인 OSIV에 대한 간단한 정의부터 살펴보자. OSIV(Open-Session-In-View)란? OSIV는 영속성 컨텍스트를 뷰까지 열어준다는 의미이다. 영속성 컨텍스트가 살아있으면 엔티티는 영속 상태로 유지된다. 따라서 뷰에서도 지연 로딩을 사용할 수 있다고 한다. 오늘은 지연로딩에 대해 공부하기 이전에 영속성 컨텍스트부터 알아보자. 영속성 컨텍스트란? 영속성 컨텍스트는 엔티티를 영구 저장하는 환경을 말한다. 간단히 말하면 엔티티를 저장..
커넥션 풀(Connection pool)이란? (JDBC, HikariCP)
·
Java/Spring
커넥션 풀(DBCP)이란? 웹 컨테이너(WAS)가 실행이 될 때 DB와 연결을 위해 미리 설정된 값만큼의 connection 객체들을 만들어 pool에 저장을 했다가 클라이언트의 요청이 발생하면 pool에 미리 생성해 둔 connection을 주었다가, 클라이언트의 사용이 끝나면 connection을 돌려받고 다시 pool에 저장하는 방식이다. WAS(Web application server)란? WAS(Web application server)는 웹 서버와 웹 컨테이너(WAS = Web Server + Web Container)가 합쳐진 형태로, 웹 서버 단독으로 처리할 수 없는 DB조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다. 커넥션 풀 동작 과정 1. 사용자가 DB사용을 위해 conne..