Spring 6일차

Shin·2023년 2월 27일
0

spring

목록 보기
6/8

Lombok

다이어트 라이브러리라고도 불리는 라이브러리로, 코드의 양을 줄여주는 라이브러리.

사용법 : lombok.jar 파일을 실행시켜서, sts 혹은 이클립스에서의 롬복 사용을 설정한 후, lombok 을 적용시키려는 프로젝트 내에 dependency를 추가해줌으로써 사용이 가능하다.

@Getter, @Setter

일반적으로 클래스 전체적으로 어노테이션을 붙여서 모든 인스턴스 필드에 대해 getter, setter 를 적용시킬 수도 있고, 인스턴스 필드 위에 사용함으로써 해당 필드 데이터를 지정해서 getter, setter 를 적용시킬 수 도 있다.

@NoArgsConstructer, @AllArgsController

default 생성자와 모든 인스턴스 필드를 가지고 vo 를 생성하는 두 가지의 어노테이션이다.

@RequiredArgsController, @NonNull

필요로 하는 인자를 가지고 vo 를 생성해주는 어노테이션

추가해서 생성하려는 필드에 @NonNull 어노테이션을 사용하게 될 경우 두 개의 필드 데이터를 가지고 생성자를 생성할 수 있게 된다.

@ToString, @ToString.Exclude, @ToString.Include

일반적으로 오버라이딩해서 사용하는 ToString 에 대해 사용할 수 있다.

만약, ToString 시에 일부 데이터를 제외하고자 할 경우 @ToString.Exclude 어노테이션을 사용한다.

@EqualsAndHashCode

객체의 내용을 비교하기 위해 사용하는 어노테이션.

Data

자동으로 getter, setter, toString, EqualsANdHashCode 4개의 어노테이션이 적용될 수 있게끔 해주는 어노테이션
단, 생성자 관련된 어노테이션은 적용되지 않기 때문에 이 부분은 신경을 써주어야 한다.

JSTL

tag library로 xml 태그들의 집합. jsp에서 나오는 <% %>(scriptlet) 들은 if문, for문을 위해 사용해 사용해왔는데, 이것들은 유지 보수가 너무 어렵다.

사용하기 위한 설정
JSTL 은 외부 라이브러리이기 때문에 jsp 에서 JSTL 를 사용하려면, 우선적으로 dependency 를 추가해주어야 하고, jsp 파일의 최상단에 태그를 추가해주어야 한다.

<%@ taglib prefix="" uri="" %>

jsp 에서 <$@ @> 라는 표현을 directive 라고 부르는데, 주로 기능을 추가하는 표현법이다.

종류로는 page directive, taglib directive 등이 있다.

종류

c : Core

set : 값을 설정하는 태그.
var : 변수명
value : 값


기본 keyword

<c:set /> 변수의 선언 및 제거
<c:remove />
<c:out /> 변수의 출력
<c:catch /> 예외 처리
<c:if /> 조건문 (else는 없다)
<c:choose /> Switch문과 비슷
<c:when />
<c:otherwise />
<c:forEach /> 반복문
<c:forTokens /> 구분자로 분할하여 반복문
<c:url /> URL 생성
<c:param /> 파라미터 추가
<c:import /> 페이지 첨부
<c:redirect /> URL 이동

fmt

다양한 format 기능을 제공해주는 jstl 라이브러리

@RequestParam

기본적으로 Get 방식의 경우, 쿼리스트링을 사용해 url 뒤에 데이터가 붙어서 전송된다. 따라서 넘어오는 데이터의 양에도 제한이 있고, &? 기호와 같은 것들이 있어서 바이너리 데이터를 전송하는 데에도 불편 사항이 존재한다.
그렇기 때문에 간단한 조회와 같은 케이스를 제외한 클라이언트 요청은 대부분 post 방식으로 이루어진다.

@ModelAttribute

사용하는 케이스

  • parameter VO 로 받을 때
  • method에 사용이 가능하다.
  • sessionAttributes 와 같이 사용이 가능하다.

parameter VO 로 받는 케이스

일반적으로, 원시데이터와 String 타입인 데이터의 경우에는 @RequestParam 이 생략되어있다고 spring이 판단하고, vo 타입을 parameter 로 할 경우 @ModelAttribute 가 생략되어있다고 판단한다.

또한 @ModelAttribute 는 이름에서부터 보이다싶이, model의 속성으로 자동적으로 들어가게 된다. 이 때 자동적으로 들어가게 되는 key 는 소문자로 변환된 객체의 이름으로 들어가게 된다.

method 에 사용하는 케이스

handler 가 호출되기 전에, 해당 어노테이션이 붙은 메소드가 가장 먼저 호출이 된다.
그리고 해당 메소드의 리턴값이 model의 속성으로 자동으로 저장이 된다.

또한 method 형태의 modelAttribute 로 return 받은 데이터들을, handler 의 인자로 사용할 수 있다.

단, 주의해야 할 점은 다른 method 로 부터 리턴 값을 가져오기 위해서는 @ModelAttribute(value="") 어노테이션의 value 값에 @ModelAttribute method의 식별자 이름을 입력해주어야 한다.

즉, @ModelAttribute 라는 어노테이션은 vo 를 생성하는 역할 뿐만 아니라, 다른 method 로 부터의 리턴 값을 가져오는 역할을 하는 어노테이션일 수도 있다.

이러한 command 객체를 생성하는 것에도 순서가 있다.

@PathVariable

REST API 를 구현할 때 사용하게 되는 어노테이션이다.

ex) http://localhost:8080/web/boards/20

과 같은 url 주소에서 가장 마지막에 쓰인 /20 은 board를 식별하는 번호이다. 과거에는 쿼리스트링으로 전송되며 저 부분은 url 이 아니었는데 만약 저 부분까지 url 로 담게 된다면 url 에서 변수를 어떻게 가지고 와야 할까.

mapping을 하게 되는 url 주소를 입력할 때, { ~ } 를 활용해서, 이 안에 작성한 변수명을 동적으로 받겠다고 사용할 수 있다.
그 후 parameter 로 들어오는 인자에 대해 @PathVariable 어노테이션을 사용해 작성해주면 url에 들어오는 변수를 parameter 로 들어오는 인자로 인식해서 사용할 수 있게 된다.

Log4j2

@Authwired

타입이 같은 bean 객체를 찾아서 객체를 주입한다.
만약 같은 타입이 없다면, 그 차선으로 이름을 가지고 bean 객체를 찾는다.

@Qualifier

만약 타입이 같은 bean 객체가 두 개 이상일 경우, @Qualifier로 지정한 bean 객체를 찾는다.

@Resource

@Authwired 와 같은 기능을 하는데, 이름으로 bean 을 찾고, 못찾으면 type 으로 찾는다.

@Controller, @Service, @Repository, ... @Configuration

해당하는 어노테이션은 모두 @Component 어노테이션을 상속한 어노테이션.

default servlet : 정적 리소스에 대한 요청을 받아서 응답 처리를 하는 서블릿

기본적으로 tomcat에서 모든 서블릿 요청을 가장 처음 받는 것은 default servlet.
spring 은 이러한 default servlet 역할을 Dispatcher servlet 이 대체한다.

spring container 가 제공하는 context 는 2가지가 있다. root-context 와 servlet-context 이다.

그 중 root-context 이 가장 먼저 만들어진다.
그 후, root-context 내부에 servlet-context 가 생성된다.
servlet-context 내부에 controller Bean 과 함께 view Resolver 가 생성된다.
그리고, dispatcher servlet이 이 view Resolver 에게 요청을 보낸다.

0개의 댓글