study/Spring boot

엉터리 정리 - 스프링이 요청을 받는 방식, Maven, Lombok

올스왑 2021. 3. 22. 15:46

정리는 하고 싶은데 제대로 공부한 건 아니고,(귀찮아서는 그런건 아니다.)

이런저런 이유로 까먹지만 않을 정도로 정리하는 엉터리 정리글.

 

그렇다고 내가 공부한 소스가 엉터리라는 건 아니다.(오해X)


클라이언트는 서버에게 요청한다. 요청할 때 데이터를 보낼 수 있다. get 요청은 쿼리스트링을 추가해서, post나 put 요청은 보통 body에 데이터를 담아 보낸다.

 

스프링의 컨트롤러는 클라이언트로부터 받은 데이터를 간단히 처리할 수 있다.

 

만약 쿼리스트링으로 데이터가 들어왔다면 -> ?id=100&name=shin -> 이렇게 쿼리스트링을 보냈다면 컨트롤러의 요청을 받는 메소드에서 매개변수로 id와  name을 받아 처리할 수 있다.

쿼리스트링을 처리한다.
1, shin 을 서버가 응답했다.

 

요청을 받는 메소드는 값을 객체에 담아 처리할 수 있다. 클라이언트로 받은 값과 전달 받은 객체의 필드와 매핑해준다.

예를 들어 Member라는 객체에 id, username이 필드로 있다고 한다면 클라이언트로부터 받는 값을 지역 변수로 생성한 Member 객체의 필드에 넣어 준다.

요청을 처리하는 메소드가 Member 객체를 매개값으로 받는다.
1, shin을 응답했다.

 

post, put 요청은 보통 Body 에 json 데이터를 넣어 전달한다. 이때 헤더의 mime타입이 정확히 돼야 한다. body에 json 데이터가 있더라도 mime 타입이 text/plain 이라면 일반 텍스트로 받아들여 파싱할 수 없지만, apllication/json이라면 json데이터로 파싱할 수 있다. 그래서 객체와 매핑할 수 있다. 꼭 객체와 매핑하지 않고 바로 값을 받을 수도 있다.

이런 처리를 스프링 부트의 MessageConverter가 해준다.

 

@RequestBody 어노테이션으로 body의 값을 가져온다.

 

* 스프링에서는 body에 json 타입의 데이터를 보내면 MessageConverter가 객체와 매핑해서 받을 수 있다.

 


Maven 이란? 프로젝트의 필요한 라이브러리들을 관리해주는 툴(?)

maven의 중앙 저장소가 있는데 그곳에 많은 라이브러리들이 있다.

사용자는 pom.xml에 필요한 라이브러리들을 기술하면 maven이 pom.xml을 읽고 중앙 저장소에서 파일을 받아서 .m2라는 폴더제 저장한다. 그리고 빌드까지 해준다.

 

프로젝트를 다른 서버에 배포한다고 해도 pom.xml 이 있으면, maven을 통해 라이브러리들을 관리할 수 있다.


lombok 라이브러리를 사용하면 어노테이션으로 기본적인 코드를 대체해준다.

 

@Getter, @Setter를 클래스 선언부 위에 기술하면 클래스 필드에 대한 getter, setter 메소드가 작성된다. 알아서 코드가 써진다는건 아니지만 메소드를 갖고 있다.

 

클래스 선언부에 붙이는 생성자 어노테이션들

@AllArgsConstructor - 모든 필드 값을 받는 생성자

@RequiredArgsConstructor - final로 선언된 필드 값 또는 @NonNull이 선언된 필드 값을 받는 생성자
@NoArgsConstructor - 아무것도 안받는 디폴트 생성자

 

생성자 위에 @Builder - 생성자에 대해 빌더패턴을 만들어준다. -> 객체를 생성할 때 원하는 값만 넣어서 만들 수 있게 해준다. 값을 넣을 때 순서를 지키지 않아도 된다.

Car myCar = Car.builder().name("범블비").company("트랜스포머").build();

 

또는 @Accessors(chain = true) 사용해도 @Builder와 비슷하게 사용할 수 있다. 객체의 필드 값을 바꾼다면

user.setEmail("shin@naver.com").setPhoneNubmer("123-34-312"); // 이렇게 체인을 사용해 값을 바꿀 수 있다.
User user2 = new User().setAccount("shinshin").setEmail("ddong@naver.com"); // 이렇게도 할 수 있다.

2021.4.5 추가

@Slf4j를 클래스 위에 붙이면 로그를 남길 수 있다.

log.info("{}", request);
request 정보 출력

 

2021.4.13 추가

@ToString : 클래스 선언부 위에 붙이고, toString() 메소드를 만든다.

제외하고 싶은 필드가 있다면, 선언부에서 제외하거나, 제외하려는 필드 위에 어노테이션을 붙이면 된다.

@ToString(exclude = "test")
class User{
	@ToString.Exclude
	String test;
}

@EqualsAndHashCode : 클래스 선언부 위에 붙인다. equals()와 hashCode() 메소드를 재정의한다. 필드값들이 같다면 같은 것으로 판단한다.

 

@Data : @Getter, @Setter, @ToString 등등의 어노테이션을 포함하고 있어, 여러 어노테이션을 대체할 수 있다.