목록경력 실무경험/생각해볼만한 주제 (12)
공부한것들을 정리하는 블로그 입니다.
* 해당 글은 계속 수정 예정입니다. 최초 작성일 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..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2023.04 마지막 수정일 2023.04 # 에러 핸들링 비교 리턴코드(Return Code) VS 익셉션(Exception : try-catch, throws) # 익셉션 (Exception : try-catch, throws) 장점 - 자바에서는 익셉션 사용을 권장하고 있다. - try-catch 문의 사용으로 정상과 에러처리 코드 분리 가능하여 코드가 간결해진다. - 런타임 예외의 보편화를 통해 개발자가 작성해야(신경써야) 할 부분을 줄일 수 있다. - try-catch 블록을 메서드로 추출하면, 각 메서드는 정상/에러 처리에 집중 가능하다. (함수에 한가지 역할만 부여) 단점 - 스택트레이스가 길어진다. - 컨텍스트(상태)를 가지지 않기에, 성공..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.06 마지막 수정일 2023.04 # 외부 API 연동시 고려사항외부 API를 연동시 신경써야 할 부분이 많다. 예를들면, 외부 API관련 변수의 처리에 신경을 써야하고 ex) 요청/응답 값을 DB의 키값으로 설정하지 않을 것, 매핑처리에 대해 고민 할 것, 응답값을 필수값으로 가정하지 않을 것(null값으로 인한 NPE 발생, 혹은 빈 값의 저장에 주의) 고객에게 어떤 응답을 줄지 고민해야 되고 ex) 결제요청에 대해 외부 API에서 타임아웃 혹은 장애응답을 받아서 결제 유무를 알 수 없는 경우, 일단 고객에게는 결제실패 응답한 후. 배치나 메시징큐 등을 통해 취소요청을 재처리하는 것 또 외부 API가 우리쪽 애플리케이션의 성능에 영향을 최소화..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.04 마지막 수정일 2023.04 # 자바와 접근제한자 자바는 객체지향 언어입니다. 객체(object)란 실생활에서 우리가 인식할 수 있는 사물로 정의할 수 있고 이러한 객체의 상태와 행동을 구체화하는 형태의 프로그래밍이 바로 객체지향 프로그래밍입니다. 이때 객체를 만들어내기 위한 설계도와 같은 개념을 클래스라고 합니다. 클래스는 객체의 상태를 나타내는 필드와 행동을 나타내는 메소드라는 멤버들로 구성되어 있으며 모든 클래스는 외부 클래스에서 이용할 목적으로 설계된 라이브러리 클래스라고 할 수 있습니다. 따라서 어떤 클래스의 객체의 생성은 결국 외부 클래스에서 진행이 되고 외부 클래스에서 접근이 가능한 멤버와 접근이 제한된 멤버로 구분하여 필드, ..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.04 마지막 수정일 2023.04 # 자바의 특성 1. 플랫폼(OS)에 영향을 받지 않으므로 다양한 환경에서 사용할 수 있다. JVM은 OS에 종속적이지만, JAVA는 JVM덕분에 OS에 종속적이지 않다. 2. 객체 지향 언어이기 때문에 유지보수가 쉽고 확장성이 좋다 객체지향 프로그래밍 : 객체간의 상호작용(협력)을 로직으로 구현한 컴퓨터 프로그래밍 패러다임의 하나 ㄴ 객체간의 상호작용(협력) = 객체를 중심으로 프로그램을 설계 = 유지보수가 쉽고 확장성이 좋음 객체 : 상태와 행동을 가지고 있는, 객체지향 언어의 최소단위이자, 현실세계의 사물에 빗대어 표현되는 단어 객체지향 : 자율적인 존재인 객체가, 다른 객체에게 메시지를 전달하며 상호간 협..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2023-02-01 마지막 수정일 2023-04 # 동시성, 병렬 - 동시성 : 동시에 작업이 실행된 것처럼 보이면 된다. (논리적) - 병렬 : 실제로 동시에 작업이 실행되어야 한다. (물리적) 따라서 싱글코어에서, 시분할로 나누어 일을 처리하더라도. 동시성을 지원한다고 말할 수 있다. # 동기, 비동기 - 동기 : 호출한 함수가 작업완료 여부를 확인 - 비동기 : 콜백함수가 작업완료 여부를 확인 => 작업완료를 누가 확인하는가? # 블로킹, 논블로킹 - 블로킹 : 호출된(호출당한) 함수가 제어권을 가짐. (결과를 바로 리턴하지 않음) - 논블로킹 : 호출한 함수가 제어권을 가짐. (결과를 바로 리턴함) => 제어권한이 있는가? # 동기, 비동기, 블로..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2023.06.16 마지막 수정일 2023.04 1. InterruptedException은 JVM이 발생시킨다. 쓰레드가 데드락(DeadLock)에 빠졌을 때, (waiting, sleeping, interrupted 된 상태) JVM은 InterruptedException을 발생시킨다. 2. InterruptedException은 JVM의 쓰레드 관리에 관한 내용이다. (강제중단 방법) WAIT : 동시성으로 인한 멀티쓰레드의 실행에서. 실행중인 하나의 쓰레드가 동작하고 있을때, 나머지 쓰레드는 waiting 상태에서 대기하는데. 이때 JVM은 sleep(), wait() 메서드를 이용해 쓰레드의 상태를 제어 가능하다. 3. InterruptedExc..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.05.24 마지막 수정일 2022.05.24 # 테스트를 최적화하는 방법 1. EP-BVA EP는 동등 분할(Equivalence Partitioning) 기법으로 프로그램의 입력값과 출력값이 특정 그룹으로 돼 있고 분류된 그룹의 값들을 시스템에서 동일하게 취급한다는 특성을 이용한 테스트 기법입니다. BVA는 경곗값 분석(Boundary Value Analysis) 기법으로 동등 분할의 확장 형태입니다. 2. 페어와이즈(pairwise) 가능한 모든 입력값의 조합을 테스트하는 대신 짝들의 조합으로 테스트하는 방법입니다. 3. 상태 전이(state transition) 어떤 이벤트가 발생했을 때 테스트 대상이 다른 상태로 전이되는 경우의 수를 테스..
* 해당 글은 계속 수정 예정입니다. 최초 작성일 2022.05.18 마지막 수정일 2022.05.18 # 무중단 배포 아키텍처 1. 롤링 배포 방식 제한된 자원에서 하나씩 배포하여 변경해 나가는 방식 2. 블루-그린 배포 방식 현재 사용 중인 버전의 인스턴스 수만큼 새 버전의 인스턴스를 준비해 로드밸런서가 스위칭해주는 방식 3. 카나리 배포 방식 새 버전 소프트웨어의 모니터링과 검증에 초점을 맞춘 방식 # 참고 1. SDS 기술블로그 https://www.samsungsds.com/kr/insights/1256264_4627.html 무중단 배포 아키텍처[Zero Downtime Deployment] - 글로벌 서비스 운영의 필수 요소 무중단 배포 아키텍처[Zero Downtime Deployment]..