Spring 44

[Spring] 스프링 MVC로 웹 페이지 만들기

- 요구사항 분석 상품을 관리할 수 있는 서비스를 만들어볼 것이다. 스프링 MVC와 타임리프를 사용해 만들어보자. 상품 도메인 모델 상품 ID 상품명 가격 수량 상품 관리 기능 상품 목록 상품 상세 상품 등록 상품 수정 서비스 제공 흐름 현재 상황은 웹 퍼블리셔가 HTML, CSS를 만들어 제공한 상황이이다. 핵심 비지니스 로직을 개발하고 뷰 템플릿을 통해 동적인 HTML을 제공하도록 해보자! - 타임리프 타임리프의 핵심은 th:xxx 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존것을 대체한다는 점이다. th:xxx 이 없으면 기존 HTML의 xxx 속성이 그대로 사용된다. HTML을 파일로 직접 열었을 때, JSP 같은 뷰 템플릿 엔진의 경우 자바 코드가 섞여있어 깨지는 상황이 많지만 타임리프에서 ..

Spring 2023.07.15

[Spring] 스프링 MVC 기본 기능 - HTTP 요청, 응답 처리하기

지난 포스팅에서는 스프링 MVC 프레임워크의 전체적인 구조, 아키텍쳐에 대해서 알아봤다. 이번 포스팅에서는 본격적으로 스프링 MVC를 다루는 방법에 대해서 알아보자! 지난 포스팅 : https://dong-woo.tistory.com/83 [Spring] 스프링 MVC 구조 이해하기 이전 포스팅에서는 프론트 컨트롤러 패턴을 도입한 MVC 프레임워크를 버전 1부터 5까지, 점진적으로 발전시키며 개발해봤다. 결과적으로 V5에서는 어댑터 패턴을 도입해, 보다 유연한 MVC 프레임 dong-woo.tistory.com - 로깅 운영 시스템에서는 System.out.println()과 같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않는다. 별도의 로깅 라이브러리를 사용해 로그를 출력한다. 로그 라이브러리는 ..

Spring 2023.07.14

[Spring] 스프링 MVC 구조 이해하기

이전 포스팅에서는 프론트 컨트롤러 패턴을 도입한 MVC 프레임워크를 버전 1부터 5까지, 점진적으로 발전시키며 개발해봤다. 결과적으로 V5에서는 어댑터 패턴을 도입해, 보다 유연한 MVC 프레임워크를 만들 수 있었다. 지속적인 개선과 발전으로 만들어진 프레임워크 V5는 스프링 MVC와 매우 유사한 형태까지 도달했다. 사용하던 용어들이 어떻게 매칭되는지, 스프링 MVC는 어떻게 동작하는지 알아보고 직접 프레임워크 V5를 스프링 MVC 구조로 만들어보자. 이전 포스팅 : https://dong-woo.tistory.com/80 [Spring] 프론트 컨트롤러를 도입한 MVC 프레임워크 만들기 이전 포스팅에서 서블릿 + JSP를 활용한 MVC 패턴으로 웹 애플리케이션을 설계해봤다. 컨트롤러와 뷰의 역할을 나누..

Spring 2023.07.11

[Spring] 프론트 컨트롤러를 도입한 MVC 프레임워크 만들기

이전 포스팅에서 서블릿 + JSP를 활용한 MVC 패턴으로 웹 애플리케이션을 설계해봤다. 컨트롤러와 뷰의 역할을 나누어 설계함으로써. JSP파일에서는 오직 뷰 렌더링에만 집중할 수 있었다. 하지만 각종 컨트롤러(new-form, save, list)를 보면 중복되는 코드들이 있었다. 심지어 모두 서블릿으로 작성되었는데, response 객체는 사용하지도 않는 컨트롤러도 있다. 이러한 점들을 개선하기 위해 프론트 컨트롤러(Front-Controller)를 도입한 MVC 패턴으로 다시 만들어보고자 한다. 총 5가지의 버전을 통해 점진적으로 발전시켜 나갈 것이다! 이전 포스팅 : https://dong-woo.tistory.com/79 [Spring] 서블릿, JSP, MVC 패턴으로 회원 관리 웹 애플리케이..

Spring 2023.07.09

[Spring] 서블릿, JSP, MVC 패턴으로 회원 관리 웹 애플리케이션 만들기

지난 포스팅에서 서블릿을 통해 HTTP 요청 메세지를 어떻게 처리하고 응답을 보내는지 알아봤다. 본 포스팅에서는 간단한? 회원 관리 웹 애플리케이션을 만들어볼 것이다! 서블릿, JSP, MVC 패턴을 이용해서 '동일한 '웹 애플리케이션을 총 3번 만들어 본다. 가장 오래된 기술인 서블릿을 사용하면 생기는 불편한 점과 비효율적인 면이 무엇인지 알아보고, JSP를 사용했음에도 여전히 남아있는 비효율적인 면들을 살펴볼 것이다. 마지막으로 현재로써 최고의 방식인 서블릿 + JSP를 활용한 MVC 패턴에 존재하는 한계점은 무엇인지, 차근차근 알아가보자. - 회원 관리 웹 애플리케이션의 요구사항 회원 정보 이름 : username 나이 : age 기능 요구사항 회원 저장 전체 회원 목록 조회 설명 회원 리포지토리를..

Spring 2023.07.06

[Spring] 서블릿(Servlet)

- 서블릿이 뭐야? 클라이언트가 HTTP 요청을 보내고, 서버에서 응답을 보내주는 상황을 생각해보자. 요청을 보내면 당연하게 HTTP 요청 메세지가 생성되어 서버로 보내지고, 서버는 해당 메세지를 해석해 적절한 응답 메세지를 보내준다. HTTP 메세지의 양식에 맞게 요청 메세지이던 응답 메세지이던 누군가 대신 작성해줘야하는데 누가 해주는걸까? 내가 대신 해줄게~ 나 서블릿이야~ 실제 웹 애플리케이션에서 HTTP 통신이 이뤄지려면 TCP/IP 통신 대기부터, 요청 메세지 내 헤더, 바디 내용 파싱, 응답 메세지 내 헤더, 바디 생성 TCP/IP 응답 전달, 소켓 종료 등 개발자는 많은 일을 해야만 한다. 하지만! HTTP 요청, 응답 메세지를 직접 하나하나 만들지 않아도 대부분의 필요한 내용은 서블릿이라는..

Spring 2023.07.05

[Spring] 스프링 빈 스코프

- 빈 스코프? 지금까지는 스프링 빈이 컨테이너의 시작과 함께 생성되어 스프링 컨테이너가 종료될 때 까지 유지된다고 배웠다. 이는 기본적으로 스프링 빈이 싱글톤 스코프로 생성되기 때문이다. 스코프는 빈이 존재할 수 있는 범위를 뜻한다 스프링은 다음과 같이 다양한 스코프를 지원한다. 1. 싱글톤 : 기본 스코프이며 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 2. 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 DI까지만 관여하고 더는 관리하지 않는, 매우 짧은 스코프이다. 3. request : 웹 요청이 들어오고 나갈 때 까지 유지되는 스코프이다. 4. session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프이다. 등등 여러가지 스코프가 존재한다. 빈 스코프는 ..

Spring 2023.07.03

[Spring] 스프링 빈 생명주기 콜백

- 빈 생명주기 콜백? 데이터베이스 커넥션 풀이나 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 객체 생성 --> 의존관계 주입 의 간단한 라이프 사이클을 가진다. 스프링은 의존관계 주입이 완료되면, 스프링 빈에게 콜백 메소드를 통해 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 따라서 안전하게 종료 작업을 진행할 수 있다. 전체적인 흐름은 아래와 같다. 스프링 컨테이너 생성 -> 스프린 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 컨테이너 종료 그럼 이제 콜백을..

Spring 2023.07.03

[Spring] 의존관계 자동주입, @Autowired

- 의존관계 주입의 4가지 방법 이전 포스팅에서는 @ComponentScan, @Component를 통해 자동으로 스프링 컨테이너에 빈을 등록하는 방법을 알아봤다. 스프링 빈을 자동으로 등록하는건 좋았지만 의존관계가 연결이 안됐는데, 이번 시간에는 의존관계를 자동으로 주입하는 방식들을 알아보자. * 이전 포스팅 : https://dong-woo.tistory.com/67 [Spring] 컴포넌트 스캔, @ComponentScan - 컴포넌트 스캔과 의존관계 자동 주입 시작하기 이전 포스팅까지는 스프링 빈을 등록할 때 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 등록할 빈의 dong-woo.tistory.com 의존관계 주입은 @Autowired를 이용한..

Spring 2023.07.02

[Spring] 컴포넌트 스캔, @ComponentScan

- 컴포넌트 스캔과 의존관계 자동 주입 시작하기 이전 포스팅까지는 스프링 빈을 등록할 때 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 등록할 빈의 수가 적다면 문제가 없겠지만 수십, 수백개가 되면 일일이 등록하기도 귀찮고 누락하는 문제가 발생한다. 그래서 스프링에는, 설정 정보 파일이 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 거기에 더해서 의존관계까지 자동으로 주입하는 @Autowired라는 기능도 제공한다! - @ComponentScan, 새롭게 등장한 AutoAppConfig 기존 설정 정보 파일은 사용하지 않을것이니 새로운 설정 정보 파일 'AutoAppConfig' 을 생성하자. // AutoAppConfig.j..

Spring 2023.06.26