[TIL] 250605_Spring: 웹 개발 기초와 JavaBean 규약

지코·2025년 6월 5일
1

Today I Learned

목록 보기
71/74
post-thumbnail

🍃 웹 개발 기초

📎 API

기존 컨트롤러에 다음과 같은 부분을 추가하였다.지금 추가한 부분은 MVC처럼 뷰에서 사용할 것들을 모델에 담아 뷰에 전달하는 방식을 사용하지 않고, HTML 내 Body부에 들어갈 데이터를 이 함수를 통해 직접 넣는다.

@ResponseBody 가 그 역할을 한다.

언뜻 보기엔 MVC와 비슷해보일 수도 있는데, 실제로 해당 페이지에 가서 결과물을 보자.
name 값을 "spring!!!!!!"으로 전달했을 때 페이지에는 당연히 hello spring!!!!!!으로 뜰 것이다. 하지만 페이지 소스 코드를 확인한다면❓
페이지 소스 코드에서조차 어떠한 HTML 코드 하나 없이, 설정한 데이터인
"hello spring!!!!!!"만 존재하는 것을 확인할 수 있다.

실제로는 이렇게 문자열만 전달하는 방식으로 사용을 하지는 않지만 API로서 대략 어떤 흐름으로 동작하는지 예시를 통해 확인할 수 있었다.
실제로는 스프링에서 API를 어떻게 사용하는지 살펴보자.

📁 HelloController.java

@Controller
public class HelloController {
	@GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }

    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
}

기존 컨트롤러에 위와 같은 메서드를 추가하였다.

  1. 먼저 Hello라는 내부 클래스를 정의하고, 이 클래스는 name이라는 필드를 가진다. 해당 필드에 접근할 수 있도록 getter와 setter를 구현한다.
  2. /hello-api 엔드포인트로 GET 요청이 들어오면 helloApi 메서드가 호출된다. 이 메서드는 쿼리 파라미터로 전달된 name 값을 받아 Hello 객체에 설정한 뒤, 해당 객체를 반환한다.
  3. @ResponseBody 덕분에 반환된 Hello 객체는 JSON 형태로 직렬화되어 응답으로 전송된다.

따라서 위 주소로 접속했을 때의 화면이나 페이지 소스 코드 모두 JSON 형태의 값이 나타나는 것을 확인할 수 있다.

정리하자면, 컨트롤러 메서드가 객체를 반환하고 @ResponseBody가 적용되어있다면, 해당 객체는 기본적으로 JSON 형태로 변환되어 응답된다‼️

이는 스프링이 Http Message Converter를 통해 객체를 자동으로 JSON으로 직렬화해주기 때문이다.

이 흐름을 그림으로 나타내면 위와 같다.
기본적으로는 MVC와 같으나, @ResponseBody가 있기 때문에 HTTP 응답에 반환 데이터를 그대로 넣는 형식이다. 하지만 여기서 반환 데이터는 객체이기 때문에, JSON 형식으로 데이터를 만들어서 HTTP 응답에 반환한다.

그 후 HTTP Message Converter가 동작한다. (이는 @ResponseBody가 있기에 !!) 반환 데이터가 문자열이라면 String Converter가, 객체라면 Json Converter가 동작한다. 이 경우에는 Json Converter가 동작하기 때문에 데이터를 JSON 형태로 바꿔 반환한다.

🍃 JavaBean 규약

JavaBean 규약은 Java에서 재사용 가능한 컴포넌트(객체)를 정의하기 위한 표준 규칙이며, 주로 Spring, JSP, JavaFX 등 다양한 프레임워크와 기술에서 객체를 일관되게 다루기 위해 사용된다.

JavaBean은 속성(property), 메서드(method), 생성자(constructor) 등에 대해 일정한 규칙을 따르는 일반적인 자바 클래스이다.

1️⃣ 기본 생성자(no-argument constructor)를 제공해야 한다.

public class Person {
    public Person() {} // 기본 생성자
}

이는 프레임워크나 라이브러리가 객체를 쉽게 생성할 수 있도록 하기 위함이다.

2️⃣ 필드는 private으로 선언하고, public getter/setter 메서드를 제공한다.

private String name;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

3️⃣ 직렬화 가능해야 한다 (optional)

implements Serializable 을 통해 객체를 직렬화할 수 있어야 한다는 요구가 붙는 경우도 많다. (Ex> JSP에서 form 데이터를 전달받을 때 등)

Spring에서는 @RequestBody, @ModelAttribute, @ResponseBody 등으로 데이터를 주고받을 때 주로 JavaBean 규약이 사용된다.

Reference

🎥 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

profile
꾸준하고 성실하게, FE 개발자 역량을 키워보자 !

0개의 댓글