목록Spring Framework (24)
훈훈훈

이번에 사내에서 S3 업로드 방식을 멀티파트(Multipart) 업로드 방식으로 변경하는 일을 맡게 되었다. 해당 기능 구현 중 SDK를 사용한 예제는 많았지만 S3에서 지원하는 REST API를 사용하는 예제는 찾기 힘들었기 때문에 이 기회에 정리하게 되었다. ( 해당 예제 코드는 Spring boot 와 Kotlin으로 작성하였다. ) Why Multipart Upload ?? S3에서 단일 객체를 업로드할때 최대 5GB 이상은 업로드할 수 없다. 일반적으로 5GB를 초과하는 파일을 업로드할때 용량을 압축해서 올리는 방안이 있겠지만, 압축에도 한계가 발생할 수 있다. 그런 상황에서 멀티파트 업로드를 사용하면 하나의 파일을 최대 5GB까지 10,000개로 분할 후 업로드 할 수 있다. 즉 5TB 파일까..

Spring Security에서 제공하는 CSRF protection 기능에 대해 공부 중 읽어 보았던 블로그 & 스터디 자료로 선택한 강의에서 CSRF protection 기능을 무조건 Enable 하는 걸 권장하였다. 하지만 문득 CSRF에 취약하지 않은 환경이라면 무조건 Enable 해야하는가에 대한 의문이 갑자기 들어 해당 내용을 정리하게 되었다. 해당 글은 먼저 CSRF에 대한 내용과 Spring Security에서 제공하는 CSRF protection 기능을 간단히 살펴보고 CSRF protection 기능을 무조건 Enable 해야하는가에 대해 필자의 생각을 적으려고 한다. CSRF (Cross Script Resourse Forgery) CSRF 취약점은 공격자가 사용자가 의도하지 않는 요..
- 문제 발생한 코드 > 예제코드는 Kotlin으로 작성되었습니다. @PostMapping("/testController") fun testController( @RequestBody testDTO1: TestDTO1, @RequestBody testDTO2: TestDTO2 ): ResponseEntity { return ResponseEntity(HttpStatus.OK) } PostMapping 할 때 두개 이상 @RequestBody를 받는 경우 JSON parse error 발생 - 원인 request 할 때 Input Stream 은 한번만 실행이 된다. 따라서 두번째 인자를 받을땐 Input Stream 이 close 상태이기 때문에 에러가 발생 즉, RequestBody annotation..

Spring boot와 Kotlin(코틀린)으로 Application 개발 중에 Jackson 라이브러리에서 LocalDate 타입을 Deserialize(serialize)를 하면서 발생했던 이슈를 정리해보려고 한다. - 오류 메시지 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `java.time.LocalDate` (no Creators, like default construct, exist): no String-argument constructor/factory method to deserialize from String value - 문제 상황 Applicat..

이번에는 Spring boot에서 Event Listener를 사용하는 것에 대하여 정리해보려고 한다. Event Listener를 사용하게된 계기는 Spring boot Application 시작 및 종료 시 특정 이벤트를 수행시키기 위해서 여러 방법을 찾던 중 가장 나은 방법으로 판단하게 되어 사용하게 되었다. 비슷한 기능으로는 @PostConstruct와 @PreDestory가 있지만 해당 기능은 Bean이 생성 시점에 실행되기 때문에 이벤트가 실행되는 시점은 내가 원하는 시점과 약간 차이가 발생한다. 따라서 해당 기능은 사용하지 않고 Event Listener를 사용하였다. 예제 코드 @Component class StartTest { private val logger = LoggerFactory..

이번에는 Spring boot, JPA와 코틀린(Kotlin)을 사용하여 간단한 API를 만들어 보려고 한다. 현재 사내에서 API 서버를 스프링 부트와 코틀린을 사용하여 개발하고 있다. 구글 검색 시 자바에 비해 코틀린에 관한 내용은 많이 부족하다. ....그래서 시간 날떄 틈틈히 정리를 해보려고 한다. 사용한 기술은 아래와 같다. - Spring Boot - Kotlin - gradle - postgresql - JPA IDE는 IntelliJ를 사용하였으며, 이클립스 환경이랑은 약간 차이가 날 수 있다. 이제 아래 코드를 보면서 살펴보자. 프로젝트 구조 먼저 프로젝트 구조는 아래와 같이 구성하였다. 파일 구성은 Controller, Service, DTO, Model, Repository 로 구성하..

이번에는 스프링 부트를 코틀린을 사용하여 간단하게 CRUD API를 만들어보려고 한다. 해당 예제는 코틀린 마이크로서비스 개발이란 책을 보고 작성하였다. 만들고자 하는 API는 유저 관리(CRUD) 기능을 가지고 있으며, 별도로 인증인가 적용은 하지 않았다. 마찬가지로 JPA도 연동없이 목데이터를 사용하여 간단하게 만들려고 한다. 여담이지만 이전에 python에 관한 글 작성 시 코드 블럭에 오류 없이 잘 사용했었는데, 코틀린이나 자바로 코드 블럭을 적용해보니 제대로 적용이 안되는 것 같다..... 이제 코드를 작성해보자 Customer package com.kotlin_rest_exam.rest_exam data class Customer( var id: Int = 0, var name: String ..

이번에는 Spring MVC 초기 설정하는 과정에 대하여 정리해보려고 한다. 요즘 스프링 부트를 공부하기 전에 스프링 프레임워크에 대해 먼저 공부를 진행하고 있지만 ... 이전에 Django를 사용했었을 때는 보지 못했던 개념들 많아 .... 모르던 부분들은 계속 공부하고 정리해보려고 한다.... # Spring MVC 란 ? 스프링 프레임워크에는 다양한 종류의 모듈이 존재한다. 이번에는 그 중에서 웹 프레임워크를 만들기 위한 모듈 중 Spring MVC에 대한 간단한 개념과 초기 설정을 정리해보려고 한다. IDE는 Intellij를 사용했으며, 이클립스에도 STS를 사용하면 거의 동일하게 사용할 수 있다. 먼저 Http Request 시 Spring MVC에서 처리되는 과정을 살펴보면 아래 그림과 같다..