
이전 글Java의 병렬 처리를 알아보자 - Parallel Stream(병렬 스트림)이전 병렬 스트림을 이용한 병렬 처리에선 I/O 네트워크 작업이 포함되어 있었다. 이제 맞게 비동기 작업을 진행하도록 SpringBoot의 비동기 처리 방법을 알아보고 리팩토링을 진행해 보자.비동기란?사전적 정의로 '동시에 일어나지 않음'을 뜻하고 있다. 즉, 개발에 있어서 작업 완료 여부를 기다리지 않고 다른 작업을 실행하는 것을 의미한다고 볼 수 있다.(나의 업무를 다른 사람에게 넘겨버린다고 이해하면 조금은 편한다.) 이해를 돕기 위한 그림을 살펴보자.위의 그림을 봤을 때, 동기 방식은 손님이 커피를 주문하고 나올 때까지 줄에서 그대로 기다리는 방식이다. 즉, 점원은 커피를 반환할 때까지 다른 요청 및 작업을 수행하지..

때는 2023년 9, 10월...핀테크 프로젝트를 진행하고 있던 중 API의 호출부터 반환까지 약 3초 이상 걸리는 현상이 발생했다. 사용자 카드에 바코드 번호를 부여해서 반환하는 API였다. 간편 결제 서비스인 건 고사하고 메인 화면에서 3초의 응답 시간을 가진 API를 사용할 수 없어, 디버깅을 진행했고 사용자가 보유한 모든 카드에 바코드 번호를 부여하고 Redis에 부여하는 과정에서 응답 시간이 늘어났다. 디버깅을 통해 로직이 순차적으로 진행되면서 시간이 점점 누적되는 것이 가장 큰 문제였다. 카드를 많이 보유한 만큼 시간이 늘어날 수밖에 없는 구조. 바코드 번호를 초기에 생성하고 유지하면 되지 않느냐라는 질문의 대답은 X. 보안상 결제와 직접적인 연관이 있는 바코드 번호가 탈취당했을 경우 언제든 ..

배열 같은 타입의 변수들로 이루어진 유한 집합 배열의 값을 '요소'라고 하며 위치를 가리키는 숫자를 '인덱스'라고 한다. 자바의 인덱스는 0부터 시작한다. 1차원 배열 선언 타입[] 배열이름; 타입 배열이름[]; //ex) int[] arr; int arr[]; 단순 배열 선언 생성 배열이름 = new타입[배열길이]; 타입[] 배열이름 = new타입[배열길이]; //ex) arr = new int[10]; int[] arr = new int[5]; 대괄호 안에 길이를 지정하여 배열을 생성 초기화 인덱스를 이용한 초기화 int[] arr = new int[5];//길이가 5인 int형 배열 생성 arr[0] = 10;//인덱스를 이용한 배열 초기화 arr[1] = 20;//인덱스1에 20 저장 arr[2]..

조건문 주어진 조건식의 결과에 따라 명령을 수행하도록 제어하는 명령문 if문 if(조건식){ 조건식의 결과가 참일 경우 실행 } ex) int num = 1; if(num == 1){ System.out.println(num); //1 } 실행하고자 하는 명령문이 한 줄이라면 중괄호{} 생략 가능 결과가 거짓일 경우 실행되지 않음 if ~ else문 if(조건식){ 조건식의 결과가 참일 경우 실행 } else{ 조건식의 결과가 거짓일 경우 실행 } ex) int num = 1; if(num == 1){ System.out.println(num); //1 } else{ System.out.println("num = 1이 아닙니다."); //num = 1이 아닙니다. } if의 조건식의 결과가 거짓일 경우 ..

변수 값이 변할 수 있는 데이터를 임시적으로 저장 변수 선언 & 값 할당 public static void main(String[] args){ int num; //변수선언 num = 1; // 값 할당(초기화) num = 2; // 값 할당(재할당) int number = 1; //선언과 동시에 초기화 } 변수 선언 : [데이터 타입] [변수이름]; 변수 이름은 주로 두 번째 단어부터 대문자로 시작함 (카멜 케이스) ex) camelCase, helloWorld 영문자, 숫자, _ , $ 사용가능 영문자는 대소문자를 구별하며 숫자로 시작 할 수 없다. 값 할당 : [변수이름] = [값]; 좌항 = 우항 형식에서 우항의 값이 좌항의 변수에 할당이 됨. 처음으로 값을 할당하는 것 = 초기화 재할당 : [변..

풀이 import java.util.Scanner; public class Baekjoon_1110 { public static void main(String[] args) { int count = 0; Scanner sc = new Scanner(System.in); int oldnum = sc.nextInt(); // 수 입력 int num = oldnum; // if에 사용하기 위해 num에 같은 값 복사 while (true) { int num10 = num / 10; // 10의 자리 추출 int num1 = num % 10; //1의 자리 추출 num = getNum10(num1) + getNum1(num1, num10); count++; if (oldnum == num) //처음 주어진 수와..

문제 출처 https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&contestProbId=AV5QLGxKAzQDFAUq&categoryId=AV5QLGxKAzQDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=1&pageSize=10&pageIndex=1&&&&&&&&&& SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 알파벳으로 이루어진 문자열을 입력 받아 각 알파벳을 1부터 26까지의 숫자로 변환하여 출..

문제 출처 https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&contestProbId=AV5QLkdKAz4DFAUq&categoryId=AV5QLkdKAz4DFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=1&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 연월일로 구성된 8자리 숫자의 유효성을 판단한 후 날짜가 유효하다면 YYYY/MM/DD/ 형식으로 출력 하..
문제출처 https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=1&contestProbId=AV5QSEhaA5sDFAUq&categoryId=AV5QSEhaA5sDFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=1&pageSize=10&pageIndex=1&&&&&&&&&& SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제 10개의 수를 입력 받아, 그 중에서 홀수만 더한 값을 출력하는 프로그램을 작성하라. 풀이..