본문 바로가기

Spring Boot

(26)
Spring Boot Session 사용하기 (Bean Scope) Spring Boot에서 세션을 사용하는 방법에 대해서 알아볼게요. Bean Scope를 활용하여 session 데이터를 편리하게 관리할 수 있는 방법을 알려드릴거에요. 굉장히! 간단합니다. 컴포넌트 하나만 추가하면 되요. pom.xml org.springframework.session spring-session-core build.gradle dependencies { implementation 'org.springframework.session:spring-session-core' } UserInfo 세션에 저장할 데이터 변수를 선언해줄거에요. 예제니깐 아주 간단하게 사용자의 아이디와 이름만 저장할게요. SCOP_SESSION : 객체가 한 세션에서 생명주기를 갖도록 Bean Scope를 sessio..
Spring Boot 재시작 없이 반영 (DevTools) 클래스 파일을 수정하고 테스트하려면 서버를 수동으로 재시작해주어야 하는 번거로움이 있어요. 사실, 효율적으로 테스트를 하기 위해서는 Junit과 같은 테스트 프레임워크를 사용하는 것이 가장 좋습니다만, 그렇지 않은 상황도 존재할 수 있죠. 그런 경우에 시간을 절약하기 위해 클래스 파일이 수정되었을 때 자동으로 리로드시키는 기능을 추가해볼게요. 사실은 재시작 없이가 아니라 자동 리로드라고 보셔야 하구요. Spring Boot 버전은 2.1.8에서 진행했습니다. Gradle build.gradle에 아래 코드 추가하고, Refresh Gradle Project configurations { developmentOnly runtimeClasspath { extendsFrom developmentOnly } }..
Spring Boot MongoDB 연동 스프링 부트에서 몽고DB를 연동하는 방법에 대해서 알아보려고 해요. 연동은 생각보다 굉장히 쉬워요. 스프링에서 JPA를 사용해보신 분들은 API 사용에 있어서 만큼은 따로 공부할 것도 거의 없을거에요. pom.xml org.springframework.boot spring-boot-starter-data-mongodb build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' application.yml 몽고 DB의 접속 정보를 적어주세요. 여기까지하면 몽고 DB 연동은 끝났습니다. spring: data: mongodb: host: localhost port: 27017 database: tutorial ..
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 패키지 구조 @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..