본문 바로가기

분류 전체보기

(209)
[SPRING] 어떤 @Transactional을 써야할까? @Transactional은 크게 자카르타와 스프링 두 가지 방식이 있다. 1. 스프링에서 제공하는 Transactional (패키지: org.springframework.transaction.annotation.Transactional) 스프링에서 제공하는 Spring AOP를 사용하여 트랜잭션을 관리한다.스프링의 트랜잭션 관리 방식은 매우 유연하며, Propagation, Isolation, Timeout, ReadOnly 등을 커스터마이징할 수 있는데 아래 코드는 스프링에서 제공하는 Transactional의 다양한 커스터마이징 사용 예제이다. import org.springframework.beans.factory.annotation.Autowired;import org.springframewor..
[SPRING] AOP를 활용한 로그 중앙화 (feat.@Aspect, @Pointcut) 문제 상황Controller나 Scheduler가 호출하는 클래스의 메서드가 추가 될 때마다 같은 포멧의 로그코드가 같이 반복적으로 추가된다.슬슬 한번 정리해야 할 때가 온듯하다. 해결 과정1. build.gradle 추가implementation 'org.springframework.boot:spring-boot-starter-aop'// ip정보를 가져오려면 필요implementation 'org.springframework.boot:spring-boot-starter-web' 2. LogAspect.class 생성@Aspect@Log4j2@Componentpublic class LogAspect {// @Pointcut// @Around} 3. 이제 2번에서 생성한 클래스에 원하는 내용을 채워주면 ..
[업비트] API 사용을 위한 Secret Key 발급 업비트 Open API 안내 Open API 안내 | 업비트(UPbit)업비트에서는 개발자와 사용자를 위해 Open API를 제공하고 있습니다. 업비트 API를 통해 마켓정보, 잔고 조회, 주문, 출금 등 다양한 기능을 활용해보세요.upbit.com업비트 개발자 센터 Open API | 업비트 개발자 센터 docs.upbit.comAPI 리스트EXCHANGE API에 있는 기능은 개인 계정에 접근하기 때문에 시크릿 키를 별도로 발급받아야 사용가능하다.QUOTATION API는 키 없이 예제 curl로 호출해도 조회가 잘 된다. API 호출 제한 또한 API마다 다른데예를 들어 주문은 초당 8회, 주문 외 API는 30회 미만으로 제한이 있다.남은 요청 수는 Remaining-Req 응답 헤더를 통해 확인..
[SPRING] Lombok @Log4j2 log4j-slf4j-impl cannot be present with log4j-to-slf4j 에러 (gradle) 문제 상황Lombok의 @Log4j2 를 사용해 로그를 남기려고 의존성 및 코드 추가 후 실행하자 에러 발생 발생 에러Caused by: org.apache.logging.log4j.LoggingException: log4j-slf4j2-impl cannot be present with log4j-to-slf4j 원인Spring Boot 기본적으로 Logback을 로깅 프레임워크로 사용, 고로다른 경우에 의존성을 어셈블하기 위해 스타터를 사용하는 경우 Logback을 제외해야한다.해결방법build.gradle 아래 코드 추가configurations { all { exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' ..
[SPRING] @EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)Lombok 라이브러리에서 제공하는 기능으로 부모 클래스의 equals와 hashCode 메서드를 포함하여 자식 클래스의 해당 메서드를 생성하는 역할을 한다. Lombok 의존성 추가build.gradledependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'} 사용 예제PrivateRequestDto.java import lombok.Builder; import lombok.Data; import org.springframework.web.reactive.function.server.ServerRequest; ..
[빗썸] API 사용을 위한 Private Key 발급 빗썸 API DOCS  거래소 API를 한번 사용해보고 싶어서요즘 자주 사용하는 빗썸 API를 사용해 데이터 호출을 해보려고 한다.  위 웹으로 접속하면 제공 API를 확인 할 수 있는데, 크게 Public과 Private으로 나뉜다.   우선 Public API는 별다른 인증 정보 없이 호출이 가능하다.  24.05.27 기준 8개의 조회기능이 있다.웹에 명시되어있는대로 긁어다 호출하면 문제없이 잘 불러온다.  다른 것 보다도 지원하는 언어가 엄청 많아서 놀랐다🤩 Private API의 경우 key를 발급 받아야 호출이 가능하다.   API 이용 안내 하단에 보면 발급 페이지 링크가 있는데, 여기로 이동 후 로그인을 하면 이래저래 동의할 사항을 체크 후 키를 발급받을 수 있다.   다른것 보다도 AP..
[SPRING] Spring boot 3.x에서 QueryDSL 설정 spring boot 2.x 버전 설정보다 간단해진듯 하다. build.gradle에 아래 코드 추가 dependencies { implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta' annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta" annotationProcessor "jakarta.annotation:jakarta.annotation-api" annotationProcessor "jakarta.persistence:jakarta.persistence-api"}def querydslSrcDir =..
[SPRING] static field에 @Value annotation 적용? 문제api key 변수를 yml 파일에 넣고 @Value 어노테이션으로 끌어다 쓰고 싶어 코드를 수정 변경 전 private static String AUTH_TOKEN = "access_token"; 변경 후 @Value("${api-key.key}") private static String AUTH_TOKEN; 하지만 실제 구동 시켜 api호출을 하면 Cannot invoke "String.length()" because "s" is null%요런 에러가 발생 원인static 필드는 스프링 컨테이너가 로드 되기 전에 class area에 저장이 되기 때문에,스프링 컨테이너에 의존적인 @Value 어노테이션이 정상적으로 작동하지 않는다. 해결 방법 static 필드에 직접 @Value 어노테..