스프링부트 7

[스프링] 빈 후처리기

빈 후처리기란? 빈 저장소에 등록할 목적으로 생성한 객체를 빈 저장소에 등록하기 전에 조작을 하고 싶다면 빈 후처리기를 사용한다. 이런식으로 다른 빈 으로 바꿔칠 수도 있다. 생성 : 스프링 빈 대상이 되는 객체를 생성 전달 : 생성된 객체를 빈 저장소에 등록하기 직전, 빈 후처리기로 전달 후처리 작업 : 전달된 스프링 빈 객체를 조작한다. 등록 : 후처리기는 객체를 조작 후 조작된 객체를 반환하는데, 이 반환된 객체가 빈으로 등록, 스프링 컨테이너로 등록된다. 이러한 빈 후처리기를 BeanPostProcessor 인터페이스를 구현하여서 스프링 빈으로 등록하여 사용하는 방법도 있으나 너무 많은 설정을 해야하고,컴포넌트 스캔을 대상으로 하는 경우 사용이 불가능하다. 따라서 스프링이 제공하는 빈 후처리기를 ..

스프링부트 2022.09.19

AppConfig를 언제 써야하는가?

김영한 님의 강의들을 보면 항상 AppConfig를 따로 생성하는 것을 볼 수 있다. 근데 보통 토이 프로젝트에서는 그냥 어노테이션을 사용해서 주입해서 AppConfig를 따로 본 적은 없는 것 같다. AppConfig는 언제 사용할까? 예전에 봤던 강의 자료에 답이 있었다. 일단 편리한 자동 기능(컴포넌트 스캔)을 먼저 사용한다! 애플리케이션은 크게 기술로직과 업무 로직으로 나눌 수 있다. 기술 로직 : AOP,데이터베이스 연결, 공통 로그 처리 등등 업무를 지원하기 위한 서브 기술 업무 로직 : 컨트롤러,비즈니스 로직이 있는 서비스, 데이터 계층의 로직을 처리하는 메인 기술 업무 로직은 숫자도 많고 한번 개발하면 유사한 패턴이 있어서 이런 경우 자동 기능을 사용하는 것이 좋다, 하지만 기술 로직은 업..

스프링부트 2022.09.07

[스프링] 전략 패턴

지난번의 게시물 중 템플릿 메소드 패턴은 상속을 사용해서 좋은 설계가 아니었다. 2022.08.09 - [스프링 부트] - [스프링] 템플릿 메서드 패턴(+추상화) [스프링] 템플릿 메서드 패턴(+추상화) 템플릿 메서드 패턴을 알기 위해 다음과 같은 순서로 정리해보았다. 1. 추상화 2. 템플릿 메서드 패턴 1. 추상화(abstract) 클래스가 추상적이다? ➔ 구체적이지 않은 클래스 추상 클래스는 항상 구 sienna1022.tistory.com 전략 패턴은 이러한 단점을 보완한 패턴이라고 생각하면 된다. 한마디로 상속이 아니라 위임으로 문제를 해결하는 것이다. GOF 전략 패턴 디자인 의도는 다음과 같다. 알고리즘 제품군을 정의하고 각각을 캡슐화하여 상호 교환 가능하게 만들자. 전략을 사용하면 알고리..

스프링부트 2022.08.19

[스프링]ThreadLocal

스프링 부트 싱글톤 객체를 사용하다 보면 동시성 문제가 발생한다. 하나의 값에 동시에 접근을 하게 된다면 꼬이게 된다. 이때 스레드 로컬을 사용해 해결을 할 수 있다 1. 동시성 문제 동시성 문제는 이러한 멀티 스레드 환경에서 발생한다. 이렇게 동시에 여러 쓰레드가 동일한 자원에 접근해서 수정을 하고 조회를 한다면? A가 먼저 A의 수정 name = userA A의 쉬는 동안 B의 수정 = name = userB A의 조회 name = userB? B의 조회 name = userB A는 userA값을 기대했으나 B가 A가 쉬는 동안에 값을 수정해서 원하는 값을 받지 못하였다. (DB에서의 acid와 비슷한 상황인듯) 바꿔 이야기하면 멀티 스레드 환경에서 단순 조회의 형태는 동시성 문제 발견 X , 수정일..

스프링부트 2022.08.09

[스프링부트] 서블릿 Servlet

에러 같은데 간간히 보이는 서블릿?이란게 있어서 뭔지 모르겠어서 작성한다. 간단히 말해 서블릿은 그냥 우리는 데이터베이스에 저장을 하고 싶을 뿐인데 .. 서버는 클라이언트가 요청을 하는 순간 HTTP 메세지를 보고 다 풀어헤쳐야 함. 파싱을 해서 Post 인지,,,뭔지,,, Header 생성하고 ... 응답메세지도 만들어줘야하고 어쩌고 저쩌고를 매번 해야한다고? 그건 너무 비효율 적이니깐 WAS인 서블릿이 그걸 자동으로 해줌! 한마디로 개발자가 HTTP 스펙을 편리하게 사용할 수 있게끔 해준다. 우리는 이제 그냥 Response 객체 안에 원하는걸 넣어주면 된다. HTTP요청 시 request response 객체를 새로 만들어서 서블릿 객체 호출한다. 개발자는 Request객체에서 HTTP 요청 정보를..

스프링부트 2022.07.22

[스프링부트] 개발하다가 알게된 Entity

Entity - DB의 테이블에 존재하는 Column들을 필드로 가지는 객체를 말한다. - Entity는 DB의 테이블과 1:1 대응 - JPA를 사용할 때 Setter를 만드는 것을 피해라. Setter를 무분별하게 사용하게 되면, Entity의 인스턴스 값들이 언제 어디서 변하는지 명확하게 알기 힘듬. 따라서 Setter대신 다른 방법으로 필드에 값을 넣어 주는 것이 좋다. 👀Builder패턴을 사용 하는 것이 좋다.👀 멤버 변수가 많아지더라도 어떤 값을 어떤 필드에 넣는지 코드를 통해 확인할 수 있고 필요한 값만 집어 넣는 것이 가능해짐. Entity에서 사용하는 어노테이션 @EntityListners(AutditingEntityListenr.class) : 공통적으로 가지고 있는 필드나 컬럼들을 ..

스프링부트 2022.07.16

[스프링부트] 컴포넌트 스캔

인프런 - 김영한 님의 스프링 기본 편을 보고 강의 노트를 정리한 글입니다. 컴포넌트 스캔 지금까지 스프링 빈을 등록할 때 @Bean 이런 식으로 등록을 하게 된다. → 불편, 반복됨 스프링 제공 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔을 제공 의존관계 자동 주입이라는 AutoWired 기능도 제공한다. package practice2.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.FilterType; @Configura..

스프링부트 2022.07.06
728x90