The Debugging Chronicles : "코드의 미학"

[능단평 - 최종프로젝트] 비즈니스 메서드 설명하기 본문

Project

[능단평 - 최종프로젝트] 비즈니스 메서드 설명하기

sweetseonah1004 2024. 10. 28. 12:08

 

핵심기능, 핵심관점, 비즈니스 메서드, 서비스, CRUD

 

 

비즈니스 메서드는 애플리케이션의 핵심 비즈니스 로직을 수행하는 메서드를 의미한다. 

 

비즈니스 메서드는 주로 서비스 계층(Service Layer)에 위치하며, 애플리케이션의 주요 기능을 구현한다.

1. 데이터 계층과의 상호작용: 비즈니스 메서드는 데이터 계층(DAO 또는 Repository)을 통해 

데이터베이스와 상호작용한다. 

보통 서비스 계층에서 DAO 또는 Repository를 호출하여 

데이터를 조회, 저장, 업데이트하는 작업을 처리한다.

2. DTO를 통한 데이터 변환: 비즈니스 메서드는 클라이언트와 상호작용하기 위해 

데이터를 특정 형식으로 변환하는 경우가 많다. 

이때, 서비스 계층에서 DTO(Data Transfer Object)를 사용하여 필요한 데이터만 추출하고,

 제공된 데이터를 반환할 수 있다.

3. 재사용 가능하고 독립적인 단위: 비즈니스 메서드는 가능한 한 독립적이어야 하며,

 다른 메서드에서 쉽게 재사용할 수 있도록 설계된다. 

이렇게 함으로써 코드 중복을 줄이고 유지보수성을 높일 수 있다.

 

    public boolean insert(BoardDTO boardDTO) {
        // 로그 출력
        System.out.println("    [로그] BoardDAO INSERT 시작");
        
        // 데이터베이스에 새 게시글 삽입
        int result = jdbcTemplate.update("INSERT INTO BOARD (BOARD_TITLE, BOARD_CONTENT, BOARD_WRITER_ID) VALUES (?, ?, ?)",
            boardDTO.getBoardTitle(), boardDTO.getBoardContent(), boardDTO.getBoardWriterId());
        
        // 삽입 결과 확인 후 리턴
        if (result <= 0) {
            System.err.println("    [에러] BoardDAO INSERT 실패");
            return false;
        }
        return true;
    }

 

insert 메서드는 SQL쿼리를 사용하여 데이터베이스와 상호작용하며, Spring JDBC Template을 사용하여 구현한다.

 


 

Spring JDBC Template이란?

 

Spring JDBC Template은 Spring Framework에서 제공하는  JDBC의 편리한  **추상화 레이어이다. 이를 통해 개발자들이 데이터베이스와 상호작용할 때 발생할 수 있는 반복적인 코드와 예외 처리를 간단하게 처리할 수 있다.

 

JdbcTemplate 메서드들

 

update : 데이터를 변경하거나 삽입, 삭제하는 SQL에 사용.
queryForObject : 결과가 단일 행인 쿼리에 사용.
query : 결과가 여러 행인 쿼리에 사용.

 

**추상화 레이어

 복잡한 일을 쉽게 만드는 "중간 단계"라고 할 수 있다. 예를 들어, 데이터베이스와 연결해서 데이터를 가져오는 작업을 생각해보자.

 

원래 방식: 데이터베이스와 연결을 설정하고, SQL 쿼리를 직접 작성하고, 결과를 처리하는 많은 코드를 작성해야 한다.

 

추상화 레이어: Spring JDBC Template 같은 도구를 사용한다. 이렇게 하면 데이터베이스와의 모든 복잡한 상호작용을 해당 도구가 처리해준다. 우리는 간단하게 도구에게 데이터를 가져오라고 요청하기만 하면 된다.

 


서비스 계층이란?

서비스 계층은 애플리케이션에서 비즈니스 로직(업무 규칙)을 처리하는 부분이다.

 

예를 들어, 은행 애플리케이션에서 "계좌 이체" 기능을 생각해 보자. 계좌 이체를 위해서는 돈을 보내는 계좌에서 돈을 빼고, 받는 계좌에 돈을 넣어야 한다. 이러한 작업을 하는 곳이 서비스 계층이다.

 

무엇이 DAO 또는 Repository인가요?

 

DAO(Data Access Object) 또는 Repository는 데이터베이스와 상호작용하는 역할을 합니다. 예를 들어, 데이터베이스에서 계좌 정보를 가져오거나 저장하는 일을 합니다.

 

중요한 점


1.역할 분담: 
 - 서비스 계층은 비즈니스 로직을 관리합니다.
 - DAO 또는 Repository는 데이터베이스와의 상호작용을 담당합니다.
2. 쉽게 협력:
 - 서비스 계층은 DAO 또는 Repository를 사용하여 데이터베이스 작업을 간단히 요청할 수 있습니다. 마치 출납원이 금고에서 돈을 빼고 넣는 것처럼요.
3. 유지보수 용이:
 - 데이터베이스 구조가 변경되더라도 DAO 또는 Repository만 수정하면 됩니다. 서비스 계층은 그대로 유지될 수 있습니다.

 

@Service("boardService")
public class BoardServiceImpl implements BoardService{

	@Autowired
	BoardDAO boardDAO;
	
	@Override
	public List<BoardDTO> selectAll(BoardDTO boardDTO) {
		return this.boardDAO.selectAll(boardDTO);
	}

}

 

BoardServiceImpl는 서비스 계층이다.

BoardDAO는 데이터베이스와 직접 통신하여 데이터를 가져오거나 저장하는 역할을 한다.

의존성 주입 (@Autowired) 은  BoardServiceImpl 클래스에서 BoardDAO를 사용하기 위해 BoardDAO 객체를 주입받는다. @Autowired 어노테이션을 사용하여 Spring이 자동으로 BoardDAO 객체를 주입한다.

selectAll 메서드는 "전체 게시물 조회" 로직을 처리한다. 이 메서드는 BoardDAO의 selectAll 메서드를 호출하여 데이터베이스에서 게시물 목록을 가져온다.

 


 

DTO를 통한 데이터 변환이란?

 

예를 들어 우리가 게시판 애플리케이션을 만들고 있다고 가정해 보겠습니다. 이 앱에서는 사용자들이 게시물을 작성하고 읽을 수 있습니다. 이제, 게시물의 제목과 작성자만 사용자에게 보여주고 싶다고 가정합시다.

 

DTO는 필요한 정보만 담은 상자라고 생각하세요.

서비스 계층은 모든 데이터를 가져와서 필요한 정보만 추출합니다.

그 결과 클라이언트와 간결하고 필요한 정보만 주고받을 수 있습니다.

 

 


 

RowMapper를 사용한 이유?

JDBC를 사용하여 데이터베이스에서 데이터를 조회할 때, 결과 집합(ResultSet)을 객체로 변환하는 데 사용된다.

주로 스프링 프레임워크에서 많이 사용된다.

 

@Repository
public class BoardDAO {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;

    public List<BoardDTO> selectAll() {
        String sql = "SELECT id, title, author FROM board";
        return jdbcTemplate.query(sql, new BoardRowMapper());
    }
}

public class BoardRowMapper implements RowMapper<BoardDTO> {

    @Override
    public BoardDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
        BoardDTO boardDTO = new BoardDTO();
        boardDTO.setId(rs.getLong("id"));
        boardDTO.setTitle(rs.getString("title"));
        boardDTO.setAuthor(rs.getString("author"));
        return boardDTO;
    }
}

 

장점을 이야기 하면

간단한 매핑: RowMapper를 사용하여 데이터베이스의 결과 집합을 간단하게 객체로 변환할 수 있다.
중앙화된 매핑 로직: 매핑 로직이 하나의 클래스에 모여 있어, 수정이 필요할 때 여기만 수정하면 된다.
코드 재사용: 동일한 매핑 로직을 여러 DAO 메서드에서 재사용할 수 있어 코드 중복을 줄인다.
가독성 및 유지보수성 향상: 비즈니스 로직과 결과 매핑 로직이 분리되어 코드가 더 읽기 쉽고 유지보수가 용이하다.