springboot 56

[SpringBoot] 스프링 TypeConverter 정리

개요 컨트롤러에서 @RequestParam 어노테이션이나 @ModelAttribute 어노테이션을 붙이면 String 자료형이 다른 제네릭 타입으로 자동 형 변환되는 것을 확인할 수 있습니다. 이는 스프링에서 기본으로 제공해주는 TypeConverter 덕분인데 이번 게시글에서는 TypeConverter에 대해 알아보겠습니다. 1. 스프링 타입 컨버터 HTTP 요청 파라미터는 모두 문자열로 처리 따라서, 요청 파라미터를 다른 제너릭 타입으로 변환하기 위해서는 변환하는 과정을 거쳐야 함 개요에서도 언급했듯이 @RequestParam, @ModelAttribute, @PathVariable 같은 어노테이션이 해당 과정을 대신해주기도 함 그 외 TypeConverter 적용 예시 @Value 어노테이션을 통해..

Spring 2021.08.11

[SpringBoot] API 예외처리

개요 기존에 정리한 HTML 예외처리(https://jaimemin.tistory.com/1888)와 달리 API 예외처리는 고려해야 할 요소가 상당히 많습니다. HTML 예외처리 같은 경우 적절한 예외 페이지만 있으면 대부분의 문제를 해결할 수 있지만, API 예외처리 같은 경우 각 API마다 정해진 규약이 다르므로 각 에러 상황에 맞는 에러 응답 스펙을 정의해야 하고 JSON으로 데이터를 내려주어야 합니다. 이처럼 API마다 정해진 규약이 다르기 때문에 실무 개발을 진행하다 보면 각 프로젝트마다 API 규격 정의서를 작성해야 하는데, 규격도 양방향으로 합의한 후 정해야하기 때문에 해당 프로세스에 상당히 많은 시간을 투자해야 합니다. API 규격은 회사마다 상이하고 심지어 팀 마다도 다를 수 있으므로 ..

Spring 2021.08.08

[SpringBoot] 대용량 엑셀 다운로드를 위한 SXSSFWorkbook

개요 기존에 Excel 생성 및 다운로드 기능을 구현하는 코드를 공유했었습니다. https://jaimemin.tistory.com/1768 [SpringBoot] Excel 생성 및 다운로드 개요 ElasticSearch로 조회한 목록들을 엑셀로 다운로드할 수 있는 기능을 추가해달라는 요청이 들어와 구현을 해봤습니다. 구현 코드 ExcelController.java ExampleService.java ExcelView.java * 주석으로도 작.. jaimemin.tistory.com https://jaimemin.tistory.com/2069 [SpringBoot] 대용량 엑셀 파일 생성 및 다운로드 삽질기 개요 작년에 이어 올해도 엑셀 파일 생성 및 다운로드 기능을 담당하게 되었습니다. https:..

[DEV] 기록 2021.08.05

[SpringBoot] HTML 예외처리와 예외 페이지

개요 실무 개발을 경험해보면 실제 개발하는 시간보다 예외처리 및 테스트 코드 작성하는데 시간이 더 많이 걸립니다. 따라서, 이번에는 예외처리와 예외 페이지에 대해 정리해보겠습니다. 1. 서블릿의 예외처리 과정 서블릿은 크게 두 가지 방식으로 예외처리 지원함 Exception을 던지거나 response.sendError(HTTP 상태 코드, 에러 메시지) 메서드 호출 1.1 Exception 자바의 메인 메서드를 직접 실행할 경우 main이라는 쓰레드가 실행되며 실행 도중 예외를 잡지 못하고 실행한 main() 메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드 종료 웹 애플리케이션의 경우 사용자 요청 별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행 애플리케이션에서 excepti..

Spring 2021.08.03

[SpringBoot] Filter, Interceptor 개념 정리 및 로그인 처리

개요 기존 게시글에서는 쿠키와 세션 개념을 정리하면서 이 두 개념을 이용하여 로그인 관련 코드 적용도 해봤습니다. (https://jaimemin.tistory.com/1885, https://jaimemin.tistory.com/1886) 하지만, 로그인 처리를 할 때 쿠키와 세션만으로는 해결 안 되는 점이 있습니다. 예를 들자면, 로그인을 해야지만 접근 가능한 페이지들이 있을 때 쿠키와 세션만 적용했을 때는 해당 페이지 url을 직접 쳐서 들어갈 경우 그대로 화면이 노출된다는 문제점이 있습니다. 사실 시스템 요구사항에서는 로그인하지 않은 상태에서 해당 페이지들에 접근할 경우 우선 로그인 페이지로 리다이렉트 한 후 다시 그 페이지로 리다이렉트 하는 방식을 원할 것입니다. 여기서 필터와 인터셉터가 쓰이는..

Spring 2021.08.01

[SpringBoot] 쿠키, 세션을 이용한 로그인 처리

개요 지난번 게시글에서는 쿠키, 세션, 그리고 쿠키와 세션을 이용한 로그인에 대한 개념을 정리해봤습니다. (https://jaimemin.tistory.com/1885) [SpringBoot] 쿠키, 세션 개념 정리 개요 이번 포스팅에서는 로그인 기능을 구현할 때 꼭 필요한 개념인 쿠키와 세션에 대해 정리해보겠습니다. 실제 로그인과 관련된 코드 및 설명은 다음 글에서 정리하겠습니다. 쿠키 서버에서 jaimemin.tistory.com 이번 게시글에서는 코드와 함께 지난번 게시글에 대한 부가 설명을 진행하겠습니다. 1. 쿠키를 이용한 로그인 처리 지난 게시글 복습 서버는 로그인 요청이 성공할 경우 응답 헤더 내 Set-Cookie 필드에 사용자 정보 전달 쿠키를 전달받은 클라이언트는 이후 모든 HTTP 요..

Spring 2021.07.31

[SpringBoot] 쿠키, 세션 개념 정리

개요 이번 포스팅에서는 로그인 기능을 구현할 때 꼭 필요한 개념인 쿠키와 세션에 대해 정리해보겠습니다. 실제 로그인과 관련된 코드 및 설명은 다음 글에서 정리하겠습니다. 쿠키 서버에서 요청에 대한 응답으로 클라이언트로 전달해주는 정보 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달하는 정보 위 두 정보는 HTTP Header에 저장이 됨 Set-Cookie: 서버에서 클라이언트로 쿠키 전달 Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청 시 서버로 전달하는 정보 쿠키 - 생명주기 Set-Cookie 내 expires라는 필드를 참고하면 쿠키 만료 날짜 및 시간을 알 수 있음 (GMT 기준) Set-Cookie 내 max-age 필드는 마지막 요청으로부터..

Spring 2021.07.29

[SpringBoot] Validation 간단 정리 - 2 (Bean Validation)

개요 기존에 공유한 Validtor의 경우 간단한 검증 기능조차도 코드로 작성했기 때문에 복잡하다고 느껴질 수 있습니다. (https://jaimemin.tistory.com/1874) 이에 따라 스프링에서는 애노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있는 Bean Validation을 제공하며 오늘은 이에 대해 정리해보고자 합니다. 1. Bean Validation 특정한 구현체가 아닌 Bean Validation 2.0(JSR-380)이라는 기술 표준 JPA가 표준 기술이고 그 구현체로 hibernate가 있는 것처럼 Bean Validation 또한 검증 애노테이션과 여러 인터페이스의 모음 대표적인 구현체로 hibernate validator가 있으며 보다 자세한 내용은 http://h..

Spring 2021.07.25

[SpringBoot] HV000232: No JSR 223 script engine found for language "javascript"

개요 Bean Validation 내 ObjectError을 적용하기 위해 @ScriptAssert 어노테이션을 적용했더니 아래와 같은 에러가 발생했습니다. HV000232: No JSR 223 script engine found for language "javascript" 원인 해당 에러의 원인은 자바 버전이 달라서 발생하는 문제였습니다. @ScriptAssert 어노테이션의 경우 Java 11에 최적화되어있는 듯 합니다. 실제로 JDK를 11로 적용하고 프로젝트를 빌드하면 아래와 같은 메시지를 볼 수 있습니다. Warning: Nashorn engine is planned to be removed from a future JDK release 해결방법 따라서, 결국 JDK를 11로 적용하고 프로젝트..

[DEV] 기록 2021.07.24

[SpringBoot] Validation 간단 정리 - 1 (BindingResult, Validator)

개요 실무 프로젝트를 경험하신 분들은 다들 공감하시겠지만 프로젝트 개발 과정에서 실제 개발에 투자하는 시간만큼 예외처리 및 validation을 진행합니다. 해당 게시글은 PRG 패턴을 예시로 들어 내용을 정리할 예정이며 PRG 패턴에 관해서는 아래 게시글을 참고해주세요. (https://jaimemin.tistory.com/1825) 게시글에서 다룰 케이스는 아래와 같습니다. (위에는 PRG 패턴 정상 케이스, 아래는 게시글에서 다룰 케이스) 회원가입 제약 조건 우선, 검증 및 예외처리를 하기 위해서는 회원가입을 진행할 때 제약 조건이 있어야 합니다. 따라서, Member 즉 회원 클래스에는 id, password, 그리고 생년을 나타내는 year 필드가 있다고 가정합니다. 각 필드에 대한 제약조건은 ..

Spring 2021.07.16