728x90
반응형

Tech/Spring 20

[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

[Spring] jasypt로 암호화하기, docker, ec2 및 CI/CD 연동하기

스프링 세팅 시 민감한 정보들이 많다. (rds db 주소 등) jasypt로 간편하게 암호화 할 수 있다!! 1. build.gradle 설정 아래 부분을 추가해준다. testImplementation 'org.springframework.boot:spring-boot-starter-test' implementation group: 'com.github.ulisesbocchio', name: 'jasypt-spring-boot-starter', version: '3.0.4' 2. Jasypt config 설정 필자는 JasyptConfig로 네이밍해 설정하였다. 여기서 중요한 부분은 encryptKey 은 노출하면 안된다! package com.mews.mews_backend.global.config;..

Tech/Spring 2023.01.19

[스프링 핵심 원리] 웹 스코프

지금까지 싱글톤과 프로토타입 스코프에 대해 알아보았는데, 웹 스코프에 대해 알아보자. 싱글톤 : 스프링 컨테이너의 시작과 끝까지 프로토타입 : 생성과 의존관계 주입, 초기화까지만 웹 스코프는 웹 환경에서만 동작한다. 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. (종료 메서드가 호출됨) 웹 스코프의 종류에 대해 알아보자. request : HTTP 요청 하나가 들어오고 나갈 때까지 유지, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성, 관리 session : HTTP Session과 동일한 생명주기 가짐 application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주기를 가지는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프

Tech/Spring 2022.02.06

[스프링 핵심 원리] 프로토타입 스코프

싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다. 반면 프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다. 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리한다. 클라이언트에 빈을 반환하고, 이후 스프링 컨테이너는 프로토타입 빈을 관리하지 않는다. 따라서 프로토타입 빈을 관리할 책임은 빈을 받은 클라이언트에 있다. 그래서 @PreDestory 같은 종료 메서드가 호출되지 않는다. 프로토타입 스코프 빈을 조회하는 prototypeBeanFind()를 실행하면 아래와 같은 결과가 나온다. @Scope("prototype") find prototypeBean1 PrototypeBean..

Tech/Spring 2022.02.02

[스프링 핵심 원리] 자동, 수동의 올바른 실무 운영 기준

- 편리한 자동 기능을 기본으로 사용하자! 스프링이 나온 후 점점 자동을 선호하는 추세다. @Component 뿐만 아니라 @Controller, @Service, @Repository 처럼 계층에 맞춰 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. (최근 스프링 부트는 컴포넌트 스캔을 기본으로 사용하고, 빈들도 조건에 맞으면 자동으로 등록하도록 설계되어있음) 자동 빈 등록을 사용해도 OCP, DIP를 지킬 수 있으므로 사용하는게 좋다. - 그럼 수동 빈 등록은 언제 사용하지? 애플리케이션은 크게 업무 로직과 기술 지원 로직으로 나눌 수 있다. 업무 로직 빈 : 웹을 지원하는 컨트롤러, 핵심 비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 리포지토리 등 / 보통 비즈니스 ..

Tech/Spring 2022.01.22
728x90
반응형