본문 바로가기

Spring Study44

[MVC 패턴] 타임리프 (Thymeleaf) - 스프링 통합과 폼 스프링 통합으로 추가되는 기능들 - 스프링의 SpringEL 문법 통합 - ${@myBean.doSomething()} 스프링 빈 호출 지원 - 편리한 폼 관리를 위한 추가 속성 th:object (기능 강화, 폼 커맨드 객체 선택) th:field, th:errors, th:errorclass - 폼 컴포넌트 기능 checkbox, radio button, List 등을 편리하게 사용할 수 있는 기능 지원 - 스프링 메시지, 국제화 기능의 편리한 통합 - 스프링의 검증, 오류 처리 통합 - 스프링의 변환 서비스 통합 (ConversionSerivce) 입력 폼 처리 - th:object : 커맨드 객체를 지정한다 - *{. . .}: 선택 변수 식이라고 한다. th:object에서 선택한 객체에 접근한.. 2023. 8. 18.
[MVC 패턴] 타임리프 (Thymeleaf) 타임리프 (Thymeleaf) 타임리프는 컨트롤러가 전달하는 데이터를 이용해 동적으로 화면을 만들어주는 역할을 하는 뷰 템플릿 엔진이다. 타임리프 특징 서버 사이드 HTML 렌더링 (SSR) - 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링하는 용도로 사용된다. 내츄럴 템플릿 - 타임리프는 순수 HTML을 최대한 유지하려는 특징이 있다. - 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용할 수 있는 타임리프의 특징을 의미한다. 스프링 통합 지원 - 타임리프는 스프링과 자연스럽게 통합되고, 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원한다. 타임리프 기본 기능 타임리프 사용 선언 기본 표현식 간단한 표현: 변수 표현식: ${. . .} 선택 변수 표현식: *{. . .} 메시지 표현식: .. 2023. 8. 16.
[MVC 패턴] MVC 기본 기능 로깅 (Logging) 운영 시스템에서는 System.out.println() 보다는 별도의 로깅 라이브러리를 사용해 로그를 출력한다. 로그 선언 방법 (3가지) private Logger log = LoggerFactory.getLogger(getClass()); private static final Logger log = LoggerFactory.getLogger(Xxx.class) @Slf4j //Lombok 사용 로그 호출 방법 log.info("hello") log.info("info log={}", name); 로그 사용시 장점 - 쓰레드 정보, 클래스 이름 같은 부가 정보를 함께 볼 수 있고, 출력 모양을 조정할 수 있다. - 로그 레벨에 따라 개발 서버에서는 모든 로그를 출력하고, 운영서버.. 2023. 8. 15.
[MVC 패턴] MVC 구조 MVC 프레임워크 만들기에서 설명한 직접 만든 MVC 프레임워크 구조와 SpringMVC 구조를 비교해 보자 [MVC 패턴] MVC 프레임워크 만들기 프론트 컨트롤러 (Front Controller) 프론트 컨트롤러 패턴 특징 - 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 - 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 - 입구가 하나 wodlszz.tistory.com 직접 만든 프레임워크 → 스프링 MVC 비교 - FrontController → DispatcherServlet - handlerMappingMap → HandlerMapping - MyHandlerAdapter → HandlerAdapter - ModelView → ModelAndView - viewResolver.. 2023. 8. 14.
[MVC 패턴] MVC 프레임워크 만들기 프론트 컨트롤러 (Front Controller) 프론트 컨트롤러 패턴 특징 - 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 - 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 - 입구가 하나, 공통 처리 가능 - 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 - DispatcherServlet이 Front Controller 패턴으로 구현되어 있음 뷰 리졸버 (View Resolver) - MyView view = viewResolver(viewName): 컨트롤러가 반환한 논리 뷰 이름을 실제 물리 뷰 경로로 변경한다. 실제 물리 경로가 있는 MyView 객체를 반환한다. - 뷰 객체를 통해 HTML 화면을 렌더링 한다. - 뷰 객체의 render()는 모델 .. 2023. 8. 12.
[MVC 패턴] JSP / MVC 패턴 JSP - 자바의 import 문과 같다 - 이 부분에는 자바 코드를 입력할 수 있다. - 이 부분에는 자바 코드를 출력할 수 있다. [MVC 패턴] 서블릿 (Servlet) @ServletComponentScan @SpringBootApplication public class ServletApplication{ public static void main(String[] args){ SpringApplication.run(ServletApplication.class, args); } } 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @S wodlszz.tistory.com 이 전에 정리한 서블릿 (Servlet)과 JSP는 몇가지 한계점을 가지고 있다. 서블릿으로 개발할 때는 뷰(view)화면을.. 2023. 8. 9.
[MVC 패턴] 서블릿 (Servlet) @ServletComponentScan @SpringBootApplication public class ServletApplication{ public static void main(String[] args){ SpringApplication.run(ServletApplication.class, args); } } 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponentScan을 지원한다. package hello.servlet.basic; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import jav.. 2023. 8. 8.
[Spring 기본] 의존관계 자동 주입 의존관계 주입 방법 1. 생성자 주입 2. 수정자 주입 (setter 주입) 3. 필드 주입 4. 일반 메서드 주입 생성자 주입 - 이름 그대로 생성자를 통해 의존 관계를 주입 받는 방법 - 생성자 호출 시점에 딱 1번만 호출되는 것이 보장 - 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy .. 2023. 8. 7.
[Spring 기본] 컴포넌트 스캔 (Component Scan) 컴포넌트 스캔 (Component Scan) - 스프링에서는 설정 정보(AppConfig.class) 없이 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능 제공 - 스프링 빈을 등록할 때는 의존관계를 자바 코드로 직접 등록하는 방법 / 컴포넌트 스캔과 자동 의존관계 설정하는 @Autowired를 사용하는 방법이 있음 - @ComponentScan은 탐색 위치에 @Component가 붙은 모든 클래스를 스프링 빈으로 등록 - @Configuration, @Service, @Repository, @Controller, 등의 어노테이션에도 전부 @Component이 포함되어 있어 자동으로 컴포넌트 스캔의 대상 - @Autowired: 의존관계 자동 주입 ■ 컴포넌트 스캔과 자동 의존관계 주입 동작 - @Co.. 2023. 8. 4.
[Spring 기본] 싱글톤 컨테이너 (Singleton Container) ■ 웹 애플리케이션과 싱글톤 - 스프링은 기업용 온라인 서비스 기술을 지원하기 위해 탄생 - 대부분이 웹 애플리케이션 / 웹이 아닌 개발도 얼마든지 개발 가능 - 웹 애플리케이션은 보통 여러 고객이 동시 요청 - 기존에 만들었던 스프링 없는 순수한 DI 컨테이너인 AppConfig는 요청 할 때마다 객체 새로 생성 - 메모리 낭비 → 해결방안: 싱글톤 패턴!! ■ 싱글톤 패턴 - 클래스의 인스턴스(객체)가 딱 1개만 생성되는 것을 보장하는 디자인 패턴 - 객체 인스턴스를 2개 이상 생성하지 못하도록 방지 → private 생성자를 사용해 외부에서 임의로 new 키워드를 사용하지 못하도록 함 ■ 싱글톤 패턴 구현 방법 - static 영역에 객체 instance를 미리 하나 생성 - 오직 getInstan.. 2023. 8. 3.