Spring Boot 시작하기 - 웹 관련 기능

김주언·2022년 10월 23일
0

Spring Boot

목록 보기
2/8
post-thumbnail

웹앱 작성

  • 컨트롤러 빈 등록
  • 자동 컴포넌트 스캔
  • REST 컨트롤러 사용
  • 스프링 DevTools
  • 롬복 라이브러리 사용

컨트롤러 빈 등록

src/main/java에 BoardController 클래스 작성

package com.example.springboottest.controller;
// import...
@RestController
public class BoardController {
    public BoardController() {
        System.out.println("---------------- BoardController initialized ----------------");
    }
    
    @GetMapping("/hello")
    public String hello(String name){
        return "Hello : " + name;
    }
}
  • @RestController
    : REST 방식의 응답을 처리하는 컨트롤러 작성
    리턴되는 문자열이 브라우저에 그대로 출력된다

  • GetMapping("/hello")
    GET 방식으로 "/hello" 요청 들어왔을 시 실행되는 메소드

애플리케이션 실행 확인


자동 컴포넌트 스캔

기존 스프링 프레임워크의 경우, @RestController 어노테이션을 설정하더라도 root-context.xml에 <context:component-scan base-package="com.board.controller" /> 이런 식으로 설정해줘야 스프링 컨테이너가 해당 어노테이션이 설정된 컨트롤러를 빈으로 인식한다. 스프링부트에서는 이를 처리하지 않았는데 어떻게 해당 클래스를 스캔하고 빈으로 등록했는지??

💡 SpringbootTestApplication 클래스에 설정된 @SpringBootApplication 어노테이션이 동작한 결과이다!

@SpringBootApplication 의 소스는 아래와 같다.

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(			// ← 여기~!!
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
    // 생략
}

이 클래스의 @ComponentScan 어노테이션이 main() 메소드가 포함된 SpringbootTestApplication 클래스가 속한 패키지를 베이스 패키지로 하여서 빈 등록을 처리한다.

@SpringBootApplication 설정은 아래 XML 설정과 같다.

<context:component-scan base-package="com.example.springboottest" />

이처럼 자동으로 빈이 등록되기 때문에 패키지 이름에 주의해야 한다!



REST 컨트롤러 사용

@RestController 는 뷰(JSP)를 별도로 만들지 않는 대신 컨트롤러 메소드가 리턴한 데이터 자체를 클라이언트로 전달한다.
이 때, 클라이언트로 전달되는 데이터는 대부분의 경우 문자열이거나 VO 형태의 자바 객체인데, 자바 객체가 전달되는 경우 자동으로 JSON으로 변환된다.

문자열 리턴

첨에 한 그 hello 메소드


VO 객체 리턴

롬복 라이브러리 추가

롬복을 사용하면 자바 파일을 컴파일 할 때 자동으로 생성자, Getter, Setter, toString()과 같은 코드들을 추가해준다.

롬복을 사용하기 위해 현재 프로젝트에 롬복 라이브러리를 추가한다
pom.xml

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>

pom.xml에 의존성을 추가 한 후 maven reload 해준다.

BoardVO 클래스 작성

package com.example.springboottest.domain;

// import ... 

@Data		// getter, setter 등 자동 생성
public class BoardVO {
    private int seq;
    private String title;
    private String writer;
    private String content;
    private Date createDate = new Date();
    private int cnt = 0;
}

BoardController 에 메소드 추가

    @GetMapping("/getBoard")
    public BoardVO getBoard(){
        BoardVO vo = new BoardVO();
        vo.setSeq(1);
        vo.setTitle("test title");
        vo.setContent("test content");
        vo.setWriter("tester");
        vo.setCreateDate(new Date());
        vo.setCnt(0);
        
        return vo;
    }

url에 /getBoard 입력 후 확인

JSON으로 변환된 실행 결과가 확인된다.

컬렉션 리턴

여러 개의 VO 객체를 배열이나 List와 같은 컬렉션에 저장하여 리턴하는 경우에도 JSON으로 리턴가능하다

BoardController

    @GetMapping("/getBoardList")
    public List<BoardVO> getBoardList(){
        ArrayList<BoardVO> list = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            BoardVO vo = new BoardVO();
            vo.setSeq(i);
            vo.setTitle("test title" + i);
            vo.setContent("test content" + i);
            vo.setWriter("tester" + i);
            vo.setCreateDate(new Date());
            vo.setCnt(0);

            list.add(vo);
        }
        return list;
    }

url에 /getBoardList 입력 후 확인

업로드중..


스프링 DevTools 사용

컨트롤러 수정할 때마다 매번 애플리케이션 재실행하기 넘흐 귀찮음
→ 스프링부트가 제공하는 DevTools 기능을 쓸것임

pom.xml에 라이브러리를 추가한다.

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.7.4</version>
        </dependency>

이제 매번 컨트롤러 수정할 때마다 재실행 할 필요 없이 알아서 컨테이너가 수정된 클래스를 반영한다~~

profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글