본문 바로가기

분류 전체보기64

[MVC 패턴] 메시지, 국제화 메시지 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 의미한다. 사용 예시 messages.properties라는 메시지 관리용 파일을 생성 item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 각 HTML에서 다음과 같이 해당 데이터를 key 값으로 불러서 사용 국제화 messages.properties를 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 사용 예시 messages_en.properties item=Item item.id=Item ID item.itemName=Item Name item.price=price item.quantity=quantity messages_ko.properties item=상품 i.. 2023. 8. 22.
[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.
[JAVA] 추상클래스 (abstract) / 인터페이스 (interface) ■ 추상클래스 (abstract) - 추상 메서드를 선언하여 상속을 통해 자식 클래스에서 완성하도록 유도하는 클래스 "미완성 설계도" - 클래스를 abstract로 지정하면 new를 통해 객체 생성 X - interface의 메소드와 다르게 구현 부분 X - abstract로 선언한 메소드를 반드시 자식 클래스에서 구현해야 함(오버라이딩) - 다중 상속 X ■ Code abstract class 클래스A{ public abstract void 메서드(); } class classB extends classA{ @Override public void 메서드(){ ... //구현 } } ■ 인터페이스 (interface) - 추상 클래스와는 다르게 구현부가 있는 일반 메서드, 일반 변수 멤버 등을 가질 수 .. 2023. 8. 7.