본문 바로가기

Backend/Spring

(39)
Spring Boot 파일 업로드 MultipartFile Spring의 MultipartFile 인터페이스를 이용하여 파일 업로드하는 방법에 대해서 알아볼게요. 파일을 리스트로 여러 개 업로드하면 컨트롤러에서 받을 수 있도록 할거에요. 간단하게 말해서 다중 업로드죠. 예제 구현은 Spring Boot 2.1.8, OpenJDK 11 버전으로 했어요. FileController 기본적으로 @RequestPart 어노테이션을 이용해서 multipart/form-data 요청을 메소드 인수와 연관시킬 수 있어요. @RequestParam를 사용해도 동일하게 잘 받아집니다. @PostMapping("") @ResponseStatus(HttpStatus.CREATED) public List upload(@RequestPart List files) throws Excep..
Spring Boot @Async Callback 비동기처리 기본적으로 Spring은 동기식 처리 모델이기 때문에 메소드를 호출하면 이후의 작업들은 Blocking되어 수행하지 않아요. Spring Boot에서는 @Async라는 어노테이션을 지원하여 상황에 따라 비동기 처리가 가능하도록 하고 있어요. @Async를 어떻게 사용하면 되는지에 대해서 알아볼게요. 설정 파일을 하나 추가해줄게요. @EnableAsync는 서버에서 비동기 처리를 할 수 있도록 기능을 ON하였다라고 보면되요. 또한, AsyncConfigurerSupport를 상속받아서 Thread Pool을 커스텀해볼게요. corePoolSize : 미리 스레드를 만들어 놓아 요청이 들어오면 바로 수행 maxPoolSize : 쓰레드 풀의 최대 사이즈 queueCapacity : corePoolSize가 ..
Spring Boot Scheduler @Scheduled 사용 스프링 부트에서 스케줄러를 돌려서 일정 시간마다 혹은 일정 시간에 로직을 수행하는 방법을 알아볼게요. 설정 파일 스프링 부트에서 스케줄러 기능을 사용하기 위해 @EnableScheduling 설정을 해줄게요. @Configuration @EnableScheduling public class ScheduledConfig { @Bean public TaskScheduler scheduler() { ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(4); return scheduler; } } 스케줄러 구현 스케줄러 컴포넌트를 만들어서 메서드를 구현하고 @Scheduled 설정을 해주면 끝이에요. 1초..
Spring Boot JPA로 MariaDB 연동 DB는 이미 준비되어 있다는 가정하에 작성하였습니다. 연동하고 @Entity를 만들어서 실제로 사용할 수 있는지 테스트까지 해보겠습니다. build.gradle JPA를 사용하기 위해 org.springframework.boot:spring-boot-starter-data-jpa 디펜던시를 추가하겠습니다. mariadb를 사용하겠습니다. implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' // MariaDB 다른 DB를 사용할 때에 참고해주세요. runtimeOnly 'com.h2database:h2' // H2 runtimeOnly 'co..
Spring Boot 예외처리 @ControllerAdvice - (3) Rest API를 개발할 때 제가 사용하는 아주 간단한 예외처리 방법을 소개해드릴게요. 클라이언트에게 상태코드로 예외의 성격을 알리고 body에 예외 상황에 대한 메시지를 알려줄거에요. 파일 두 개만 추가해주면 끝이에요. 실제로는 더 복잡할 수 있지만, 이해를 돕기 위해 아주 기본만 남겼으니 도움이 되었으면 좋겠네요. RestException 상태코드와 메시지만 받도록 했어요. 우리는 이 클래스로 객체를 만들어서 throw하여 예외를 발생시킬 거에요. HttpStatus는 스프링프레임워크에서 만들어 놓은 enum 클래스로 상태코드와 상태메시지를 미리 정의해놨어요. public class RestException extends RuntimeException { private static final long..
Spring Boot 패키지 구조 @Controller @Service - (2) Spring Boot 내의 패키지 구조를 어떻게 설계할지에 대해서 이야기해볼게요. (Controller - Service - DAO) 그리고 JPA를 사용하여 데이터베이스 CRUD (Select, Insert, Update, Delete) 를 해볼거에요. 그림과 같이 파일을 생성하시고, 설명에 따라 내용을 작성해주시면 됩니다. build.gradle 레파지토리는 mavenCentral이 아닌 jcenter로 변경할게요. jcenter는 CDN을 통해 라이브러리를 제공해서 속도가 빨라요. (체감으로는 못느끼겠지만...) JPA, Lombok, H2 Database를 사용해서 비즈니스 로직을 작성할거에요. 관련된 기능을 사용하기 위해 Dependencies를 추가해줍니다. plugins { id 'org.s..
Spring Boot 프로젝트 생성 - (1) 1. STS 설치 https://spring.io/tools Spring Tools 4 Spring Tools 4 is the next generation of Spring tooling for your favorite coding environment. Largely rebuilt from scratch, it provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, spring.io Spring만 개발한다면 STS를 추천해드려요. IntelliJ이라는 좋은 툴이 있지만 기본적으로 유료에요. 학생 분들은 인증 받고 무료로 쓸 수 ..