[SpringBoot] Scheduler + AOP + 분산락
·
SpringBoot
여러 대의 서버에 애플리케이션을 분산 배포할 때 스케줄러(Scheduler)에 대해 추가적인 고려가 필요합니다.예를 들어, 특정 시간에 이메일을 전송하는 스케줄러가 있을 경우두 서버에서 각각 동일한 작업이 실행되어 이메일이 중복 전송될 수 있습니다.  이러한 문제를 방지하기 위해 스케줄러에 분산락 AOP 를 적용하는 과정을 포스팅하려고 합니다.  1️⃣  왜 분산락을 사용하나요?   위의 이메일 중복전송 예시같은 문제들을 방지하기 위해 사용하려는 것이 분산락(Distributed Lock)입니다.분산락은 여러 서버 또는 인스턴스에서 동시에 같은 작업이 실행되지 않도록 동시성 제어를 위해 사용됩니다.여기서 말하는 동시성(Concurrency)이란, 여러 작업이 동시에 실행되는 것처럼 보이도록 처리하는 방식..
[Spring] 커스텀 에러 만들기
·
SpringBoot
저는 현재 회사에서 WebFlux 를 활용한 PG 도메인 프로젝트를 진행하며, 커스텀 에러를 사용하고 있습니다.이번 글에서는 WebFlux 뿐만 아니라 MVC 환경에서도 적용 가능한 커스텀 에러 설계 및 사용 방법을 공유하고자 합니다. 중간에 WebFlux 문법이 등장할 수 있지만, 사용된 어노테이션은 MVC 환경에서도 적용 가능하니 참고해 주세요 ☺️🪴 들어가기 전커스텀 에러에 대해 소개하기 전에 이 글에서 다뤄질 에러 종류에 대해 정리하고 가겠습니다.이 글에서 언급하는 에러는 크게 HTTP 통신 에러와 애플리케이션 단계의 에러 두 가지로 나눌 수 있습니다.HTTP 통신 에러는 클라이언트가 직접적으로 받게 되는 에러로, 서버에서 응답한 HTTP 상태 코드와 메시지를 통해 전달됩니다.애플리케이션 단계의..
[Spring] Spring Bean 생성 주기 및 어노테이션 비교
·
SpringBoot
Spring Bean ?Spring Bean 스프링 컨테이너가 생성하고 관리하는 객체를 뜻한다.스프링 빈은 컨테이너에 등록되어 있으며, 필요한 경우 스프링 컨테이너가 해당 객체를 제공한다. Spring Bean  생성 주기 (1-8단계)@SpringBootApplication 으로 어플리케이션 기동 시  Component Scanner가 발동하게 되는데 Bean 생성 주기는 아래와 같다.   1. @Configuration2. @Controller3. @Component4. @Repository5. @Service6. @Bean 이 순서대로 Bean 을 등록한다. 이후에는  7. @Autowired 어노테이션으로 의존성 주입을 하고 8. @PostConstruct 생성자가 위의 모든 일들이 이루어지고 난..
[Spring] @Scheduled 스케쥴링 적용 방법
·
SpringBoot
1. 시작하기 전 @Scheduled 지정된 시간에 주기적으로 실행되는 메서드를 만들기 위해 사용함@EnableScheduling스케줄링을 활성화 할 때 사용두 어노테이션 모두 스프링 프레임워크에서 제공하는 어노테이션입니다.  2. 구현 controller 부분@Scheduled(fixedDelay = 1000) // 1초에 1000public void test () { log.info("테스트!");} Application 부분@EnableScheduling 만 추가해주시면 됩니다.@SpringBootApplication@EnableSchedulingpublic class Application { public static void main(String[] args) { SpringAp..
[Spring] Hikari 이용하여 데이터베이스 연결 관리하기
·
SpringBoot
0. 시작하기 전JDBC 란?JDBC( Java Database Connectivity ) 란 자바에서 데이터베이스에 접속하기 위한 표준 인터페이스를 뜻함데이터베이스와 연결할 때마다 새로운 커넥션을 생성 & 연결하는 비용을 줄이기 위한 기술JDBC 커넥션 풀 구현체란?커넥션 풀링 기능을 제공하는 라이브러리데이터베이스에 연결할 때 생성된 커넥션 풀에서 사용커넥션 풀 크기, 커넥션 대기 시간, 커넥션 최대 최소 수 등  설정 가능구현체 종류 : Apache Commons DBCP, HikariCP, Tomcat JDBC 등Hikari 란?Spring Framework에서 사용되는 데이터베이스 커넥션 풀 라이브러리HikariCP라고도 불림빠르고 경량화된 JDBC 커넥션 풀 구현체Spring Hikari는 데이..
[Spring] Jpa 이용해서 db 에 entity 추가
·
SpringBoot
0. 환경- DB : Postgres- DBeaver 을 사용하여 확인- Spring boot 환경에서 Jpa를 이용하여 테이블 생성1. 연동하기- src > main > resources > application.yml 파일spring: datasource: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:포트번호/스키마이름 platform: postgres username: 지정한이름 (미설정시 기본) password: 지정한비번 (미설정시 기본) jpa: hibernate: ddl-auto: create # 처음에 create로 작성하시고 이후에는 none show-..
[Spring] Spring 환경 IntelliJ에 구축
·
SpringBoot
IntelliJ 다운로드 https://www.jetbrains.com/ko-kr/idea/download/#section=windows(위의 사이트에서 다운로드 진행)원하는 것으로 다운로드 진행하면 되나 무료 버전인 Community Edition 으로 다운로드 함Spring 환경설정 1. Spring Initializr 이용하기https://start.spring.io/사이트에서 원하는 버전과 프로젝트 명을 지정하고 다운로드한다. 2. IntelliJ에서 폴더 열기1번에서 다운받은 폴더의 압축을 해지한 경로를 확인하고IntelliJ에서 열어준다.위의 사진처럼 빌드되지 않는다면 1번 단계에서 Spring Boot 의 버전을 2.7.7로 바꿔보시는걸 추천드립니다 추가정보1. application.yml ..
[Spring] 포트번호 오류 해결
·
SpringBoot
스프링 웹 개발 기초정적 컨텐츠MVC와 템플릿 엔진API생성한 정적 페이지로 이동하는 방법hello-static.html 정적 페이지를 생성한 후 body에 '정적 컨텐츠입니다.' 를 작성해주었다.포트번호 뒤에 이동하고자 하는 파일 명을 붙여주면 된다.포트번호 오류 발생**Error :** Process 'command 'C:\Program Files\Java\jdk\bin\java.exe'' finished with non-zero exit value 1이때 위와 같은 오류 발생 시 아래의 방법처럼 해결할 수 있다. 1. 작업 관리자 이용하기작업관리자에서 불필요하게 실행되는 작업을 중지시킨다.2. application.properties 파일 이용하기server.port=8090위처럼 작성하고 원하는 ..