재_패캠Java/Spring - 5주차

하파타카·2023년 8월 9일
0

패캠JAVA, Spring과정

목록 보기
16/20

Spring MVC

HTTP요청과 응답

URL로 서버에 요쳥을 보내면 HttpServeltRequest가 객체를 만든 후 매개변수로 전달한다.

@Controller
public class RequestInfo{
	@RequestMapping("/requestInfo")
    public vovid main(HttpServletRequest request){
    	// 응답시 처리할 동작
    }
}

HttpServletRequest의 메서드

http://52.78.79.190:8080/ch2/requestInfo?year=2021&month=10&day=1

getRequestURL() : http://52.78.79.190:8080/ch2/requestInfo
getRequestURI() : /ch2/requestInfo
getQueryString() : ?year=2021&month=10&day=1

클라이언트와 서버

클라이언트 client : 서비스를 요청하는 애플리케이션
서버 server : 서비스(service)를 제공하는 애플리케이션

Tomcat의 설정파일

톰캣설치경로/conf/server.xml : Tomcat서버 설정 파일
톰캣설치경로/conf/web.xml : Tomcat의 모든 web app의 공통 설정
웹앱이름/WEB-INF/web.xml : web app의 개별 설정

=> 인텔리제이의 경우 톰캣설치경로가 아닌 프로젝트 경로 아래에 위치함.

프로토콜 Protocol

  • 통신을 위한 서로간의 약속.
  • 주고 받을 데이터에 대한 형식을 정의한 것.

HTTP

Hyper Text Transfer Protocol
텍스트 기반의 프로토콜. 단순하고 일기 쉽다.

  • 상태를 유지하지 않음
    => 클라이언트의 정보를 저장하지 않음(stateless) (=같은 클라이언트의 요청인지 구분불가)
  • 확장이 가능함
    => 커스텀 헤더(Header) 추가 가능
  • HTTP 응답 메시지 format : 상태라인(status line) - 헤더(header) - 바디(body)

HTTP 메서드

GETPOST
서버의 리소스를 가져오기 위해 설계됨서버에 데이터를 올리기 위해 설계됨
QUERY STRING을 통해 데이터 전달(소용량)전송 데이터 크기에 제한이 없음(대용량 가능)
URL에 데이터가 유출되어 보안에 취약데이터를 요청 메시지의 body에 담아 전송
데이터 공유에 유리보안에 유리, 데이터 공유는 불리
ex) 검색엔진의 검색단어 전송ex) 게시판 글쓰기, 로그인, 회원가입

GET, POST 외에도 PUT, PATCH, DELETE 등의 요청이 있음.

상태코드

요청 시 코드에 따른

상태코드의미
1xxInformational (거의 쓰이지 않음)
2xxSuccess 성공
3xxRedirect 다른 URL로 요청필요
4xxClient Error
5xxServer Error

텍스트 파일과 바이너리 파일

  • 텍스트 파일 : 문자만 저장되어 있는 파일 → 숫자를 문자로 변환 후 씀. 읽기는 쓸때 문자로 변환했으므로 문자만 사용.
  • 바이너리 파일 : 문자와 숫자가 저장되어 있는 파일 → 데이터를 있는 그대로 읽고 씀

=> TextEditor로 열었을때 알아볼 수 없으면 바이너리 파일

Base64

바이너리 데이터를 텍스트 데이터로 변환할 때 사용.
64진법은 '0'~'9', 'A'~'Z', 'a'~'z', '+', '/' 모두 64개 문자(6bit)로 구성됨.
Base64를 사용하면 이미지를 텍스트 형태로 표현할 수 있음.

출처: https://en.wikipedia.org/wiki/Base64

MVC 패턴

OOP 5대 설계원칙: SOLID

  1. SRP - 단일 책임의 원칙: 하나의 메서드는 하나의 책임만 진다.(책임 = 관심사)
    => 이 원칙에 따라 분리를 함

분리의 구분
1) 관심사의 분리
2) 변하는 것과 변하지 않는 것의 분리
3) 공통코드의 분리


출처: https://developer.mozilla.org/ko/docs/Glossary/MVC

JSP와 Servlet

서블릿은 기본적으로 하나의 인스턴스를 사용하므로 싱글톤 패턴을 사용.
JSP는 HTML문서에 Java코드를 넣은 것.

서블릿과 spring 모두 싱글톤인것은 동일하지만 서블릿은 요청이 올때 객체를 만드므로 lazy-init, spring은 요청이 오지 않아도 객체를 생성해두므로 early-init이라는 차이가 있음.(spring에서 서블릿의 단점을 개선한 것)

JSP의 기본객체

생성없이 사용할 수 있는 객체.(request, response, session, out 객체 등)

유효 범위(scope)와 속성(attribute)

HTTP는 상태정보를 저장하지 않으므로 저장소가 필요함.

저장소의 종류(Map형식으로 저장됨)

기본객체유효범위설명
pageContext1개 JSP페이지JSP페이지의 시작부터 끝까지. 해당 JSP내부에서만 접근가능. 페이지당 1개.
request1개 이상의 JSP페이지요청의 시작부터 응답까지. 다른 JSP로 전달가능. 요청마다 1개.
sessionn개 JSP페이지session의 시작부터 종료까지(로그인~로그아웃). 클라이언트마다 1개.
applicationcontext 전체WebApplication의 시작부터 종료까지. context내부 어디서나 접근가능. 모든 클라이언트가 공유. context마다 1개.
  • pageContext : 지역변수(lv)를 EL에서 사용하려면 한 페이지내에서 변수를 공유할 수 있게 pageContext라는 저장소를 만들어 저장해야 함. 해당 페이지 내에서만 공유가 가능.
  • application : 전체에서 접근가능한 저장소.
  • session : 사용이 편리하지만 클라이언트마다 하나씩 객체를 만들기때문에 저장소 중 서버의 부담이 가장 큼. 최소한의 데이터만 담도록 권장.
  • request : 요청이 처리되는 동안만 유지되는 객체. 서버에 부담이 가장 적음. 되도록 다른 페이지에 정보를 전달할 경우 request객체를 사용할것을 권장.

EL과 JSTL

둘 다 JSP를 더 짧고 편리하게 사용하기 위해 고안됨.
EL은 하나의 객체에서 값을 꺼낼때마다 일일히 aa.get메서드().get메서드() 처럼 접근하던 것을 aa.속성명.속성명 형식으로 접근할 수 있어 코드단축에 효과적.
단, 객체를 저장할 수 없어 request등의 저장소를 따로 사용해야 함.

JSTL은 if문 등의 구조를 JSP에서 더 가시성이 좋고 사용하기 편하도록 하기 위해 사용함.
태그 사용.

Filter

공통적인 요청 전처리와 응답 후 후처리에 사용.
예시 : 로깅, 인코딩 등

@RequestParam과 @ModelAttribute

@RequestParam

요청의 파라미터를 연결할 매개변수에 붙이는 어노테이션.

@RequestMapping("/requestParam2")
public String main2(@RequestParam(required=true) int year) {...}

required : 해당 필드가 쿼리스트링에 존재하지 않을 때 오류로 처리할 것인지 설정하는 속성. true일 경우 필수입력, false일 경우 필수입력이 아니지만 필수가 아닐 경우 때에 따라 defaultValue속성을 이용해 기본값을 지정해줄 필요가 있다.

@ExceptionHandeler

쿼리 스트링 등의 에러 발생 시 에러페이지가 아닌 지정한 페이지를 뜨게 하는 등 에러핸들링에 사용하는 어노테이션.

@ExceptionHandeler(Exception.class)
public String catcher(Exception ex){
	ex.printStackTrace();
    return "yoilError";
}

=> 에러 발생 시 yoilError.jsp페이지가 뜨도록 해줌

@ModelAttribute

적용 대상을 Model의 속성으로 자동 추가해주는 어노테이션.
반환 타입 또는 컨트롤러 메서드 매개변수에 적용가능.

@RequestMapping("/getYoilMVC5")
public String main(@ModelAttribute("myDate") MyDate, Model m) {...}

=> "myDate"는 속성의 키값으로, 생략이 가능하며 생략 시 속성명의 맨 첫글자를 소문자로 바꾼 이름의 키를 자동으로 지정한다.
또한 @ModelAttribute어노테이션 자체도 생략가능.

컨트롤러 매개변수에 따른 차이

매개변수의 자료형에 따라 생략 시 자동으로 설정되는 어노테이션이 다르다.

  • @RequestParam : 기본형, String
  • @ModelAttribute : 참조형 변수

WebDataBinder

검증오류가 발생할 경우 오류 내역을 저장하는 객체
이때 BindingResult객체는 반드시 @ModelAttribute객체 뒤에 위치해야 함에 주의.

참고링크 - Validation 간단 정리 - 1 (BindingResult, Validator)

@Getmapping, @Postmapping

@RequestMapping 대신 @Getmapping, @Postmapping 사용 가능.
맵핑한 URL이 같을 경우 원래는 오류가 나지만 전송방식이 다를 경우 오류발생x.

@Getmapping

@Getmapping("지정url")시 지정한 경로로 들어온 요청을 Get방식으로 처리하는 어노테이션.

@Postmapping

@Postmapping("지정url")시 지정한 경로로 들어온 요청을 Post방식으로 처리하는 어노테이션.

@RequestMapping

맵핑될 URL의 공통부분을 @RequestMapping으로 클래스에 적용.

@Controller
@RequestMapping("/register")
public class RegisterConroller {...}

=> 이 클래스 내의 URL맵핑값의 맨앞에 /register를 붙여준다는 의미.

profile
천 리 길도 가나다라부터

0개의 댓글