[Spring] Spring Review

JH·2023년 5월 16일

Spring

목록 보기
7/9

1. TIL

A. Servlet

Servlet 파일을 생성하여 사용할 때
HttpServlet 클래스를 상속 받아서 사용했음

생명 주기가 있음
객체가 만들어지고
init() (1번만 호출됨) → service() doGet(), doPost() → destroy()

GET = url에 데이터를 전달
POST = HttpBody에 데이터를 전달

페이지 지시자를 통해 JSP 자체에서 response에 대한 것을 인코딩함

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

페이지 전환

Redirect = 요청을 종료하고 다시 서버에 요청을 보냄, response 객체를 이용 = 결과를 돌려주기만 하면 됨

Forward = 요청을 이어나감, request 객체를 이용 = 요청에 대한 값을 유지해야함

Form을 이용해서 서버에 데이터를 전달함

변수

전역 변수
web.xml에 설정하고 사용함
Servlet 객체가 사용할 수 있도록 어노테이션 사용
init 과정에서 ServletConfig객체를 통해 변수를 등록함

로컬(지역) 변수
doGet, doPost 에서 사용하는 변수

Cookie = 클라이언트의 시스템에 저장
setMaxAge() : 쿠키의 지속시간을 설정
getName(), getValue() 를 통해 key와 value로 사용
new Cookie() = 쿠키 생성

response.addCookie(testCookie); response 객체에 쿠키를 저장함
클라이언트에 저장되기 때문에 클라이언트가 쿠키를 변경할 수 있었음

서버가 살아있는 한 Session은 유지됨 (서버가 관리), 서버에 부담

HttpSession 객체를 통해 request.getSession() 세션 객체를 만듦

invalidate() 를 통해 세션을 무효화 시켰음

JSP

Java Server Page (자바 데이터를 화면에 출력할 수 있게 제시된 스펙)

Java를 사용하기 때문에 내장 객체가 존재함
out - PrintWriter
request - HttpServlet
session - HttpSession
pageContext - this

<% %> = scriptlet 자바 코드 사용
${ } = EL, 출력 전용 로직, 다양한 로직을 수행할 수 없어서 JSTL을 사용함

JSTL : 자바 스텐다드 라이브러리를 통해 c:if 등 foreach를 사용함

Connection Pooling : Connection 객체를 미리 만들어두고 사용하는 기술, DB의 종류, DB접속 정보가 필요함

JNDI(Java Naming and Directory Interface) : 다른 종류의 이름 지정 및 디렉토리 서비스에 액세스하는 데 필요한 API

JNDI가 없으면

context.xml에 Resource에 DB 관련 정보를 설정함

Front Controller : 하나 컨트롤러에서 요청을 전부 받고 하위 컨트롤러에 연결시킴

Filter

서블릿에 가기전에 또는 요청이 끝난 후 특정 로직을 처리함
Encoding 설정, 사용자 인증 (Session)

Restful API를 사용하기 위해 PUT, DELETE를 사용 이를 사용하기 위해서
web.xml에 HiddenHttpMethodFilter 를 이용함

EventListener

특정 이벤트에 대해 특정 로직을 처리함


B. JPA

JPA (Java Persistent API): Java의 ORM API 표준 명세
ORM (Object Relation Mapping): 객체가 테이블이 되도록 매핑 시켜주는 기술

대표 프레임 워크 : (Mybatis, Hibernate)

Hibernate 구현체가 SQL 쿼리를 만들어 줌

사용하기위해 Maven이 필요함 (라이브러리 의존성, 모듈, 빌드)
pom.xml에 라이브러리를 설정함

resources 하단에 persistence.xml에 DB 관련 정보를 설정함

ddl에 대한 관리를 create, none로 사용함

Entity : DB 테이블과 매핑되는 Java의 객체
EntityManagerFactory : EntityManager 생성 및 관리
EntityManager : Entity 관리
EntityTransaction : 작업 단위 관리 (begin ~ )

Entity Life 사이클 :
manager, removed, new, detached 사이클로 관리함

DTO를 @Entity 로 관리하여 컬럼화 시켰음



C. Spring

자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크
객체를 개발자가 아닌 컨테이너가 관리 (Context = 영역)

DI = 의존성 관계 주입, @Autowired = "필요한 객체니까 넣어줘"

Bean = 스프링 컨테이너가 관리하는 객체 (xml에 등록하고 사용할 수 있었음)
생성자, 프로퍼티(set)를 이용하여 객체를 생성함

생성자 주입 방식 (객체)
@RequiredArgsContrutor 어노테이션을 이용하여 사용
해당 필드에 final을 이용함

필드 주입 방식 (객체)
@Autowired(required = false)

@Conponent = 스프링 컨테이너가 관리하는 컴포넌트 (Bean 보다 큰 단위)
servlet-context.xml = conponent scan을 해야함

IoC = 제어의 역전

Mybatis (Entity 사용 안함)

mybatis, mybatis-spring, ojdbc8 라이브러리가 필요했음

mybatis-config.xml에 설정값을 지정
mybatis-mapper.xml에 Mapper를 등록함

서비스에서 @Transactional 을 통해 하나의 작업단위로 설정할 수 있었음

DispatcherServlet 을 통해 FrontController로 전부 받을 수 있음

@Controller, @Service, @Mapper 어노테이션을 통해 스프링이 제어함

AOP

관점 지향적 프로그래밍
해당 메소드가 시작할 때, 실행되고난 후 실행되는 방식

필터는 서블릿을 기준으로 실행, AOP는 컨트롤러 기준의 실행

Pointcut = 특정 조건에 의해 필터링된 조인포인트 (기준)

Advice = 실행 시점

Aspect = Pointcut + Advice

@Around = 전부 처리함
JoinPoint 객체에 excution을 받음
proceed() 로 실행

MVC Controller

? = 쿼리스트링
@RequestParam = request.getParametr
@ModelAttribute : 해당 값을 객체에 매핑해서 넘겨줌
@PathVariable : mapping url의 #{} 변수를 받음

객체를 리턴할 때 ResponseEntity 타입으로 리턴함
Jackson 라이브러리를 통해 이것을 json 객체로 리턴함

Interceptor

스프링 컨테이너 자체에서 사용
컨트롤러에 도달 전, 도달 후 특정 로직을 처리
인증, 인가 등과 같은 공통 작업

API

consumes = 컨트롤러 입장에서 어떤 데이터를 소비할거냐
produces = 컨트롤러 입장에서 어떤 데이터를 보내줄거냐

@CrossOrigin(origins = {*}) = 해당 아이피 요청을 허가함


profile
잘해볼게요

0개의 댓글