Spring MVC - 기반 지식 - 4. WAS와 리소스 반환, CSR, SSR
2023. 5. 26. 20:07
Spring & JPA/SpringMVC
들어가며 이번 포스트에서는 WAS가 반환하는 데이터의 종류와 클라이언트에서 뷰를 랜더링하는 CSR, 서버에서 뷰를 랜더링하는 SSR에 대해 알아본다. WAS가 반환하는 데이터 종류들 서버는 결국 클라이언트의 요청을 받고 데이터를 처리한 뒤 그 결과를 응답으로 반환해야 한다. 이때 이 반환하는 데이터들의 종류가 다양한데 크게 분류하자면 3개로 나눌 수 있다. 정적 리소스 - HTML, CSS, JS, 이미지 동적 HTML 페이지 HTTP API(JSON, XML) 각각의 데이터에 대해 알아보도록 하자 정적 리소스 정적 리소스는 이전에도 설명했지만 클라이언트의 요청에 의해 동적으로 변하지 않는 자원들을 일컫는다. 보통 정적 HTML이나 CSS, JS가 있으며 이미지, 영상도 정적 리소스에 표함된다. 주로 웹..
Spring MVC - 기반 지식 - 3. WAS와 멀티 쓰레드
2023. 5. 26. 18:54
Spring & JPA/SpringMVC
들어가며 이전 포스트에서 WAS와 서블릿 그리고 서블릿 컨테이너에 대해 알아보았다. 이번 포스트에서는 서블릿과 멀티 쓰레드에 대해 알아본다. 서블릿 호출과 스레드 이전 포스트의 그림을 다시 가져왔다. 클라이언트가 요청을 보내면 그 요청을 통해 Request 객체가 생성되고, url 패턴과 동일한 서블릿이 존재하는지 서블릿 컨테이너에 확인한 뒤 해당 서블릿을 호출한다. 그런데 이 서블릿을 누가 호출하는 것인가에 대해서 한번 생각할 필요가 있다. 누가 이 서블릿을 호출하고 내부 로직을 실행시키는 것일까 그 답은 쓰레드이다. 웹 애플리케이션이 실행되면 웹 애플리케이션은 고유의 프로세스(Process)를 가지게 되고 그 내부에는 기본적으로 하나의 쓰레드를 가지게 된다. 바로 이 쓰레드가 서블릿 컨테이너에서 찾은..
Spring MVC - 기반 지식 - 2. WAS와 서블릿
2023. 5. 26. 16:15
Spring & JPA/SpringMVC
들어가며 저번 포스트에서는 웹 시스템의 전체적인 구조에 대해 간략하게 알아보았다. 이번 포스트에서는 WAS를 직접 구현하려면 어떤 면이 필요하고 서블릿이라는 것이 어떻게 이를 도와줄 수 있는지를 알아본다. WAS 직접 구현의 어려움과 서블릿 WAS에서는 앱 로직이 돌아가야 한다. 그리고 이것은 대부분은 사용자의 요청에 의해 로직이 수행되고 처리된다. 그리고 사용자의 요청은 HTTP 메시지를 통하여 들어오게 된다. 그렇다면 우리가 로직을 수행하기 위해서는 해당 HTTP 메시지에서 데이터를 가져와야 한다는 것이다. 따라서 WAS를 직접 구현하기 위해서는 다음과 같은 기능들이 필요해진다. TCP/IP를 통한 클라이언트 - 서버의 연결 설정 클라이언트에게서 들어온 요청 메시지 파싱 요청된 HTTP 메서드와 Co..
Spring MVC - 기반 지식 - 1. 웹 서버와 웹 애플리케이션 서버
2023. 5. 26. 15:39
Spring & JPA/SpringMVC
시작하며 해당 파트는 스프링 MVC 라이브러리에 대해 알아본다. 그 이전에 선행적으로 알아두면 좋은 기반 지식들에 대해 간략히 알아보도록 하자. 웹 서버(Web Server) 현재 웹은 HTTP를 기반으로 하여 쌓아올려졌다. HTTP는 클라이언트 - 서버의 구조로 이루어지는데 이 서버의 종류 중 하나인 웹 서버에 대해 살펴본다. 웹 서버는 HTTP를 기반으로 동작하며 정적 리소스(static resources)를 제공하고, 기타 부가적 기능을 제공한다. 메인 기능으로는 정적 리소스를 클라이언트에게 반환하는 것이다. 이때 정적 리소스에 대해 무엇인지에 대해 생각해야 할 필요가 있다. 정적 리소스는 클라이언트에게서 받은 요청에 대한 리소스가 이미 만들어져 있어 해당 리소스를 이미 반환하는 경우를 말한다. 이..
Spring Framework - 마무리
2023. 5. 26. 00:51
Spring & JPA/Spring
마무리하며 지금까지 스프링 프레임워크의 가장 핵심적인 코어 부분을 다루어 보았다. 간략하게 각 파트들을 정리하면서 스프링 프레임워크의 핵심적 원리들은 여기서 마무리한다. DI와 IoC 그리고 스프링 객체지향 설계를 위시한 SOLID부터 시작하여 일반적인 다형성으로는 그 한계가 있음을 보았고 이를 해결하기 위해 DI를 생각하였다. 그리고 이 DI를 개발자가 아닌 외부에서 자동으로 컨트롤하는 것이 더 편리하다는 생각을 하게 되고 이는 IoC의 개념이 되었다. 이러한 DI와 IoC를 스프링 프레임워크에서는 스프링 DI 컨테이너를 통해 지원하였다. 스프링 프레임워크에서 DI 컨테이너를 통하여 저 두 개의 개념을 지원함으로서 개발자는 저 개념을 신경쓰지 않고도 편리하게 개발을 수행할 수 있게 되었다. 스프링 컨테..
Spring Framework - 빈 스코프 - 3. 웹 스코프와 Provider, 프록시
2023. 5. 25. 20:30
Spring & JPA/Spring
들어가며 이전 포스트까지 싱글톤 스코프와 프로토타입 스코프에 대해 알아보았다. 싱글톤 스코프는 스프링 DI 컨테이너와 생명 주기를 같게 하는 기본적인 스코프였다. 프로토타입 스코프는 스프링 DI 컨테이너가 빈의 생성과 의존관계 주입까지만 수행하고 넘기는, 호출할 때 마다 새로운 인스턴스가 반환되는 스코프였다. 이번 포스트부터는 웹 스코프에 대해 알아본다. 웹 스코프는 웹 관련 라이브러리가 필요하다. 따라서 부득이하게 Spring Web MVC 기술을 사용할 것이다. 웹 스코프 웹 스코프는 웹 환경에서만 동작하는 스코프이다. 프로토타입 스코프와는 다르게 웹 스코프는 스프링 프레임워크가 해당 스코프의 종료 시점까지 관리한다. 따라서 프로토타입 스코프에서 호출되지 않는 @PreDestroy등의 메서드등이 호출..
Spring Framework - 빈 스코프 - 2. Provider
2023. 5. 25. 18:05
Spring & JPA/Spring
들어가며 이전 포스트에서 빈 스코프의 개념과 프로토타입 빈에 대해 알아보았다. 그리고 프로토타입 빈이 싱글톤 빈과 같이 쓰일때 생길 수 있는 문제에 대해서도 알아보았다. 이번 포스트에서는 해당 문제에 대해 짤막히 리마인드 하고, 해당 문제를 해결할 수 있는 방법에 대해 알아본다. Spring Framework - 빈 스코프 - 빈 스코프와 프로토타입 스코프 들어가며 이번 포스트부터는 빈 스코프에 대해 알아보고 여러가지 스코프에 대해서 알아보도록 한다. 빈 스코프의 개념과 스코프의 종류 빈 스코프의 개념 지금까지 우리는 스프링 컨테이너가 sehun5515.tistory.com 싱글톤 빈, 프로토타입 빈 동시 사용시 발생하는 문제 싱글톤 빈 내부에 프로토타입 빈을 주입하여 사용해야 하는 상황을 생각해 보자...
Spring Framework - 빈 스코프 - 1. 빈 스코프와 프로토타입 스코프
2023. 5. 25. 01:14
Spring & JPA/Spring
들어가며 이번 포스트부터는 빈 스코프에 대해 알아보고 여러가지 스코프에 대해서 알아보도록 한다. 빈 스코프의 개념과 스코프의 종류 빈 스코프의 개념 지금까지 우리는 스프링 컨테이너가 스프링 빈을 싱글톤으로 관리하는 것만 파악하였고, 자동으로 DI와 빈을 탐색하는 컴포넌트 스캔을 수행하는 것 까지 배웠다. 하지만 빈 자체의 생명 주기 즉 어느 시점에서 생성되어서 어느 시점에 소멸되는지에 대해서는 이전 포스트였던 빈 생명관리에서 처음 알아보았을 것이다. 지금까지 우리가 실험해보고 확인했던 모든 스프링 빈은 스프링 컨테이너가 올라갈 때 부터 생성되기 시작해 스프링 컨테이너가 종료되면 같이 소멸되는 스프링 컨테이너와 유지되는 시간이 동일한 스프링 빈만 따져보았다. 이는 스프링 컨테이너에서 스프링 빈을 생성시킬때..
Spring Framework - 스프링 빈 생명주기와 콜백
2023. 5. 24. 00:30
Spring & JPA/Spring
들어가며 이번 포스트는 스프링 빈의 생명 주기(Life Cycle)에 대해 알아보도록 한다. 스프링 빈의 생명 주기 DB 커넥션이나 네트워크 소켓처럼 앱 시작 시점에 연결을 진행하고, 앱 종료 시점에 연결을 모두 종료하는 작업을 수행하기 위해서는 객체의 초기화 및 종료시에 작업을 할 수 있도록 해야한다. 다음과 같은 간단한 코드를 보자 public class NetworkClient{ private String url; public NetworkClient(){ System.out.println("constructor called"); connect(); call("initializeing msg") } public void connect(){ System.out.println("connect : " +..
Spring Framework - 의존관계 자동 주입 - 4. 정리
2023. 5. 23. 23:38
Spring & JPA/Spring
들어가며 이전 포스트까지 의존관계 자동 주입에 대해 스프링 프레임워크가 어떤 방식으로 수행하는지에 대해 알아보았다. 이번 포스트에는 전체적인 정리와 동일한 타입의 여러 빈이 모두 필요할 때, 그리고 자동 주입과 수동 주입에 대한 기준점에 대해 알아본다. 의존관계 주입 방식과 자동 의존관계 주입 의존관계 주입 방식 의존관계 주입 방식은 생성자 주입, 수정자 주입, 필드 주입, 일반 메서드 주입의 4가지로 나뉘었다. 생성자 주입은 생성자를 이용하는 방식이었고, 수정자는 Setter를 이용하여 주입하는 자바 빈 프로퍼티 접근 방식을 차용하였다. 필드 주입은 말 그대로 변수에 그대로 주입을 수행하는 방식이었고, 메서드 방식은 생성자와 동일하나 일반 메서드라는 점이 차이점이었다. 여기서 가장 안정적인 주입 방식은..