제안&정리 (48) 썸네일형 리스트형 [JAVA] Optional map 어떤 객체를 사용하다보면 1. null 이 아닌 경우에 다른 객체로 변환 2. null 인 경우에는 기본값을 사용 하고 싶을 때가 있습니다. AS IS 가장 기본적인 방법인 if문이나 3항 연산자로 처리하면 아마도 아래와 같은 코드일텐데요. var foo = bar != null ? Foo.from(bar) : null; 이런 처리가 많아지면 가독성이 나빠집니다..! Optional로 처리해볼까 해서 Optional의 ifPresent를 사용해도 크게 달라지지 않습니다. var foo = optinalBar.ifPresent() ? Foo.from(optionalBar.get()): null; TO BE 해당 요구사항은 아래와 같이 Optional map 을 사용하면 가독성 좋게 변환할 수 있습니다. v.. [JAVA] enum find O(n) -> O(1) 사이드 프로젝트를 하면서 팀원과 enum 정의를 하던 중 성능 개선을 할 수 있는 부분에 대해 모르고 계셨던 부분이 있어 알려드린 적이 있습니다. 주어진 값(문자열, 숫자 등)을 통해 enum을 찾으려는 경우 valueOf 또는 반복문을 돌게 되는데 이런 경우 찾는 시간 복잡도는 O(n)이 됩니다. 이 것을 enum 정의 시점에 static으로 map으로 만들어 놓고 map에서 값을 찾는다면 O(1)으로 바꿀 수 있습니다. 특정 enum의 displayName으로 찾는 예제 코드는 아래와 같습니다. private final static Map displayNameMap = Arrays.stream(values()).collect( Collectors.toUnmodifiableMap( x -> x.disp.. [Git] Conventional Commit 팀에서 Conventional Commit을 도입했는데 도입 한 이유는 더 효율적인 작업과 커밋을 위해서입니다. Conventional Commit 을 간단히 설명하면 정형화된 커밋 메세지를 통해 사람과 별도 프로그램 모두 쉽게 커밋 메세지를 읽게 하는 것입니다. https://www.conventionalcommits.org/en/v1.0.0/ Conventional Commits A specification for adding human and machine readable meaning to commit messages www.conventionalcommits.org 몇가지 예는 다음과 같습니다. - feat: 기능 A 개발 - fix: 버그 B 수정 - test: 기능 C 테스트 작성 위 예에서.. [Circuit Breaker] API 품질과 Timeout, Slow Call Circuit Breaker는 장애 격리를 위해 사용이 되고 API 품질과 깊은 관련이 있습니다. Circuit Breaker 라이브러리 중 하나인 Resilience4j에는 이번에 Slow Call 관련 설정을 할 수 있어 담당하고 있는 서비스에 Slow Call 관련 설정을 추가하는 것을 검토하였습니다. 예를 들어 200ms 이상 응답은 Slow Call로 간주하고 Slow Call이 전체 응답의 몇프로 이상일 때 Circuit Breadker를 OPEN 시키는 것입니다. API 품질 = 사용자(클라이언트) 경험 품질 Slow Call 설정을 적용하기 전에 API 품질에 대해 먼저 고민해 볼 필요가 있습니다. API 품질은 여러 측면에서 볼 수 있습니다. 응답 속도 측면에서 보면 빠를 수록 품질이 좋.. [React, React Native] Update 구독/발행 F/E 개발을 하다보면 여러 화면에 걸쳐 업데이트가 필요한 경우가 있습니다. 예를 들어 계정 닉네임이 수정된 경우에 모든 화면에서 닉네임이 바뀌어야 합니다. 또 여러 계정을 리스트로 관리하고 있는 경우 특정 계정 수정 완료 후에는 계정 리스트 화면에서 관련 정보가 업데이트 되어야 합니다. 이런 목표를 달성할 수 있는 여러 가지 방법이 있지만, 그 중에서 제가 RN 사용했을 때 괜찮았던 방법을 소개합니다. useUpdateObserver, useUpdatePublisher와 같은 훅을 만들어두고 업데이트 하는 쪽에서는 업데이트를 발행(publish)하고 변화를 감지해야 하는 쪽에서 관찰(observe) 및 필요한 액션을 하는 것입니다. import {RecoilState, useRecoilState, us.. Latency 관리 Back-end 개발을 하며 Latency 개선 및 관리 목표를 설정하는 것은 중요합니다. Latency 목표가 없다면 현재 Latency가 적정한 것인지 알 수 없고 개선 방향과 얼마나 노력을 들여야 할 지도 알 수 없습니다. 이번에 회사에서 Latency 목표를 정하면서 밟았던 과정을 정리하여 공유드립니다. Latency 백분위 지표 정하기 목표를 정하기 전 어떤 백분위 지표를 측정 및 개선 목표로 잡을 것인지를 정하는 것이 필요합니다. F/E 에서는 주로 P75를 기준으로 사용합니다. 그 이유는 1) 대부분 사용자의 경험을 대변하면서도 2) 네트워크 통신 이상등에 기인하는 이상 수치에 영향을 받지 않기 때문입니다. 자세한 설명은 https://web.dev/i18n/ko/defining-core-w.. [React Native] custom useAxios hook React로 작업하다보면 Network를 통신을 위한 공통 모듈을 작성할 필요가 있습니다. 공통 모듈을 통해 아래 사항을 공통적으로 관리할 수 있습니다. * 요청 URL * Timeout * 인증 관련 로직 * 사용 방법 직접 만드는 것이 유지보수와 커스텀 차원에서 장점이 있다고 생각해 외부 라이브러리르 쓰는 것보다는 직접 custom hook을 직접 만들어 쓰고 있습니다. 실제 사용 시에는 refresh, access token의 만료기간을 체크하는 로직까지 들어 있습니다. 하지만 이는 어떻게 Backend가 구성되어 있느냐에 따라 달라지는 부분이라고 생각 들어 Recoil에 access token 이 있다면 해당 토큰을 사용해서 요청하는 정도로만 해서 참고하실 수 있게 코드 공유드립니다. networ.. 안정적인 서버 운영을 위한 Health Check - 4xx vs 5xx Elastic Beanstalk 회사에서 Elastic Beanstalk(이하 EB)을 사용해 새로운 운영 환경을 구성을 했는데 놓치는 부분들이 있었고 선배 개발자분께서 여러 부분에서 함께 점검을 해주셨습니다. 그 중에 안정적인 운영을 위해 꼭 알아야 하는 것이 있어 공유해봅니다. 바로 무엇을 Health 체크에 포함시킬 것인가 입니다. EB의 Health Check 설정에는 Ignore application 4xx 설정이 있습니다. 어플리케이션에서 발생한 4xx도 실패한 것으로 간주할 것인가입니다. 일반적으로 4xx, 5xx 응답은 실패이니 실패로 보는 것이 맞는 것 같지만 서버 운영 관점에서는 위험한 설정입니다. 왜냐하면 크롤링, 사용자의 잘못된 요청이 실패로 집계되어 사실 정상적인 인스턴스가 Hea.. Application Scaling 전략 Scaling 전략은 운영 중인(또는 예정인) 어플리케이션으로 변화하는 현실 트래픽을 어떻게 대응할 것인지에 대한 전략입니다. 그렇기 때문에 트래픽은 어떤 형태를 보이고 있는가, 어플리케이션은 어떻게 동작하는지 알고 있어야 효과적인 Scaling 전략을 짤 수 있습니다. 각 회사, 조직마다 사용하는 인프라, 기술 스택이 다르기 때문에 디테일한 부분을 제외한 기본적인 3가지 포인트를 간단히 설명해봅니다. 1. 어플리케이션은 어떻게 동작하는가 1-1. 서버 기본 스펙 결정 어플리케이션이 어떻게 동작하는지 알기 위해서는 테스트가 필요하고, 이를 위해서는 사용할 기본 서버 스펙을 정의하는 것이 필요합니다. 저는 서버 스펙을 정할 때 어플리케이션이 어떤 자원을 많이 사용하는지 파악하고 가능하면 작은 타입으로 시작.. React Native - NumberInput 사이드 프로젝트를 React Native를 사용하면서 불편한 점이 기본적으로 TextInput만 제공이 된다는 점입니다. 별도 라이브러리를 추가할 수 있지만 어렵지 않은 기능이고 직접 만들 경우 모든 기능을 통제할 수 있다는 점에서 내부적으로 TextInput을 사용하는 NumberInput 컴포넌트를 직접 작성했습니다. 다른 분들이 쉽게 작업할 수 있기 위해 작성한 NumberInput 코드 공유합니다. import React, {useEffect, useState} from 'react'; import {Alert, StyleProp, TextInput, TextStyle} from 'react-native'; type Props = { onChangeNumber: (number: number) =>.. 이전 1 2 3 4 5 다음