전체 글

피곤한투티의 개발/일상 블로그
김영한 스프링 강의/스프링 MVC 1편

1. 웹 애플리케이션 이해

웹 서버 vs 웹 애플리케이션 서버(WAS)웹 서버HTTP 기반 동작정적 리소스 기능 + 기타 부가 기능정적 HTML, CSS, JS, 이미지, 영상 등 제공예) NGINX, APACHE 웹 애플리케이션 서버(WAS)HTTP 기반 동작웹 서버 기능 + 프로그램 코드 실행 해서 애플리케이션 로직 수행동적 HTML, HTTP API(JSON)서블릿, JSP, 스프링 MVC예) 톰캣, Jetty, Undertow 차이웹 서버는 정적, WAS는 애플리케이션 로직을 제공한다.근데… 사실은 경계가 모호하다. 웹 서버도 프래그램을 실행할 수 있고, 웹 애플리케이션 서버도 웹 서버의 기능을 제공한다.Java에서는 서블릿 컨테이너 기능을 제공하면 WAS로 분류한다. 웹 시스템 구성 종류WAS + DBWAS가 정적 리소스..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

9. 빈 스코프

빈 스코프란?지금까지는 스프링 빈이 스프링 컨테이너와 함께 생성되서 컨테이너가 종료될 때 유지된다고 학습했다. 왜냐하면 싱글톤 스코프로 생성되기 때문이다.스코프란? 말 그대로 빈이 존재할 수 있는 범위, 즉 생명주기를 얘기한다. 스코프 종류싱글톤: 기본 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.프로토타입: 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입, 초기화까지만 관여하고, 더는 관리하지 않는 가장 짧은 스코프이다. 즉, 종료메서드는 호출되지 않는다.웹 관련 스코프:request: 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프이다.session: 웹 세션이 생셩되고 종료될 때 까지 유지되는 스코프이다.application: 웹의 서블릿 컨텍스트와 같..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

8. 빈 생명주기 콜백

빈 생명주기 콜백 시작데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다.이 작업이 어떻게 되는지 알아보자. 간단하게 외부 네트워크에 미리 연결하는 객체를 하나 생성한다고 가정해보자. (실제로 네트워크에 연결하는 것은 아니고, 단순히 문자만 출력한다. ) 이 NetworkClient는 애플리케이션 시작 시점에 connect()를 호출해서 연결을 맺어두어야 하고, 애플리케이션이 종료되면 disConnect()를 호출해서 연결을 끊어야 한다. public class NetworkClient { private String url; public NetworkCl..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

7. 의존관계 자동 주입

다양한 의존관계 주입방법생성자 주입수정자 주입(setter 주입)필드 주입일반 메서드 주입 생성자 주입이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다.지금까지 우리가 진행했던 방법이 생성자 주입이다.특징생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.불변, 필수 의존관계에 사용@Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, Dis..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

6. 컴포넌트 스캔

컴포넌트 스캔과 의존관계 자동 주입 시작하기Class가 수백개가 되면 AppConfig에서 설정하는걸 누락하거나 중복하는 문제가 발생할 수 있다.그리고 귀찮다.따라서, 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다.의존 관계를 자동 주입해주는 @Autowired라는 기능도 제공한다. @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type=FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig{ }컴포넌트 스캔을 사용하려면 @ComponentScan을 설정 정보에 붙여주면 된다.기존의 AppConfig과 다르게 @Be..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

5. 싱글톤 컨테이너

웹 애플리케이션과 싱글톤스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생함.이런 웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다.public class SingletonTest{ @Test @DisplayName("쓰프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.memberService(); System.out.println("memberService1 = " + memberService1); System.ou..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

4. 스프링 컨테이너와 스프링 빈

스프링 컨테이너 생성ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);ApplicationContext를 스프링 컨테이너라 하고, 인터페이스이다.스프링 컨테이너는 XML을 기반으로 만들 수 있고, 어노테이션 기반의 자바 설정 클래스로 만들 수도 있다.직전에 AppConfig을 사용했던 방식이 어노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.요즘은 XML 기반으로는 잘 만들지 않는다. 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext로 구분해서 이야기한다. BeanFactory를 직접 사용하는 경우는 거의 없으므로 일반적..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

새로운 할인 정책 개발 악덕 기획자: 서비스 오픈 직전에 할인 정책을 지금처럼 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경하고 싶어요. 예를 들어서 기존 정책은 VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인했는데, 이번에 새로 나온 정책은 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원을 할인해주는 거에요! 순진 개발자: 제가 처음부터 고정 금액 할인은 아니라고 했잖아요. 악덕 기획자: 애자일 소프트웨어 개발 선언 몰라요? “계획을 따르기보다 변화에 대응하기를” 순진 개발자: … (하지만 난 유연한 설계가 가능하도록 객체지향 설계 원칙을 준수했지 후후) 새로운 할인 정책 적용과 ..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

2. 스프링 핵심 원리 이해1 - 예제 만들기

비지니스 요구사항과 설계회원회원을 가입하고 조회할 수 있다.회원은 일반과 VIP 두 가지 등급이 있다.회원 데이터는 자체 DB가 있을 수도, 외부 시스템과 연동할 수도 있다.(미확정)주문과 할인 정책회원은 상품을 주문할 수 있다.회원 등급에 따라 할인 정책을 적용할 수 있다.할인 정책은 모든 vip는 1000원을 할인해주는 고정 할인인데, 나중에 변경될 수 있다.할인 정책은 변경가능성이 높다. 오픈 직전까지 미루고 싶고, 심지어 할인을 적용하지 않을 수도 있다. ( 미확정이다. )⇒ 미확정이 많으니 구현체를 언제든지 갈아끼울 수 있도록 설계하자. 회원 도메인 설계회원을 가입하고 조회할 수 있다.회원은 일반과 VIP 두 가지 등급이 있다.회원 데이터는 자체 DB가 있을 수도, 외부 시스템과 연동할 수도 있..

김영한 스프링 강의/스프링 핵심 원리 - 기본편

1. 객체 지향 설계와 스프링

스프링https://spring.io/projects스프링 데이터: 기본적인 CRUD를 빠르게 만들어주는 도와주는 기술스프링 세션: 세션기능을 편리하게 할 수 있도록 도와줌스프링 시큐리티: 보안스프링 Rest Docs: 자동 문서화 지원스프링 배치: 데이터를 배치처리하는데 특화된 기술스프링 클라우드: 클라우드에 특화된 기술 스프링 프레임워크: 메인이 되는 프레임워크스프링 부트: 스프링 프레임워크 + 자동 세팅⇒ Tomcat내장, 라이브러리 자동 구성, 자동으로 맞는 버전의 라이브러리를 지정, 모니터링, 간결한 설정 객체 지향추상화캡슐화상속다형성 다형성유연하고 변경이 용이하게 해주는 속성 자동차의 구현체가 바뀌어도 운전자는 아무 문제 없이 운전할 수 있다.자동차 역할 인터페이스에 따라서 자동차를 구현했기 ..

피곤한투티
ThuThi's Tistory