스프링의 @Configuration과 싱글톤의 관계
2022. 1. 14. 08:29
Spring
스프링은 기본적으로 싱글톤 객체를 생성하고 관리 해준다. 물론 싱글톤이 아니도록 설정할 수도 있다. 하지만 거의 99%는 싱글톤으로 사용을 한다. 그렇다면 스프링은 어떻게 싱글톤을 보장해 주는 것일까? 지금부터 알아 보도록 하자. 자바 코드가 객체 생성을 한 번만 하는게 이상하다. 아래와 같은 빈을 등록한다고 하자. @Configuration public class AppConfig { @Bean public MemberService memberService() { System.out.println("call AppConfig.memberService"); return new MemberServiceImpl(memberRepository()); } @Bean public MemberRepository m..
스프링의 BeanDefinition
2022. 1. 14. 08:28
Spring
BeanDefinition이란? 단어 그대로 스프링 빈의 설정 메타 정보이다. 각 @Bean, 당 각 하나씩 메타 정보가 생성된다. 스프링 컨테이너는 이 메타 정보를 기반으로 스프링 빈을 생성한다. 어떻게 다양한 설정 방식을 지원 할까? 해당 글에서 빈 설정 방식을 자바 코드, xml 등 방식을 지원하는데 이게 가능한 이유가 BeanDefinition이라는 추상화가 있기 때문이다. BeanDefinition은 역할(interface)가 되는 것이고, AppConfig.class, appConfig.xml, appConfig.xxx 등과 같은 것들이 구현이 되는 것이다. 결국 스프링 컨테이너는 BeanDefinition만 바라 보기 때문에 가능한 것이다. 구조를 그림으로 보면 아래와 같다. 그림 출처 김영..
스프링의 자바 코드와 XML 설정 방식
2022. 1. 14. 08:25
Spring
해당 글을 보면 AppConfig라는 자바 코드로 빈 등록을 해서 사용을 했다. 하지만 스프링은 자바 코드 뿐 아니라 xml 방식을 지원하고 있고, 커스텀 방식도 지원하고 있다. 간단하게 알아 보자. 아래 그림은 ApplicationContext의 구현체들이다. AnnotationConfigApplicationContext는 AppConfig라는 자바 코드에서 애노테이션 기반으로 빈을 등록할 때 사용 했던 구현체이다. 이번에 알아볼 내용은 xml방식으로 빈을 등록하는 방법이다. 그림 출처 김영한의 스프링 핵심 원리 - 기본편 xml 방식으로 빈 등록하기 기존 자바 코드 설정 방식 살펴 보기 아래와 같이 자바 코드로 빈을 등록한 코드이다. AnnotationConfigApplicationContext(Ap..
데이터 베이스 스키마란?
2022. 1. 13. 10:10
데이터베이스
스키마란? 연관된 표(객체)의 그룹핑 디렉토리 여기서 객체라는 것을 단순하게 테이블(표)로만 표현하겠다. 데이터 베이스란 데이터를 저장하기 위해 존재하는 것이다. 이를 위해 테이블, 뷰 등등 여러 객체들이 있는데 이런 정보들을 연관된 것들끼리 그룹핑한 디렉토리 같은 것이다. 사용자와 스키마의 관계 위에서 연관된 것들끼리 그룹핑한 것을 스키마라고 하였다. 그 연관된 것들이 바로 사용자이다. 예를 들어 데이터베이스에 축구 테이블, 농구 테이블이 있는데 A사용자에게는 농구 테이블을 제공하고 싶지 않다. 또는 농구 테이블에서 조회만 되게 하고 싶다. 하지만 B사용자에게는 저장도 가능하게 제공하고 싶다. 라고 했을 때 A스키마, B스키마가 생성되는 것이다. 여기서 그룹핑이란 것은 아래 2개가 되는 것이다. 농구 ..
스프링의 자바 코드와 XML 설정 방식
2022. 1. 10. 22:03
Spring
해당 글을 보면 AppConfig라는 자바 코드로 빈 등록을 해서 사용을 했다. 하지만 스프링은 자바 코드 뿐 아니라 xml 방식을 지원하고 있고, 커스텀 방식도 지원하고 있다. 간단하게 알아 보자. 아래 그림은 ApplicationContext의 구현체들이다. AnnotationConfigApplicationContext는 AppConfig라는 자바 코드에서 애노테이션 기반으로 빈을 등록할 때 사용 했던 구현체이다. 이번에 알아볼 내용은 xml방식으로 빈을 등록하는 방법이다. 그림 출처 김영한의 스프링 핵심 원리 - 기본편 xml 방식으로 빈 등록하기 기존 자바 코드 설정 방식 살펴 보기 아래와 같이 자바 코드로 빈을 등록한 코드이다. AnnotationConfigApplicationContext(Ap..
스프링의 BeanFactory와 ApplicationContext의 차이
2022. 1. 10. 21:59
Spring
해당 글에서 ApplicationContext는 DI 컨테이너라고 했다. 그렇다면 BeanFactory는 무엇을까? 스프링의 컨테이너의 최상위 인터페이스 보통은 ApplicationContext에서 빈을 조회하는 코드를 작성할 것이다. 그게 가능한 이유는 BeanFactory를 상속 받았기 때문이다. 즉, getBean()과 같은 것은 BeanFactory가 제공해주는 기능인 것이다. 결과 적으로 빈을 조회하고 관리하는 역할이 BeanFactory인 것이다. 그럼 ApplicationContext는 왜 사용하지? 그렇다. 그냥 BeanFactory를 사용하면 되지 왜 ApplicationContext를 사용할까? 복잡하게.. 이유는 부가 기능이 필요하기 때문이다. ApplicationContext의 구조..
스프링의 ApplicationConetxt란??
2022. 1. 10. 21:56
Spring
ApplicationContext란 서론 스프링은 객체지향의 장점을 살리기 위해 EJB시절 로드 존슨이 취미로 만들기 시작하나 3만 줄의 예제 코드부터 시작 되었다. 객체 지향의 장점이란 변화에 대응하기 쉬운 코드를 말한다. 하지만 EJB는 객체지향과는 거리가 멀고 너무 변경에 어려웠다고 하며, 이때 나온 말이 POJO라고 한다. 순수 자바로 돌아가서 객체지향적 개발을 하자는 취지의 용어이다. 본론 ApplicationContext는 스프링의 DI 컨테이너이다. 변경에 용이하기 위해 DI 컨테이너에서 의존 객체를 주입 해주기 위해 여러 객체들을 관리하는 상자라고 생각하면 된다. 인터페이스이다. 순수 자바로 DI 컨테이너와 스프링의 DI 컨테이너 아래는 순수 자바로 DI 컨테이너를 만든 코드이다. 간단한 ..
3단계 사다리
2022. 1. 9. 20:07
TDD 클린코드 java 10기 교육 과정
3단계 사다리 음.. 사다리 생성 미션가지 하고 중단 되었던 미션이다. 정말 어려웠던 미션이다. 그래서 예전 코드를 보고 리팩토링을 해보려다 포비님의 코드를 보고 충격을 먹고 참고하며 개발했다. 정말 잘게 잘게 클래스를 분리 하셨다. 그에 반에 나의 코드는 도메인 코드가 아주 간결했다. 그래서 UI를 살펴보니.. 아주 난리가 나있었다. API가 간단하니까 UI가 고생을 하고 있었다.. 최소한으로 공개하기 무조건 public으로 하지말고, 최소한으로 하고 필요하면 늘려가라. 공개할수록 예외는 증가한다. public으로 무작정 열어 놓으면 특정 기능을 전혀 무관한 곳에서 사용하여 의존성을 높일 수 있다. 클라이언트 입장에서 API를 제공하기 예를 들어 특정 파라미터를 받는 생성자를 열어 놓았다고 하자. 그런..