Back-End/Spring 90

[Spring][스프링 기본편] - 14. 웹 어플리케이션과 싱글톤

1. 웹 어플리케이션이란? 웹 애플리케이션(web application) 또는 웹 앱은 소프트웨어 공학적 관점에서 인터넷이나 인트라넷을 통해 웹 브라우저에서 이용할 수 있는 응용 소프트웨어를 말한다. 웹 애플리케이션은 클라이언트로서 웹 브라우저를 사용하는 사람이 많기 때문에 인기를 누리고 있다. 수천만 대의 PC에 굳이 소프트웨어를 배포해서 설치하지 않아도 웹 애플리케이션을 유지 관리할 수 있다는 점이 장점 중의 하나이다. 웹 애플리케이션은 웹 메일, 온라인 전자상거래 및 경매, 위키, 인터넷 게시판, 블로그 및 MMORPG 게임 등 다양한 기능을 구현할 수 있다. 📌출처: https://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC..

Back-End/Spring 2022.01.25

[Spring][스프링 기본편] - 13. 스프링 빈 설정 메타 정보 - BeanDefinition

1. 스프링 컨테이너와 스프링 빈 스프링 컨테이너란? 스프링은 스프링 컨테이너를 사용하여 자바 객체들의 생명주기를 관리하고, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 하고 있다. 스프링 빈 스프링 빈은 위에서 말하는 자바 객체들을 말한다. 2. BeanDefinition이란? 스프링 컨테이너는 설정 형식이 XML이어도 class여도 다른 어떤 형식이 와도 형식이 무엇인지 알 필요 없이 BeanDefinition만 알고 있으면 된다. 즉, 역할과 구현을 개념적으로 나눈 것이라고 생각하면 되고 이때 BeanDefinition이 역할로, 나머지 이를 구현하고 있는 구현들이 구현으로 생각하면 된다. BeanDefinition 을 빈 설정 메타정보라 한다. @Bean - class - xml 당 각..

Back-End/Spring 2022.01.25

[Spring][스프링 기본편] - 12. BeanFactory와 ApplicationContext

1. BeanFactory와 ApplicationContext 2. BeanFactory란? 스프링 컨테이너의 최상위 인터페이스 스프링 빈 관리, 조회 등의 역할을 한다. getBean( ) 기능 제공 지금까지 우리가 사용한 기능들은 대게 BeanFactory의 기능이다. 3. ApplicationContext란? BeanFactory의 자손으로 기능을 모두 상속 받아 사용 가능하다. 부가적인 기능을 제공한다. 4. ApplicationContext의 부가적인 기능? 메시지소스를 활용한 국제화 기능 예를 들어서 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 환경변수 로컬, 개발, 운영등을 구분해서 처리 애플리케이션 이벤트 이벤트를 발행하고 구독하는 모델을 편리하게 지원 편리한 리소스 조회 ..

Back-End/Spring 2022.01.25

[Spring][스프링 기본편] - 11. 스프링 컨테이너 생성과 스프링 빈 조회하기

1. 스프링 컨테이너란? 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 합니다. 여기서 말하는 자바 객체를 스프링에서는 빈(Bean)이라고 부릅니다. 그리고 저번 시간에 배웠던 IoC와 DI의 원리가 이 스프링 컨테이너에 적용됩니다. 📌출처: https://steady-coding.tistory.com/459 스프링 컨테이너의 종류 ApplicationContext(일반적으로 스프링 컨테이너라고 하면 애플리케이션컨텍스트를 생각하면 된다.) BeanFactory 2. 스프링 컨테이너의 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfi..

Back-End/Spring 2022.01.23

[Spring][스프링 기본편] - 10.IOC, DI, 그리고 컨테이너

1. IOC란? 제어의 역전을 의미하고 이는 제어권이 개발자에게 있는 것이 아닌 외부에 있을 때 제어의 역전이라고 한다. 이와 관련해서 프레임워크와 라이브러리를 예로 사용할 수 있다. 프레임워크 라이브러리 작성 코드의 흐름을 대신 제어한다. 작성 코드의 흐름의 제어를 개발자가 한다. 예시: Junit 2. DI란? DI란 Dependency injection의 줄임말로 의존관계 주입(의존성 주입)을 DI라고 한다. 앞에서 살펴본바와 같이 생성자를 통해서 구현객체를 설정해주고 클라이언트는 구현체가 아닌 인터페이스(추상 클래스)에만 의존할 수 있게 해준다. 의존관계 주입에는 정적 의존관계와 동적 의존관계 두 가지로 나누어 살펴볼 수 있다. 정적 의존관계 동적 의존관계 import 하는 것만 보고 바로 의존 ..

Back-End/Spring 2022.01.20

[Spring][스프링 기본편] - 9. AppConfig 리팩토링

1. AppConfig의 Refactoring의 목적 중복의 제거 역할에 따른 구현이 더욱 명확하게 보이게 하기 위해서 AppConfig를 Refactoring해주는 작업을 진행한다. package hello.core; import hello.core.discount.FixDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; public class App..

Back-End/Spring 2022.01.17

[Spring][스프링 기본편] - 8. 의존관계 주입, 의존성 주입

1. 관심사의 분리 앞선 포스팅에서 살펴본 코드들은 구현체가 직접 다른 구현체를 불러오는 것과 상황이었다. -> DiscountPolicy의 구현 객체를 직접 클라이언트인 OrderServiceImpl에서 지정하여 사용하던 경우가 이에 해당. 이런 상황은 클라이언트가 추상에만 의존해야 하는 상황이 아닌 구체에도 의존학 되는 DIP 위반을 불러일으키고 이를 해결하기 위해서는 관심사를 철저하게 분리해서 사용해야 한다. 관심사의 분리란? 예를 들어 극단에 배우와 공연 기획자가 있다고 할 때 배우가 디렉팅에 참여해 상대 배우를 직접 고르는 상황이 우리의 이전 포스팅에서 살펴보았던 상황이라면, 우리는 앞으로 공연 기획자와 배우의 역할을 철저히 나누어 사용할 수 있게 해야 DIP 위반 문제가 발생하지 않게 된다. ..

Back-End/Spring 2022.01.15

[Spring][스프링 기본편] - 7. DIP OCP 위반과 NPE

1. 새로운 할인 정책을 적용하고자 할 경우 현재 Fix고정 할인율 정책을 discountPolicy의 구현체로 사용하고 있는데 기획자가 구매 금액에 따라서 할인을 하자고 제안하여 구현체를 바꿔 갈아끼고자 하는 상황이다. 현 상황만 간단히 살펴보면 구현체를 따로 만들어 그를 바꿔 사용하면 될 것 같아 보인다. 그렇기에 구현체를 만드는 작업부터 진행하도록 한다. RateDIscountPolicy라는 구현 클래스를 만들어주고 코드가 확인 작업을 위해서 단위 테스트를 진행한다. 2. 바뀐 구현체 테스트 package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; import org.assertj.core..

Back-End/Spring 2022.01.15

[Spring][스프링 기본편] - 6. 주문과 할인 도메인 개발과 테스트

1. 주문과 할인 도메인 개발 앞에서도 말했듯 유로 강의라 코드를 올리기 애매해서 올리지 않고 디렉토리가 어떻게 되는지 올려둡니다. 2. 주문과 할인 도메인 테스트 package hello.core; import hello.core.member.Grade; import hello.core.member.Member; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.order.Order; import hello.core.order.OrderService; import hello.core.order.OrderServiceImpl; publ..

Back-End/Spring 2022.01.13

[Spring][스프링 기본편] - 5. 주문과 할인 도메인 설계

1. 주문과 할인 도메인 설계 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경 될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 도 있다. (미확정) MemberRepository가 DB에서 메모리 회원 저장소로 바뀌어도 주문 서비스 구현체에는 아무런 영향이 미치지 않는다. 이는 또한 정률 할인 정책이 정액 할인 정책으로 바뀌어도 마찬가지다. 이를 통해 알 수 있는 것은 역할들의 협력관계에는 변화가 없다는 것이다. 2. 출처 스프링 핵심 원리 ..

Back-End/Spring 2022.01.13