목록경력 실무경험 (57)
공부한것들을 정리하는 블로그 입니다.
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2023.04.30 마지막 수정일 2023.05.10 # 오픈소스 트위터의 추천 알고리즘 트위터의 추천 알고리즘이 오픈소스로 공개되었다고 한다. 추천 알고리즘은 트위터의 핵심기술이라 생각하기에 이를 분석해보면 무척 재미있을 것 같다. 하는김에 트위터의 시스템 디자인도 같이 생각해보자. * 해당 글은 공부가 목적인 글이므로. 부정확한 내용이 있을 수 있으니 참고바랍니다. # 의식의 흐름대로 진행 우선은 블로그에 글로 옮기는데 시간이 소요되므로, 의식의 흐름대로 나열 및 참고할만한 다른 블로그의 링크를 달아놓는다. A. 트위터의 추천 알고리즘 원본 (영어) https://blog.twitter.com/engineering/en_us/topics/open-so..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2023.01 마지막 수정일 2023.04 # 결제/결제취소 요청과 서버의 응답 결제 요청에 대해서 결제 서버의 응답값은 결국 결제 성공/실패 중 하나이다. 결제취소 요청에 대해서 결제 서버의 응답값은 결국 결제취소 성공/실패 중 하나이다. # 결제 도메인의 성공 응답과 예외 처리 상황 결제 도메인에서는 크게는 아래 2가지 상황으로 나뉘며 그 하위에 여러 케이스가 있다. 1. 고객에게 즉시 응답이 가능하나, 잘못된 응답을 할 수 있는 경우 2. 거래 트랜잭션의 상태를 알 수 없어 즉시 응답이 불가한 경우. # 고객에게 즉시 응답이 가능하나, 잘못된 응답을 할 수 있는 경우 1) 같은 요청이 짧은 시간에 두 번 이상 발생할 수 있다. - 승인요청 : 처음 ..
보호되어 있는 글입니다.
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2023.04 마지막 수정일 2023.04 1. 서버 확장 - 스케일 업(Scale Up), 스케일 아웃(Scale Out) 2. 로드 밸런싱 구성 서버의 수평적 확장도 포함 3. 데이터베이스 확장 Replication의 이용도 포함 4. CDN 글로벌 CDN Content Delivery Network(콘텐츠 전송 네트워크)을 통해, 각 지역에 캐시 서버를 분산 배치해 사용자에게 웹 콘텐츠를 효율적으로 제공 5. 캐싱 캐싱 기능은 반복적인 요청을 처리하는데 필요한 리소스를 줄이므로, 캐시된 데이터를 사용하면 요청에 대한 응답 시간을 단축 가능 6. 코드 최적화 로직개선 등 7. DB 최적화 인덱싱 변경 등 8. 그 외 요청이 적은 시간에 미리 작업을 해..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.06 마지막 수정일 2023.04 # 프로그램에서의 오류 ( 컴파일 오류, 런타임 오류 ) 프로그램에서 오류는 컴파일 오류와 런타임 오류로 나눌 수 있다. # 자바에서의 컴파일 오류 컴파일 오류는 소스코드를 .class 파일을 컴파일하는 과정에서 JVM이 던지는 오류이며 대부분 소스코드 자체의 문법적 오류로 인해 발생하는 경우가 대부분이고 프로그램 자체에서 처리할 수 있는 방법은 없다. # 자바에서의 런타임 오류 런타임 오류는 문법적인 오류가 없어 컴파일 시에는 정상적으로 컴파일 되었으나 프로그램을 실행하는 과정에서 발생하는 오류를 의미하며, 오류 발생시 개발자가 직접 오류를 확인하여 처리해야 한다. 자바의신 참고 참고 : https://drsg..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.12.12 마지막 수정일 2023.04 # 현금영수증 서비스? 현금영수증 서비스는 현금성 결제에 대한 국세청 영수증을 발급해주는 서비스이다. 실시간 계좌이체, 가상계좌 등 현금성 결제 성공 후 서비스가 호출되는 경우도 있고, (이 경우 트랜잭션/ID가 연계) 현금영수증 서비스만 단독으로 호출되는 경우가 있다. (이 경우 트랜잭션/ID가 독립 부여) 현금영수증은 배치 스케줄러를 통해 익일 새벽에 대상건을 파일로 만든 뒤, 국세청으로 FTP 송수신하여 처리되며 서비스가 일단락 된다. # 일련번호가 중복채번되면? 만약, 현금영수증 서비스에서 DB 시퀀스를 이용해 승인번호(승인취소번호) 채번되고 있다고 가정하면 일련번호가 중복채번 될 경우 익일 국세청으..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2021.11.25 마지막 수정일 2023.04 # 조회쿼리 수행결과 오류 발생 특정 테이블에 데이터를 Insert 하고 이후 Select 한다고 가정하자. 잘못된 날짜가 입력되었을 경우, 조회 조건으로 날짜를 입력시 조회쿼리 수행결과 오류가 발생 가능하다 (ORA-01847 : 달의 날짜는 1에서 말일 사이여야 합니다.) 이에 대한 해결법은, DB에 날짜데이터를 Insert 해야 할 경우에는 정합성 체크가 선행될 수 있도록 하거나. 조회쿼리에서 조건문을 작성 할 때 주의해야 할 것이다. 조회쿼리에서 조건문을 작성시 날짜데이터를 이용하는 경우 ex) TO_CHAR(TO_DATE(DT_INPUT, 'YYYYMMDD') + 20211120 , 'YYYYMMD..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2023.04 마지막 수정일 2023.04 # 에러 핸들링 비교 리턴코드(Return Code) VS 익셉션(Exception : try-catch, throws) # 익셉션 (Exception : try-catch, throws) 장점 - 자바에서는 익셉션 사용을 권장하고 있다. - try-catch 문의 사용으로 정상과 에러처리 코드 분리 가능하여 코드가 간결해진다. - 런타임 예외의 보편화를 통해 개발자가 작성해야(신경써야) 할 부분을 줄일 수 있다. - try-catch 블록을 메서드로 추출하면, 각 메서드는 정상/에러 처리에 집중 가능하다. (함수에 한가지 역할만 부여) 단점 - 스택트레이스가 길어진다. - 컨텍스트(상태)를 가지지 않기에, 성공..
보호되어 있는 글입니다.
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.05.10 마지막 수정일 2023.04 # 노티서비스에서 이슈 발생 승인결과를 보내주는 노티(알림)서비스가 특정 가맹점에 400 오류응답을 하고 있다고 가정해보자. 아마 모니터링에서 감지되는것이 아니라면, 가맹점에서 먼저 확인요청이 들어올 수도 있다. 400 에러는 클라이언트 에러이므로 결국 가맹점 서버에서 오류응답 한 것이다. (4xx : 클라이언트 에러, 5xx : 서버 에러) 그러면 해당 이슈는 무조건 가맹점측 서버 문제일까? # 상황 설명 1. 클라이언트로 부터 결제승인 요청 2. 비즈니스 로직 처리 후 외부 API 호출 원천사/중계사 통신하여 승인요청 3. 외부 API 통신 결과에 따라 클라이언트로 응답 성공, 실패, 타임아웃 등 4. ..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.06 마지막 수정일 2023.04 # 외부 API 연동시 고려사항외부 API를 연동시 신경써야 할 부분이 많다. 예를들면, 외부 API관련 변수의 처리에 신경을 써야하고 ex) 요청/응답 값을 DB의 키값으로 설정하지 않을 것, 매핑처리에 대해 고민 할 것, 응답값을 필수값으로 가정하지 않을 것(null값으로 인한 NPE 발생, 혹은 빈 값의 저장에 주의) 고객에게 어떤 응답을 줄지 고민해야 되고 ex) 결제요청에 대해 외부 API에서 타임아웃 혹은 장애응답을 받아서 결제 유무를 알 수 없는 경우, 일단 고객에게는 결제실패 응답한 후. 배치나 메시징큐 등을 통해 취소요청을 재처리하는 것 또 외부 API가 우리쪽 애플리케이션의 성능에 영향을 최소화..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.03.16 마지막 수정일 2023.04 # 가상계좌(무통장입금) 서비스 가상 계좌란, 고객이 자신이 원하는 은행을 선택 후 생성된 고유의 가상 계좌로 입금하는 서비스를 말한다. ATM 기기를 통한 입금, 인터넷뱅킹, 폰뱅킹 등 다양한 방법으로 입금이 가능하다. 가상계좌 제휴사는, 각 은행과 가상계좌 서비스를 제공 사업자를 연결 및 관리해 주는 제휴 기관을 말한다. 가상계좌 서비스는, 가상계좌 채번, 수취조회, 입금, 환불 등이 있다. # 수취조회시 개설기관 장애 응답 발생 DB동기화 점검 작업간 모니터링 진행중, 수취조회시 개설기관 장애 응답 발생을 감지 한 상황이라 가정해보자. DB동기화 점검 작업시 L4를 제어하여 한쪽 서버씩 번갈아 작업을 ..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.05.14 마지막 수정일 2023.04 # 카드사 장애 발생 감지 1. VAN에서 카드사 TIMEOUT 응답 발생 횟수가 일정이상 감지되어 서비스 모니터링에 감지된다. 2. 운영팀에서 카드사 상황실로 확인요청을 보낸다. 3. 카드사 터널 끊김을 감지하게 되고 VAN 담당자는 카드 통신 프로세스 재기동을 진행한다. => L4 스위치 제거 4. 인프라팀을 통해 각 서버별 카드 연동 전용회선 DOWN 이력 및 회선 정상여부 확인을 진행한다. => DOWN이력 O. 현재 정상 O 5. PG에서도 카드 거래건에 대해 VAN으로부터 카드사 TIMEOUT 응답 확인된다. => 카드사 TIMEOUT이라면 PG입장에서는 장애설정 혹은 서비스 조치 대상은 아닐 것..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.03 마지막 수정일 2023.04 # 레거시 서버 장비노후 이슈 새벽에 레거시 서버에서 장비노후로 인한 문제가 발생한 적이 있었다. 운영팀으로부터 디스크 컨디션 로그 Top I/O 처리율 90% 이상으로 지속 유지되고 있음을 공유받았고 실제로 확인해보니 거의 100% 근사치라서 계정 접속도 힘든 정도였다. 이에 대하여 다음과 같이 대응하였다. 1. 모니터링 프로그램 오탐 가능성 확인하고자, 레거시 서버(배치 컨테이너 용도)에 접속하여 실제 IO 사용량을 확인 2. 서버 프로세스 및 배치 스케줄러 목록 확인 후, 프로세스 중지 및 재기동을 하여도 특이사항이 없을지 확인 3. 서버 프로세스 중지 후 IO 사용량 모니터링 (정상화 되면 재기동 예정) ..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2021.04 마지막 수정일 2023.04 # 배치컨테이너 배포와 스케줄러 실행이 동시에 진행 결론부터 말하자면 오류가 발생가능하며, 이 경우 배치가 돌던 중 오류가 발생하고 데이터의 정합성을 보장 할 수 없을 것이다. 그러면 해당 컨테이너의 로그를 직접 보면서 데이터 보정 작업을 진행해야 될 수 있다. 또한 배치를 마저 돌려야 되는지, 그냥 재수행만 해도 될지 아니면 데이터 보정 후 재수행을 해야될지 등을 판단해야 한다. ex) admin 컨테이너 로그상 배포(HotDeploy)와 배치 실행이 겹치게 되어, InvalidGlobalDeployVersionException, InvalidGlobalDeployVersion 발생 프레임워크/서버에 따라 안전..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2021.04 마지막 수정일 2023.04 # 계좌이체 서비스의 도메인에 대해 은행은 계좌이체 서비스를 창구에서 직접 처리하는 경우가 있기때문에 입금이 완료되어도 바로 중계사를 통해 입금통보처리를 진행하지 않는다. 최초 입금수취조회 후 약 2분정도의 딜레이를 가진 뒤, 이후 다시한번 입금수취조회 후 입금통보처리를 하게 된다. 이를 API를 호출하는 흐름으로 나타내면 아래와 같다. 1. 최초 입금수취조회 : 은행 => 중계사 => PG사 2. 2분 딜레이(이 사이에 은행 시스템취소가 발생하면, 더이상 flow 진행 x) 3. 입금수취조회 : 은행 => 중계사 => PG사 4. 입금수취조회 성공응답시, 입금통보요청 : 은행 => 중계사 => PG사 # 은행점..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2020.12.30 마지막 수정일 2023.04 # 연말에 문제 발생 자바에서 SimpleDateFormat 메소드를 사용시, 반드시 주의해야 할 내용이 있는데 바로 년도 포맷의 사용방식이다. ex) 년도 포맷 - 대문자 사용 (YYYY 또는 YY) : 오류발생 O - 소문자 사용 (yyyy 또는 yy) : 오류발생 X 위 형식을 지키지 않을 경우, 1년 빠른 날짜를 가져오게 되어 문제가 발생된다. YYMMdd, YYMM, YYMMDD 등올 사용시에도 마찬가지로 연말(12/31)에 오류가 발생하므로 반드시 아래와 같이 포맷을 사용하도록 하자 ex) 이렇게 사용해야 함 년 : yyyy 또는 yy 월 : MM 일 : dd 시 : HH 분 : mm 초 : ss..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.04 마지막 수정일 2023.04 # 자바와 접근제한자 자바는 객체지향 언어입니다. 객체(object)란 실생활에서 우리가 인식할 수 있는 사물로 정의할 수 있고 이러한 객체의 상태와 행동을 구체화하는 형태의 프로그래밍이 바로 객체지향 프로그래밍입니다. 이때 객체를 만들어내기 위한 설계도와 같은 개념을 클래스라고 합니다. 클래스는 객체의 상태를 나타내는 필드와 행동을 나타내는 메소드라는 멤버들로 구성되어 있으며 모든 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스라고 할 수 있습니다. 따라서 어떤 클래스의 객체의 생성은 결국 외부 클래스에서 진행이 되고 외부 클래스에서 접근이 가능한 멤버와 접근이 제한된 멤버로 구분하여 필드, ..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.04 마지막 수정일 2023.04 # 자바의 특성 1. 플랫폼(OS)에 영향을 받지 않으므로 다양한 환경에서 사용할 수 있다. JVM은 OS에 종속적이지만, JAVA는 JVM덕분에 OS에 종속적이지 않다. 2. 객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋다 객체지향 프로그래밍 : 객체간의 상호작용(협력)을 로직으로 구현한 컴퓨터 프로그래밍 패러다임의 하나 ㄴ 객체간의 상호작용(협력) = 객체를 중심으로 프로그램을 설계 = 유지보수가 쉽고 확장성이 좋음 객체 : 상태와 행동을 가지고 있는, 객체지향 언어의 최소단위이자, 현실세계의 사물에 빗대어 표현되는 단어 객체지향 : 자율적인 존재인 객체가, 다른 객체에게 메시지를 전달하며 상호간 협..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2021.02 마지막 수정일 2023.04 # 상황 설명 무중단 서비스를 지향하는. 이중화 되어있는 서버 상황(Active - Active)에서 한쪽 서버에 대해 스케일 업(Scale Up) 또는 정기점검 진행을 위해. 잠시 단일서버로 운영되어야 하는 상황이다. ex) A서버,B서버 중 L4제어하여 A서버로의 연결을 C서버로 변경하여 테스트 or A서버의 거래비를 제외하여 서비스를 제공하지 않는 상태로 만듦 대다수 고객 입장에서는 이중화된 서버(Active - Active)를 잠시 단일화(Active - Standby) 하는 상황이고 이는 즉, 특정 고객의 경우터 단일화 서버(Active - Standby)인 상황에서 서비스가 제공되지 않는 상태로 변경됨..