일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 공채
- 깃
- 깃허브
- 뮤텍스
- 스터디
- 신입사원
- 이펙티브 자바
- java
- Public
- Effective Java
- 우리카드
- 운영체제
- 디지털
- 개발
- spring
- 알고리즘
- IT
- 정보처리기사
- 프로그래밍
- 신입
- 스프링
- 메모리
- 컴퓨터공학
- 세마포어
- CS
- 컴퓨터과학
- github
- OS
- package-private
- 자바
- Today
- Total
목록Spring/핵심 (16)
주니어 개발자 성장기
@Configuration과 싱글톤 AppConfig.class @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(),discountPolicy()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } ... } memberService, ord..
싱글톤 방식의 주의점 싱글톤 패턴이든, 스프링 같은 싱글톤 컨테이너를 사용하든, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 무상태(stateless)로 설계해야 한다! 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다! 가급적 읽기만 가능해야 한다. 필드 대신에 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다. 스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다! // 싱글톤으로 구현할 클래스 public class StatefulService {..
웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다. 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 물론 웹이 아닌 애플리케이션 개발도 얼마든지 개발할 수 있다. 웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. 요청마다 객체가 새로 생성, 소멸되는 것은 당연히 비효율적 +) 메모리 낭비가 심하다. 따라서 각 객체를 하나씩으로 유지하고 공유하는 싱글톤 패턴을 따른다. 싱글톤 패턴 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 그래서 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 한다. private 생성자를 사용해서 외부에서 임의로 new 키워드를 사용하지 못하도록 막아야 한다. 싱글톤 패턴 예시 코드 Public clas..
BeanDefinition 스프링이 다양한 설정 형식을 지원 할 수 있는 이유. 스프링 컨테이너는 XML, 자바코드인지에 관계 없이 BeanDefinition이라는 추상화(인터페이스)만 알면 된다. (추상화에 의존하도록 설계한 것) 'BeanDefinition'을 빈 설정 메타정보라 한다. '@Bean', 당 각각 하나씩 메타 정보가 생성된다. 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성한다. BeanDefinition을 직접 생성해서 스프링 컨테이너에 등록할 수도 있다. 하지만 실무에서 BeanDefinition을 직접 정의하거나 사용할 일은 거의 없다. BeanDefinition에 대해서는 너무 깊이 있게 이해하기보다는, 스프링이 다양한 형태의 설정 정보를 BeanDefinition으로..
XML이란? 마크업 언어를 만드는데 사용하도록 권장하는 다목적 마크업 언어이다. 주로 다른 종류의 시스템, 특히 인터넷에 연결된 시스템끼리 데이터를 쉽게 주고 받을 수 있게 하여 HTML의 한계를 극복할 목적으로 만들어졌다. HTML과 달리 웹상에서 구조화된 문서를 전송가능하도록 설계되었으며, 데이터에 의미를 부여하는 메타데이터를 기술할 수 있다. 출처: 위키백과 + 나무위키 스프링 컨테이너는 다양한 형식의 설정 정보를 받아 들일 수 있게 유연하게 설계 되어 있다. 자바 코드, XML, Groovy등 최근, 애노테이션 기반의 AnnotationConfigApplicationContext를 구현체로 사용한다. GenericXmlApplicationContext는 xml을 사용하는 컨테이너다. (과거에 많이..
BeanFactory 스프링 컨테이너의 최상위 인터페이스 스프링 빈을 관리하고 조회하는 역할 'getBean()'을 제공한다. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 빈을 관리하고 검색하는 기능을 BeanFactory가 제공 해주는데 둘의 차이는? 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다. ApplicationContext가 제공하는 부가 기능 ApplicationContext는 아래의 인터페이스들을 상속 받고 있다. MessageSource - 메시지 소스를 활용한 국제화 기능 예를 들어, 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 EnvironmentCapable - 환경 변수 ..