Spring 튜토리얼

안준성·2024년 4월 22일

Project::BoardPick

목록 보기
5/11

이전에 김영한씨의 Spring 강의를 들은적이 있다.
물론 많은 도움이 됐지만
당시에 급하게 들은 감이 있어
이번에 시작하기 전에 기본적인 튜토리얼을 진행해보려 한다.

튜토리얼은 Spring 공식 사이트의 Building a RESTful Web Service를 보며 진행할 것이고
해당 포스팅에서는 여기서 학습한 내용들을 정리할 것이다.


Record Class

java를 예전에 많이 써봤지만
record class라는걸 이번에 처음 봐서 찾아봤다.

Java의 record 클래스는 Java 16부터 도입된 새로운 종류의 클래스입니다.
이는 데이터 보관을 목적으로 하는 불변(immutable) 데이터 객체를 간결하게 정의하기 위해 사용됩니다.
record 클래스를 사용하면, 필드에 대한 접근자(getter), equals(), hashCode(), toString() 메서드들이 자동으로 생성됩니다.
이는 보일러플레이트 코드를 줄여주고, 개발자가 데이터 모델을 더 명확하고 간결하게 표현할 수 있게 해줍니다.
record 클래스는 다음과 같은 특징을 가집니다:
모든 필드는 final로 선언되어, 생성 시점에만 값이 할당되고 이후에는 변경할 수 없습니다.
각 필드에 대한 접근자 메서드가 자동으로 생성됩니다.
위의 예에서는 name()과 email() 메서드를 통해 각 필드에 접근할 수 있습니다.
equals(), hashCode(), toString() 메서드가 자동으로 오버라이드되어, 객체의 동등성 비교와 문자열 표현을 쉽게 할 수 있습니다.
추가적인 메서드나 필드를 정의할 수 있지만, 모든 record 필드는 불변해야 합니다.
record 클래스는 주로 데이터 전송 객체(Data Transfer Object, DTO), 값 객체(Value Object) 등을 정의할 때 유용하게 사용됩니다.

요약하자면 데이터 보관용 클래스이고 DTO를 정의할 때 쓰면 될 것 같다.

Rest Controller

HTTP 요청은 이 컨트롤러에 의해 처리된다.
이것은 @RestController 어노테이션에 의해 식별되고
요청에 대한 적절한 인스턴스를 반환한다.

예제 코드를 함께 보자. (import 등은 제외하였다.)

@RestController
public class GreetingController {
    private static final String template = "Hello, %s";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name)
    {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}
  • @GetMapping
    함수에 @GetMapping("/greeting")을 통해
    greeting() 함수가 /greeting에 대한 요청과 매핑된다.

  • @RequsetParam
    해당 어노테이션은 쿼리 문자열의 파라미터를 메서드의 파라미터에 바인딩한다.
    요청 쿼리에서 해당 파라미터의 값이 없으면 defaultValue가 사용된다.

여기서 RESTful 웹 서비스 컨트롤러는
Greeting 인스턴스를 직접 반환한다.
이는 Jackson 라이브러리에 의해 자동으로 JSON 형태로 변환되어
HTTP 응답 본문에 실려 클라이언트에 전송된다.

이는 서버 측 뷰 기술을 통해 데이터를 HTML 형태로 렌더링하여 전송하던
기존 MVC 방식과 차이점을 띈다.

이것이 시사하는 바로는
Json 형태로 서버가 응답하기 때문에 범용성이 커지고,
렌더링의 역할을 클라이언트로 넘겨
서버와 클라이언트간의 역할을 명확히 분리해
시스템의 유연성과 확장성을 증가시킨다는 점이다.

profile
안녕하세요

0개의 댓글