Spring Servlet이란? Spring Servlet은 웹 애플리케이션에서 클라이언트의 요청을 처리(요청을 받고, 응답을 반환)하는 작업을 한다. 일반적으로 이 Servlet을 Spring MVC 패턴에서 DispatcherServlet이라고 불린다. (Servlet은 일반적인 개념과 인터페이스를 나타내고, DispatcherServlet은 Spring의 특정 구현을 나타낸다.) 용어가 좀 헷갈릴 수 있는데 간단히 말하면 DispatcherServlet은 Servlet이지만 모든 Servleet이 DispatcherServlet은 아니다. Spring에서 DispatcherServlet의 역할은 Spring 기반 웹 애플리케이션의 앞단(front controller)에서 웹 요청을 적절한 Contr..
기존 프로젝트에서 @Transactional으로 설정해 준 서비스에 readOnly 속성을 사용하지 않고 있었는데 데이터를 읽기만 하는 서비스에 readOnly = true를 적용해 읽기 전용 모드로 설정해 주는 것이 좋을 것 같다는 이야기를 듣고 읽기 전용으로 설정해 주면 어떤 효과를 얻을 수 있는지 알아봤다. @Transactional(readOnly = true) Spring에서 @Transactional 어노테이션을 사용할 수 있는데 트랜잭션을 readOnly = true로 설정해 주면 읽기 전용 모드로 변경할 수 있다. 그러면 @Transactional(readOnly = true) 속성을 적용함으로써 얻을 수 있는 이점에 대해 알아보자. 우선 @Transactional(readOnly = tr..
의존성 주입(Dependency Injection, DI) Inversion of Control(IoC)이라고도 불리는 의존성 주입(DI)은 클래스 간 의존관계를 관리하고 있는 Bean 중에서 필요한 것을 컨테이너가 자동으로 주입해 주는 것을 말한다. 즉, 어떤 객체가 사용하는 의존 객체를 직접 만들어서 사용하는 게 아니라, 주입받아서 사용하는 방법을 말한다. 의존성 주입 방법으로 대표적으로 3가지가 존재하는데 아래에서 알아보자. 의존관계 주입 방법 생성자 주입 생성자 주입 방식은 생성자를 통해서 의존 관계를 주입 받는 방법이다. @RestController public class PostController { private final PostService postService; // @Autowired..
이전에 싱글톤 패턴에 대해 알아보고 사용하는 이유와 문제점을 살펴보았다. 싱글톤을 사용하는 이유보다 문제점이 훨씬 많아 안티패턴이라고도 불리는 싱글톤 패턴을 스프링을 이용하면 문제점을 보완하면서 장점을 누릴 수 있다고 한다. 스프링이 어떻게 싱글톤 패턴을 이용하는지 한번 알아보자. 스프링 컨테이너 Spring의 컨테이너는 이전 포스팅에서 언급한 싱글톤 패턴의 문제점을 보완하고, 싱글톤 패턴을 코드로 일일이 구현하지 않고 객체의 인스턴스를 1개만 생성해서 관리한다. 즉, 싱글톤으로 관리할 수 있게 해 준다. Spring은 특정 클래스에 @Bean을 적용하면 스프링 컨테이너는 해당 클래스에 대해 1개의 인스턴스를 만들어서 관리한다. 이 인스턴스는 클라이언트의 요청이 올 때마다 생성되는 것이 아니라 최초에 만..
싱글톤(Singleton) 패턴이란? 싱글톤 패턴은 특정 클래스의 인스턴스를 1개만 생성되는 것을 보장하는 디자인 패턴이다. 즉 생성자를 통해서 여러 번 호출이 되더라도 인스턴스를 새로 생성하지 않고 최초 호출 시에 만들어두었던 인스턴스를 재활용하는 패턴이다. 싱글톤 패턴을 사용하는 이유 싱글톤 패턴을 사용함으로써 얻을 수 있는 이점 중 하나는 메모리 낭비를 방지할 수 있다. 사용자가 1초에 10번 똑같은 요청을 보내면 요청을 처리하기 위한 똑같은 객체를 1초에 10번 생성하고 소멸되는 메모리 낭비 문제가 발생하게 된다. 하지만 싱글톤 패턴을 사용하면 최초 한번 new로 객체를 생성하고 해당 객체를 이후에도 사용하도록 공유(static)하면 메모리 낭비 문제를 방지할 수 있다. 순수 Java코드로 Sin..
저번 포스팅에 이이서 이번에는 지연로딩과 OSIV에 대해서 더 구체적으로 알아보려고 한다. OSIV를 알기 위해 영속성 컨텍스트에 대해 공부한 글이다. https://seungjjun.tistory.com/232 [JPA] 영속성 컨텍스트란? (엔티티 생명주기) 오늘은 이전 프로젝트 진행할 때 실시간 알림 구현중 OSIV 때문에 connection이 반환되지 않아 문제가 발생했던 적이 있었는데 해당 문제가 왜 발생했는지 알아보기 위해 2번의 포스팅(영속성 컨텍 seungjjun.tistory.com OSIV를 켜두면 뷰단에서도 지연로딩을 사용할 수 있다고 배웠는데 지연로딩이 무엇인지 알아보자. 지연로딩에 대해 공부하기 이전에 프록시(Proxy)라는 개념을 알아야 한다. 프록시란? 프록시는 실제 클래스를 ..