spring

서버 최초 실행 시 Open API를 통해 데이터를 조회하여 DB에 저장하는 로직을 구현했다. 하지만 두 가지의 데이터를 각각 조회해야 하는데 기존 코드의 경우 동기적으로 수행하고 있었다. 데이터 수가 적을 경우엔 성능 차이가 크지 않지만, 조회할 데이터의 양이 많기 때문에 동기적으로 수행될 경우 조회 및 저장에 소요되는 시간이 많아진다. 이를 해결하기 위해 Spring에서 제공하는 Async 기능을 이용하여 비동기 처리를 적용하여 시스템의 전체적인 수행 시간을 개선하고 리소스를 효율적으로 사용하려고 한다. 비동기란?요청과 결과가 동시에 일어나지 않는다는 뜻이다.즉 작업을 요청하고 해당 요청에 대한 결과를 기다리지 않아도 된다. 이를 통해 여러 작업들을 병렬적으로 처리할 수 있다. @Asy..
이전 포스팅에서는 WebClient를 사용하여 1번째 페이지에 해당하는 데이터를 조회하고 DB에 저장하는 과정을 수행했다. 이번에는 모든 데이터를 저장하기 위해 전체 페이지 수를 계산하고 반복문을 통해 모든 데이터를 조회하려고 한다. 1. 응답 데이터에서 필요한 값 파싱하기 String pharmacyInfo = webClient.get() .uri(uriBuilder -> uriBuilder .path(PHARMACY_ENDPOINT) .queryParam("serviceKey", PHARMACY_API_KEY) .queryParam("_type", "json") .build()) .retrieve() .bodyToMono(String.class) .block(); JSONParser parser = ..
WebClient 선정 이유최근 Spring 3.2부터 추가된 RestClient를 사용하면 기존의 RestTemplate의 직관적이지 못한 사용성과 WebClient의 의존성 문제를 해결할 수 있다. 하지만 외부 여러 API를 통해 대량의 데이터를 조회해야 하므로 비동기적 수행이 필수적이다. RestClient에서는 비동기 기능을 찾아볼 수 없었으므로 비동기 방식을 지원하는 WebClient를 사용하려고 한다. WebClientConfig@Configurationpublic class WebClientConfig { @Value("${open-api.base-url}") private String BASE_URL; @Bean public WebClient pha..
본 게시글은 김영한 강사님의 [스프링 핵심 원리 - 기본편]을 수강하며 작성한 글입니다. 스프링 컨테이너 생성 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext는 스프링 컨테이너이다. 이는 인터페이스인데, 이를 구현한 클래스가 AnnotationConfigApplicationContext이다. 스프링 컨테이너는 XML로도, 애노테이션 기반의 자바 설정 클래스로도 만들 수 있다. 💡 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext로 구분한다. 뒤에서 더 자세히 배우겠지만, BeanF..
· DevOps/AWS
1. RDS DB 생성 1. 데이터베이스 생성 방식은 표준 생성으로 선택 2. 엔진 옵션은 MySQL로 선택 3. 템플릿은 프리티어로 선택 4. DB 이름, 사용자 이름, 암호 설정 5. 연결 설정에서 퍼블릭 액세스 기능을 가능하게 하고 새 보안 그룹 생성하기 6. 추가 구성 설정에서 초기 데이터베이스 이름 설정하기 2. RDS 인바운드 규칙 설정 1. RDS를 클릭해서 보안 그룹으로 이동하고 인바운드 규칙 편집 버튼을 클릭한다. 2. 인바운드 규칙을 추가한다. 유형: MYSQL/Aurora 돋보기: EC2 인스턴스 보안 그룹 3. RDS 접속 테스트 MySQL 워크벤치를 통해 연결을 테스트한다. Hostname: RDS 인스턴스의 엔드포인트 Username: 마스터 사용자 이름 Password: 마스터..
· DevOps/AWS
6. Github Action 워크플로우 작성 프로젝트를 빌드한 후 AWS S3 버킷에 푸시 후 CodeDeploy를 수행한다. name: Build and Deploy Spring Boot to AWS EC2 # main 브랜치에 푸쉬 했을 때 on: push: branches: [ main ] # 리전, s3 버킷 이름, CodeDeploy 앱 이름, CodeDeploy 배포 그룹 이름 env: AWS_REGION: ap-northeast-2 S3_BUCKET_NAME: my-github-action-s3-bucket-i-0108286cf8acc8920 CODE_DEPLOY_APPLICATION_NAME: my-codedeploy-test CODE_DEPLOY_DEPLOYMENT_GROUP_NAME:..
본 게시글은 김영한 강사님의 [스프링 핵심 원리 - 기본편]을 수강하며 작성한 글입니다. 새로운 할인 정책 개발 어느 날 기획자가 새로운 할인 정책인 정률 할인 정책을 추가해달라고 요구한다. 구현체를 하나 추가로 개발하면 될 듯 하지만, 몇 가지 문제점이 발생한다. 이 문제점을 해결하다 보면 여러 과정을 거치게 되고 자연스럽게 스프링의 핵심 기능인 스프링 컨테이너가 왜 탄생했는지 알게 된다. 정률 할인 정책 개발 public class RateDiscountPolicy implements DiscountPolicy{ private int discountPercent = 10; @Override public int discount(Member member, int price) { if (member.get..
· DevOps/AWS
매번 build를 하고, 빌드된 jar파일을 EC2 서버에 접근해서 올리는 작업은 번거롭기 때문에 GithubAction, CodeDeploy를 통해 배포 자동화를 설정한다. 한 번 설정해두면 번거로운 작업이 사라지게 되어서 개발에만 집중할 수 있다. 구축할 파이프라인의 진행할 순서를 간단하게 요약하면 다음과 같다. Github에 코드를 Push하면 Github Action이 자동으로 실행되며 빌드&테스트를 한다.(CI) 문제가 없다면 압축파일(.zip)을 만들어서 AWS S3에 업로드한다. CodeDeploy를 실행하여 S3에 있는 코드를 EC2에 배포한다. 1. IAM 설정 셋팅 Github Action이 S3와 CodeDeploy에 접근하기 위해 해당 권한을 가지는 IAM 사용자 계정을 생성한다. ..
jyjyjy25
'spring' 태그의 글 목록