요약

4. 스프링 요약 - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 2. 25. 14:08

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

요청 : 클라이언트가 서버에 데이터를 요청하는 과정
응답 : 서버가 클라이언트의 요청을 처리한 후 반환 하는 메시지

@Controller : 컨트롤러 클래스를 정의할 때 사용되는 애너테이션
외부에서 호출할 수 있는 원격 프로그램으로 등록

컨트롤러 클래스 : HTTP 요청을 처리하는 클래스, 뷰(View)로 전달할 데이터를 모델에 담아 반환하는 역할

@RequestMapping : HTTP요청 URL을 컨트롤러 메서드와 매핑하는 애너테이션, 클래스와 메서드에 사용될 수 있다.
클래스 : 해당 클래스의 모든 메서드에 대한 기본 URL 경로 설정
메서드 : 해당 메서드의 URL 경로 설정
매핑 : HTTP 요청을 특정 메서드에 연결하는 것

WAS : 서버에 있는 프로그램을 클라이언트에게 서비스해주는 프로그램

텍스트파일 : 문자만 저장되어 있는 파일
바이너리 파일 : 문자와 숫자가 저장되어 있는 파일

MIME(Multipurpose Internet Mail Extensions) : 텍스트 기반 프로토콜에 바이너리 데이터를 전송하는 것
Content-Type헤더 : 서버와 클라이언트가 주고받는 데이터의 타입을 지정한다.
타입 : text, image, audio, video, application

Base64 : 바이너리 데이터를 텍스트 데이터로 변환할 때 사용, 64개의 문자를 사용하여 데이터를 인코딩
인코딩 : 데이터를 특정 형식으로 변환하는 것
디코딩 : 인코딩된 데이터를 다시 원래의 데이터로 돌리는 것

SOLID
SRP : 단일 책임 원칙
하나의 메서드는 하나의 책임(관심사)만 진다는 원칙

OCP : 개방 폐쇄 원칙
기능을 추가할 때 기존 코드를 수정하지 않고, 새로운 기능은 기존 코드에 영향을 주지 않는 원칙

LSP : 리스코프 치환 원칙
부모 클래스를 사용하는 코드에서 자식 클래스를 대신 사용할 수 있어야 하고, 자식 클래스를 사용할 때 부모 클래스에서 예상했던 동작을 변경하거나 예외를 발생시키지 않아야한다는 원칙

ISP : 인터페이스 분리 원칙
특정 클라이언트를 위한 인터페이스는 그 클라이언트가 사용하지 않는 메서드를 포함해서는 안 된다는 원칙

DIP : 의존성 역전 원칙
상위 모듈은 하위 모듈에 의존해서는 안 되며, 두 모듈 모두 추상화에 의존해야 한다는 원칙

관심사(Concern) : 해야할 작업 
관심사의 분리 : 변하는것과, 자주 변하지 않는 것의 분리, 중복 코드의 분리
MVC패턴 : Model-View-Controller 애플리케이션의 기능을 세 가지 구성요소로 분리하여 개발하는 방법
Model(모델) : 데이터의 입력을 담당
View(뷰) : 데이터의 출력을 담당
Controller : HTTP의 요청을 처리(데이터의 처리)하고, 데이터를 모델에 담아 View에 반환하는 역할

Reflection API : 런타임 시점에 객체의 정보(클래스, 메서드, 필드 등의 구성 요소)를 동적으로 조작(조회, 수정, 호출)할 수 있게 해주는 API

서블릿(Servlet) : HTTP의 요청을 처리하는 클래스, 늦은 초기화(lazy-init) - Spring(빠른초기화 early-init)
HttpServletRequest : HTTP의 요청 정보를 담고있는 객체 
HttpServletResponse : HTTP의 응답을 전송하는 객체
서블릿의 생명주기 : 서블릿 생성-> 초기화 -> 요청 처리 -> 소멸

JSP(JavaServer Pages) : HTML 코드와 Java 코드를 결합하여 동적 웹 페이지를 생성할 수 있게 해주는 기술

HTTP의 특징 : 상태정보를 저장하지 않는다, 텍스트기반, 헤더 확장가능

JSP의 유효범위(scope)
pageContext : JSP페이지의 시작부터 끝까지, 해당 JSP내부에서만 접근가능 - 1개 JSP페이지
request : 요청의 시작부터 응답까지, 다른 JSP로 전달 가능, 요청마다 1개 - 1개 + JSP페이지
session : session의 시작부터 종료까지(로그인 ~ 로그아웃) 클라이언트마다 1개 - n개 JSP페이지
application : WebApplication의 시작부터 종료까지, context내부 어디서나 접근 가능 모든 클라이언트가 공유, context 마다 1개 - context 전체

Mapping의 종류
exact mapping : 정확히 일치하는 것
path mapping : 경로 매핑
extension mapping : 확장자 매핑
default mapping : 모든 주소 

EL(Expression Language) : 동적인 값을 쉽게 조작할 수 있는 기능, Scope에서 읽어온다.

서블릿 Filter : 필터는 요청이 서블릿에 도달하기 전에, 또는 응답이 클라이언트에게 반환되기 전에 처리 로직을 추가하는 기능, 전처리, 후처리

@RequestParam : 기본형, String에 기본 적용, 요청을 매개변수에 연결하는 애너테이션
required : 필수여부
defaultValue :  기본값지정 

Parameter : 클라이언트가 서버에 데이터를 전달하는 방법

@ModelAttribute : 참조형에 기본 적용, 적용 대상을 Model의 속성으로 자동 추가해주는 애너테이션, 반환 타입 또는 컨트롤러 메서드의 매개변수에 적용 가능, 이름 지정을 하지 않을시 변수의 첫글자를 소문자로 바꿔서 key값을 주소가 value값이 된다.

@PostMapping : 데이터를 서버로 전송하는 요청 - 쓰기, 생성 또는 수정 작업, 보안에 유리, 데이터 전달(대용량)
@GetMapping : 데이터를 가져오는 요청 - 읽기, 조회 작업, 데이터 공유에 유리, 데이터 전달(소용량)
DispatcherServlet : 클라이언트의 요청을 받아서 해당 요청에 맞는 컨트롤러로 전달
컨트롤러에서 처리한 결과를 뷰로 전달

URL인코딩 : URL에 포함될 수 없는 문자를 URL에 포함될 수 있는 문자로 변환하는 과정
URL디코딩 : URL 인코딩된 문자열을 원래의 문자로 복원하는 과정

redirect : 요청2번, 응답2번 - 클라이언트가 서버에게 요청을 보내면 서버는 어떠한 일을 처리하고 클라이언트에게 새롭게 요청할 곳을 알려준다, 주소 변경됨
forward : 요청1번, 응답1번 - 서버 내에서 요청을 다른 리소스로 전달하는 방식, 주소변경 없음

RedirectView : 컨트롤러에서 직접 리다이렉트를 처리하는 기능
JstlView : JSP에서 JSTL 태그를 사용할 수 있게 해주는 Spring MVC의 뷰.
InternalResourceView : Spring MVC에서 JSP 뷰를 사용하여 응답을 생성하는 기본적인 뷰 구현체, RequestDispatcher를 사용하여 JSP 페이지로 요청을 전달

쿠키 : 웹 서버가 클라이언트 브라우저에 데이터를 저장할 수 있게 해주는 작은 텍스트 파일,
세션 : 서로 관련된 요청, 응답 들을 하나로 묶은 것

fatURL : 16byte의 아이디값을 URL마다 붙여준것

세션 : 서로 관련된 요청, 응답 들을 하나로 묶은 것 - 쿠키(브라우저에 저장)를 이용
요청은 독립적이고 관계가 없다, browser마다 개별 저장소(session 객체)를 서버에서 제공 

@ExceptionHandler : 특정 예외가 발생할 때 자동으로 해당 예외를 처리할 수 있는 메서드를 호출하는 애너테이션
@ControllerAdvice : 모든 컨트롤러에서 발생하는 예외를 처리하는 클래스임을 명시
@ResponseStatus : 응답 메시지의 상태 코드를 변경하는 애너테이션
isErrorPage : JSP 페이지에서 오류 페이지로 지정된 페이지에서 사용하는 속성

WebDataBinder : 브라우저를 통해 요청받은 값이 실제 객체에 바인딩될때 중간역할을 한다.
타입변환, 데이터 검증
BindingResult : 예외가 발생하면 컨트롤러에게 바인딩 결과를 주고 컨트롤러가 처리하게 한다.
바인딩 : 클라이언트의 요청 데이터를 서버 측의 자바 객체에 연결하는 과정

Validator : 객체를 검증하기 위한 인터페이스 (ifxN)
@InitBinder : 하나의 Controller에서 동작

PropertyEditor : 양방향 타입 변환(String -> 타입, 타입 -> String) 특정 타입이나 이름의 필드에 적용 가능
PropertyEditor의 단점 : 인스턴스 변수를 사용 -> 싱글톤 사용 불가능
Converter : 단방향 타입 변환
Formatter : 양방향 타입 변환 - @NumberFormat, @DateTimeFormat

Errors : BindingResult 인터페이스의 부모
reject : 객체 전체에대한 에러
rejectValue : 필드에러