Spring
-
트랜잭션을 유의하여 DB작업과 메일알림을 처리하는 Spring Batch Job 작성Spring 2024. 8. 7. 23:41
SSAFY 11기 공통 프로젝트를 진행하며 배치 작업을 담당하게 되었다. 이전까지 배치처리가 어떤 것인지 왜 사용하는 것인지에 대한 이해는 어느 정도 있었으나, 실제로 Spring Batch를 사용하여 배치처리하는 것은 이번이 처음이었다. 프로젝트에서 처리되는 배치작업들을 스케줄러가 아닌 Spring Batch를 선택한 근거와 Spring Batch 공식문서를 보며 기본적인 사용법과 개념들을 정리하였고 팀원들도 Spring Batch를 사용해본 적이 없었기에 정리한 내용에 대해 발표도 진행했다. 많이 모자란 자료와 발표였지만 경청해주었던 팀원들 고맙습니다. 모든 코드는 깃허브에서 확인할 수 있습니다. https://github.com/kwondh5217/springbatch GitHub - kwondh5..
-
Spring Batch 도입기Spring 2024. 7. 23. 21:21
SSAFY 11기 공통 프로젝트로 우주도서(우리 주변의 도서)라는 도서 인프라 취약 지역의 사람들을 위한 도서 대여 공유 서비스를 개발하는 중이다.도서 대여가 이루어지고, 반납일자가 되었음에도 반납이 되지 않는 대여정보는 연체로 간주되며, 연체가 되면 사용자의 경험치와 포인트를 차감, 메일로 연체되었다는 알림을 주어야 하는 기능을 구현해야 했고, 스프링 배치를 사용하여 구현하기로 했다. 이 작업을 스케줄러가 아닌 스프링 배치를 선택한 이유는 다음과 같다.진행하는 프로젝트는 기존의 프로젝트와 달리 사용자가 많아질 경우를 염려에 두고 진행하는 프로젝트로 대용량데이터 배치 처리를 하기에는 스프링 배치가 유리하다.처리해야할 데이터가 많을 경우, 모든 데이터를 조회하여 처리하게 되면 메모리에 많은 자원을 사용하게..
-
Spring security test 에러Spring 2024. 4. 2. 23:44
Spring security 를 학습하며 테스트 코드를 작성하고 있었는데 이상하게 시큐리티 설정이 적용이 되지 않았다. @BeforeEach void setup(RestDocumentationContextProvider restDocumentationContextProvider){ this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) .addFilter(new CharacterEncodingFilter("UTF-8", true)) .apply(documentationConfiguration(restDocumentationContextProvider) .operationPreprocessors() .withRequestDefaul..
-
JDBC API, JDBC TemplateSpring 2024. 1. 10. 21:43
JDBC는 Java Database Connectivity의 약자로, Java 언어를 통해 데이터베이스에 접속하고 쿼리를 실행하기 위한 API입니다. 기본적으로 JDBC를 사용할 때는 아래와 같은 과정을 거칩니다. DataSource에서 커넥션을 가져옵니다: 데이터베이스와의 연결을 수립하기 위해 DataSource로부터 커넥션을 가져옵니다. 커넥션 사용 후 반납: 쿼리 실행이 끝난 후에는 해당 커넥션을 close() 메서드를 사용하여 반납하여 자원을 반환합니다. 트랜잭션 관리: 데이터베이스 작업을 트랜잭션으로 묶어주기 위해 try-catch 또는 try-finally 블록으로 감싸서 커넥션 관련 코드를 작성합니다. JDBC의 출현 배경 더보기 예전에는 데이터베이스마다 커넥션을 가져오고 SQL을 전달하고,..
-
@ModelAttribute를 사용하여 직렬화Spring 2023. 11. 29. 17:19
본 포스팅은 개인프로젝트 진행시 겪었던 어려움과 해결 방법에 대해 이야기하는 글입니다. 졸업 과제 프로젝트로 다이어리 서비스를 개발하는 중 문제가 발생하였다. 우선 Event 엔티티 클래스 필드값이다. @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne @JoinColumn(name = "USER_ID") private User user; @Enumerated(EnumType.STRING) private Status status; private String eventName; private LocalDate activationDate; private LocalDate deactivationDate; 사용자로..
-
HttpMessageConverterSpring 2023. 10. 5. 23:23
HttpMessageConverter란 ? 스프링 프레임워크에서 제공하는 인터페이스이며, SpringMVC의 일부이다. HTTP 요청 본문을 객체로 변경하거나, 객체를 HTTP 응답 본문으로 변경한다. hello라는 GET 요청이 들어오면 "hello"라는 문자열을 반환하는 컨트롤러가 있다. @RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "hello"; } } 위의 RestController는 데이터를 반환하는 컨트롤러이다. 사실 이 컨트롤러에서는 반환 타입의 String 앞에 @ResponseBody 어노테이션이 생략되어 있는 것이다. RestController는 뷰를 반환..
-
Converter, FormatterSpring 2023. 8. 29. 14:58
해당 내용은 공부한 내용을 정리한 것이며, 잘못된 정보가 있다면 지적 부탁드립니다. 스프링부트를 조금이라도 사용해봤다면 컨트롤러에서 @PathVariable 어노테이션을 사용하여 객체타입으로 값을 받는 것을 본적이 있을 수 있다. @RestController public class TestController { public String Test(@PathVariable Post post){ return post.getId.toString(); } } 위와 같은 코드에서 값으로 String값이 들어온다고 가정했을 때, String이 어떻게 객체로 변환이 되는 것인지에 대해서 의문이 있었다. 이는 스프링부트에서 기본적으로 내장된 Converter, Formatter가 입력값으로 들어온 String 타입의 값..
-
IoC 컨테이너(Application Context)와 빈Spring 2023. 8. 22. 13:07
해당 글은 공부한 내용을 정리한 것이며 잘못된 오류가 있다면 지적 부탁드립니다. IoC 컨테이너란 ? 스프링에서 객체를 빈으로 관리하며, 빈 관리가 IoC (Inversion of Control) 컨테이너의 역할입니다. 기본적으로 스프링에서 모든 빈은 싱글톤(Singleton) 스코프로 등록되며, 하나의 객체 인스턴스가 생성되어 여러 곳에서 공유됩니다. 이로 인해 초기 생성 비용을 단 한 번만 지불하면 되는 장점이 있습니다. 또한, 빈으로 등록한 객체들의 의존성 주입(DI)을 IoC 컨테이너가 수행하고, 빈의 생명주기 관리도 해줌으로써 개발자가 객체의 생성과 의존성 주입 등을 관리하는 수고를 덜게 됩니다. 이로써 제어의 역할이 코드를 작성하는 사용자에서 스프링 프레임워크로 역전되므로 "Inversion ..