본문 바로가기

MVC7

[SpringBoot] 웹 서버와 서블릿 컨테이너 JAR, WAR JAR란? 자바는 여러 클래스와 리소스를 묶어서 JAR(Java Archive)라고 하는 압축 파일을 만들 수 있다. 이 파일은 JVM 위에서 직접 실행되거나 다른 곳에서 사용하는 라이브러리로 제공된다. 직접 실행하는 경우 main() 메서드가 필요하고, MANIFEST.MF 파일에 실행할 메인 메서드가 있는 클래스를 지정해두어야 한다. 즉, Jar는 클래스와 관련 리소스를 압축한 단순한 파일이다. 필요한 경우 이 파일을 직접 실행할 수도 있고, 다른 곳에서 라이브러리로 사용할 수도 있다. WAR란? WAR(Web Application Archive)라는 이름에서 알 수 있듯이 WAR 파일은 웹 애플리케이션 서버(WAS)에 배포할 때 사용하는 파일이다. JAR 파일이 JVM 위에서 실행된.. 2023. 11. 21.
[MVC 패턴] API 예외 처리 API 예외 처리 - 스프링 부트 기본 오류 처리 @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {} @RequestMapping public ResponseEntity error(HttpServletRequest request) {} - errorHtml(): produces = MediaType.TEXT_HTMl_VALUE: 클라이언트 요청의 Accept 헤더 값이 text/html인 경우에는 errorHtml()을 호출해서 view를 제공한다. - error(): 그 외 경우에 호출되고 Resp.. 2023. 9. 4.
[MVC 패턴] 검증1 - Validation 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. * 클라이언트 검증, 서버검증 클라이언트 검증은 조작할 수 있으므로 보안에 취약하다. 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수이다. API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류를 API 응답 결과에 잘 남겨주어야 한다. 상품 등록 검증 코드 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과를 보관 Map errors = new HashMap(); //.. 2023. 8. 24.
[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 프레임워크 만들기 프론트 컨트롤러 (Front Controller) 프론트 컨트롤러 패턴 특징 - 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받음 - 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출 - 입구가 하나, 공통 처리 가능 - 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 - DispatcherServlet이 Front Controller 패턴으로 구현되어 있음 뷰 리졸버 (View Resolver) - MyView view = viewResolver(viewName): 컨트롤러가 반환한 논리 뷰 이름을 실제 물리 뷰 경로로 변경한다. 실제 물리 경로가 있는 MyView 객체를 반환한다. - 뷰 객체를 통해 HTML 화면을 렌더링 한다. - 뷰 객체의 render()는 모델 .. 2023. 8. 12.
[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.