JPA는 Interface, Hibernate는 그 구현체Java Persistence API (JPA)는 인터페이스의 모음이며, 이를 구현한 구현체로 Hibernate라는 라이브러리를 선택했다. 데이터베이스 방언의 유연성JPA는 데이터베이스에 종속적이지 않다.각 데이터베이스의 방언을 지원하여, Oracle에서 MySQL로 데이터베이스를 변경해도 큰 영향이 없다. 실제 운영에서는 조그만한 영향이 있으므로 주의가 필요하다.) JPA의 설정과 초기화JPA를 사용하기 위해선 persistence.xml을 설정해야 한다. 이 설정 파일을 통해 다음의 단계를 거친다. 1. Persistence 클래스에서 persistence.xml을 읽어 설정 정보를 로드한다.2. EntityManagerFactory 클래스를..
SQL 중심적인 개발의 문제점객체 지향 프로그래밍과 관계형 데이터베이스의 괴리감 객체 지향의 특성 객체 지향 프로그래밍 언어는 추상화, 캡슐화, 정보은닉, 상속, 다형성 등과 같은 여러 특성을 가지고 있어 복잡한 시스템을 효율적으로 구성할 수 있다.이러한 특성을 통해, 개발자는 더 나은 설계와 유지보수가 가능하다.관계형 데이터베이스의 특성반면에 관계형 데이터베이스는 테이블, 행, 열 등으로 데이터를 정의하고 SQL을 사용하여 데이터를 관리한다.이는 객체 지향의 특성과는 맞지 않으며, 때로는 데이터를 객체에 매핑하기 위해 추가적인 작업이 필요하다. SQL Mapper와 객체-데이터베이스 불일치 문제Mapper의 한계JPA가 등장하기 전에는 대개 SQL Mapper를 사용하여 객체와 데이터베이스 사이의 매핑..
바로 전 글에서 @ExceptionHandler를 사용하여 예외처리를 깔끔하게 처리했다. 하지만 컨트롤러의 정상 처리와 예외 처리 코드가 하나의 컨트롤러에 섞여있다. 이를 @ControllerAdvice를 사용하여 둘을 분리할 수 있다. ExControllerAdviceExControllerAdvice라는 클래스를 하나 만들어보자. 그 후, 기존 ApiExceptionV2Controller에서 예외처리를 하던 코드를 ExControllerAdvice에다가 옮기고 실행했다.@Slf4j@RestControllerAdvicepublic class ExControllerAdvice { @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(Illegal..
HTML vs Api 오류전에 언급한 Spring mvc 패턴과 Restful Api의 차이가 여기서 한 번 더 나온다. 이 둘의 차이가 헷갈리다면 아래 글을 참고하기 바란다.2023.08.16 - [Spring/Spring Exception] - Spring Exception 4. Api 예외 처리 (Spring mvc VS RestfulApi) Spring Exception 4. Api 예외 처리 (Spring mvc VS RestfulApi)Spring mvc 패턴 VS RestfulApi 이전 글에도 언급했지만 mvc 패턴과 Api의 차이를 명확히 알아야 이해할 수 있다. 이 둘의 가장 큰 차이점만 언급하겠다. Spring mvc 패턴 View 지향: Spring MVC 패턴은 주로 웹 애toyc..
기본 제공 ResolverSpring Boot가 기본으로 제공하는 ExceptionResolver는 아래와 같다. 1. ExceptionHandlerExceptionResolver2. ResponseStatusExceptionResolver3. DefaultHandlerExceptionResolver ExceptionHandlerExceptionResolver는 Api 예외처리할 때 @ExceptionHandler로 대부분 처리한다. ResponseStatusExceptionResolver는 HTTP 상태 코드를 지정해 준다. ex) @ResponseStatus(value = Httpstatus.NOT_FOUND)DefaultHandlerExceptionResolver는 스프링 내부 기본 예외를 처리한다..
예전 로직지금까지는 예외가 발생하고 WAS까지 예외가 던져지고, WAS에서 오류페이지를 찾은 후 다시 /error로 호출했다.하지만 이렇게 여러 필터 및 인터셉터를 거치는 과정은 매우 비효율적이고 복잡하다.이때 ExceptionResolver를 활용하면 이러한 과정을 거치지 않고 예외를 깔끔하게 처리할 수 있다. UserException 정의 예외 추가RuntimeException을 상속받는 사용자 정의 예외를 추가했다. public class UserException extends RuntimeException{ public UserException() { super(); } public UserException(String message) { super(message);..
HandlerExceptionResolver만약 클라이언트의 요구사항이 추가되어서 bad라는 uri가 들어올 경우, 클라이언트에게 서버 문제가 아닌, 클라이언트의 문제라는 것을 알려주려면 어떻게 해야 할까? 기존 컨트롤러에 추가해 보자. @Slf4j@RestControllerpublic class ApiExceptionController { @GetMapping("/api/members/{id}") public MemberDto getMember(@PathVariable String id) { if (id.equals("ex")) { throw new RuntimeException("잘못된 사용자"); } if (id.equals("b..
BasicErrorControllerBasicErrorController에는 html view렌더링 이용시 이미 만들어져있듯 Api에 대한 내용 또한 이미 만들어져 있다.html view렌더링에 대한 응답과 json에 대한 응답은 다르지만 유입 경로는 동일하다. @RequestMapping(produces = MediaType.TEXT_HTML_VALUE) public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {...} @RequestMapping public ResponseEntity> error(HttpServletRequest request) {...} BasicErrorControlle..
Spring mvc 패턴 VS RestfulApi이전 글에도 언급했지만 mvc 패턴과 Api의 차이를 명확히 알아야 이해할 수 있다.이 둘의 가장 큰 차이점만 언급하겠다. Spring mvc 패턴View 지향: Spring MVC 패턴은 주로 웹 애플리케이션의 사용자 인터페이스(UI)를 개발하는 데 사용된다.컨트롤러가 뷰를 반환하고, JSP와 같은 뷰 템플릿 엔진을 통해 HTML을 생성하여 클라이언트에게 제공한다. RestfulApi데이터 지향: API 방식은 주로 데이터를 주고받는 데 사용된다.JSON, XML과 같은 데이터 형식을 사용하여 클라이언트와 서버 간 데이터를 교환한다. 뷰를 생성하는 대신, 데이터만 반환한다. 이 둘의 차이를 꼭 알아야, 이해가 가능하다. Api의 경우 웹 페이지가 아닌 ..
2023.08.12 - [Spring/Spring mvc] - Spring Exception 1. 서블릿1 (Spring에서 예외처리를 어떻게 할까?)2023.08.14 - [Spring/Spring mvc] - Spring Exception 2. 서블릿2 (Filter와 Interceptor를 안 거치려면?)BasicErrorController이전 글들을 보면 WebServerCustomizer를 만들어 오류 종류에 따라 어떠한 페이지로 가는지 경로를 정해줬고, 예외 처리용 컨트롤러를 직접 만들었다. 하지만 SpringBoot는 앞서 배운 내용을 기본으로 제공한다. 이러한 기본적인 내용들은 BasicErrorController에 모두 정의되어 있다. new ErrorPage로 상태코드와 예외를 설정하지..