320x100 Blog189 함수형 프로그래밍(Functional Programming) 개요 위키백과에서는 함수형 프로그래밍을 다음과 같이 정의하고 있다. 함수형 프로그래밍은 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. 명령형 프로그래밍에서는 상태를 바꾸는 것을 강조하는 것과는 달리, 함수형 프로그래밍은 함수의 응용을 강조한다. 프로그래밍이 문이 아닌 식이나 선언으로 수행되는 선언형 프로그래밍 패러다임을 따르고 있다. 객체 지향 프로그래밍은 모든 사물을 객체로 간주하고 그 객체간의 협력과 역할의 분배를 통해 인간의 사고와 비슷하게 코드를 작성할 수 있다는 점에서 매력적이었다. 그러나 객체 지향 프로그래밍의 하나의 문제는 객체가 상태를 가진다는 것에 있었다. 객체가 가지고 있는 상태가 어떻게 변하는지에 따라 무궁무진한 결과를 만들.. 2021. 12. 28. [OS] 뮤텍스와 세마포어 개요 뮤텍스(Mutex)와 세마포어(Semaphore)는 모두 '동시성 프로그래밍에서 공유 자원(임계 영역)을 상호 배제를 통해 안전하게 관리하기 위해 고안된 방법' 이다. 여기서 상호 배제(Mutual Exclusion)이란, 공유 불가능한 자원의 동시 사용을 피하기 위해 사용되는 알고리즘을 뜻한다. 조금 더 쉽게 풀어서 이야기하자면, 수많은 프로세스와 스레드 내에서 함께 사용할 수 없는 자원을 관리하기 위해 고안된 방법들인 것이다. 뮤텍스 뮤텍스는 여러개의 스레드를 사용할 때 공유 자원에 대한 접근을 관리하기 위한 동기화 방식이다. 뮤텍스는 기본적으로 공유 자원이 사용중이라면 Lock을 걸어서 다른 스레드가 사용할 수 없도록 막는다. 그리고 해당 자원에 대한 사용이 끝나면 이를 해제하고 다음 스레드가.. 2021. 12. 23. [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. 이전 1 2 3 4 5 ··· 48 다음