본문 바로가기
관리자

Programming-[Backend]

(421)
[링크][중요] Mapstruct 라이브러리, DTO와 Entity 검증의 주체가 되야하는 부분 1. Mapstruct 라이브러리 DTO 와 Entity간 변환을 쉽게 해주는 라이브러리다. [1] [보통 사용자의 입력값을 PO(Parameter Object)로 받아와서 DTO로 변환한다. 그리고 DTO의 값들을 Entity에 하나씩 넣어준 뒤 DB에서 Entity를 save 또는 update 하는 방식을 사용한다. 이 과정에서 DTO를 Entity로 바꿀 때, 또는 반대로 Entity를 기반으로 DTO로 바꿀 때 사용한다.] 필드값이 100개인 Entity의 100개 필드값을 DTO를 통해서 하나씩 전달해줄려면, Entity.setXxx(DTO.getXxx) 등으로 100개의 항목을 작성해줘야할 수도 있다. 그런데 Mapstruct의 @Mapper 방식을 사용하면 한줄만으로 이런 작업을 끝낼 수도 ..
[링크] @Transient 어노테이션 의미, 사용 시 유의사항 요약 @Transient 어노테이션은 @Entity 어노테이션이 정의된, 엔티티 클래스에서 사용한다. 사용목적은 JPA에서 엔티티의 필드값들을 영속성 객체로 관리하는데, 관리 대상에서 해당 필드나 메서드를 제외하기 위함이다. 예를 들어 아래와 같이 엔티티 클래스에 두 가지 필드가 존재하는 경우, private String password; @Transient private String confirmedPassword; confirmedPassword 필드는 단순 확인용이므로 데이터베이스상에 저장되는 값이 아니고, 영속성 객체로 관리될 필요도 없다. 이럴 경우 @Transient 어노테이션을 사용한다. 메서드에도 사용할 수 있는데, 필요시 관련 상세 내용은 링크에서 확인하자. 링크 https://gmoon..
[스프링 웹MVC-2] 16. API 예외 처리 - 스프링부트 기본 오류 처리, HandlerExceptionResolver 1. 서블릿 API 오류 처리 API 방식 오류 처리 이전 글에서는 4xx, 5xx 등 Http 상태코드에 따라 오류 페이지를 클라이언트에 보여주는 형식으로 처리했다. 상황에 따라 보여줄 페이지만 설정하면 되므로 상대적으로 간단한 방식이라 할 수 있다. 그러나, API 통신의 경우를 생각해보자. 만약 서버-서버간 API 통신을 한다고 생각해보면, HTML로 표현된 페이지를 보내서 통신을 할 수는 없다. 어떤 데이터 양식(ex. json 객체)으로 통신을 할지 규약을 정하고, 그에 맞게 데이터를 보내주어야 한다. 서블릿의 API 방식 오류 처리 이전 글에 이어서 진행을 했다면, WebServerCustomizer 클래스가 주석처리 되어있을 것이다. 주석을 풀고, 다시 Bean으로 등록하여 서블릿에 의해 A..
[스프링 웹MVC-2] 15. 예외 - 인터셉터와 스프링 부트의 오류 페이지 1. 인터셉터의 예외 처리 인터셉터의 예외 처리 방식과 설정 방법을 알아본다. LogInterceptor 작성 이전과 마찬가지로 LogInterceptor를 작성한다. 다만, 필터를 학습할 때와 마찬가지로 request.getDispatcherType()을 로그로 남기도록 한다. java/hello/exception/interceptor/LogInterceptor.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 @Slf4j public class LogInterceptor implements HandlerInterceptor { public static final String LOG_ID ..
[스프링 웹MVC-2] 14. 예외 - 서블릿 오류 페이지 1. 서블릿 예외 발생 처리 방식 서블릿은 2가지 방식으로 예외 처리를 지원한다. Exception response.sendError(HTTP 상태코드, 오류 메시지) Exception이 발생하는 경우는 다시 2가지로 나뉜다. 자바 실행 통상 main 쓰레드를 실행하는 경우이며, 미리 짜놓은 코드에 의해 실행 중 예외가 발생하지 않고 main 메서드를 넘어서 예외가 발생하면 예외 정보를 남기고 쓰레드가 종료된다. 웹 애플리케이션 웹 애플리케이션은 요청별로 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 자바 실행의 경우와 마찬가지로 미리 짜놓은 try ~ catch 문 등으로 예외를 잡아내면 상관없지만, 예외를 잡지 못해서 서블릿 밖으로까지 예외가 전달되면 아래와 같은 도식으로 예외가 전파된다. WAS
[링크][작성중] SQL Server Naming Convention 참조1의 내용을 바탕으로함 1. 테이블 이름 약어를 tbl로 쓰고, 이름은 복수형으로 쓴다. tblEmployees, tblOrders, tblProducts 2. 제약 조건 PK : Primary Key, FK : Foreign Key, UQ : Unique Key, DF : Default, CHK : Check PK_Employees, PK_Orders, PK_Products FK_Orders_Employees, FK_Items_Products (Target 테이블_Source 테이블 순) UQ_Employees_EmailID, UQ_Items_Code (테이블 이름_컬럼 이름) DF_Employees_IsActive, DF_Employees_CreateDate(테이블 이름_컬럼 이름) CHK_Emp..
[스프링 웹MVC-2] 13. 로그인 - 스프링 인터셉터, ArgumentResolver 활용 1. 스프링 인터셉터의 특징과 흐름 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 서블릿 인터셉터와 마찬가지로 웹의 공통 관심 사항을 처리하지만, 좀 더 정밀하게 설정이 가능하다. 인터셉터의 적용 순서는 다음과 같다. HTTP 요청 -> WAS -> 필터 -> 서블릿(DispatcherServlet) -> 스프링 인터셉터1 -> 스프링 인터셉터 2-> ... -> 컨트롤러 서블릿 필터에 비해서, request, response만 받는 것이 아니라 어떤 컨트롤러(handler)가 호출되는지 호출 받을 수 있고, modelAndView도 받을 수 있다. 그리고 preHandle, postHandle, afterCompletion 메서드 순으로 흐름이 진행된다. 구조 자체가 스프링 MVC에 특화되어 있..
[스프링 웹MVC-2] 12. 로그인 - 서블릿 필터 1. 서블릿 필터 개념 이때까지 만든 로그인 기능만으로는 사용자의 로그인 여부에 따라 웹페이지 내 특정 url로의 접속을 허용하거나 제한할 수 없다. 이런 기능을 지원하는 것이 서블릿 필터이다. 물론 로그인 여부만 검사하는 것이 아니라 컨트롤러에 접근 전에 미리 요청의 적절성을 검사해주는 기능 단위라고 이해하면 된다. 다음 글에서 배울 스프링 인터셉터도 마찬가지 기능을 제공한다. 만약 이런 기능들을 이용하지 않고 각 컨트롤러에서 로그인 여부를 직접 확인한다면, 로그인 여부를 확인하는 코드를 모든 컨트롤러들에 일일이 작성해주어야 할 것이다. 요청을 필터링 하는 기능은 각 컨트롤러에서의 공통 관심사이기 때문에, 공통 기능으로 통합하는 AOP 개념을 도입할 수 있지만, 웹과 관련된 기능을 공통화할때는 서블릿 ..