ORM과 SQL Mapper - Hibernate, JPA
·
Back-end
ORM과 SQL Mapper - Hibernate, JPAORMORM이란?객체와 RDB 테이블을 매핑시켜 객체와 관계형 모델의 불일치 문제를 해결하고 RDB 테이블을 객체 지향적으로 사용하게 해주는 기술객체 필드 테이블 데이터 객체와 DB가 연결되어 있기 때문에 개발자가 직접 쿼리를 작성하지 않아도 표준 인터페이스를 기반으로 처리를 할 수 있다.ORM 장단점장점쿼리 작성 없이 메서드를 통해 객체 중심으로 DB를 조작할 수 있다.ORM이 DB 스키마 변경을 자동으로 처리해 주기 때문에 개발자는 Java 코드에 더 집중할 수 있다.단점세밀한 제어가 힘들기 때문에 복잡한 쿼리는 직접 QueryDSL을 통해 작성해야 한다.성능 문제가 발생할 수 있다.JPA N+1 문제 등JPA N+1 문제게시글을 조회할 때..
[스프링 핵심 원리] 빈 생명주기 콜백
·
Back-end/Spring
💡 빈 생명주기 콜백 시작데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 알아보자.외부 네트워크에 미리 연결하는 객체 생성외부 네트워크에 미리 연결하는 객체를 하나 생성한다는 가정하에 테스트 코드를 작성해보자.실제로 생성하는 것은 아니고 가정만 하는 것이다.외부 url에 연결하는 클라이언트 클래스public class NetworkClient { private String url; public NetworkClient() { System.out.println("..
[스프링 핵심 원리] 의존 관계 자동 주입
·
Back-end/Spring
💡 의존 관계 주입 방법의존관계 주입은 크게 4가지 방법이 있다.생성자 주입수정자 주입(setter 주입)필드 주입일반 메서드 주입보통 생성자 주입을 사용한다.이제 각 주입에 대해 살펴보자.생성자 주입생성자 호출 시점에 딱 1번만 호출되는 것이 보장되는 방식불변, 필수 의존관계에 사용한다.final 필드여야만 함(불변)@Componentpublic class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberReposi..
[스프링 핵심 원리] 컴포넌트 스캔
·
Back-end/Spring
💡 컴포넌트 스캔과 의존 관계 자동 주입이전 글 - 싱글톤 패턴과 싱글톤 컨테이너이전 글에서는 AppConfig 클래스에 @Bean을 작성해서 스프링 빈으로 등록했다.등록해야 할 빈이 몇 개 안된다면 상관없지만 빈을 수십, 수백개를 등록해야 한다면 설정 정보가 너무 커지고 누락 가능성이 있어서 비효율적이다.따라서 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan이란 기능이 있고 의존관계 주입도 @Autowired라는 기능이 있다.@ComponentScan, @Component, @Autowired@ComponentScan을 설정 정보(AppConfig.java)에 붙이면 @Component가 붙은 클래스를 스캔해서 자동으로 스프링 빈으로 등록한다.@ComponentScan@C..
[스프링 기본 원리] 싱글톤 컨테이너
·
Back-end/Spring
💡 싱글톤 패턴이란?시스템 전체에서 동일한 객체를 공유하고 싶을 때 사용하는 방식으로써 한 클래스의 객체를 하나만 생성하도록 제한하는 방식이다.싱글톤 패턴을 사용하는 이유웹 어플리케이션은 보통 여러 명의 클라이언트가 동시에 요청을 한다.여러 요청이 동시에 들어올 경우 아래 그림과 같이 요청이 들어 오는 만큼 객체를 생성하고 요청이 끝나면 소멸한다.이 방식은 메모리 낭비가 너무 심해져서 성능에 문제가 생긴다.이러한 문제를 해결하기 위한 방식이 싱글톤 패턴이다.싱글톤 패턴을 적용한 어플리케이션은 아래 그림과 같이 여러 요청이 들어와도 하나의 객체만을 사용하게 된다.싱글톤 패턴의 문제점 싱글톤 구현static 영역에 인스턴스를 미리 하나 생성하여 올려두고 getInstance() 요청이 들어오면 static..
[스프링 핵심 원리] 스프링 컨테이너와 스프링 빈
·
Back-end/Spring
💡 스프링 컨테이너와 스프링 빈ApplicationContext는 스프링 컨테이너고 인터페이스이다.new AnnotationConfigApplicationContext(AppConfig.class);는 ApplicationContext 인터페이스 구현체이다.AppConfig는 스프링 컨테이너의 구성 정보를 설정하는 설정 파일이다.스프링 컨테이너 생성 과정구성 정보(AppConfig)를 참고하여 스프링 컨테이너 내에 있는 스프링 빈 저장소에 빈을 등록한다.@Bean이 붙은 메소드명이 빈 이름, 리턴하는 객체의 참조값이 빈 객체로 등록된다.스프링 컨테이너는 설정 정보(AppConfig.class)를 참고해서 의존관계를 주입(DI)을 한다.스프링 빈 조회스프링 빈은 스프링 내부에서 사용하는 빈과 개발자가 정..