본문 바로가기

분류 전체보기

(27)
[10분 Boot-up] Kotlin으로 스프링부트 Web Application 만들기 - (3) Logback 설정하기 Kotiln과 Spring Boot을 모르더라도 10분씩 따라하면서 자연스럽게 Web Application을 만들어보는 것이 목표입니다. 각 챕터에서 나오는 중요한 내용은 별도로 [더 알아보기]에 보충해서 작성할 예정입니다. 시작하기 전에 Web Application을 운영하다보면 Application 자체의 Matrix 정보도 서비스 모니터링에 매우 중요한 요소지만 Logging은 비지니스 로직의 동작과 오류를 자세하게 추적할 수 있는 또 하나의 강력한 요소라고 생각한다. 특히 Error가 발생한 상황에서 남긴 적절한 Logging은 어느 부분에서, 어떻게 문제가 발생했는지 추적할 수 있는 가장 중요한 첫번째 단서가 된다. Logging을 수행하기 위한 Logger로서 Java 생태계에서는 Log4j(..
[스프링부트] Spring Boot의 Relaxed Binding 이란? Spring Boot는 Environment프로퍼티를 @ConfigurationProperties 빈에 바인딩하기 위해 Relaxed Binding 규칙을 사용하기 때문에 Environment 프로퍼티 이름과 Bean 프로퍼티 이름을 정확히 일치할 필요가 없다. Relaxed Binding이란 프로퍼티와 환경 변수들의 구분을 어느정도 유연한 규칙으로 동일하게 인식한다고 이해하면 된다. 대표적으로 Camel case와 Snake case로 각각 설정된 값들이 있다면 이를 동일한 설정으로 이해하며, 우선순위에 맞게 내부적으로는 1개의 값으로 설정한다. 대시(-)로 구분된 환경 프로퍼티(ex. context-path를 contextPath에 바인드)와 대문자로 작성(capitalized)된 환경 프로퍼티(ex..
[네트워크] Request Timeout 종류 정리 서버간 통신이 많아지는 MSA 구조가 각광 받으면서 내부 시스템 안에서도 서로 클라이언트와 서버가 되어 데이터를 주고 받는 비중이 점점 커지고 있다. 이런 상황에서 통신을 요청하는 클라이언트는 다양한 Timeout 오류를 만날 수 있는데, 이런 Timeout에 대한 종류를 잘 구별한다면 각각의 상황에 따라 구분해서 처리할 수 있다. 한번은 쥬니어 개발자에게 API 요청이 타임아웃 오류 응답을 받는데, 백엔드 서버로 들어오지 않고 앞 단의 Nginx 까지는 액세스 로그가 찍히는 상황이라 도저히 이유를 모르겠다는 질문을 받은 적이 있다. 이런 경우는 타임아웃이 어떤 종류로 발생하고 있는지 먼저 확인하는 것이 중요하다. 타임아웃의 종류가 밝혀지면 디버그나 분석을 해야하는 범위도 좁혀지기 때문이다. Connec..
[IT 리뷰] 홈팟 미니(HomePod mini) 사용 후기 최근 재택근무를 하는 사람들이 크게 증가하면서 잔잔한 카페 음악이나 Lo-Fi 느낌의 음악같은 작업 환경에 어울리는 플레이리스트를 스트리밍하는 곳이 많아졌다. YouTube에서도 쉽게 검색이 가능하고, 음원 서비스에서도 재택근무를 테마로 한 플레이리스트를 제공하기도 한다. 그런데 이런 잔잔한 재택근무용 음악을 MacBook 내장 스피커로 듣고있자니 음질이 조금 아쉬웠다. 그렇다고 PC용 스피커를 구매하자니 근무 시간 외에는 노트북 사용시간이 매우 짧기 때문에 사용성이 제한적일 것 같았다. 거기다 음질이 좋은 PC용 스피커는 가격도 비쌌다. HomePod mini 구매를 결정하다. 일반적인 블루투스 스피커를 다양하게 살펴보다 최종 선택한 것은 HomePod mini 였다. 현재 우리나라는 판매 대상국이 아..
[기타] 병행(Concurrency)과 병렬(Parallelism)의 차이에 대해서 흔히 병행(Concurrency)과 병렬(Parallel)에 대해서 이야기를 할 때 헷갈리는 경우가 많다. 심지어 단어 자체도 비슷한데 의미도 비슷하니 더 헷갈리는 것 같다. 병행과 병렬은 흔히 하나의 물리적인 공간(컴퓨터, 서버)에서 여러 가지 일을 동시간대에 함께 처리하기 위한 기법을 이야기할 때 사용한다. 일단 하나씩 의미를 정리해보자. 병행(Concurrency) 병행이란 소프트웨어적인 의미를 가지고 있다. 모든 소프트웨어 프로그램은 컴퓨터에서 동작하면서 작업을 수행할 때 결국은 CPU 연산 과정을 거치게 되는데, 만약 CPU를 하나의 프로세스가 점유하고 있다면 다른 프로세스들은 작업을 수행할 수 없다. 따라서 이런 물리적인 상황을 극복하기 위해서 소프트웨어적으로 작업을 번갈아가며 수행하게 함으로..
[기타] Retry 전략에 대해서(Exponential Backoff, Jitter) 최근 각광받는 MSA 구조, 분산 시스템 구조에서 서버간 네트워크 통신은 매우 중요하다. 특히 네트워크를 통한 API 호출은 언제 어떻게 실패할지 예측하기 어렵기 때문에 이를 감시할 수 있는 모니터링 기술도 매우 중요하게 평가받고 있다. Datadog 같은 기업의 클라우드 환경 솔루션도 이런 분산 시스템 모니터링과 실시간 오류, 성능 분석을 위한 사용자의 니즈를 기반으로 급속하게 성장하고 있는 중이다. Retry는 똑똑해야 한다. 이런 분산 시스템에서 서버와 서버간 API 호출 실패에 대한 재시도는 매우 중요한 행위이다. 1번의 네트워크 호출 실패로 서비스의 비지니스 로직을 모두 실패처리하거나 fallback 처리하는 것은 몇 번 다시 호출하는 것보다 큰 리소스 낭비가 될 수 있기 때문이다. 따라서 보통..
[기타] 개발 환경(Phase)이란 무엇일까? 개발 환경(Phase)란? 개발 환경(Phase)은 Application이 동작하는 환경을 의미한다. 따라서 대부분의 Framework는 각각의 개발 환경마다 설정 값을 다르게 셋팅할 수 있는 기능이 있다. 대표적으로 Spring Boot의 경우는 Profile 기능이다. 개발 환경(Phase)을 분리하는 이유? 제품을 개발할 때는 Application을 바로 운영 환경에 배포하지 않는다. 아마도 먼저 개발하고 있는 local에서 Application을 실행해보면서 디버깅이나 테스트를 진행하고, 실제 운영 환경과 비슷한 시스템이 갖춰진 Develop 환경이나 Beta, RC 환경에 순차적으로 배포하면서 테스트 과정을 거칠 것이다. 사실 개발 환경(Phase)은 회사나 팀에 따라 레벨이 조금씩 달라질 수 ..
[10분 Boot-up] Kotlin으로 스프링부트 Web Application 만들기 - (2) Profile 설정하기 Kotiln과 Spring Boot을 모르더라도 10분 동안 따라하면서 자연스럽게 Web Application을 만들어보는 것이 목적입니다. 각 챕터에서 나오는 중요한 내용은 별도로 [더 알아보기]에 보충해서 작성할 예정입니다. 시작하기 이 블로그를 참고하고 Kotlin으로 Spring Boot 웹 어플리케이션을 시작하는 분들은 아래 글을 먼저 읽고 오는 것을 추천한다. 1. [10분 Boot-up] 스프링부트 웹 어플리케이션 만들기 - (1) 개발 환경 설정하기 [10분 Boot-up] 스프링부트 Web Application 만들기 - (1) 개발 환경 설정하기(Gradle) 시작하며 요즘 Kotlin으로 Spring Boot 웹 어플리케이션 서버를 개발하고 있다. 작년까지 평범하게 Java 8 버전으..
[IT 리뷰] Logitech MX Anyware 3 for Mac 블루투스 마우스 사용 후기 지난 번 MX KEYS for Mac 키보드 사용 후기 이어서 MX Anyware 3 for Mac 마우스 사용 후기를 남겨본다. 지난 후기에서도 말했듯이 개인적으로 소프트웨어 개발이라는 직업을 가진 사람으로 2012년 이후부터 기계식 키보드를 고집해왔지만 사실 마우스는 딱히 개인적인 취향이 있는 것은 아니었다. 회사에서는 대부분 맥북의 트랙패드를 주로 사용했기 때문에 가끔 보조용 마우스로 같이 지급된 매직 마우스나 개인적으로 소장하고 있는 매직 마우스를 사용해왔다. 매직 마우스는 그립감을 제외하면 사실 Mac OS와 가장 궁합이 맞는 조합이다. 다양한 제스처 조합으로 트랙패드와 동등한 사용성을 보여주기 때문에 보조용 마우스로는 정말 괜찮은 마우스이다. 문제는 그립감이다. 디자인을 위해서 그립감을 포기했..
[10분 Boot-up] Kotlin으로 스프링부트 Web Application 만들기 - (1) 개발 환경 설정하기(Gradle) Kotiln과 Spring Boot을 모르더라도 10분씩 따라하면서 자연스럽게 Web Application을 만들어보는 것이 목표입니다. 각 챕터에서 나오는 중요한 내용은 별도로 [더 알아보기]에 보충해서 작성할 예정입니다. 시작하기 요즘 Kotlin으로 Spring Boot 웹 어플리케이션 서버를 개발하고 있다. 작년까지 평범하게 Java 8 버전으로 Spring Boot 2.3 기반으로 서버를 개발했었는데 벌써 Spring Boot는 2.4버전이 나오고, 나는 Kotlin을 사용하고 있다. 세월도 빠르지만 기술의 발전 속도는 점점 더 빨라지고 새로운 기술의 등장은 더 많아지는 것 같다. 사실 Kotlin 자체가 등장한지는 꽤 됐지만, Android 개발을 넘어 Java 생태계의 Spring Boot ..