Spring Boot
[Spring] 나태지옥에 빠지지 않기 위한 스케줄러
[Spring] 나태지옥에 빠지지 않기 위한 스케줄러
2024.04.07저는 주로 새롭게 학습한 내용이나 문제가 발생했을 때 해결했던 내용을 기반으로 블로그를 작성을 합니다. 이렇게 하면 나중에 복습하거나 문제가 발생했을 때 원인을 빠르게 파악할 수 있어서 최대한 많이 작성을 해놓으려고 노력하고 있습니다. 그런데 최근에 퇴사를 하고 하고 싶었던 공부를 하려고 하는데 사람의 마음이란.. 일을 안 하니깐 시간이 많다는 이유로 여유를 부리면서 집에서 누워있거나 핸드폰을 많이 하게 되더군요.. 회사를 다니면서도 "블로그를 열심히 작성을 해야지!"라는 마음을 가지고 있었지만.. 많이 피곤해서 작성을 못했었는데 지금은 시간이 아주 많고 잠도 많이 잘 수 있습니다. 그래서 이대로는 안 되겠다 싶어서 제가 사용할 수 있는 방법으로 나태해지는 제 자신을 방지하기 위해 방법을 생각했습니다. ..
[Spring Boot] Spring Boot + Kotlin + AWS S3를 이용한 이미지 다루는 방법
[Spring Boot] Spring Boot + Kotlin + AWS S3를 이용한 이미지 다루는 방법
2024.03.18들어가기 전 이번 포스팅에서는 Spring Boot와 Kotlin, AWS S3를 이용하여 이미지를 업로드, 조회, 삭제하는 방법에 대해 알아보겠습니다. AWS S3란? S3(Simple Storage Service)는 AWS에서 제공하는 클라우드 스토리지 서비스입니다. S3는 파일, 데이터 및 다양한 유형의 미디어 등 정적인 파일을 저장하고 관리하는 데 사용되는 웹 기반 스토리지 시스템입니다. 저장하는 데이터 양에 대한 비용도 저렴하고, 많은 양에 데이터를 저장할 수 있습니다. 그리고 하나의 버킷에 여러 객체를 저장할 수 있습니다. 버킷과 객체 버킷은 하나의 공간, 객체는 공간에 있는 사물이라고 이해하시면 됩니다. 버킷 안에는 여러 형태의 객체를 저장할 수 있고 수정, 삭제할 수 있습니다. 버킷의 이름..
[Spring Boot] Spring Security + Kotlin + JWT를 이용한 로그인
[Spring Boot] Spring Security + Kotlin + JWT를 이용한 로그인
2024.03.12들어가기 전 이번 포스팅에서는 스프링 시큐리티 + JWT + 코틀린을 사용하여 일반 로그인 구현하는 방법에 대해서 알아보겠습니다. 만약 스프링 시큐리티 + Oauth2.0 + JWT + 자바를 이용한 소셜 로그인 구현하는 방법에 대해서 궁금하신 분은 아래 포스팅을 참고하시는 것을 추천드립니다. https://hoestory.tistory.com/32 [OAuth] Spring Boot + React + OAuth2.0 이용한 네이버, 카카오 로그인 들어가기 전 토이 프로젝트를 진행하면서 OAuth를 이용한 소셜 로그인을 구현해보았습니다. 프론트는 React를 이용하였고 백엔드는 Spring Boot를 이용하였습니다. 네이버, 카카오 로그인에 대한 코 hoestory.tistory.com 설정 build...
[Spring Boot] @Transactional readOnly 속성에 따른 비즈니스 로직 분리
[Spring Boot] @Transactional readOnly 속성에 따른 비즈니스 로직 분리
2023.12.21필자는 처음에 @Transactional(readOnly = false)와 @Transactional(readOnly = true)를 기능에 맞게 메서드에 하나씩 붙여주면서 사용하거나 @Transactional(readOnly = false)만 클래스 단위에 붙여서 사용했습니다. 이와 같이 사용하다 보니 데이터 조회 기능과 삽입, 삭제, 수정 기능들이 비즈니스 로직에 복합적으로 구현되어 있어 가독성이 떨어지고 비효율적이라고 느꼈습니다. 비효율적으로 느낀 이유는 아래와 같습니다. 조회 기능에 대해서 오류 또는 기능 추가를 하게 될 때 조회 기능에 대한 로직만 읽으면 되는데 삽입, 삭제, 수정에 대한 로직들도 한 번씩 읽어 시간적 비용이 발생한다고 생각했습니다. 조회 기능과 삽입, 삭제, 수정 기능이 한 곳..
[Spring Boot] 스프링 Event에 대하여
[Spring Boot] 스프링 Event에 대하여
2023.12.01들어가기 전 프로젝트를 진행하다 보면 불필요한 객체를 의존하고 있는 코드들이 무수히 많습니다. 필자 또한 업무를 보다가 불필요한 의존성을 가지고 있는 것을 끊어주고 싶어서 EventListener에 대해 알아보고 적용을 해보았습니다. EventListener를 사용하는 이유는 강한 의존성을 끊기 위해 사용합니다. EventListener 사용하는 경우에 대해서 예를 들면 사용자가 회원가입을 하였을 때 회원에게 회원가입 축하 메시지를 보낼 때 사용합니다. 이유에 대해서는 EventListener와 TransactionalEventListener에 대해 알아보고 예제로 알아보겠습니다. Event 스프링에서 Event는 빈과 빈 사이에 데이터를 전달해 주는 방법 중 하나입니다. Event에는 이벤트를 발행하는..
[Spring Boot] 크롤링, 메일 전송 및 PDF 암호화
[Spring Boot] 크롤링, 메일 전송 및 PDF 암호화
2023.08.10들어가기 전 이번 포스팅에서는 Spring Boot + Java를 이용하여 크롤링을 하고 크롤링을 한 내용을 Pdf 파일로 만들어 메일에 담아서 보내는 방법에 대해 알아보겠습니다. 그리고 메일로 보낸 Pdf 파일을 암호화하는 방법에 대해서도 알아보겠습니다. 크롤링, 메일전송, Pdf 파일 생성 및 암호화하는 방법에 대해 알아보기 전에 해당 기능들을 구현하기 위해 사용되는 라이브러리에 대해 먼저 알아보겠습니다. 메일 전송에 사용되는 라이브러리 및 설정 JavaMailSender JavaMailSender는 스프링에서 메일을 손쉽게 보낼 수 있게 제공해 주는 라이브러리입니다. JavaMailSender를 사용하기 위해서는 의존성을 추가해 줘야 되고 application.yml 또는 properties에 설정..
[Spring] 스프링 AOP와 프록시 패턴
[Spring] 스프링 AOP와 프록시 패턴
2023.07.03AOP란? AOP는 Aspect-Oriented-Programming의 약자로 관점지향 프로그래밍을 의미합니다. 어떤 로직을 관점으로 핵심적인 관점과 부가적인 관점으로 나누고 관점을 기준으로 모듈화 하는 것을 의미합니다. 로직상에서 다른 부분에 반복적으로 사용하는 부분을 흩어진 관심사라고 합니다. AOP는 흩어진 관심사를 모듈화 하여 핵심적인 비즈니스 로직에서 분리하여 재사용할 수 있게 해 줍니다. AOP의 용어 포인트 컷(Pointcut) : 조인 포인트 중에서 어드바이스가 적용될 경로, 주로 AspectJ 표현식을 사용하여 지정 어드바이스(Advice) : 부가기능 로직(로그 추적 기능, 메서드 실행시간 기록) 어드바이저(Advisor) : 하나의 포인트컷과 하나의 어드바이스로 구성 에스펙트(Aspe..
[Spring] WebClient를 이용한 Naver Papago 번역 연동
[Spring] WebClient를 이용한 Naver Papago 번역 연동
2023.03.07들어가기 전 먼저 Papago를 쓰기 위해 준비해야 되는 단계가 있어 그거에 대해 먼저 알아보고 WebClient를 이용하여 Papago를 연동하는 방법에 대해 Java코드로 알아보겠습니다. Papago 1. 네이버 개발 문서를 들어가서 애플리케이션 등록을 클릭합니다. 2. 프로젝트에 사용할 Papago 애플리케이션 이름을 지정하고 사용 API는 Papago번역을 클릭합니다. 그리고 프로젝트 환경에 맞게 서비스 환경을 선택해 줍니다. 3. 서비스 환경을 클릭하면 서비스할 URL을 작성을 하면 됩니다. 서비스할 URL은 프로젝트에서 사용할 URL을 사용하면 됩니다. 그 후 등록하기 버튼을 클릭합니다. 4. Client ID와 Client Secret가 발급이 됩니다. 그럼 이제 Papago 번역을 이용할 ..
[Spring] RestControllerAdvice를 이용한 Validation처리
[Spring] RestControllerAdvice를 이용한 Validation처리
2023.02.11들어가기 전 RestControllerAdvice가 무엇인지에 대해 먼저 알아보고 RestControllerAdvice을 활용한 Validation처리 방법에 대해 알아보겠습니다. validation을 하기 위한 설정 build.gradle implementation 'org.springframework.boot:spring-boot-starter-validation' 의존성을 추가하면 @Valid를 이용하여 Validation처리를 할 수 있습니다. @RestControllerAdvice이란? @ExceptionHandler, @ModelAttribute, @InitBinder가 적용된 메서드들에 AOP를 적용해 Controller단에 적용하기 위하 고안된 어노테이션입니다. 클래스에 선언하면 되고 @R..
[Spring Boot] @ModelAttribute + 객체값 Null일때 해결방법
[Spring Boot] @ModelAttribute + 객체값 Null일때 해결방법
2022.10.25들어가기 전 해결방법은 lombok 라이브러리를 사용하여 해결하는 과정을 써 내려갈 것입니다. @ModelAttribute @ModelAttribute가 무엇인지는 간략하게 설명하겠습니다. @ModelAttribute는 @RequestParam처럼 파라미터로 값을 바인딩하는 것인데 @RequestParam은 하나의 대한 파라미터이고 @ModelAttribute는 여러 개의 값을 객체에 정의하고 파라미터의 값을 여러 개를 받을 때 사용합니다. 그리고 사용을 할 때 @RequestParam과 @ModelAttribute는 생략이 가능합니다. 만약 아래와 같이 코드를 작성하여 @ModelAttribute를 사용하면 어떻게 될까요? Controller 코드 @RestController public class T..
[Spring Batch] Job, JobInstance, JobParameter, JobExecution 에 대하여
[Spring Batch] Job, JobInstance, JobParameter, JobExecution 에 대하여
2022.10.09Job이란 배치 계층 구조의 가장 상위에 있는 개념으로 하나의 배치 작업 자체를 의미합니다. Job Configuration을 통해 생성되는 객체 단위로서 배치 작업을 어떻게 구성하고 실행할 것인지 전체적으로 설정하고 명세해놓은 객체입니다. 배치 Job을 구성하기 위한 최상위 인터페이스이며 스프링 배치가 기본 구현체인 SimpleJob과 FlowJob 등 구현체를 제공해줍니다. 여러 Step를 포함하고 있는 컨테이너로 반드시 하나 이상의 Step으로 구성해야 합니다. 스프링 배치가 기본적으로 제공해주는 구현체 SimpleJob Job내에 구성되어있는 Step을 순차적으로 실행시킵니다. FlowJob SimpleJob과 달리 특정 조건과 흐름에 따라 Step을 실행시킵니다. Flow 객체를 실행시켜서 작업..
[Spring Batch] @EnableBatchProcessing을 이용하여 스프링 배치 사용하기
[Spring Batch] @EnableBatchProcessing을 이용하여 스프링 배치 사용하기
2022.10.051. 스프링 배치를 사용하기 위한 의존성 추가 스프링 배치를 사용하기 위해서는 build.gradle 또는 pom.xml에 스프링 배치에 대한 의존성을 추가해줘야 합니다. build.gradle implementation 'org.springframework.boot:spring-boot-starter-batch' pom.xml org.springframework.boot spring-boot-starter-batch 2. @EnableBatchProcessing @EnableBatchProcessing를 선언을 하면 스프링 배치를 작동시켜줍니다. 스프링 배치의 모든 초기화 및 실행을 이루고 총 4개의 설정 클래스를 실행합니다. 스프링 부트 배치의 자동 설정 클래스가 실행됨으로 빈으로 등록된 Job을 조..