- [ 정리/Spring ][Spring] 스프링 MVC 1편 5) 스프링 MVC 구조이해2023-11-06 09:46:14스프링 MVC 1편 백엔드 웹 개발 핵심 기술 Session 5 스프링 MVC 구조이해 1. 스프링 MVC 전체 구조 1) 스프링 MVC 구조 2) DispatcherServlet 구조 살펴보기 스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어 있다. 스프링 MVC의 프론트 컨트롤러가 DispatcherServlet 스프링 MVC의 핵심이다. 3) DispatcherServlet 서블릿 등록 DispatcherServlet도 부모 클래스에서 HttpServlet을 상속받아 사용, 서블릿으로 동작 스프링 부트는 DispatcherServlet을 서블릿으로 자동 등록하면서 모든 경로에 대하여 매핑 → 더 자세한 경로가 우선순위가 높음, 그래서 기존에 등록한 서블릿도 함께 동작 4) 요청 흐름 서블릿 호출되면..
- [ 정리/Spring ][Spring] 스프링 MVC 1편 4) MVC 프레임워크 만들기2023-11-03 10:53:43스프링 MVC 1편 백엔드 웹 개발 핵심 기술 Session 4 MVC 프레임워크 만들기 1. 프론트 컨트롤러 패턴 소개 1) 프론트 컨트롤러 패턴 소개 공통을 하나에 모으고 이 프론트 컨트롤러를 통해 A, B, C 호출 결정 2) 프론트 컨트롤러 패턴 특징 프론트 컨트롤러 서블릿 하나로 클라이언트 요청받음 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 공통 처리가 가능하고 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 3) 스프링 웹 MVC와 프론트 컨트롤러 패턴 스프링 웹 MVC의 핵심도 프론트 컨트롤러 DispatcherServlet이 프론트 컨트롤러 패턴으로 구현되어 있음 2. 프론트 컨트롤러 도입 - v1 1) v1 구조 클라이언트가 HTTP 요청을 하면 프론트 ..
- [ 정리/Spring ][Spring] 스프링 MVC 1편 3) 서블릿, JSP, MVC 패턴2023-11-02 22:37:51스프링 MVC 1편 백엔드 웹 개발 핵심 기술 Session 3 서블릿, JSP, MVC 패턴 1. 회원 관리 웹 애플리케이션 요구사항 1) 회원 도메인 모델 회원 정보 : 이름(username), 나이(age) 기능 요구사항 : 회원저장, 회원 목록 조회 2. 서블릿으로 회원 관리 웹 애플리케이션 만들기 1) MemberFormServlet 회원 등록 폼 단순하게 회원 정보를 입력할 수 있는 html form 만들어 응답 2) MemberSaveServlet 회원 저장 파라미터를 조회해 Member 객체를 만든다. Member 객체를 MemberRepository를 통해 저장 Member 객체를 사용해서 결과 화면용 html을 동적으로 만들어 응답 3) MemberListServlet 회원 목록 Mem..
- [ 정리/Spring ][Spring] 스프링 MVC 1편 2) 서블릿2023-11-01 17:27:45스프링 MVC 1편 백엔드 웹 개발 핵심 기술 Session 2 서블릿 1. 프로젝트 생성 1) 프로젝트 생성 스프링 부트 스타터 사이트에서 생성 https://start.spring.io/ Packaing - War 선택 ▶ JSP 사용하기 위함 이전 포스팅 참고해서 세팅 ▶ Spring 프로젝트 생성 2. hello 서블릿 서블릿은 톰캣같은 웹 애플리케이션 서버를 직접 설치하고 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음, 톰캣 서버를 실행하면 된다 ▶ 스프링 부트는 톰캣 서버를 내장하고 있으므로, 톰캣 서버 설치 없이 편리하게 서블릭 코드 실행 1) 스프링 부트 서블릿 환경 구성 @ServletComponentScan 서블릿을 직접 등록해 사용할 수 있는 애노테이션 스프링이 자동으로 패..
- [ 정리/Spring ][Spring] 스프링 MVC 1편 1) 웹 애플리케이션의 이해2023-10-31 09:32:43스프링 MVC 1편 백엔드 웹 개발 핵심 기술 Session 1 웹 애플리케이션 이해 1. 웹 서버, 웹 애플리케이션 1) 웹서버 HTTP 기반으로 동작 정적 리소스(HTML, CSS, JS, 이미지, 영상) 제공 2) 웹 애플리케이션 서버 WAS HTTP 기반으로 동작 웹서버 기능(정적 리소스 제공) + 코드 실행해 애플리케이션 로직 수행 ▶동적 HTML, HTTP API(JSON) ▶서블릿, JSP, 스프링 MVC 3) 웹 서버와 웹 애플리케이션 서버의 차이 웹서버도 프로그램 실행 기능 포함, WAS도 웹서버 기능을 포함해서 서로 경계가 애매하지만 WAS는 애플리케이션 코드를 실행하는데 더 특화되어 있다 4) 웹 시스템 구성 ▶WAS, DB WAS에 많은 역할로 인한 서버 과부하 우려 가장 비싼 애플..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 9) 빈 스코프2023-10-28 09:58:55스프링 핵심 원리 - 기본편 Session 9 빈 스코프 1. 빈 스코프란? 1) 빈 스코프란? 이전 강의까지 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때까지 유지된다고 배웠다. 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문. 스코프는 빈이 존재할 수 있는 범위를 의미한다. 2) 스프링이 지원하는 스코프 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더 이상 관여하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request : 웹 요청이 들어오고 나갈 때까지 유지되는 스코프 session : 웹 세션이 생성되고 종료될 때까지 유지..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 8) 빈 생명주기 콜백2023-10-27 09:47:16스프링 핵심 원리 - 기본편 Session 8 빈 생명주기 콜백 1. 빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 것을 미리 연결하고 종료시점 연결을 모두 종료하려면 객체의 초기화와 종료 작업이 필요하다. 1) NetworkClient 작성 애플리케이션 시작 시점에 connect()를 호출해서 연결을 맺어두고, 종료되면 disConnect() 호출해서 연결을 끊어야 한다. 2) 테스트 코드 작성 ac.close() ▶ 스프링 컨테이너를 종료, ConfigurableApplicationContext 필요 3) 테스트 실행 생성자 호출, url = null connect: null call: null message = 초기화 연결 메시지 생성자 부분을 ..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 7) 의존관계 자동 주입2023-10-26 09:21:35스프링 핵심 원리 - 기본편 Session 7 의존관계 자동 주입 1. 다양한 의존 관계 주입 방법 1) 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 2) 생성자 주입 생성자를 통해서 의존 관계를 주입받는 방법 생성자 호출 시점에 딱 1번만 호출되는 것이 보장됨, 불변, 필수 의존 관계에 사용 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입된다 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Auto..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 6) 컴포넌트 스캔2023-10-23 10:51:24스프링 핵심 원리 - 기본편 Session 6 컴포넌트 스캔 1. 컴포넌트 스캔과 의존관계 자동 주입 시작하기 1) 컴포넌트 스캔 @Bean이나 XML의 등을 통해 설정 정보에 직접 스프링 빈을 나열했다 → 스프링 빈이 수백개가 되면 설정 정보도 커지고 누락 등의 문제가 생김 스프링은 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔이라는 기능을 제공해주고 의존관계도 자동으로 주입해주는 @Autowired라는 기능도 제공한다. 2) AutoAppConfig 생성 @Configuration @ComponentScan(excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppCo..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 5) 싱글톤 컨테이너2023-10-22 13:43:42스프링 핵심 원리 - 기본편 Session 5 싱글톤 컨테이너 1. 웹 애플리케이션과 싱글톤 1) 스프링이 없는 순수한 DI 컨테이너 웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. 요청할 때마다 객체가 생성해 메모리 낭비가 심한 문제점이 있다. 객체 하나만 생성되고 공유하도록 설계해야 한다. ▶ 싱글톤 패턴 2) 순수한 DI컨테이너 테스트 // 구성정보 클래스인 AppConfig에서 객체를 가져온다. AppConfig appConfig = new AppConfig(); //1. 조회: 호출할 때 마다 객체를 생성 MemberService memberService1 = appConfig.memberService(); MemberService memberService2 = appConfig.membe..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 4) 스프링 컨테이너와 스프링 빈2023-10-21 15:53:17스프링 핵심 원리 - 기본편 Session 4 스프링 컨테이너와 스프링 빈 1. 스프링 컨테이너 생성 1) 스프링 컨테이너 생성 ApplicationContext appllicationContext = new AnnotaionConfigApplicationContext(AppConfig.class); ApplicationContext : 스프링 컨테이너라고 하고 인터페이스임 AppConfig에 @Configuration 붙여서 만든 것이 애노테이션 기반의 설정 클래스를 만들어 스프링 컨테이너를 만든 것 2) 스프링 컨테이너 생성과정 new AnnotationConfigApplicationContext(AppConfig.class)로 스프링 컨테이너 생성 매개변수로 구성정보를 지정해줌 스프링 컨테이너는 매..
- [ 정리/Spring ][Spring] 스프링 핵심 원리 기본편 3) 스프링 핵심 원리 이해2 - 객체 지향 원리 적용2023-10-18 18:21:27스프링 핵심 원리 - 기본편 Session 3 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용 1. 새로운 할인 정책 개발 1) 새로운 할인 정책 정액 할인에서 정률 % 할인 정책으로 변경 회원 등급이 VIP인 경우 10% 할인 FixDiscountPolicy에서 RateDiscountPolicy로 변경 2. 새로운 할인 정책 적용과 문제점 1) 문제점 역할과 구현을 충실하게 분리, 다형성도 활용하고 인터페이스와 구현 객체도 분리했으나 DIP, OCP 같은 객체 지향 설계 원칙을 위배 DIP : 주문 서비스 클라이언트는 추상(인터페이스)뿐만 아니아 구현 클래스에도 의존 OCP : 기능을 확장해서 변경하면 클라이언트 코드에 영향 있음 public class OrderServiceImpl implemen..