Dev/Spring

Dev/Spring

[Spring] 관심사를 분리하는 이유

특정한 관심사에 따라 기능을 나누고, 각 기능을 독립적으로 개발한 뒤 이를 조합하는 방식으로 복잡한 소프트웨어를 구성해 보자는 아이디어를 관심사의 분리(Separation of concerns, SoC)라고 한다. 관심사를 분리하여 코드를 작성하게 되면, 독립된 특정 기능에 집중할 수 있기 때문에 코드를 파악하는데 수월하며 특정 기능을 변경하거나 추가할 때도 그 부분만 교체하면 되기 때문에 훨씬 간단하게 문제를 해결할 수 있다.  정리모듈이 하나의 목적만 가지도록 만들기 위함이다. 다양한 기능을 가지지 않고 하나의 기능만 가짐으로써 수정될 이유도 한 가지만 가진다. 하드웨어보다 유연하게 수정할 수 있는 소프트웨어는 변화에 유연하게 대응해야 한다. 그러나 모듈마다 여러 기능을 가지고 있으면 수정의 복잡도가..

Dev/Spring

[Junit] id to load is required for loading 해결 방법

상품 주문 관련 테스트 코드를 돌리고 있는데 에러가 발생했다. id to load is required for loading; nested exception is java.lang.IllegalArgumentException: id to load is required for loading org.springframework.dao.InvalidDataAccessApiUsageException: id to load is required for loading; nested exception is java.lang.IllegalArgumentException 에러 문구를 읽어보니 id값에 문제가 있는 것 같았다. 에러가 발생한 위치를 확인해 보니 엔티티 매니저에서 아이템을 꺼내올 때 발생하는 문제였다. 에러 ..

Dev/Spring

[Spring] Entity 설계시 주의할 점

인프런 김영한 선생님 를 보고 정리한 내용입니다. 📍 엔티티에는 가급적 Setter를 사용하지 말자 Setter를 열어두면 변경 포인트가 너무 많아져 유지보수가 어렵다. 📍 모든 연관관계는 지연로딩으로 설정하자 즉시로딩(EAGER)은 예측이 어렵고 어떤 SQL이 실행될지 추적하기 어렵다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생한다. (뜬금없는 의견이지만 N+1보단 1+N이 맞는 것 같다.) 실무에서 모든 연관관계는 지연로딩(LAZY)으로 설정해야 한다. 연관된 엔티티를 함께 조회해야 한다면, fetch join 또는 엔티티 그래프 기능을 사용한다. OneToOne, ManyToOne 관계는 디폴트값이 즉시로딩이므로 직접 지연로딩으로 설정해야 한다. ..

Dev/Spring

[H2] zsh: permission denied: ./h2.sh

H2 DB를 설치하고 실행하는 과정에서 발생한 문제다. 권한 문제여서 chmod로 쉽게 해결할 수 있었다. chmod 755 h2.sh// 먼저 권한을 준 뒤에 ./h2.sh// 다시 재실행 하면 된다.

Dev/Spring

[Spring] BeanFactory와 ApplicationContext 차이점

인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다. BeanFactory 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할을 담당 getBean()을 제공 ApplicationContext BeanFactory의 기능을 모두 상속받아서 제공 다른 인터페이스를 상속받아 구현하여 부가 기능도 함께 제공 차이점 1. 부가 기능 ApplicationContext는 BeanFactory가 갖고 있지 않은 다른 인터페이스를 구현한다. 메시지 소스를 활용한 국제화 기능 : 실행되는 나라에 맞춰 언어 변경 환경 변수 : 로컬, 개발, 운영 등을 구분해서 처리 애플리케이션 이벤트 : 이벤트 발행 및 구독 모델 지원 편리한 리소스 조회 : 파일, 클래스패스, 외부 등에서 리소스 조..

Dev/Spring

[Spring] 생성자 주입을 선택해야 하는 이유

인프런 김영한 선생님 스프링 핵심 원리 강의를 듣고 정리한 내용입니다. 다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } 생성자를 통해 의존관계를 주입하는 방법 생성자이기 때문에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에서 사용 생성자가 1개 있을 경우 @Autowired를 생략해도 자동 주입된다. (..

Dev/Spring

[Spring] @ComponentScan

인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다. 컴포넌트 스캔이란 설정 정보(AppConfig)가 없어도 자동으로 스프링 빈을 등록하는 기능 의존관계도 자동으로 주입하는 @Autowired 기능도 제공 1. @ComponentScan @ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다. 이때 스프링 빈의 기본 이름은 클래스명을 사용하되, 맨 앞글자만 소문자로 바꿔준다. 이렇게 클래스 위에 @Component를 붙여주면 해당 클래스는 스프링 빈으로 등록된다. Q. 그러면 기존에 의존관계 주입을 해주던 코드가 없어졌는데 어떻게 주입하나요? A. @Autowired를 사용하면 됩니다. 2. @Autowired 지정하여 의존관계 자동 주입 생성자에..

Dev/Spring

[Spring] 싱글톤 패턴과 싱글톤 컨테이너

인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다. 웹 애플리케이션과 싱글톤 스프링이 없는 순수한 DI 컨테이너는 여러 고객이 동시에 요청을 할 경우 동시에 객체가 생성된다. 하지만 이것은 기업이 서비스를 제공하는 데 있어서 큰 메모리 낭비를 불러일으킨다. ex) 고객 트래픽이 초당 100이 나오면 초당 100개의 객체가 생성되고 소멸된다. 이러한 문제를 해결하기 위해서는 해당 객체가 딱 1개만 생성되고 공유하도록 설계하면 된다. 이것이 싱글톤 패턴이다. 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 private 생성자를 이용하여 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. (이렇게 구현하면 new 키워드를 사용할 수 없다.) 싱글톤 패..

yo0oni
'Dev/Spring' 카테고리의 글 목록