인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다. 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스이다. (다형성 적용) 스프링 컨테이너는 어노테이션 기반의 자바 설정 클래스로 만들 수 있다. 스프링 컨테이너의 생성 과정 1. 스프링 컨테이너 생성 new AnnotationConfigApplicationContext(AppConfig.class); 스프링 컨테이너를 생성할 때는 구성 정보를 지정해 주어야 하며, AppConfig.cla..
인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다. 의존관계는 정적인 클래스 의존관계와, 실행 시점에 결정되는 동적인 객체(인스턴스) 의존관계로 분리해서 생각해야 한다. 정적인 클래스 의존관계 클래스가 사용하는 import 코드만 보고 의존관계를 쉽게 판단할 수 있다. 정적인 의존관계는 애플리케이션을 실행하지 않아도 분석할 수 있다. by 클래스 다이어그램 하지만 클래스 의존관계만으로는 실제 어떤 객체가 클라이언트 코드에 주입될지 알 수 없다. 동적인 객체 인스턴스 의존관계 애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계다. 애플리케이션 실행 시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달해서 클라이언트와 서버의 실제 의존관계가 연결..
인프런 김영한 선생님의 스프링 핵심 원리 강의를 보고 정리한 내용입니다. public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } private static MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } private DiscountPolicy discountPolicy..
인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다. OCP, DIP는 아래 글에 정리해 두었다. https://yooooooni.tistory.com/36 [SOLID] 좋은 객체지향 설계의 5가지 원칙 단일 책임 원칙 (SRP, single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 yooooooni.tistory.com 회원 도메인 설계의 문제점 이 코드의 설계상 문제점은 무엇일까? 다른 저장소로 변경할 때 OCP 원칙을 잘 준수할까? DIP를 잘 지키고 있을까? NO 의존관계가 인터페이스뿐만 아니라 구현까지 모두 의존한다는 문제점..
인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다. 스프링이란? 스프링이란 여러 가지 기술들의 모음이며, 스프링 프레임워크, 스프링 부트, 스프링 데이터, 스프링 세션, 스프링 시큐리티, 스프링 Rest Docs, 스프링 배치 등이 있다. 해당 기술들에 대한 정보는 아래 사이트에서 확인할 수 있다. https://spring.io/projects Spring | Projects Projects From configuration to security, web apps to big data—whatever the infrastructure needs of your application may be, there is a Spring Project to help you build it. St..
인프런 김영한 선생님 스프링 입문 강의를 보고 정리한 내용입니다. MemberRepository 인터페이스를 구현하는 MemoryMemberRepository와 JdbcMemberRepository가 있었다. 이때 MemoryMemberRepository를 빈으로 저장해 두었는데, 새로운 JdbcMemberRepository를 구현하면서 빈으로 등록하여 사용하고자 했다. 코드를 어떻게 작성해야 JdbcMemberRepository를 빈으로 생성하여 가져올 수 있을까? 방법은 매우 간단하다! SpringConfig를 통해 MemoryMemberRepository를 빈으로 생성하고 있는 코드를, 위처럼 수정해 주면 된다. memberRepository()를 호출했을 때 JdbcMemberRepository를..
스프링 빈을 등록하는 2가지 방법 컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링 빈 등록하기 컴포넌트 스캔과 자동 의존관계 설정 @Component 어노테이션이 있으면 스프링 빈으로 자동 등록된다. 이때 @Controller, @Service, @Repository 모두 @Component를 포함하고 있기 때문에 각자의 로직에 맞게 어노테이션을 붙여줘도 되는 것이다. → @Controller 컨트롤러가 스프링 빈으로 자동 동록되는 이유가 컴포넌트 스캔 때문이다. 스프링 빈 등록 이미지 @Controller, @Service, @Repository는 @Component를 대체할 수 있다. 스프링은 스프링 컨테이너에 스프링 빈을 등록할 때, 싱글톤으로 등록한다. (대부분 하나만 등록해서 공유한..
인프런 김영한 선생님 스프링 입문 강의를 보고 정리한 내용입니다. @ResponseBody html에 나오는 바디 태그가 아니라 http body에 이 데이터를 직접 넣어주겠다는 의미 해당 어노테이션을 작성하면 ViewResolver 대신 HttpMessageConverter가 동작한다. 문자열인 경우 문자열 그대로 반환 (StringConverter) 객체인 경우 JSON 형식으로 반환 (JsonConverter / MappingJackson2HttpMessageConverter) 위처럼 리턴값을 작성하면 뷰 대신 문자열을 출력하며, 위처럼 리턴값이 객체이면 JSON을 출력한다. 주소창에 입력하면 이렇게 JSON이 반환된 것을 확인할 수 있다.