[Spring] 스프링 MVC - 기본 기능
·
Spring
프로젝트 생성 Welcome 페이지 만들기Jar사용시 /resources/static/ 위치에 index.html(War - src/main/webapp/위치에 index.html) 로깅System.out.println()로 콘솔을 사용해 정보 출력하지 않고, 별도의 로깅 라이브러리를 사용해 로그 출력함. 로깅 라이브러리스프링 부트 라이브러리를 사용하면 스프링 부트 로깅 라이브러리( spring-boot-starter-logging)가 함께 포함됨SLF4J - http://www.slf4j.org (인터페이스)Logback - http://logback.qos.ch (그 구현체)스프링 부트가 기본으로 제공하는 Logback을 대부분 사용 로그 선언private Logger log = LoggerFacto..
[Spring] 스프링 MVC - 구조 이해
·
Spring
스프링 MVC 전체 구조직접 만든 MVC 프레임워크 구조 SpringMVC 구조 직접 만든 MVC 프레임워크 → 스프링 MVC 비교FrontController → DispatcherServlet (✅)handlerMappingMap → HandlerMapping (✅)MyHandlerAdapter → HandlerAdapterModelView → ModelAndViewviewResolver → ViewResolver(인터페이스)MyView → View(인터페이스) DispatcherServlet 구조org.springframework.web.servlet.DispatcherServlet 스프링 MVC의 프론트 컨트롤러가 바로 디스패처 서블릿(DispatcherServlet)으로 핵심 1. Dispatch..
[Spring] MVC 프레임워크 만들기
·
Spring
프론트 컨트롤러 패턴공동처리 해결위해 프론트 컨트롤러 패턴 적용 FrontController 패턴 특징클라이언트 모든 요청을 하나의 프론트 컨트롤러 서블릿이 받아 요청에 맞는 컨트롤러 찾아 호출함(입구 하나, 공통 처리 가능)프론트 컨트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨 스프링 웹 MVC와 프론트 컨트롤러스프링 웹 MVC의 핵심도 바로 FrontController스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있음 프론트 컨트롤러 도입 전 / 후 프론트 컨트롤러 도입 - v1프론트 컨트롤러를 단계적으로 도입해보자.우선 기존 코드를 최대한 유지하면서, 프론트 컨트롤러 도입 V1 구조프론트 컨트롤러 : 컨트롤러 매핑 1. Contr..
[Spring] 서블릿, JSP, MVC 패턴
·
Spring
회원 관리 웹 애플리케이션 요구사항회원은 이름(username)과 나이(age) 정보를 가진 도메인 객체를 만들고 회원 정보를 저장하고 조회하는 기능을 구현해보자-서블릿, JSP, MVC (1) 회원 정보   이름: username   나이: age(2) 기능 요구사항   회원 저장   회원 목록 조회 1. Member - 회원 도메인 모델-main.java.hello.servlet.domain.member.Member.java@Getter @Setterpublic class Member { private Long id; private String username; private int age; public Member() { } public Member(String us..
[Spring] 서블릿 (2)
·
Spring
HTTP 요청 데이터HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법 주로 3가지 방법GET - 쿼리 파라미터/url?username=hello&age=20메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달ex) 검색, 필터, 페이징등에서 많이 사용하는 방법POST - HTML Formcontent-type: application/x-www-form-urlencoded메시지 바디에 쿼리 파리미터 형식으로 전달 username=hello&age=20ex) 회원 가입, 상품 주문, HTML Form 사용HTTP message body에 데이터를 직접 담아서 요청HTTP API에서 주로 사용, JSON, XML, TEXT그대로 담아데이터 형식은 주로 JSON 사용POST..
[Spring] 서블릿 (1)
·
Spring
프로젝트 생성-jsp 쓸거면 Jar말고 War!Hello 서블릿스프링 부트 환경에서 서블릿을 등록, 사용 참고서블릿은 톰캣 같은 웹 애플리케이션 서버를 직접 설치하고,그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음, 톰캣 서버를 실행하면 된다. 하지만 이 과정은 매우 번거롭다. 스프링 부트는 톰캣 서버를 내장하고 있으므로, 톰캣 서버 설치 없이 편리하게 서블릿 코드를 실행할 수 있다. 1. 스프링 부트 서블릿 환경 구성-main/java/servlet/ServletApplication.java//현 패키지 및 하위 패키지에서 @WebServlet, @WebFilter, @WebListener가 붙은 클래스를 찾아//자동으로 서블릿을 등록하고 실행할 수 있도록 도와주는 어노테이션@ServletCo..
[Spring] 웹 애플리케이션 이해
·
Spring
웹 서버, 웹 애플리케이션 서버 웹 서버(Web Server)HTTP 기반 동작정적 리소스 제공, 기타 부가 기능정적(파일) HTML, CSS, JS, 이미지, 영상ex) NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server)HTTP 기반 동작웹 서버 기능 포함 + 정적 리소스 제공 가능프로그램 코드를 실행해서 애플리케이션 로직 수행 (ws와 차이❗️) -사용자마다 다르게 보여주기 가능동적 HTML 생성 가능, HTTP API(JSON) 가능WAS 에서 서블릿, JSP, 스프링 MVC 동작 가능ex) 톰캣(Tomcat) Jetty, Undertow WS 와 WAS 차이웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직 실행하는 서버자바는 서브릿 컨테이너..
[Spring] HTTP (2)
·
Spring
HTTP 메서드1. HTTP 메서드 종류GET : 리소스 조회POST : 새 리소스 등록, 요청 데이터 처리, 다른 메소드로 처리하기 어려운 경우도 사용PUT : 리소스를 대체(리소스 없으면 생성,있으면 덮어씀)PATCH : 리소스를 부분적으로 변경DELETE : 리소스를 제거ex.) 클 { "age" : 50 } → 서버 { "name": "yy", "age": 20 }PUT → 서버 { "age" : 50 }PATCH → 서버 { "name": "yy", "age" : 50 } 2. HTTP 메서드 속성안전 : 호출해도 리소스 변경되지 않는다. (GET)멱등 : 메서드를 여러 번 호출해도 결과가 항상 똑같다. (GET, PUT, DELETE )POST > 두 번 호출하면 같은 결제가 중복해서 발생..
[Spring] HTTP(1)
·
Spring
인터넷 네트워크1. 인터넷 : 전 세계 컴퓨터들을 하나로 연결하는 거대한 컴퓨터 통신망클라이언트 바로옆 서버있으면, 인터넷이 필요없이 케이블만 연결하면 됨실제 세계에서는 클라이언트와 서버가 물리적으로 굉장히 떨어져있기때문에중간에 있는 인터넷이라고 하는 서버 노드들의 집합을 통해서 통신을 하게 됨이 거대 통신말에서 통신하기 위해서 규칙인 인터넷 프로토콜(통신규약)인 IP 필요 2. 인터넷 프로토콜(IP) : 인터넷 별 고유 주소지정한 IP주소에 '패킷'이라는 통신 단위로 데이터를 전달함패킷 : 패킷은 출발지 IP, 목적지 IP,기타..., 전송데이터 의 정보 담음한계점 :(1) 비연결성 : 대상이 없거나 서비스가 정상적이지 않더라도 무조건 패킷을 전송함(2) 비신뢰성 : 중간에 패킷이 사라질 수도 있고, ..
[Spring] 빈 스코프
·
Spring
빈 스코프란? 빈 유지 범위 스프링 빈의 스코프 종류1. 싱글톤 -기본 스코프스프링 컨테이너가 시작될 때 생성되고, 컨테이너 종료 시까지 유지됨.@Scope("singleton") (기본값이라 명시 안 해도 됨)@Component@Scope("singleton")public class SingletonBean { public SingletonBean() { System.out.println("싱글톤 빈 생성"); }}더보기public class SingletonTest { @Test public void singletonBeanFind() { //컨테이너, SingletonBean 생성 AnnotationConfigApplicationContext a..