현재 서버에서 Scheduler를 사용하는 중이고 Scheduler가 어떻게 동작하는지 알아 볼려고합니다.단일 스레드에서 스케줄링 작업들을 순차적으로 처리@Configurationpublic class ScheduledTasks { private final Logger log = LoggerFactory.getLogger(ScheduledTasks.class); @Scheduled(fixedRate = 1000) // 1초마다 taskA를 실행합니다. public void taskA() throws InterruptedException { Thread.sleep(10000); // 10초 동안 일시 중단합니다. log.info("taskA - {} - {}", L..
저는 현재 국내 가상화폐 거래소에 *스테이블 코인 가격 알림 서비스를 운영하고 있습니다.가상화폐 거래소는 증권시장과 다르게 거래소마다 독자적으로 운영(상장, 거래, 정산 등)하는 방식이라 거래소마다 서로 다른 API를 제공합니다. 문제는 각각의 거래소가 제공하는 Response가 모두 다르기 때문에, 저희 서비스에서 이를 바로 호환하기 어렵다는 점입니다.*스테이블코인은 달러화 등 기존 화폐에 고정 가치로 발행되는 암호화폐를 말한다. 문제점@FeignClient(name = "Bithumb", url = "https://api.bithumb.com/public")public interface BithumbClient { @GetMapping("/ticker/{symbol}_{currency}") ..
Spring Scheduler를 사용할 때, 같은 작업을 하는 스케줄러가 다중 인스턴스 환경에서 중복 실행되는 문제가 있습니다.이 문제를 해결하기 위해 Quartz, ShedLock 등을 고려할 수 있습니다. 저는 그 중 ShedLock을 선택했는데, 그 이유는 해결하려는 문제가 클러스터 안의 서버 노드 중 스케줄링 작업을 선택하거나 예외 처리 등의 기능이 필요한 것이 아니라, 단순히 중복 작업을 방지하는 데 ShedLock이 충분하다고 판단했기 때문입니다단일 환경에서 중복 실행 문제 위에서 설명한 중복 실행 문제는 모두 다중 인스턴스 환경에서 발생할 수 있지만, 단일 환경에서도 중복 실행 문제가 발생할 수 있습니다.단일 환경에서 운영되는 서버라도 Blue/Green 무중단 배포 상황에서 두 개의 인스턴..
logging: level: org.hibernate.type.descriptor.sql.BasicBinder: TRACE spring: jpa: properties: hibernate: format_sql: true show-sql: true SpringBoot 2 버전에서는 위와 같이 작성한 application.yml 을 프로젝트에서 사용하는 SpringBoot 3 버전에서 사용했을때 binding parameter가 표시되지 않았다. 이유는 SpringBoot 3 부터는 Hibernate 6 버전을 사용하는데 Hibernate 6 버전에서 BasicBinder가 Rename 되었다. spring: h2: console: enabled: true datasource: generate-unique-n..
FeignClient 란? Feign Client란 Netflix에서 개발한 Http Client다. 카카오 소셜로그인 카카오 토큰을 받는 API는 x-www-form-urlencoded 타입이 필수값이다. x-www-form-urlencoded 타입은 Spring에서 @RequestParam, @ModelAttribute 어노테이션으로 주입받을 수 있다. 둘중에 하나를 선택해야하는데 @RequestParam은 사용하고싶지않았다. @RequestParam 단일 파라메터 @FeignClient(url = "https://kauth.kakao.com", value = "kakaoAuthApi") public interface KakaoAccessTokenClient { @PostMapping( value =..
물리 트랜잭션 실제 데이터 베이스에 적용되는 트랜잭션 논리 트랜잭션 트랜잭션 매니저를 통해 트랜잭션을 사용하는 단위 @Transactional(propagation = Propagation.REQUIRED) 부모 : REQUIRED 자식 : REQUIRED 물리 트랜잭션 : 1개 예외 발생 부모 트랜잭션이 존재한다면 부모 트랜잭션에 합류, 그렇지 않다면 새로운 트랜잭션을 만든다. 중간에 자식/부모에서 rollback이 발생된다면 자식과 부모 모두 rollback 한다. @Transactional(propagation = Propagation.MANDATORY) 부모 : REQUIRED 자식 : MANDATORY 물리 트랜잭션 : 1개 부모 : NULL 자식 : MANDATORY 부모 트랜잭션이 존재한다면..
https://github.com/woowacourse/jwp-dashboard-mvc GitHub - woowacourse/jwp-dashboard-mvc Contribute to woowacourse/jwp-dashboard-mvc development by creating an account on GitHub. github.com 미션을 진행하면서 DispatcherServletInitializer를 명시적으로 실행하지 않았음에도 불구하고 DispatcherServlet이 자동으로 등록되는 이유에 대해 궁금하여 조사하려고 합니다 DispatcherServletInitializer 코드 확인 public class DispatcherServletInitializer implements WebAppli..
Mapper instances are fully thread-safe provided that ALL configuration of the instance occurs before ANY read or write calls. If configuration of a mapper instance is modified after first usage, changes may or may not take effect, and configuration calls themselves may fail. If you need to use different configuration, you have two main possibilities 매퍼 인스턴스는 인스턴스의 모든 구성이 읽기 또는 쓰기 호출 전에 수행되는 경우 완..
@FunctionalInterface public interface RowMapper { @Nullable T mapRow(ResultSet rs, int rowNum) throws SQLException; } rowNum은 현재 행의 번호를 나타내는 변수인데, 실제로 이 변수를 어떻게 사용해야 하는지에 대한 고민을 해봤지만, 사용처에 대한 명확한 아이디어가 떠오르지 않았다. 그래서 어떤 목적으로 RowMapper를 설계한 것인지 궁금하여 관련된 이슈를 찾아보았다. RowMapper - mapRow method, rowNum does not need to be in the method signature [SPR-3109] #7796 spring framwork lead인 Juergen Hoeller의 주..
검증 과정 실제 예제 auth0 java-jwt 라이브러리를 사용한 예제 implementation 'com.auth0:java-jwt:3.19.0' implementation 'com.auth0:jwks-rsa:0.21.1' // JwkProvider 객체를 싱글톤 객체로 구현해주세요. // 성능 문제가 발생할 수 있으며, 요청이 차단될 가능성도 있습니다. public static final JwkProvider jwkProvider = new JwkProviderBuilder(new URL("https://www.googleapis.com/oauth2/v3/certs")) .cached(10, 7, TimeUnit.DAYS) .build(); public Map resolve(final String ..
- Total
- Today
- Yesterday
- ValidateException
- CreatedDate
- WebFlux 의존성
- HTTPInterface
- Attribute Converter
- dto 검증
- Spring Boot 3
- 구글 소셜로그인
- setDateFormat
- @ElementCollection
- 유저 시나리오
- entity 검증
- java 17
- BasicBinder
- CreationTimestamp
- FormProperty
- @Converter
- feignClient
- DispatcherServletInitializer
- User Scenario
- @FormProperty
- org.springframework:spring-webflux
- 구글 OpenID
- JPA SQL Injection
- 유저 스토리
- HandlesTypes
- defer-datasource-initialization
- 레이어드 아키텍처
- dto 위치
- ServletContainerInitializer
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |