전체 글57 BigDecimal Type 사용하는 이유 TypeScript에서는 BigDecimal 타입은 따로 존재하지 않습니다. BigDecimal 타입을 사용하는 이유에 대해서 포스트를 작성하게 된 계기는 Java 언어에서 화폐 단위, 비율 계산 등으로 인해 BigDecimal 타입을 사용하는 것을 보고 BigDecimal 타입이 무엇인지? 왜 사용하는지 궁금해서 포스트를 작성하게 됐습니다. Java 언어에서는 숫자를 정밀하게 저장하고 표현할 수 있는 타입으로 BigDecimal 타입을 사용합니다. 소수점을 표현하기 위해 float, double 타입을 사용하는데 float, double 타입으로 사용하지 않고 BigDecimal 타입을 사용하는 이유는 화폐에서 환율 그리고 비율(금액, 퍼센트 할인) 계산 등 소수점까지 정확히 표현해야 하기 때문인데, .. 2022. 10. 26. 동시성(Concurrency) 문제 해결하기 동시성 문제에 대해 얘기하기 전에 환경은 다음과 같습니다. 프로젝트의 스펙은 Nodejs, Express, TypeScript, Typeorm, MySQL로 구성되어 있습니다. 유저 관리, 게시글(CRUD) 일반적인 게시판 프로젝트로 한 단계씩 기능을 추가 업그레이드 중입니다. 초반에는 빨리 API 구현을 해서 프로젝트가 실행만 되도록 했고, 동시성 문제에 대해 확인하고 해결하는 내용을 정리해보려고 합니다. ✔ 동시성 테스트 동시성 테스트를 위해서 Apache JMeter 를 통해 진행합니다. Number of Threads (users) : 한 번에 생성할 스레드의 수. 즉 동시에 접속하는 유저의 수 Ramp-up period (seconds) : 전체 스레드가 전부 실행되는 데까지 걸리는 시간 Loo.. 2022. 10. 4. MySQL 트랜잭션 격리 수준(Isolation level) 확인하기 트랜잭션 격리 수준(Isolation level)에 대한 내용은 Isolation level에서 확인 ✔ 트랜잭션 격리 수준(Isolation level) 트랜잭션 격리 수준 실습을 하기 전에 앞서 MySQL은 "autocommit=ON(1: ON, 0: OFF)"이 기본으로 되어있습니다. autocommit이 "on"이면 데이터를 변경하는 쿼리(insert, update, delete)가 실행될 때마다 자동으로 commit이 처리된다. 실습을 위해 아래의 방법으로 "off"로 변경하고 진행하고 끝나면 다시 on로 변경하겠습니다. 아래의 두 가지 방법으로 autocommit을 확인할 수 있습니다. mysql > select @@autocommit; mysql > show variables like 'au.. 2022. 9. 20. 데이터베이스 트랜잭션(Database Transaction) ✔ 트랜잭션 트랜잭션은 데이터베이스의 데이터를 조작하는 작업의 단위로, "쪼갤 수 없는 업무 처리의 최소 단위"를 말한다. 예를 들면, A라는 사람이 B라는 사람에게 1,000원을 지급하고 B가 그 돈을 받은 경우, 이 거래 기록은 더 이상 작게 쪼갤 수가 없는 하나의 트랜잭션을 구성한다. 만약 A는 돈을 지불했으나 B는 돈을 받지 못했다면 그 거래는 성립되지 않는다. 이처럼 A가 돈을 지불하는 행위와 B가 돈을 받는 행위는 별개로 분리될 수 없으며 하나의 거래내역으로 처리되어야 하는 단일 거래이다. 이런 거래의 최소 단위를 트랜잭션이라고 한다. 트랜잭션 처리가 정상적으로 완료된 경우 커밋(commit)을 하고, 트랜잭션 중 일부라도 오류가 발생할 경우 원래 상태대로 롤백(rollback)을 한다. ✔ .. 2022. 9. 7. Node.js 구조 & 동작 원리 최근에 Node.js 공부하고 개발은 하지만, 구조나 동작 원리? 등에 대해서 자세히 알지 못하고 Expressjs 공식문서 혹은 구글에 찾아보면서 개발을 했었다. 그러다 문득 생각한 게 좋은? 잘하는 개발자가 되려면 내가 쓰는 것에 대해서 알아야 하지 않을까 생각이 들어서 이 글을 쓰게 됐다. 이전 글 Node.js 교과서 1주차에서도 Node.js에 대해서 아주 간략하게 설명을 했지만 다시 한번 얘기하자면, Node.js는 크롬 V8 자바스크립트 엔진 기반으로 자바스크립트 런타임 실행환경이다. Node.js의 특징은 싱글 스레드(Single Thread), 이벤트 기반(Event Driven), 논 블로킹 I/O(Non Blocking I/O) 모델 특징들이 있다. 특징들을 얘기하기 전에 먼저 Nod.. 2022. 8. 17. Dockerfile & docker-compose 작성 NodeJS, Express, MySQL, Sequelize로 구현한 프로젝트를 Docker를 이용하여 배포하기 위한 내용 처음 Docker를 사용 배포를 하면서 생긴 오류들과 과정을 기억하기 위해 남깁니다. 과정은 다음과 같습니다. docker-compose.yml 파일에 Redis서버와 MySQL 서버, Express app 서버 3개를 한 번에 구동시키기 위해 작성 docker-compose up -d --build로 이미지가 만들어지고 컨테이너가 실행 app에서 MySQL 연결 및 Redis 연결이 이뤄지고 실행 하지만 컨테이너가 실행은 됐지만 app 컨테이너의 로그를 봤더니 "connect ECONNREFUSED 127.0.0.1:3306"으로 에러가 발생 원인들의 이유부터 말하자면, 일단 첫 .. 2022. 7. 31. 이전 1 ··· 3 4 5 6 7 8 9 10 다음