분류 전체보기 134

[Spring Batch] Multiple Data source를 활용한 Spring Batch

한국석유공사-오피넷(외부 api)로부터 전국 유가 평균, 지역별 저렴 주유소 등의 json data와,한국석유공사-오피넷에서 전체 주유소 정보 및 주유소 가격을 csv파일로 받아서 DB에 삽입하기 위해,Spring Batch을 구현했습니다.다중 데이터 소스프로젝트에 다중 데이터 소스를 사용한 이유는 다음과 같습니다.Batch Job을 진행하는 동안 DB에 부하가 가해질 수 있으며,부하가 조회 성능을 저하시킬 우려가 있었습니다.따라서,데이터 입력에는 MariaDB를 사용하였고,데이터 조회에는 Redis를 사용하여 성능을 높였습니다. 인메모리형 데이터 스토리지인 Redis를 캐시 스토리지로 사용한 이유는 Redis가 2ms 미만의 조회 성능을 지녔고,다양한 자료형을 다룰 수 있으며, NoSQL로 확장성 및 ..

Java 2024.02.23

[Troubleshooting] AWS EC2 & Docker 한글 깨짐

1. 오류 원인 이 오류는 서버에서 사용하는 인코딩이 한글을 읽을 수 없어서 생기는 오류입니다. 2. 오류내용 셀레니움을 통해 외부 사이트에서 파일을 다운로드 받아 인코딩하는 도중, 아래 오류를 맞닥뜨렸습니다. 외부 사이트에서 csv파일의 이름을 한글로 다운로드시키기 때문에, 한글을 포함시켰는데, 한글이 깨지는 문제가 발생했습니다. 3.해결책 aws & docker 인코딩 변경(재부팅 필수) 서버가 한글을 인식할 수 있도록 ko_KR.utf8을 설치합니다. aws만 사용하고 있다면 aws 서버의 설정으로 충분하지만, docker와 함께 사용하고 있다면, docker를 빌드하면서 컨테이너 서버에 ko_KR.utf8을 설치해야 합니다. 먼저 aws 부터 진행하겠습니다. 서버 언어 확인 echo $LANG 가..

Troubleshooting 2024.02.23

[Docker, docker-compose] docker, docker compose

Docker Docker는 애플리케이션을 컨테이너라는 격리된 환경에서 실행하기 위한 오픈 소스 플랫폼입니다. 컨테이너는 가벼운, 실행 가능한 소프트웨어 패키지로, 애플리케이션이 실행되는데 필요한 코드, 런타임, 시스템 도구, 시스템 라이브러리, 설정 등 모든 것을 포함합니다. Docker의 핵심 개념 이미지(Image) Docker 이미지는 애플리케이션과 그 종속성을 포함하는 경량의, 독립적인, 실행 가능한 소프트웨어 패키지입니다. 이미지는 애플리케이션을 실행하는데 필요한 모든 것을 포함하고 있으며, 컨테이너를 생성하는 데 사용됩니다. 컨테이너(Container) Docker 컨테이너는 Docker 이미지의 실행 인스턴스입니다. 이미지를 실행하면, 이미지의 스냅샷인 컨테이너가 메모리에서 실행됩니다. 각 ..

DevOps 2024.02.23

[Spring] 예제와 함께 보는 다중 데이터 소스, Multiple Data Source(예제: Redis * 2, MariaDB *2)

개요 다양한 데이터를 다루는 경우, 대규모 시스템이나 마이크로 서비스 아키텍처를 사용하는 경우에, 다중 데이터 소스를 적용하는 것을 고려할 수 있고, (관계형 데이터 베이스와 NoSQL 데이터 베이스를 동시에 사용해야 할 필요가 있을 수 있습니다) 다중 데이터 소스를 적용하여 애플리케이션의 성능, 확장성, 유연성 수준을 높일 수 있습니다. 이러한 설정은 데이터 분리, 부하 분산, 백업 및 복구 전략, 그리고 성능 최적화와 같은 여러 가지 이점을 제공합니다. 예컨대, MariaDB 인스턴스 중 하나는 읽기용으로, 다른 하나는 쓰기용으로 사용할 수 있습니다. 또한 각 도메인별로 Redis 인스턴스를 사용하여 확장성과 유연성을 높일 수 있습니다. MariaDB를 읽기용과 쓰기용으로 나누는 것을 통해 부하를 분..

Java 2024.02.23

[SpringBatch] 기본 개념 및 예제(csv 파일)

대규모 데이터에 대해 데이터를 일괄적으로 처리하고,처리 중 발생한 오류를 처리하며,실패한 작업을 원활하게 재시작하는 것은 중요합니다. Spring Batch는 대규모 데이터 처리를 위한 Spring 프레임워크입니다. 일반적으로 대규모 트랜잭션을 통해 데이터를 저장할 때 사용합니다. 트랜잭션을 추적하여 관리하고, 트랜잭션 최적화 및 파티셔닝 기술을 통한 고성능 배치 작업을 통해 작업 재시작 등 대용량 레코드 처리에 필수적인 기능을 제공합니다. Job은 배치 작업을 의미합니다. Job에는 여러 Step이 있습니다. 은행에서 매일 고객의 입금, 출금 내역을 확인한 이후 요약하여 저장하는 Job을 한다면, Step1.내역을 확인하고 Step2.요약하여 Step3.저장하는 단계로 나뉠 것입니다. 더 구체적으로 살..

Java 2024.01.25

[SpringSecurity] SpringSecurity6, SpringBoot3.x.x , JWT(access, refresh) - 2 구현(member, token, auth, config)

[SpringSecurity] SpringSecurity6, SpringBoot3.x.x , JWT(access, refresh) - 2 구현(member, token, auth, config)[2024-06-26 ~ 내용 보완중]member와 token 데이터를 config 기반으로 auth합니다.따라서, 어떤(member, token) 자료형을 사용할 것인지 알아보고,어떻게(config, auth) 사용할 것인지 순차적으로 구현하도록 하겠습니다. 1. member (디렉토리)SpringSecurity의 인터페이스 중 하나인 UserDetails를 구현(implements)하겠습니다.UserDetails를 구현(implements)하는 것은 사용자 인증 정보를 관리하는 데 매우 중요한 단계입니다.Spr..

Java 2024.01.24

[SpringSecurity] SpringSecurity6, SpringBoot3.x.x , JWT(access, refresh) - 1 사전 준비(개요, docker, 초기 설정)

[SpringSecurity] SpringSecurity6, SpringBoot3.x.x , JWT(access, refresh) - 1 사전 준비(개요, docker, 초기 설정)0. 보안웹 서비스를 운영하며 가장 중요한 요소 중 하나는 바로 '보안'입니다.사용자와 서버 간의 안전한 통신은 데이터 유출 방지, 불법 접근 차단 등을 위해 필수적입니다.보안의 핵심에는 '인증 시스템'이 자리 잡고 있습니다.현대의 웹 애플리케이션은 다양한 인증 방식을 사용하지만,그 중에서도 JSON Web Token(JWT)은 그 간편함과 안정성으로 많은 개발자들에게 선택받고 있습니다.0.1 JWTJWT는 정보 전송을 위한 방법 중 하나로,이를 활용하여 STATELESS 방식으로 보안요청을 처리할 수 있습니다.기존 세션 방식..

Java 2024.01.21

[Http Client] RestTemplate에서 RestClient 적용으로 최적화

Http Client의 종류는 HttpURLConnection, Apache HttpClient, RestTemplate, OpenFeign, WebClient, RestClient 등으로 다양합니다.각 HttpClient의 기본 구현에 대해 궁금하다면 아래 게시글을 참조해주세요.[HTTP Client] 개요[HTTP Client] 예제- 2024-06-19 추가프로젝트를 진행하던 중,외부 api와 연결하는 것이 필요하여 Http Client 중 RestTemplate 을 적용했습니다.최적화하지 않은 상태에서 시간을 측정해본 결과,평균적으로 100밀리초가 소요되는 것을 확인했습니다.이를 최적화하기 위한 방법을 찾던 중,RestTemplate의 소요 시간을 단축할 수 있는 Http Client인 WebCl..

Java 2024.01.19

[Swagger] 테스트 코드, Swagger 등 개발 시 우선순위 몇 가지

프로젝트를 진행할 때, 몇가지 사항들을 우선순위로 두기로 했습니다. 테스트 코드 작성하기, Swagger 및 Logger, REST API 형식 최대한 지키기 작업량이 늘 수록 테스트 코드의 중요성이 커집니다.JUnit을 사용하여 메서드 별로 코드를 살펴볼 수 있기 때문에,문제가 되는 코드를 손쉽게 발견할 수 있습니다. Logger 또한 테스트 코드의 중요성과 마찬가지로 코드의 흐름을 살펴볼 수 있기 때문에 중요합니다. 호출된 메서드와 매개변수를 명시하고, 그에 따른 결과를 출력하도록 했습니다.이를 통해 메서드 실행에 따른 객체의 변화를 추적할 수 있습니다.  public Optional findById(Long id) { Optional findMembers = memberReposi..

Java 2024.01.17

[GitHubFlow] 형상관리 전략 GitHubFlow

개발을 진행할 때 협업은 상당히 중요합니다.OilNow 프로젝트를 시작하기 앞서,GitHub를 활용한 GitHubFlow를 진행할 것이며,왜 이 방법을 채택하였고, 어떻게 진행할 것인지에 대해 작성해보려고 합니다.왜 GitHubFlow인가?GitHubFlow는 간단하기 때문에 소규모 프로젝트에 적합합니다.각각의 기능이나 작업이 하위 브랜치를 통해 병합되기 때문에, 동시 다발적인 개발이 가능합니다.Pull Request를 통해 손쉽게 코드리뷰할 수 있습니다.Issue와 Pull Request, Project를 통해 프로젝트의 작업에 대한 추적이 쉽습니다.하위 브랜치 작업, 병합, 배포의 과정이 빠릅니다.이제 여러 단계를 나눠서 세부적으로 설명해보겠습니다0.1. (선택) Organizations을 생성합니다..

Dictionary 2024.01.16
728x90
반응형