본문 바로가기
320x100

Study31

[TypeORM] 트랜잭션(Transaction) 사용하기 트랜잭션(Transaction)이란? 트랜잭션은 하나의 논리적 작업을 완료하기 위해 데이터베이스를 변화시키는 일련의 행동들을 하나의 단위로 바라보는 것이다. 예를 들어 '게시판에서 유저가 탈퇴한다' 라는 하나의 논리적 작업을 완료하기 위해, 먼저 유저를 조회하는 작업과 해당 유저가 작성한 글, 댓글을 모두 삭제하는 작업, 그리고 그 유저데이터를 삭제하는 작업 이 세 일련의 행동을 하나의 유저탈퇴 트랜잭션으로 구성할 수 있는 것이다. 트랜잭션의 중요한 특징 중 하나는 이러한 작업들이 All or Nothing 즉 전부 완료되거나, 하나도 완료되지 않아야 한다는 점이다. 유저가 탈퇴하는 작업중 어느 하나에서 에러가 발생하여 유저탈퇴가 취소된다면, 작성한 글들이 전부 삭제되는 일은 일어나지 않아야 한다는 것이.. 2021. 12. 21.
[TypeORM] N+1 문제와 Eager and Lazy Relations N+1 문제 ORM을 사용하면서 항상 주의해야 할 문제점 중 하나가 N + 1 문제이다. N + 1 문제란, 어떤 테이블의 참조된 데이터를 가져오기 위해 해당 (테이블 조회(1) + 참조된 데이터 조회(N)) 회의 쿼리를 날리는 문제를 이야기한다. JPA에서 많이 언급되는데 JPA 에서만 국한된 이야기는 아니고 ORM을 잘못 사용한다면 어디서든 발생할 수 있는 문제이다. TypeORM을 예로 들어 설명해 본다. 아주 간단한 구조를 가지고 있는 두 테이블이 설정된 상황이다. author에는 5개의 row 가 들어가 있다. 만약 이러한 상황에서, 예를 들어 저자명과 해당 저자가 작성한 책들을 각각 리턴해야하는 getBooksAndAuthorName() 이라는 함수를 작성한다고 하면, 다음과 같이 작성하고 싶.. 2021. 12. 19.
[JS] 클로저(Closure)와 렉시컬 스코핑 Javascript를 어느정도 사용해 보았다면 클로저 라는 단어를 한번쯤은 들어보았을 것이다. 그러나 실제로 클로저가 정확이 어떤 것이고, 어떤 상황에 쓰이는지 애매한 점이 있어서 정리하려고 한다. 먼저 MDN에서는 클로저를 다음과 같이 설명하고 있다. 클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하려면 자바스크립트가 어떻게 변수의 유효범위를 지정하는지(Lexical scoping)를 먼저 이해해야 한다. 함수와 함수가 선언된 어휘적 환경의 조합 이라고 설명하고 있다. 이를 이해하기 위해 렉시컬 스코핑을 먼저 훑어본다. 어휘적 범위 지정(Lexical Scoping) 자바스크립트에서 상단과 같은 코드가 있다고 할때, 콘솔에는 2가 찍힌다는것을 쉽게 예측할 수 있다. 기본적으로 함수.. 2021. 12. 17.
[Network] TCP/IP와 Handshaking TCP/IP란? TCP(Transmission Control Protocol)는 네트워크 상 두 호스트의 연결 지향 통신을 위한 프토토콜이다. OSI 7 계층 중 4계층에 속한다. 여기서 연결 지향이란, 말 그대로 서로의 통신 연결이 유지되는 것을 지향하는 프로토콜을 이야기한다. (이에 반대되는 비 연결 지향 프로토콜으로 UDP가 존재한다) TCP는 연결 지향 프로토콜이기때문에 두 호스트 간의 데이터를 신뢰성 있게 전달할 수 있다. 네트워크망 속에서 호스트 간의 통신을 위한 데이터는 엄청나게 많은 노드를 거쳐가게 된다. 이러한 과정 속에서 먼저 전송한 데이터가 나중에 전달되거나, 데이터가 중간에 유실되는 등 다양한 문제가 발생할 수 있다. IP는 패킷이 제대로 전달되었는지를 확인하지 않기 때문에 IP 위.. 2021. 12. 14.