본문 바로가기

개발/Spring14

[스프링] 스프링 핵심원리 - 싱글톤 컨테이너 싱글톤 패턴 웹 애플리케이션은 여러 사용자가 요청을 하기 때문에, 이 요청 시 마다 새로운 객체를 생성해서 주게 되면 메모리 낭비가 심하다. 일반적인 DI 컨테이너를 사용하면 항상 새로운 객체를 주게 된다. 이를 싱글톤 패턴을 통해 하나의 동일한 객체를 주게끔 보장할 수 있다. 하지만, 이 싱글톤 패턴을 사용하면 문제점이 있다. 싱글톤 패턴을 구현하는 코드 자체가 많이 들어감 클라이언트가 구체 클래스에 의존하게 됨 → DIP를 위반하고, OCP를 위반할 가능성 높음 내부 속성을 변경하거나 초기화하기 어렵다 private 생성자로 자식 클래스를 만들기 어렵다 싱글톤 컨테이너 싱글톤 컨테이너는 싱글톤 패턴의 문제점을 해결하면서, 객체 인스턴스를 싱글톤으로 관리한다. 스프링 컨테이너가 바로 싱글톤 컨테이너 역.. 2021. 12. 6.
[스프링] 스프링 핵심원리 - 스프링 컨테이너와 빈 Ioc, DI, 컨테이너, 빈 IoC (Inversion of Control) 프로그램의 제어 흐름을 직접 제어하는 거이 아니라 외부에서 관리하는 것을 제어의 역전(IoC)라 한다. 프레임워크는 내가 작성한 코드를 제어하고, 대신 실행한다. DI (Dependency Injection) 한 객체가 추상화에만 의존할 수 있도록 어떤 구현체에 의존할 지는 AppConfig 같은 외부 클래스에서 결정하고 의존관계를 주입함 의존 관계는 정적인 클래스 의존 관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존 관계를 구분해서 생각해야함 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 실제 의존관계가 연결 되는 것을 의존관계 주입이라 한다. 의존관계 주입을 사용하면 정적 의존 관계를 변경하지 않고, .. 2021. 12. 5.
[JPA] 변경감지(dirty checking)와 병합(merge) 변경 감지와 병합 변경 감지 - 더티체킹 (엔티티의 값만 바꿔도 JPA가 알아서 update 쿼리) @Transactional 안에 this.setStatus(oderStatus.CANCEL);만 해도 자동으로 update 해줌 영속성 엔티티들에 적영됨. findById로 찾은 엔티티는 영속성 컨텍스트 Book book = itemRepository.findById(param.getId()); 디비에서 참조했기 때문 준영속 엔티티 영속성 컨테스트가 더이상 관리하지 않는 엔티티 엔티티 속성을 바꿔도 변경 감지를 통한 업데이트가 되지 않음. 엔티티를 그냥 Id로 접근한경우 book.setId(form.getId()) 병합 em.merge 디비에서 id 조회를 하고 필드를 모두 바꿔치기함. 준영속 상태를 영속.. 2021. 9. 6.
[JPA] 도메인 및 웹 계층 개발 회원 도메인 개발 엔티티매니저 createQuery 엔티티 객체를 대상으로 jpql 쿼리. 트랜잭션 기본적으로 데이터 변경은 트랜잭션 안에서 일어나야한다. - 서비스에서 메소드 트랜잭셔널을 붙이자 @Transactional javax와 spring중 spring을 import 하자, 기능이 더 많음 @Transactional(readOnly - true) 조회 기능에서 리드온니를 넣어주면 성능 증가. 기본적으로 서비스 클래스를 리드온리로 하고, 수정이 필요한 것에 @Transactional을 따로 붙임 기본적인 @Transactional은 readOnly = false 의존성 주입 @Autowired보단 생성자를 이용하는 방식 생성자만 있어도 스프링이 긱본적으로 @Autowired를 붙여줌 @Requir.. 2021. 9. 6.