Spring boot 입문(2)

이민우·2023년 6월 13일
0

오늘은 Spring boot 파일 구조와 데이터 반환에 대해 적어보겠다.

우선 파일 구조를 살펴보도록하자

Spring boot로 기본적인 웹페이지를 출력하려면 위와같은 파일 구조를 가진는데 우선 빨간줄의 templates는 우리가 웹페이지를 사용할때 눈으로 보이는 부분으로 .html 파일을 가지고 있다.
여러개의 html을 가지고 있는데 예를들면 메인페이지, 로그인페이지, 게시판페이지 등으로 나누니다고 생각하면 편하다.

이러한 페이지들을 그대로 보여주거나 데이터를 전달해서 사용자가 다른사용자와는 다르게 볼 수 있는 특정 페이지를 보여줄 수 있다.
이러한 페이지를 보여주기 위해선 노랑색으로 표시된 Controller 파일들이 필요하다.
꼭 Controller라는 이름을 붙혀서 생성해야하는 것은 아니고 어떠한 파일인지 구분하기위해 Controller를 붙혀 생성하는게 좋다.

예시를 보고 파악해보자.

우선 @Controller 어노테이션으로 이 클레스는 Controller로 사용할것을 선언해주고 @RequestMapping 과 @GetMapping을 이용해 어떠한 주소로 페이지를 보여줄 것인지 작성한다.
여기서 @RequestMapping 은 클레스 안에 선언할 메소드들의 중복되는 주소를 먼전 선언하는 것이다 위의 코드중 helloForm의 풀 주소는 /hello/request/form/html 이 되는 것이다.
다른 메소드를 선언해도 /hello/request/가 붙게되는데 앞서 말했듯이 중복되는 주소를 클레스에 어노테이션으로 선언하는 것이다.

이러한 Controller 가 하는 것은 간단하게 웹페이지를 보여줄때 어떤 데이터를 가지고, 어떤 .html 파일로 나타낼지를 정한다고 생각하면 좋을것 같다.
위의 코드를 예시로 들면 /hello/request/form/html url로 hello-request-from.html 파일을 보여줄 것이다가 되는것이다.

추가적으로 위의 파일 형식에서 빨강색으로 표시된 templates의 파일을 Controller에 표시해줄땐 .html을 붙혀주지 않아도 된다.

위의 예시 코드에선 html 파일을 보여줄뿐 데이터를 전달해주진 않는다 다음 예시 코드를 보고 어떤 식으로 데이터를 전달한 페이지를 보여주는지 살펴보자.

Controller

html

예시코드를 살펴보면 중요한 점은 model.addAttribute()를 이용해 매개변수를 받고있는 부분이다.
model.addAttribute() 는 매개변수로 받은 값을 Controller 에서 지정한 .html 파일에 값을 전달해주는 것으로 그 방법은 전달해줄 데이터와 그 데이터를 지칭하는 이름값을 매개변수로 받는다.
예시코드로 설명하자면 Controller 에서 model.addAttribute()를 이용해 visits 란 이름으로 visitCount변수의 값을 html로 보내고 html은 visits이름을 가진 데이터를 받을 수 있는 공간을 ${}안에 정의하고 값을 그곳에 받는것이다.

위의 코드는 웹페이지가 새로고침 될때마다 visitCount의 수가 증가하게되고 그것을 표시해주는 코드이다.

마지막으로 Json 데이터를 반환하는 법을 보겠다.
위의 파일경로에서 초록색으로 표시된 Star클레스와 관련된 것으로 내용은 다음과 같다.

위의 코드는 name과 age의 필드를 가지고 생성자로 두개의 필드값을 받는 클레스이다.
이클래스의 형태로 Json 데이터를 웹에 보내는 것을 살펴보자.

위의 코드는 앞서 생성한 Star 클레스의 형태로 웹페이지에 Json 데이터를 보내주는 기능으로 .html파일을 보내는 대신 new Star() 와같이 매개변수와 함께 객체를 생성해준다.

우선 결과는

위와같이 Json 데이터가 Star값에서 지정한 필드값으로 잘 전달 된것을 확인 할 수 있다.

위의 코드에서 중요하게 다뤄야 할 점들은 후선 Controller에서 .html 파일을 보여줄때와 파일이 아닌 데이터만을 보내줄때 이다.
예시와 같이 json 데이터만을 보낼때엔 메소드에 @ResponseBody를 붙혀주는 것과 클레스에서 @Controller 어노테이션이 아닌 @RestController 을 선언해주는 것이다.
@RestController 로 클레스를 생성하면 클레스안의 메소드에 @ResponseBody를 선언해주지 않아도 .html 파일이 아닌 데이터를 보내줄 수 있다.

다음은 @RestController 로 클레스를 생성한 예이다.

@RestController 로 클레스를 생성함으로 메소드에 @ResponseBody 어노테이션을 적지 않아도 된다.
다른 중요한점은 앞서 생성한 Star 클레스 형태로 Json 데이터를 보내줄때는 반드시 Star 클레스에 @Getter 어노테이션을 적어주어야 한다.

추가적으로 위의 예시에서 메소드의 반환값은 Json 데이터를 String형태로 보내주는 것이다.

결과는

위와 같은 형태로 String형태로 보내주기 때문에 여기서 형변환이 필요하다.

이러한 형변환을 간단하게 처리해주는 라이브러리가 있다 바로 Jackson 라이브러리로 예시를 통해 바로 알아보자.

위의 코드는 테스트코드로 작성한것으로 .html에서 받은 Json 데이터를 .html 안에서 형변환 하는 방법으로 Jackson 라이브러리를 사용할 수 있는지와 사용할 수 없다면 어떠한 방식으로 형변환을 해줄지는 추가적으로 알아봐야 하는 부분이 될것 같다.

위의 예시에선 JSON 타입의 String 을 형변환 하고있다.
메소드에 JsonProcessingException을 throws 핞 ObjectMapper를 선언하고 ObjectMappe의 .readValue()를 사용한다.
.readValue()는 두개의 매개변수를 받는데 JSON 타입의 String 과 받은 JSON 타입의 String 과 같은 형태의 필드를 가진 클레스를 받는다.
그로인해 생성된 Star 형 star 엔 JSON 타입의 String 데이터가 Json 데이터로 저장되었고 get으로 값을 조회해볼 수 있다.

또한 생성한 객체 데이터를 Json 형태로 변환할 수 있는데 다음과 같다.

ObjectMappe.writeValueAsString()을 사용해 생성한 객체 데이터를 넣으면 JSON 데이터로 변경 된다.

위의 실행결과는 초록색이 객체 -> Json
노랑색이 Json -> 객체
순으로 변경 된것을 보여준다.

이러한 Jackson 라이브러리는 앞서 말했던 .html 파일에서의 사용 가능 여부와 어떤 상황에서 Json 데이터를 변환하게 될지를 생각해보면서 기억해둬야할 라이브러리인것 같다.

profile
개린이

0개의 댓글