이 글은 인프런 김영한님의 강의를 복습하며 작성한 글입니다. 스프링 컨테이너 : Singleton Container 스프링 컨테이너는 100% 싱글톤 컨테이너는 아니지만, 주로 싱글톤 컨테이너로 사용된다고 한다. 이 때 100% 싱글톤 컨테이너가 아니라는 말은 어떤 Bean Scope를 사용하느냐에 따라 싱글톤 컨테이너가 아닐 수 있다는 것을 의미한다. 예를 들어 ProtoType Scope / Request Scope로 만들어진 Bean은 요청이 올 때마다 생성되기 때문에 싱글톤이 아니다. Singleton with Web Application 웹 어플리케이션은 보통 여러 고객이 동시에 많은 요청을 한다. 롤로 예를 들어보면 한번에 수백 ~ 수천개 이상의 큐가 잡힐 것이다. 고객이 한번에 수백 ~ 수천..
스프링 컨테이너의 생성 설정 정보를 저장한 AppConfig Class가 있다고 가정했을 때, 이 클래스로 스프링 컨테이너를 생성하는 명령어는 아래 코드다. ApplicationContext를 스프링 컨테이너라하고, ApplcationContext는 Interface다. ApplicationContext 인터페이스에 자바 형식으로 구현한 구현체가 AnnotationConfigApplicationContext다. 그렇다면 아래 명령어를 치게 되었을 때, 스프링 컨테이너는 어떤 순서로 만들어지게 될까? ApplicationContext ac = new AnnotaionConfigApplicationContext(AppConfig.class); 1. 먼저 위 그림처럼 스프링 컨테이너와 스프링 빈 저장소가 하나..
앞의 글에서 이어서 작성하겠다. 앞의 글은 순수하게 자바 언어만 사용해 객체 지향 프로그래밍을 구현했다. 구현했을 때, 문제가 된 내용은 아래 코드에서 바로 확인이 가능하다. 구현체가 어떤 객체를 사용할지 선택하고 있다는 것이다. 구현체는 추상화에만 충실해야한다. 예를 들어 배우는 대본에만 충실해야하는데, 대본도 외우고 상대 배우도 고르고 있는 상황인 것이다. 이런 문제를 해결하기 위해 프레임워크가 필요해진다. 공연 기획자와 유사한 역할을 하는 것을 프레임워크라고 생각하고, 이를 구성하는 방식으로 아래의 SOLID 원칙에서 벗어난 것들을 개선할 수 있다. public class OrderServiceImpl implements OrderService{ DiscountPolicy discountPolicy..
이번 포스팅에서는 자바만을 활용해서 객체 지향 설계를 먼저 완성을 하는 것을 목표로 한다. 객체 지향 설계를 완성한 후, SOLID 원칙 관점에서 점검을 해보도록 한다. 1. 멤버 클래스의 구현 멤버 클래스는 멤버변수 ID, 이름, 등급을 가진다. 멤버 클래스는 생성자와 Getter / Setter를 가진다. 등급은 enum으로 상수 클래스를 추가해서 사용한다. package myname.core2.member; public class Member { private Long memberId; private String memberName; private Grade grade; public Member(Long memberId, String memberName, Grade grade) { this.memb..
목표는 간단한 웹 MVC 개발을 통해 Spring에 친숙해지고자 한다. 비즈니스 요구 사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록 및 조회 아직 데이터 저장소가 선정되지 않음 일반적인 Web Application의 계층 구조 도메인 : 회원, 주문, 쿠폰처럼 DB에 저장 관리되는 비즈니스 도메인 객체 서비스 : 비즈니스 도메인 객체를 가지고 핵심 비즈니스 로직이 동작하도록 구현함 컨트롤러 : 웹 MVC의 컨트롤러 역할 리포지토리 : DB에 접근함. 도메인 객체를 DB에 저장 관리한다. 설계 구조 Repository는 Interface로 설계를 한다. 왜냐하면 아직 DB가 결정되지 않았기 때문에 어떤 방식으로 데이터를 저장해야하는지 정할 수 없기 때문이다. 따라서, 메모리 레벨에서 리포지토리..