분류 전체보기

·Algorithm
계수 정렬(Count Sort)이란?특정한 조건이 부합할때만 사용할 수 있지만 매우 빠르게 동작하는 정렬 알고리즘계수 정렬은 데이터의 크기 범위가 제한되어 정수 형태로 표현할 수 있을 때 + 가장 큰 데이터와 가장 작은 데이터가 백만정도 이하의 차이일때 효율적인 정렬 알고리즘이다.모든 범위를 담을 수 있는 크기의 리스트를 선언하여 구현한다.데이터의 개수가 N, 데이터 중 최대값이 K일 때 최악의 경우에도 수행 시간 O(N + K)를 보장한다. 예시를 통해 계수 정렬 이해하기아래의 표와 같은 성적을 가지고 있는 학생들이 있다고 가정하고, 오름차순으로 아래 성적을 정렬한다고 생각해보자. 누가 어떤 성적을 가지고 있는지는 중요하지 않다고 할 때, 계수 정렬을 이용하여 정렬하는 것이 가장 빠른 정렬 방법이다.7..
·Docker
상황에 따라 도커 컨테이너 내부에서 도커를 실행해야 할 때가 있다.예를 들면 젠킨스 컨테이너 내부에서 도커 이미지를 빌드하고 싶은 때 도커를 실행해야 한다.도커 컨테이너 내부에서 도커를 실행하기 위한 방법으로는 2가지가 있다.도커 컨테이너 내부에 도커엔진을 설치하기 (Docker in Docker)도커 컨테이너 내부에서 호스트의 도커 데몬을 사용하기 (Docker out of Docker)1번 방법은 두 계층의 데몬이 서로 간섭하게 될 수 있고, 중복 자원할당 및 오버헤드가 발생하여 성능이 저하될 수 있어 추천되지 않는 방식이라고 한다.따라서 2번 방식을 구현하는 법을 설명하겠다.Docker out of Docker우리가 처음 도커를 설치할 때 sudo apt-get install docker-ce do..
DI (Dependency Injection - 의존성 지원)스프링은 설정 파일이나 어노테이션을 통해서 객체 간의 의존 관계를 설정할 수 있다. 객체는 의존하고 있는 객체를 직접 생성하거나 검색할 필요가 없음.IoC (Inversion of Control - 제어의 역전)스프링이 갖고 있는 핵심적인 기능으로, 자바의 객체 생성 및 관리 책임을 개발자에서 전체 애플리케이션 또는 프레임워크에 위임하는 디자인 패턴을 일컫는다.AOP (Aspect Oriented Programming - 관점 지향 프로그래밍)문제를 해결하기 위한 핵심 관심 사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍 함으로서 공통 모듈을 여러 코드에 쉽게 적용할 수 있다.Container컨테이너는 객체의 생성, 사용, 소멸에 ..
·Java
개발을 하다 보면 환율 정보를 필요로 하는 기능들이 점점 많아집니다.예를 들어, 상품 목록을 원화로 계산해서 보여줘야 한다면, 환율 정보가 필수적이죠. 그렇다면 환율 정보가 필요할 때마다 매번 웹 API를 호출해야 할까요?매번 API를 호출하게 되면 트래픽이 많아지고 성능 문제가 발생할 수 있습니다. 만약 환율 정보가 30분 동안만 보장된다고 한다면, API를 30분에 한 번만 호출하고 그동안 캐시된 데이터를 사용하는 방법을 고려할 수 있습니다.하지만 캐시 기능을 어떻게 추가할 수 있을까요? 이번 글에서는 데코레이터 디자인 패턴을 활용해 API 호출 코드를 수정하지 않고도 캐시 기능을 추가하는 방법을 소개하도록 하겠습니다!WebApiExRateProvider에 캐시 기능을 추가하기현재 WebApiExRa..
·Spring
안녕하세요 정만입니다 ~ !공통 프로젝트에서 클로바 OCR API를 사용하여 인바디 검사지 사진에서 텍스트를 추출하는 기능이 있습니다.  프론트엔드에서 API 요청을 보낼 때 API 키가 헤더에 노출되는 문제를 알게된 후 백엔드에서 API를 호출 하는식으로 변경했습니다. 하지만 공식 문서의 자바 코드를 그대로 사용하였더니 가독성과 유지보수성이 좋지 않다고 생각해.  Feign을 이용해 리팩토링을 해봤습니다.  ✨Feign 이란 ?Feign이란 SpringBoot 애플리케이션을 위한 선언형 REST 클라이언트입니다. 여기서 "선언형"이란 API 호출을 위해 복잡한 URL 설정, 파라미터 처리, 헤더 설정 등을 직접 코드로 작성할 필요가 없고 인터페이스를 선언하는 것만으로 API호출을 처리해줍니다. Feig..
·React
useMemo란?useMemo는 재렌더링 사이에 계산 결과를 캐싱할 수 있게 해주는 React Hook  예시코드calculateValue- 캐싱하려는 값을 계산하는 함수- 순수해야한다 → 인자를 받지않고 모든 타입의 값을 반환할 수 있어야한다.- 만약 다음 렌더링에서 dependencies가 바뀌지않았으면 동일한 값 , 바뀌었으면 calculateValue를 호출const cachedValue = useMemo(calculateValue, dependencies);    예시코드해당 코드는 TodoList가 상태를 업데이트하거나 부모로부터 오는 새로운 props를 받으면 filterTodos가 실행된다.function TodoList({ todos, tab, theme }) { const visibl..
·Spring
들어가면서 이번 프로젝트에서 Spring Security를 맡게되었고 인증&인가에 대해 배우게 되었다. 그 중 JWT를 사용하여 인증&인가를 진행했는데, 이때 Access Token과 Refresh Token의 차이와 역할에 대해 배우게 되었다.해당 글에서는 특히 Refresh Token이 왜 필요한지, 보안을 위해 어떻게 사용될 수 있는지에 대해 알아볼 예정이다. Refresh Token이 필요한 이유JWT은 유저의 신원이나 권한을 결정하는 정보를 담고 있다. Access Token, 즉 단일 토큰만 발행한 경우에는 다음과 같은 로직을 가진다. JWT 토큰 인증방식은 비밀키로 암호화를 하기에서버와 클라이언트는 JWT를 통해 안전하게 통신한다. 로그인 성공시 서버측에서 클라이언트로 JWT를 발급한다.권한..
·Spring
서론 JPA를 이용해 프로젝트를 구성해보거나 실습을 해보았다면, 당연하게도 Entity를 만들어 사용해본 적이 있을 것이다. 그런데, 이 Entity, 낯선 annotation이 덕지덕지 붙어있어서 그렇지, 본질적으로는 자바 객체이다. 즉, 객체 지향 프로그래밍의 가장 큰 특징 중 하나인, 상속과 다형성을 활용한 구성이 가능할 수밖에 없다. 공식 문서를 읽어보기 전까지는 상속을 이용해 Entity를 구성해보겠다는 생각조차 한 적이 없었다. 그래서, 이번 글에서는 추상/일반 클래스를 상속해 Entity를 구성하는 법에 대해 간단하게 정리해보겠다.Entity Inheritance Entity는 Entity가 아닌 클래스, Entity인 클래스 모두 상속할 수 있다. 또 상속에 사용되는 Entity 클래스는 ..
·React
React Testing Library테스트의 종류Unit Test함수나 컴포넌트, 코드의 한 유닛 혹은 단위를 테스트한다.유닛 테스트는 테스트를 최대한 격리시킨다.유닛이 다른 코드의 유닛과 상호 작용하는 것은 테스트하지 않는다.컴포넌트가 의존하는 다른 함수가 있으면 실제 버전이 아닌 테스트용 버전을 사용한다.Integration Test컴포넌트 간, 유닛간의 상호작용을 테스트 한다.Functional Test소프트웨어의 특정 기능을 테스트한다.특정 코드의 함수가 아닌 소프트웨어의 일반적인 동작을 의미한다.React Testing Library는 Functional Test를 권장한다.E2E Test실제 브라우저와 서버를 사용하여 사용자 관점에서 테스트 한다.React Testing LibraryReac..
·Spring
서론지금 진행중인 프로젝트에서 마이크로서비스 아키텍처를 도입하기로 결정했습니다. 핀테크를 주제로 하는 만큼 결제, 조회 등 서비스에 필요한 중요한 기능들이 매우 밀접하게 맞물려 있는데, 저에게 익숙한 기존의 모놀리식 아키텍처가 아닌 마이크로서비스 아키텍처를 준비하게 되면서 여러 가지 발생할 수 있는 문제들에 대해 학습할 수 있었습니다.그 중 동시성 제어 문제가 가장 관심이 갔는데요, 오늘의 주제는 이 부분에 대해서 다루고자 합니다.비관적 락 VS 낙관적 락 비관적 락(Pessimistic Locking) 개념과 특징비관적 락은 데이터 충돌이 빈번하게 발생하는 환경에서 데이터 일관성을 유지하기 위해 유용하게 사용할 수 있습니다. 데이터에 대해 Lock을 미리 걸어 트랜잭션이 종료되어 명시적으로 Lock이 ..
월월월월2
'분류 전체보기' 카테고리의 글 목록