반응형 스프링/만들면서 배우는 실무 백엔드 개발16 15. 실시간 데이터 저장 파이프라인 구축하기 (feat. 카프카 활용기) 들어가며코인은 주식과는 다르게 24시간 거래가 가능합니다. 때문에 코인에 대한 기술적 분석을 하기 위해서는 24/7 발생되는 실시간 데이터를 수집하고 처리할 수 있어야 합니다. 카프카를 활용하여 실시간으로 코인 데이터를 수집하는 데이터 파이프라인 구축 사례를 공유합니다.무엇이 필요할까?어떤 코인 데이터를 어떤 방법으로 수집할 수 있을지 알아보자.Upbit OPEN API코인 데이터는 각 거래소에서 제공하는 OPEN API 를 통해 조회할 수 있다. 나는 코인 거래소 중 하나인 업비트에서 제공하는 API 를 사용하고자 한다. 업비트에서는 분(minute) 단위 캔들 데이터를 조회할 수 있는 API 를 제공하고 있다. (API 문서) 이 API 를 통해 각 코인의 분 단위 캔들 데이터를 최대 200개까지 조.. 2023. 8. 20. 14. GitHub Action 에서 스프링 배치 실행하기 지난 시간에 SpringBatch 5 를 기반으로 배치잡을 만들었습니다 (관련 포스팅). 보통 배치잡은 젠킨스 (Jenkins) 등의 별도 스케줄러를 통해 실행시키게 됩니다. 하지만 젠킨스를 활용하려면 젠킨스를 위한 별도의 서버를 두거나 로컬에 띄워두어야 하는 번거로움이 있습니다. 이번 시간에는 GitHub Action 을 활용하여 별도 서버를 두지 않고, 스프링배치를 활용하는 방법에 대해 알아보겠습니다. GitHub Action 이란? GitHub Action 은 배포를 위한 CI/CD, 빌드 테스트, 스크립트 실행 등 워크플로우 (workflow) 를 자동화시켜주는 툴입니다. Public 저장소의 경우는 무료이고, Private 저장소는 일정 시간까지만 무료로 제공됩니다. GitHub Free 요금제.. 2023. 8. 8. 13. SpringBatch 5 + Kotlin 적용하기 2022년 하반기에 SpringBoot 3.0 이 릴리즈 되었고 많은 변화가 있었습니다. (내용) 기본 Java 버전이 17 으로 올라갔고, SpringBatch 버전도 5 로 올라갔습니다. 이번 시간에는 SpringBatch 5 를 적용한 사례를 공유하고자 합니다. What's New in Spring Batch 5 SpringBatch 의존성 주입 SpringBatch 와 h2 데이터베이스 의존성을 주입한다. implementation("org.springframework.boot:spring-boot-starter-batch") implementation("com.h2database:h2") SpringBatchApplication 생성 배치잡은 실행이 되고 자동으로 종료되어야 하니 exitProc.. 2023. 7. 16. 12. SpringBoot 에서 AOP 적용하기 (Kotlin) AOP (Aspect Oriented Programming) 은 관점 지향 프로그래밍의 약자로 관심사의 분리를 하기 위한 방법으로 주로 사용합니다. 간단하게 여기서 한번 알아본 적이 있었는데, 이번 시간에는 코드로 한번 작성해보려고 합니다. Pull Request: https://github.com/kdohyeon/crypto-labs/pull/40 의존성 추가 SpringAOP 의존성을 추가해준다. implementation("org.springframework.boot:spring-boot-starter-aop") AOP 시작하기 @EnableAspectJAutoProxy 어노테이션을 어플리케이션 레벨에 추가해주어야 한다. @SpringBootApplication @EnableAspectJAutoPr.. 2023. 5. 4. 11. Jacoco + Gradle.kts 로 테스트 커버리지 확인하기 (feat. SonarQube) Jacoco 는 테스트 커버리지를 확인할 수 있는 라이브러리입니다. 프로젝트 내 작성되어 있는 테스트가 전체 코드의 몇 % 정도를 커버하고 있는지 확인할 수 있습니다. HTML, CSV, XML 등의 형태로 리포트를 만들 수 있으며 SonarQube 등 정적 분석 툴에서 활용할 수도 있습니다. 이번 시간에는 Gradle 프로젝트에서 Jacoco 를 설정하여 테스트 커버리지를 확인하고, 이를 기반으로 SonarQube 에서 정적 분석을 해보겠습니다. Pull Request: https://github.com/kdohyeon/crypto-labs/pull/20 Jacoco 설정하기 Gradle 설정에 jacoco 플러그인을 추가한다. JacocoReport 와 JacocoCoverageVerification.. 2023. 4. 7. 10. ArchUnit 으로 아키텍쳐 검사하기 서비스 또는 시스템은 목적에 따라 아키텍쳐를 설계하고 이에 기반하여 구현이 됩니다. 여기서 이야기하는 아키텍쳐란 기능, 조직, 구현에 대한 법칙과 방법을 의미합니다. 깨진 유리창 이론도 있듯이 초기에 아키텍쳐가 잘 설계되어 있다 하더라도 시간이 지남에 따라 점점 망가질 수 있습니다. 이를 최대한 방지하기 위해 아키텍쳐적인 부분에 대해서도 검사를 할 필요성이 있으며, 그 방법 중에 하나가 ArchUnit 이라는 라이브러리를 활용하는 것입니다. 이번 글에서는 ArchUnit 을 활용하여 아키텍쳐 검사를 해보도록 하겠습니다. Pull request: https://github.com/kdohyeon/crypto-labs/pull/18 의존성 추가 라이브러리 버전은 현재 기준 최신 버전인 1.0.1 을 사용했다.. 2023. 4. 5. 9. 단위 테스트 작성하기 (feat. JUnit5 + MockK) 어떤 기능을 구현한다는 것은 테스트까지 작성이 되어야 완성이라고 이야기할 수 있습니다. 그만큼 테스트는 중요한데요. 이번 시간에는 JUnit5 기반으로 단위 테스트를 작성하고 코틀린 스타일로 Mock 객체를 만들 수 있는 MockK 프레임워크를 사용해볼 예정입니다. Project issue: https://github.com/kdohyeon/crypto-labs/issues/15 Pull request: https://github.com/kdohyeon/crypto-labs/pull/16 의존성 추가 단위 테스트 작성을 위해서는 spring-boot-starter-test 모듈을 불러온다. build.gradle.kts 에 추가해주면 된다. testImplementation("org.springframe.. 2023. 4. 2. 8. JPA 적용하기 이번 시간에는 데이터베이스에서 CRUD 작업을 하기 위한 JPA를 적용해 보도록 하겠습니다. 클린 아키텍처인 만큼 도메인을 만드는 것부터 시작해 보며 이를 DB에 저장하고 조회하는 것까지 해보도록 합니다. Project issue: https://github.com/kdohyeon/crypto-labs/issues/12 Pull request: https://github.com/kdohyeon/crypto-labs/pull/13 Gradle 설정 JPA를 사용하기 위해서는 의존성을 먼저 추가해주어야 한다. 멀티 모듈 환경에서는 필요한 의존성을 주로 각 모듈에 위치한 build.gradle 에서 관리하게 되는데 Entity는 보통 Domain 모듈에서 관리된다. 따라서 Domain 모듈의 build.gra.. 2023. 3. 30. 이전 1 2 다음 반응형