본문 바로가기
Spring boot 프로젝트 기록/1. 백엔드 개발

백엔드 서비스 아키텍처

by 으노으뇨 2021. 11. 22.
728x90
반응형
SMALL

말은 거창하게 서비스 아키텍처라고 사용하였다.

  • Model/Entitt와 DTO클래스
  • Controller, Service, Persistence 클래스
  • 테스팅용 REST API

에 대해 실습을 하면서 설명은 설명을 위주로하는 카테고리에서 하도록 하겠다.

오 프로젝트에서는 모델과 엔티티를 한 클래스에 구현한다.

따라서 모델은 비즈니스 데이터를 담는 역할과 데이터베이스의 테이블과 스키마를 표현하는 두 역할을 한다.

큰 애플리 케이션의 경우 모델과 엔티티를 따로 구현하지만 우리는 규모가 작으므로 합쳐서 구현하는 것이다.

이 모델/엔티티의 이름은 TodoEntity이고, Todo리스트의 한 아이템에 해당한다.

TodoEntity를 작성하기에 앞서 model 패키지 com.unoSpringBoot.study.model을 만들어주었다

클래스이름은 TodoEntity로 지정해주었다.

package com.unoSpringBoot.study.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class TodoEntity {
	private String id; // 오브젝트의 아이디
	private String userId; //이 오브젝를 생성한 아이디
	private String title; //Todo타이틀
	private boolean done; //true - todo 를 완료 , 미완료했을때
	
}

서비스가 요청을 처리하고 클라이언트로 반환할 때 모델 자체를 그대로 리턴하는 경우는 별로 없다. 보통은 데이터를

전달하는데 사용하는 오브젝트인 Data Transfer Object - DTO 로 변호한해 리턴한다.

이유는 비즈니스로직을 캡슐화하기 위해서다.

com.unoSpringBoot.study.DTO 라는 패키지를 하나 생성해주자

package com.unoSpringBoot.study.DTO;

import com.unoSpringBoot.study.model.TodoEntity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class TodoDTO {
	private String id;
	private String title;
	private boolean done;

	public TodoDTO(final TodoEntity entity) {
		this.id = entity.getId();
		this.title = entity.getTitle();
		this.done = entity.isDone();
	}
}

사용자는 이 클래스를 이용해 todo 아이템을 생성, 수정, 삭제할 예정이다.

이제 HTTP 응답으로 사용할 DTO가 필요하다. DTO패키지 아래에 ResponseDTO를 생성해서 다루도록하자

package com.unoSpringBoot.study.DTO;

import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class ResponseDTO<T> {

	private String error;
	private List<T> data;
}

TodoDTO뿐만 아니라 이후 다른 모델의 DTO도 ResponseDTO를 이용해 리턴 할 수 있도록 자바 Generic을 이용했다. 

또 이 프로젝트의 경우 Todo를 하나만 반환하는 경우보다 리스트를 반환하는 경우가 많으므로 데이터를 리스트로 반환하도록 작성했다.

REST API

HTTP는 GET/POST/PUT/DELETE/OPTIONS 등 과 같은 메서드와  URI를 이용해 서버에 http요청을 보낼수 있다.

테스트를 위해 com.unoSpringBoot.study에 클래스를 만들었다. 이것이 작동하는지만 보면된다.

package com.unoSpringBoot.study;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("test")
public class TestController {
	@GetMapping
	public String testController() {
		return "Hello world";
	}

}

헬로월드!

겟요청이다.이것은

그래서 헬로월드가 뜨는것이다.

저번시간에 설치한 포스트맨을 이용하여 테스팅하면 HTTP메서드를 확실히 구분할 수 있다.

	@GetMapping("/testGetMapping")
	public String testControllerWithPath() {
		return "Hello world!! TestGetMapping";
	}

도 한번 추가해주고 포스트맨으로 돌려보자

다음엔 매개변수를 넘겨받는 방법에 대해 알아보자

728x90
반응형
LIST

댓글