분류 전체보기
-
요청 매핑, 로그Spring 2022. 4. 19. 02:20
💡 로그 log - 운영 시스템에서 System.out.println()같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해 로그를 출력한다 - 실무에서는 항상 로그를 사용해야 한다 📌 @Slf4j - 롬복을 사용한다 👉 로그 호출 - log.info("hello") - log.info("data={}", data) -> data=--------data내용 💡 요청 매핑 👉 PathVariable(경로 변수) 사용 /** * PathVariable 사용 * 변수명이 같으면 생략 가능 * @PathVariable("userId") String userId -> @PathVariable userId */ @GetMapping("/mapping/{userId}") publ..
-
스프링 MVC 구조, 간단한 애노테이션Spring 2022. 4. 19. 01:48
💡 SpringMVC 구조 - FrontController가 DispatcherServlet이다 컴포넌트 스캔의 대상) - 스프링 MVC에서 컨트롤러로 인식 - 반환 값이 String이면 뷰 이름으로 인식된다 -> 뷰를 찾고 뷰가 랜더링 된다 ❗ @RestController - 반환 값으로 뷰를 찾는 것이 아니라, HTTP 메시지 바디에 바로 입력한다 ex) return "ok"; => HTML 메시지 바디에 ok라는 메시지 출력 👉 @RequestMapping - 요청 정보 매핑한다 - 해당 URL이 호출되면 이 메서드가 호출된다 (메서드의 이름은 임의로 짓는다) - 대부분의 속성을 배열[]로 제공하므로 다중 설정이 가능하다. ex) @RequestMapping{"/save", "/cancel"} 👉 ..
-
FrontController 패턴, 어댑터 패턴Spring 2022. 4. 18. 18:15
💡 FrontController 패턴 - 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받는다 - 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아가 호출한다 - 입구를 하나로! - 공통 처리 가능 - 프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다 💡 어댑터 패턴 ❗ 어떤 개발자는 ControllerV3 방식으로 개발하고 싶고, 어떤 개발자는 ControllerV4 방식으로 개발하고 싶다면? => 어댑터 패턴을 사용하자 - 어댑터는 실제 컨트롤러를 호출하고, 그 결과로 ModelView를 반환해야 한다 - 프론트 컨트롤러에서 호출된것과 달리 어댑터를 통해 실제 컨트롤러가 호출된다 👉 핸들러 어댑터 - 어댑터 역할, 덕분에 다양한 종류의 컨트롤러를 호출할 수 있다 👉 핸들러 - ..
-
MVC 패턴Spring 2022. 4. 18. 18:06
🔎 MVC 패턴 등장 - 비즈니스 로직은 서블릿 처럼 다른곳에서 처리하고, JSP는 목적에 맞게 HTML로 화면(View)을 그리는 일에 집중하자 💡 Model View Controller * 웹 애플리케이션은 보통 MVC 패턴을 사용한다 - 하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나눈 것을 말한다 👉 컨트롤러 Controller - HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다 - 뷰에 전달할 결과 데이터를 조회해서 모델을 담는다 👉 모델 Model - 뷰에 출력할 데이터를 담아둔다 - 뷰가 필요한 데이터를 모두 모델에 담아 전달해주는 덕분에 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더..
-
JSPSpring 2022. 4. 18. 17:09
일일이 자바 코드로 HTML을 만들어 내는 것 보다 차라리 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있다면 더 편리할 것이다 => 템플릿 엔진 이용 🔎 템플릿 엔진을 사용하면 HTML 문서에서 필요한 곳만 코드를 적용해 동적으로 변경할 수 있다 종류) JSP, Thymeleaf, Freemarker 등 💡 JSP - JSP는 자바 코드를 그대로 다 사용할 수 있다 - : 이 부분에 자바 코드를 입력할 수 있다 - : 이 부분에 자바 코드를 출력할 수 있다 - 실행시 .jsp 까지 적어야 한다. 📌 JSP 라이브러리 추가 - build.gradle //JSP 추가 시작 implementation 'org.apache.tomcat.embed:tomcat-embed-jasper' i..
-
서블릿 ServletSpring 2022. 4. 18. 12:27
💡 서블릿 - 서버 쪽에서 실행되면서 클라이언트의 요청에 따라 동적으로 서비스를 제공하는 자바 클래스 - 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행 후, 웹 브라우저에 결과를 전송한다 - MVC 패턴에서 Controller로 이용된다 - html을 사용해 요청에 응답한다 @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) . . . } * @WebServelt : 서블릿 애노테이션 -..
-
타임리프 Thymeleaf카테고리 없음 2022. 4. 18. 11:22
💡 타임리프? - 컨트롤러가 전달하는 데이터를 이용해 동적으로 화면을 만들어주는 역할을 하는 뷰 템플릿 엔진 🔎 타임리프 특징 - 서버 사이드 HTML 렌더링 (SSR) : 서버로부터 완전하게 만들어진 html파일을 받아와 페이지 전체를 렌더링 하는 방식 - 네츄럴 템플릿 : 타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 확인할 수 있고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. : 순수 HTML을 그대로 유지하면서 뷰 템플릿도 사용 - 스프링 통합 지원 💡 사용하기 📌 라이브러리 추가 - Gradle -> build.gradle implementation 'org.springframework.boot:spring-boot-star..
-
메시지, 국제화Spring 2022. 4. 18. 02:30
❗ 기획자가 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하였다면? -> 단어를 다 찾아가면서 모두 변경해야 한다 => 해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문 ❓ 하드코딩 ex) 상품 등록 폼 => 상품 등록 폼과 같이 박혀 있는 코드를 말한다 💡 메시지 - 다양한 메시지를 한 곳에서 관리하도록 하는 기능 1. messages.properties 메시지 관리용 파일 작성한다 2. HTML에 key 값으로 해당 데이터를 불러 사용한다 => 타임리프 이용 #{ key } 💡 국제화 - 메시지 파일 (messages.properties)을 각 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다 ex) messages_en.properties / messages_ko.properties 💡..