Dev Blog

Total (41)

Immer 를 사용해 쉽게 불변성 유지하기

Immer 는 리액트에서 상태값을 업데이트 할 때, “불변성“을 신경쓰지 않고 업데이트 할 수 있는 코드를 작성하기 쉽게 해주는 라이브러리이다. 그렇다면 불변성이란 도대체 무엇인가? 사전적으로 불변성이란 값이나 상태를 변경할 수 없는 것을 의미한다. 자바스크립트의 원시타입을 통해 불변성을 살펴보자.원시타입은 불변성을 가지고 있다. 대표...

[SQL]조인 - Inner Join & Outer Join

조인이란 여러 테이블에 흩어져 있는 정보 중 사용자가 필요한 정보만 가져와서 가상의 테이블처럼 만들어서 결과를 보여주는 것으로 2개의 테이블을 조합하여 하나의 열로 표현하는 것이다. INNER JOIN(내부 조인) INNER JOIN 은 키 값이 있는 테이블의 칼럼 값을 비교 후에 조건에 맞는 값을 가져오는 조인이다. 간단히 말해 서로 연관된 ...

git squash - 커밋 합치기 기능

작업중에 여러 차레의 커밋을 하는 것은 개발자에게 많은 이점을 제공한다. 누군가의 개발로 이한 변화 결과를 확인하거나, 작업 이전의 상태로 롤백하기 등 유용한 상황이 많다. 하지만 이렇게 많은 커밋이 운영 브랜치에 고스란히 반영이 된다면 커밋 히스토리가 복장해지고 이해하기 어려워진다. 이런경우, –squash 옵션을 사용하게 되면 문제를 해결할 수 ...

git merge - fast-forward (--no-ff, --ff)

git은 다른 형상 관리툴과 달리 branch를 생성할 때 파일을 복사하는 것이 아니라 파일의 스냅샷만 가지고 생성하기 때문에 자원의 부담없이 branch 를 만들어 사용할 수 있다. 이러한 장점 때문에 git 으로 작업을 할 때에는 다양한 용도의 branch를 만들어 사용하는데, git 에서 한 브랜치에서 다른 브랜치로 합치는 방법으론 크게 두 가...

Singleton Pattern 알고쓰자

Singleton Pattern 이란 무엇인가? 싱글톤 패턴은 소프트웨어 디자인에서 사용되는 패턴 중 하나로, 이 패턴은 특정 클래스가 인스턴스를 오직 하나만 생성하도록 보장하는 것을 목적으로 한다. 이는 보통 전역 변수를 사용하지 않고 객체를 하나만 생성하여 이를 공유하는 데 사용된다. 이를 구현하기 위해, 먼저 클래스 내에 해당 클래스의 인...

DI (의존성 주입) - 제어의 역전

의존성 주입(Dependency Injection)이란? 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬 클래스 레벨에서는 의존 관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다. 다음과 같이 Store 객체가 Pencil 객체를 사용하고 있는 경...

Enum 은 왜 탄생했을까?

과거에는 어떤방식으로 상수를 정의했었나? 1. final 상수 우선적으로 final 제어자를 이용하여 변수를 상수화 하는 방식이다. final 제어자를 할당함으로써 한번 지정하며 바뀌지 않게 설정되며, 동시에 static 을 사용하여 메모리에 한번만 할당 되게 설정한다. 하지만 해당 방식은 접근제어자들 때문에 가독성이 좋지 않다는 단점이 존재...

왜 lodash가 아닌 lodash-es 를 써야 하는가?

lodash 란? 우선 lodash 란 자바스크립트 유틸리티 라이브러리로, 다양하고 유용한 기능과 도구를 제공하여 개발자가 코드를 더 효율적으로 작성할 수 있다록 도와준다. lodash 는 아주 풍부한 유틸리티 함수를 가지고 있다. 배열처리, 객체 조작, 함수형 프로그래밍, 문자열 조작 등 다양한 영역에서 활용할 수 있는 함수를 제공한다. 그리...

정규표현식(Regular Expression)에 대해 알아보고 활용해보자

정규표현식이란? 정규표현식(Regular Expression), 줄여서 “정규식”이라고 불리우는 해당 표현식은 텍스트 패턴을 검색하고 일치하는 문자열을 찾기 위한 패턴 기술이다. 정규식은 문자열 내에서 특정한 규칙이나 패턴을 검색하고 추출하는 데 사용된다. 정규식은 일련의 문자들로 구성된 문자열을 나타내는데, 이러한 문자열은 특정 패턴을 나타낸...

IPC 통신 - MSA 전환으로 인해 발생하는 문제, 그리고 개선하기 위한 방안

모듈 분해로 인해 발생 가능한 문제들 (개발자 관점) 1. 요청에 대한 처리량(throughput)이 급격히 하락 각 서비스의 정확히 필요한 컴퓨팅 리소스 파악 어려워진다. 즉 필요한 컴퓨팅 자원의 최적화가 어려워 성능 하락의 가능성이 생긴다. 2. http, gRPC 프로토콜 상의 이슈로 디버깅이 어렵다. Connect...

도메인 주도 설계 (Domain Driven Design)란 무엇인가?

Intro MSA 컨셉을 생각하면 비즈니스 도메인 중심으로 서비스를 모델링하고 구현하는 것이 중요하다. 이 때 각각의 복잡한 도메인을 모델링하고 표현력있게 설계하는 것을 도메인 주도 설계(DDD) 라고 한다. Layer 구조 레이어간의 참조 관계에서는 단방향 의존을 유지하고 계층간 호출에서는 인터페이스를 통한 호출이 되도록 한다. L...

트랜잭션 전파(Transaction Propagation)란 무엇일까? - (4)

옵션 - REQUIRES_NEW 스프링에는 외부 트랜잭션과 내부 트랜잭션을 완전히 분리해서 사용하기 위한 옵션이 존재한다. 외부 트랜잭션과 내부 트랜잭션을 완전히 분리해서 각각 별도의 물리 트랜잭션을 사용하는 방법으로 (commit / rollback) 이 각각 별도로 이루어지게 된다. 이 옵션은 내부 트랜잭션에 문제가 발생해서 롤백해도, 외부 트랜...

트랜잭션 전파(Transaction Propagation)란 무엇일까? - (2)

Transaction Propagation 기본 트랜잭션을 각각 사용하는 것이 아니라, 트랜잭션이 이미 진행중인데, 여기에 추가로 트랜잭션을 수행하면 어떻게 될까? 기존 트랜잭션과 별도의 트랜잭션을 진행해야 할지, 아니면 기존 트랜잭션을 그대로 이어 받아서 트랜잭션을 수행해야 할지를 결정하는 것을 트랜잭션 전파(propagation) 이라고 한다...

@Transaction - AOP 를 이용해서 트랜잭션 처리하기

INTRO 트랜잭션을 처리하기 위해 트랜잭션 추상화, 트랜잭션 동기화, 트랜잭션 템플릿 등을 도입했다. 덕분에 트랜잭션을 처리하는데 있어서 반복되는 코드를 해결할 수 있었지만, 아직 Application 구조상의 서비스 계층 순수함은 충족시키지 못했다. 이를 해결하기 위해 스프링 AOP를 통한 프록시를 활용해 보겠다. 프록시를 통한 문제...

트랜잭션 추상화와 동기화를 통한 간편한 트랜잭션 적용

Application 구조 여러가지 애플리케이션 구조가 있지만, 가장 단순하면서 많이 사용하는 방법은 역할에 따라 아래 그림과 같이 3가지 계층으로 나누는 구조이다. [그림. 1] Application 의 구조 여기서 가장 중요한 곳은 어디일까? 바로 핵심 비즈니스 로직이 들어있는 서비스 계층이다. 시간이 흘러서 UI(웹) 와 관련된...

트랜잭션의 개념 이해

INTRO 데이터를 저장할 때, 그냥 파일에 저장하지 않고 데이터베이스에 저장하는 이유는 무엇일까? 가장 대표적인 이유로는 트랜잭션이라는 개념을 데이터베이스가 지원하기 때문이다. 트랜잭션은 말그대로 거래 라는 뜻인데 풀어서 말하자면 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 그렇다면 거래에 있어서 안전한 처리가 무슨 뜻일까? 하나의...