💡 자바 백엔드 웹 기술 역사 🧡 과거 기술 🧡 현재 사용 기술 애노테이션 기반의 스프링 MVC 등장 @Controller MVC 프레임워크의 춘추 전국 시대 마무리 스프링 부트의 등장 스프링 부트는 서버를 내장 과거에는 서버에 WAS를 직접 설치하고, 소스는 War파일을 만들어서 설치한 WAS에 배포 스프링 부트는 빌드 결과( Jar)에 WAS 서버 포함 -> 빌드 배포 단순화 🧡 최신 기술 - 스프링 웹 기술의 분화 Web Servlet - Spring MVC Web Reactive - Spring WebFlux 🧡 최신 기술 - 스프링 웹 플럭스(WebFlux) - 쓰레드의 수를 코어의 갯수와 같게 맞추거나 +1개정도로 맞춰서 최소 쓰레드로 최대 성능을 낸다. 그러므로 쓰레드 컨텍스트 스위칭 비용을..
💡 HTML, HTTP API, CSR, SSR 🧡 정적 리소스 고정된 HTML 파일, CSS, JS, 이미지, 영상 등을 제공 주로 웹 브라우저 🧡 HTML 페이지 동적으로 필요한 HTML 파일을 생성해서 전달 웹 브라우저 : HTML 해석 🧡 HTTP API HTML이 아니라 데이터를 전달 주로 JSON 형식 사용 다양한 시스템에서 호출 - 데이터만 내려줌! ✔ 다양한 시스템 연동 주로 JSON 형태로 데이터 통신 UI 클라이언트 접점 앱 클라이언트(아이폰, 안드로이드, PC 앱) 웹 브라우저에서 자바 스크립트를 통한 HTTP API 호출 React, Vue.js같은 웹 클라이언트 서버 to 서버 주문 서버 -> 걸제 서버 기업 간 데이터 통신 🧡 SSR - 서버 사이드 렌더링 : 서버에서 최종 HT..
💡 동시 요청 - 멀티 쓰레드 - 호출하는 것이 바로 쓰레드! 🧡 쓰레드 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행 쓰레드가 없다면 자바 어플리케이션 실행이 불가능 쓰레드는 한번에 하나의 코드 라인만 수행 동시 처리가 필요하면 쓰레드를 추가로 생성 🧡 요청마다 쓰레드 생성 장단점 장점 동시 요청을 처리할 수 있다. 리소스(CPU, 메모리)가 허용할 때까지 처리 가능 하나의 쓰레드가 지연되어도, 나머지 쓰레드는 정상 동작한다. 단점 쓰레드는 생성 비용이 매우 비싸다. 고객의 요청이 올 때마다 쓰레드를 생성하면, 응답 속도가 늦어진다. 쓰레드는 컨텍스트 스위칭 비용이 발생한다. 코어당 하나의 쓰레드 정도만 수행 가능한데,..
💡 서블릿 🧡 HTML Form 데이터 전송 POST 전송 - 저장 🧡 서버에서 처리해야 하는 업무 웹 어플리케이션 서버 직접 구현 🧡 서버에서 처리해야 하는 업무 서블릿을 지원하는 WAS 사용 - 비즈니스 로직 제외한 모든걸 서블릿에서 다 해줌. 🧡 서블릿 특징 urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행 HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRqeust HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse 개발자는 HTTP 스펙을 매우 편리하게 사용 - 웹 브라우저가 웹 어플리케이션 서버에 요청을 하면 request, response 객체를 생성한다. 🧡 서블릿 HTTP 요청, 응답 흐름 HTTP 요청 시 WAS는..
💡 웹 서버, 웹 어플리케이션 서버 🧡 웹 - HTTP 기반 🧡 모든 것이 HTTP HTTP 메시지에 모든 것을 전송 HTML, TEXT IMAGE, 음성, 영상, 파일 JSON, XML (API) 거의 모든 형태의 데이터 전송 가능 서버 간에 데이터를 주고 받을 때도 대부분 HTTP 사용 지금은 HTTP 시대! 🧡 웹 서버 (Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 HTTP 프로토콜로 서로 데이터를 주고받을 수 있는 것 정적(파일) HTML, CSS, JS,이미지, 영상 EX) NGINX, APACHE 🧡 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공 가능) 프로그램 코드..
💡 학습 내용 정리 스프링 핵심 원리 객체 지향 설계 다향성 - 역할과 구현의 분리 SOLID (OCP (개방-폐쇄 원칙), DIP(의존성 역전 원칙) DI 컨테이너 스프링 핵심 기능 스프링 컨테이너, 빈 싱글톤 컴포넌트 스캔 의존관계 자동 주입 빈 생명주기 콜백 빈 스코프
💡 스코프와 프록시 여기가 핵심이다. proxyMode = ScopedProxyMode.TARGET_CLASS 를 추가해주자. 적용 대상이 인터페이스가 아닌 클래스면 TARGET_CLASS 를 선택 적용 대상이 인터페이스면 INTERFACES를 선택 이렇게 하면 MyLogger의 가짜 프록시 클래스를 만들어두고 HTTP request와 상관 없이 가짜 프록시 클래스를 다른 빈에 미리 주입해 둘 수 있다. CGLIB라는 라이브러리로 내 클래스를 상속 받은 가짜 프록시 객체를 만들어서 주입한다. @Scope의 proxyMode = ScopedProxyMode.TARGET_CLASS)를 설정하면 스프링 컨테이너는 CGLIB라는 바이트 코드를 조작하는 라이브러리를 사용해서 , MyLogger를 상속받은 가짜 프..
💡 스코프와 Provider 첫번째 해결방법은 Provider를 사용하는 것이다. main() 메서드로 스프링을 실행하고, 웹 브라우저에 http://localhost:8080/log-demo 를 입력하자. 드디어 잘 작동하는 것을 확인할 수 있다. ObjectProvider 덕분에 ObjectProvider.getObject() 를 호출하는 시점까지 request scope 빈의 생성을 지연할 수 있다. => getObject 를 요청하면 빈이 생성된다. ObjectProvider.getObject() 를 호출하는 시점에는 HTTP 요청이 진행중이므로 request scope 빈의 생성이 정상 처리된다. ObjectProvider.getObject() 를 LogDemoController, LogDemo..
💡 웹 스코프 지금까지 싱글톤과 프로토타입 스코프를 학습했다. 싱글톤은 스프링 컨테이너의 시작과 끝까지 함께하는 매우 긴 스코프이고, 프로토타입은 생성과 의존관계 주입, 그리고 초기화까지만 진행하는 특별한 스코프이다. 👉 웹 스코프의 특징 웹 스코프는 웹 환경에서만 동작한다. 웹 스코프는 프로토타입과 다르게 스프링이 해당 스코프의 종료시점까지 관리한다. 따라서 종료 메서드가 호출된다. 👉 웹 스코프 종류 request: HTTP 요청 하나가 들어오고 나갈 때까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다. session : HTTP session과 동일한 생명주기를 가지는 스코프 application : 서블릿 컨텍스트(ServletContext)와 동일한 생명주..