SpringBoot Architecture

Leutbing·2023년 8월 21일
0

계층형 아키텍처 패턴

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개의 댓글