728x90
반응형

Spring 7

[Spring] 스프링 빈이란? 스프링 빈 정리 (등록방식, 스코프)

스프링을 사용해봤다면 무조건 들어봤을 빈에 대해 잘 모르고 지나치는 경우가 많다. 따라서 이번 기회에 정리를 해보았다. 스프링 빈이란? 스프링 빈은 스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다. 스프링 컨테이너 스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다. IoC와 DI의 원리가 스프링 컨테이너에 적용된다. 스프링 컨테이너를 사용하면 객체 생성 소멸을 대신해 줌 → 제어 흐름을 외부에서 관리하게 된다. 또한, 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 준다. 스프링 빈 등록 방식 Component Scan 컴포넌트 스캔은 @Component를 명시하여 빈을 추가하는 방법이다. 클래스 위..

Tech/Spring 2023.08.01

[Spring JPA] 준영속 상태, 더티 체킹, 변경감지, 병합

준영속 상태 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 것 영속성 컨텍스트가 제공하는 기능 사용 불가 em.detach(entity) 특정 엔티티만 준영속 상태로 전환 1차 캐시에서 빠진다라고 생각하면 쉬움 em.clear() 영속성 컨텍스트 완전히 초기화 테스트 케이스 작성시 사용 em.close() 영속성 컨텍스트를 종료 준영속 엔티티 영속성 컨텍스트가 더는 관리하지 않는 엔티티(DB에 한번 갔다 와서 식별자가 존재) 변경 감지, 병합을 통해 준영속 엔티티를 수정할 수 있다. 변경 감지 기능 @Transactional void update(Item itemParam) { Item findItem = em.find(Item.class, itemParam.getId()); findItem.setPr..

Tech/Spring 2023.04.17

[Spring] 스프링 주요 어노테이션, Update(수정) 시 save() 메서드를 호출하는 것이 좋을까?

어노테이션 @Repository : 스프링 빈으로 등록되도록 해주고, JPA Exception을 Spring 기반 Exception으로 변환 @Service : 비즈니스 로직을 처리하는 객체를 스프링 빈으로 등록 @Transactional : 트랜잭션을 보내고, 트랜잭션의 성질을 기준으로 commit할 지, rollback할 지 판단해줍니다. readOnly = true : 데이터 변경이 없는 메서드에 사용 영속성 context를 flush하지 않으므로 약간의 성능 향상을 기대할 수 있음 기본값은 false이므로 메서드의 용도에 맞게 annotation을 정해야 함 @RequiredArgsConstructor : Spring boot에서 final 처리된 필드를 파라미터로 갖는 생성자를 만들어줌 따라서 ..

Tech/Spring 2023.04.10

[Spring Data JPA] 스프링 테이블, 컬럼명 생성 전략

이 포스트는 김영한님의 스프링부트와 JPA 활용1 강의 내용 기반으로 요약하였다. 테이블, 컬럼명 생성 전략 스프링 부트에서 하이버네이트 기본 매핑 전략을 변경해서 실제 테이블 필드명은 다름 하이버네이트 기존 구현: 엔티티의 필드명을 그대로 테이블의 컬럼명으로 사용 ( SpringPhysicalNamingStrategy ) 스프링 부트 신규 설정 (엔티티(필드) 테이블(컬럼)) 자동으로 변환됨. 카멜 케이스 → 언더스코어(memberPoint → member_point) .(점) → _(언더스코어) 대문자 → 소문자 적용 2 단계 논리명 생성 명시적으로 컬럼, 테이블명을 직접 적지 않으면 ImplicitNamingStrategy 사용 spring.jpa.hibernate.naming.implicit-st..

Tech/Spring 2023.03.22

[Spring Data JPA] 스프링 Entity 설계 시 주의사항

이 포스트는 김영한님의 스프링부트와 JPA 활용1 강의 내용 기반으로 요약하였다. 엔티티 설계시 주의점 1. 외래 키가 있는 곳을 연관관계의 주인으로 정할 것 연관관계의 주인은 단순히 외래 키를 누가 관리하냐의 문제 비즈니스상 우위에 있다고 주인으로 정하면 안됨 ex) 자동차와 바퀴가 있으면, 일대다 관계에서 항상 다쪽에 외래 키가 있으므로 외래 키가 있는 바퀴를 연관관계의 주인으로 정함 물론 자동차를 연관관계의 주인으로 정하는 것이 불가능 한 것은 아니지만, 자동차를 연관관계의 주인으로 정하면 자동차가 관리하지 않는 바퀴 테이블의 외래 키 값이 업데이트 되므로 관리와 유지보수가 어렵고, 추가적으로 별도의 업데이트 쿼리가 발생하는 성능 문제도 있다. 2. 엔티티에는 가급적 Setter 사용하지 말 것 S..

Tech/Spring 2023.03.21

[스프링 핵심 원리] 스프링 컨테이너 기초

스프링 컨테이너 아래 코드를 살펴보자. ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); // AnnotationConfigApplicationContext는 ApplicationContext 인터페이스의 구현체 위 코드에서 ApplicationContext 를 스프링 컨테이너라고 한다. (ApplicationContext는 인터페이스) 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 위 방식처럼 애노테이션 기반 자바 설정 클래스로 만들 수 있다. 기존의 Appconfig를 사용해서 직접 객체를 생성하고 DI → 스프링 컨테이너를 통해 사용 스프링 컨테이너는 @Configurat..

Tech/Spring 2022.01.05

[스프링 핵심 원리] 객체 지향 설계의 5가지 원칙(SOLID), 스프링

- SOLID 5원칙 1. SRP (Single responsibility principle) : 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. (클 수도 있고, 작을 수도 있다.) 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른 것이다. -> 특정 목적의 클래스는 그 목적 외에 다른 기능을 가지면 안된다는 뜻! 2. ★ OCP (Open/closed principle) : 개방-폐쇄 원칙 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현 다형성(오버라이딩, 오버로딩 등)을 활용해보자 다형성 (Polymorphism) : 하나의 객체가 여러 가..

Tech/Spring 2021.12.22
728x90
반응형