본문 바로가기

부트캠프 개발일기/Spring MVC19

47일차: Spring MVC(데이터 액세스 계층) ❯ DDD(Domain Driven Design) 도메인 주도 설계 Domain이란 하나의 비즈니스 업무 영역과 관계된 개념이다. 식당을 예로 들어보자. 주문을 하는 것 / 음식을 만드는 것 / 조리된 음식을 전달하는 것 등 각각의 기능이 하나의 도메인 지식이 되며 이를 구현한 것을 비즈니스 로직이라고 한다. 도메인 주도 설계는 이러한 도메인들을 위주로 진행되는 설계 기법을 의미하는데 여기에서 다음 두 가지 개념이 필요하다. Aggregate(애그리거트): 비슷한 업무 도메인의 묶음을 의미한다. 비즈니스 로직을 캡슐화하는것과 관련이 있다. 식당 예시를 활용해서 설명하면 고객 / 주문 / 메뉴(음식) / 결제 각각이 애그리거트가 될 수 있다. 애그리거트간의 관계는 1 : 1, 1 : N, N : N이 될.. 2023. 4. 19.
46일차: Spring MVC(JDBC, Spring Data JDBC) ❯ JDBC(Java Database Connectivity) JDBC란 자바에서 데이터베이스와 연결하여 데이터를 다루기 위한 API 를 의미한다. 자바에서 제공하는 표준 사양이다. JDBC를 이용해 자바 애플리케이션에서 다양한 DB시스템(Oracle, MySQL, PostgreSQL 등)과 연결할 수 있다. JDBC API는 데이터베이스 연결, 쿼리 실행, 결과 처리 등을 담당한다. 일반적으로 JDBC를 직접 사용하지는 않는다고 한다. Spring Data JDBC, Spring Data JPA 와 같은 데이터 액세스 프레임워크를 사용한다. JDBC 동작 흐름 Java 애플리케이션에서 JDBC API를 이용해 적절한 JDBC 드라이버*를 로딩하고 데이터베이스를 사용하게 된다. *JDBC 드라이버란 데이.. 2023. 4. 18.
45일차: Spring MVC(비즈니스적인 예외 던지기, throw) 애플리케이션을 실행할 때 발생할 수 있는 예외는 크게 두가지로 나눌 수 있다. Checked Exception : 발생한 예외를 Catch 하여 체크한 뒤 해당 예외에 대한 구체적인 처리를 해주어야하는 예외 ex. ClassNotFoundException Unchecked Exception : 해당 예외에 대한 처리를 할 필요가 없는 예외 ex. NullPointerException, ArrayIndexOutOfBoundsException 보통 개발자가 코드를 잘못 작성해서 발생하는 예외는 unchecked Exception가 많으며 RuntimeException을 상속받은 예외이다. ❯ 예외 던지기(throw) 개발자가 필요에 의해 예외를 던져야(발생시켜야)하는 경우가 있다. 예를들어 특정 정보를 DB.. 2023. 4. 17.
44일차: Spring MVC(예외처리) ❯ 예외 처리 애플리케이션을 구현하다보면 여러가지 예외를 마주하게된다. 그 중 현재 진행중인 Spring MVC에서 겪을 수 있는 예외 중 가장 대표적인 것이 클라이언트 요청 데이터의 유효성 검증에서 발생하는 예외이다. 현재까지는 예외가 발생할 경우 정상적으로 작동하지 않았음을 나타낼뿐 그에 대한 구체적인 정보는 제공하지 않았다. 따라서 어떠한 예외가 왜, 어떤부분에서 발생했는지를 알려주기 위해 예외 처리를 할 수 있다. ❯ @ExceptionHandler 사용 위 그림의 리턴 결과는 예외가 발생했을때 스프링이 전송해주는 응답 메세지이다. 이를 적당히 가공하여 우리가 원하는 예외에, 원하는 형태의 응답을 전송해줄 수 있다. 1. Controller 에 @ExceptionHandler 메서드 생성 @Exc.. 2023. 4. 14.
43일차: Spring MVC(서비스 계층, Mapper) ❯ 서비스 계층 Controller 가 전달받은 요청을 직접적으로 처리하는 계층을 말한다. Spring의 DI를 통해 API 계층과 서비스 계층을 연동할 수 있다. (서비스 객체를 API 객체 생성자 파라미터로 주입) API 계층에서 전달받은 DTO를 서비스 계층의 도메인인 엔티티(Entity) 객체로 변환해서 서비스 계층에 전달한다. (반대로 비즈니스 로직을 거친 Entity는 DTO 객체로 변환되어 클라이언트에게 전달된다.) DTO 클래스와 Entity 객체의 역할을 분리하는 이유는 크게 세가지로 나뉜다. 계층별 관심사 분리 : DTO의 역할은 API 계층에서 요청 데이터를 받고, 응답 데이터를 전달하는 목적을 가진다. 반면 Entity는 서비스 계층에서 데이터 엑세스 계층과 연동하여 비즈니스 로직 .. 2023. 4. 13.
42일차: Spring MVC(DTO) ❯ DTO(Data Transfer Object) 어제 작성한 코드에서는 클라이언트로부터 요청 데이터를 받을 때 각 파라미터를 @RequestParam 으로 하나씩 직접 삽입하였다. 이러한 방법은 파라미터가 늘어날 경우 코드가 복잡해진다. 또한 유효성 검사가 필요할 경우 코드가 더욱 복잡해지게된다. 이러한 단점을 해결하기 위해 사용하는 것이 DTO 방식이다. 어제 코드를 작성할 때는 아래와 같이 작성했었다. import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @RestController @Reque.. 2023. 4. 12.