SpringBoot Architecture

Goofi·2023년 8월 21일

계층형 아키텍처 패턴

Spring boot 계층형 아키텍처 패턴 코드

폴더구조

dto

UserDTO.java

package com.folder.app.dto;

import java.time.LocalDate;
import lombok.Data;

@Data
public class UserDTO {
    private int no;
    private String name;
    private String email;
    private Boolean gender;
    private Boolean del;
    private LocalDate regDate;
}

Database

CREATE TABLE user3 (
	NO int NOT NULL AUTO_INCREMENT PRIMARY KEY,
	name varchar(100) NOT NULL,
	email varchar(200) NULL,
	pwd varchar(100) NOT NULL,
	gender boolean NOT NULL DEFAULT 1,
	del boolean NOT NULL DEFAULT 0,
	regDate datetime NOT NULL DEFAULT now()
);

dto파일은 sql에서 생성한 테이블 컬럼과 UserDTO 클래스에서 선언한 멤버변수들과 일치 시켜주어야 한다. 왜냐하면 데이터베이스 값들과 상호작용을 하는 dao폴더(Repository)에 있는 멤버변수값이 최종적으로 dto에 있는 멤버변수에 들어가기 때문이다.

ResultDTO.java

package com.folder.app.dto;

import lombok.Data;

@Data
public class ResultDTO {
    private Boolean state;
    private Object result;
    private String message;
}

화면에 출력할 멤버변수

Controller

요청) Client로 부터 요청을 받아 Application Layer에 처리를 위임
응답) Application Layer의 결과를 최종 Client로 전달

package com.folder.app.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import com.folder.app.dto.ResultDTO;
import com.folder.app.service.UserService;

@RestController
public class DataController {

    @Autowired UserService uService;
    
    @PostMapping("/findAll")
    public ResultDTO findAll(){
        return uService.findAll(); 
    }

}

UserService 서비스에 객체를 uService 변수에 넣어준다.
findAll() 함수에서 UserService 클래스 안에 있는 findAll을 호출한다.
findAll() 함수는 반환형을 ResultDTO에 있는 멤버변수들로 지정했기 때문에
state(Boolean), result(Object), message(String)값이 반환되게 된다.

service

UserService.java

package com.folder.app.service

import com.folder.app.dto.ResultDTO;

public interface UserService{
	public ResultDTO findAll()
}

인터페이스를 만들어준다.

UserServiceImp.java

package com.folder.app.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.folder.app.dao.UserDao;
import com.folder.app.dto.ResultDTO;
import com.folder.app.dto.UserDTO;

@Service
public class UserServiceImp implements UserService {
    private ResultDTO rDto;    

    @Autowired UserDao uDao;

    @Override
    public ResultDTO findAll(){
            rDto = new ResultDTO();
        List<UserDTO> resultList = uDao.findAll(); 
        //resultList에 uDao에 들어간 데이터베이스 값이 들어간다.
        if(resultList != null){
            rDto.setState(true);
            rDto.setResult(resultList);
        }else{
            rDto.setState(false);
        }
        return rDto;
    }
}

dao

UserDao.java

package com.folder.app.dao;

import java.util.List;
import com.folder.app.dto.UserDTO;

public interface UserDao {
  public List<UserDTO> findAll();

}

인터페이스를 만들어준다.

UserDaoImp.java

package com.folder.app.dao;

import java.util.List;
import org.springframework.stereotype.Repository;
import com.folder.app.dto.UserDTO;

@Repository
public class UserDaoImp implements UserDao {
  @Override
  public List<UserDTO> findAll() {
    return null;
  }
}
profile
안녕하세요! 👋 개발과 운영을 공부하고 있습니다. 코드를 작성하는 것만큼 서비스가 안정적으로 운영되는 것에도 관심이 많습니다. 프론트엔드부터 백엔드, 그리고 인프라 운영까지 전체적인 서비스 생명주기를 이해하면서 공부하고 있습니다.

0개의 댓글