Spring
-
Spring Swagger(Open API)Spring 2024. 9. 13. 12:13
Spring Swagger(Open API) 1. Swagger란?스웨거는 협업을 위해 필요한 라이브러리이다. 스웨거가 나오기 전에는서버 개발자가 어떤 API를 만들어서 나누어 주려면API 스펙(URL, RequestParam, response 등)을 엑셀 파일 같은 곳에 직접 정리하고,다른 사람들에게 나누어준 뒤에 수정해야 하는 일이 생기거나 하면 엑셀 파일을 열어서,또 다시 수작업으로 전부 바꾸고 하면 너무 번거롭다. 이런 것들을 자동으로 문서화 시켜주기 위해 스웨거를 사용한다.문서화 뿐만 아니라, 빌드, 테스트 케이스 작성도 가능하다던데지금은 그냥 간단하게 문서화되는 것을 확인만 할 것이다. 근데 주의점이 있다.스웨거가 springfox, springdoc 2가지가 있는데, springfox는 ..
-
Spring 예외 - 2, API 예외Spring 2024. 4. 25. 11:18
예외 - 2, API 예외 1. API 예외 처리 - 시작목표 API 예외 처리는 어떻게 해야할까? HTML 페이지의 경우 지금까지 설명했던 것 처럼 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다. 그런데 API의 경우에는 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. 지금부터 API의 경우 어떻게 예외 처리를 하면 좋은지 알아보자. API도 오류 페이지에서 설명했던 것 처럼 처음으로 돌아가서 서블릿 오류 페이지 방식을 사용해보자. 1 - 1. WebServerCustomizer 다시 동작public class WebServerCust..
-
Spring 예외 - 1 예외처리, 오류 페이지Spring 2024. 4. 22. 12:36
예외 - 1 예외처리, 오류 페이지 1. 서블릿 예외 처리 - 시작 스프링이 아닌 순수 서블릿 컨테이너는 예외를 어떻게 처리하는지 알아보자. 서블릿은 다음 2가지 방식으로 예외 처리를 지원한다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) 1 - 1. Exception(예외) 자바 직접 실행 자바의 메인 메서드를 직접 실행하는 경우 main 이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외를 잡지 못하고 처음 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션 웹 애플리케이션은 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, ..
-
Spring 필터, 인터셉터Spring 2024. 4. 22. 10:27
필터(Filter), 인터셉터(Interceptor) 1. 서블릿 필터 - 소개 1 - 1. 공통 관심 사항 요구사항을 보면 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다. 앞에서 로그인을 하지 않은 사용자에게는 상품 관리 버튼이 보이지 않기 때문에 문제가 없어 보인다. 그런데 문제는 로그인 하지 않은 사용자도 다음 URL을 직접 호출하면 상품 관리 화면에 들어갈 수 있다는 점이다. http://localhost:8080/items 상품 관리 컨트롤러에서 로그인 여부를 체크하는 로직을 하나하나 작성하면 되겠지만, 등록, 수정, 삭제, 조회 등등 상품관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야 한다. 더 큰 문제는 향후 로그인과 관련된 로직이 변경될 때 이다. 작성한 모든 ..
-
Spring 검증 - 2, Bean ValidationSpring 2024. 4. 19. 12:50
검증 - 2, Bean Validation 1. Bean Validation - 소개 검증 기능을 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. 다음 코드를 보자. public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(9999) private Integer quantity; //... } 이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화 한 것이 바로 ..
-
Spring 검증 - 1, ValidationSpring 2024. 4. 17. 13:08
검증 - 1, Validation 1. 검증 요구사항 상품 관리 시스템에 요구사항이 있다고 하자. 1 - 1. 요구사항: 검증 로직/ 타입 검증 가격, 수량에 문자가 들어가면 검증 오류 처리 필드 검증 상품명: 필수, 공백X 가격: 1000원 이상, 1백만원 이하 수량: 최대 9999 특정 필드의 범위를 넘어서는 검증 가격 * 수량의 합은 10,000원 이상 지금까지 만든 웹 애플리케이션은 폼 입력시 숫자를 문자로 작성하거나해서 검증 오류가 발생하면 오류 화면으로 바로 이동한다. 이렇게 되면 사용자는 처음부터 해당 폼으로 다시 이동해서 입력을 해야 한다. 아마도 이런 서비스라면 사용자는 금방 떠나버릴 것이다. 웹 서비스는 폼 입력시 오류가 발생하면, 고객이 입력한 데이터를 유지한 상태로 어떤 오류가 발생..
-
Spring Thymeleaf - 2, 메시지 국제화Spring 2024. 4. 16. 12:34
Thymeleaf - 2, 메시지 국제화 1. 메시지, 국제화 소개 1 - 1. 메시지 악덕? 기획자가 화면에 보이는 문구가 마음에 들지 않는다고, 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 어떻게 해야할까? 여러 화면에 보이는 상품명, 가격, 수량 등, label 에 있는 단어를 변경하려면 여러 화면들을 다 찾아가면서 모두 변경해야 한다. 화면 수가 적으면 문제가 되지 않지만 화면이 수십개 이상이라면 수십개의 파일을 모두 고쳐야 한다. 왜냐하면 해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문이다. 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. 예를 들어서 messages.properties 라는 메시지 관리용 파일을 만들고 item=상품 item.id=..
-
Spring Thymeleaf - 1, 기본 기능Spring 2024. 4. 12. 11:25
Thymeleaf - 1, 기본 기능 모든 내용을 다 다루기에는 양이 너무 많으므로, 내가 생각하기에 유용하거나, 특별한 기능들 위주로 짧게 다루겠다. 1. 타임리프 특징 1. 서버 사이드 HTML 렌더링 (SSR) 2. 네츄럴 템플릿 3. 스프링 통합 지원 1 - 1. 서버 사이드 HTML 렌더링 (SSR) 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용된다. 1 - 2. 네츄럴 템플릿 타임리프는 순수 HTML을 최대한 유지하는 특징이 있다. 타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 내용을 확인할 수 있고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. JSP를 포함한 다른 뷰 템플릿들은 해당 파일을 열면,..