목록전체 글 (102)
영호
들어가며 이번 글에서는 @Transaction 데코레이터를 이용하여 TypeORM에서 트랜잭션을 적용하는 방법에 대해 알아보겠습니다. TypeORM에서 트랜잭션을 적용하는 방법으로는 3가지 정도가 있습니다. 1. QueryRunner 2. getConnection 3. @Transaction데코레이터 저는 그중 간단하게 사용 가는 한 3번째 방법인 @Transaction데코레이터를 이용하겠습니다. 트랜잭션에 대한 개념을 모르시는 분들은 이 글을 참고해주시면 감사하겠습니다. @Transaction 사용방법 우선 @TransactionManager가 필요하기 때문에 parameter에 해당 내용을 추가해줍니다. 이후 저희가 원하는 DB 관련 로직을 작성해주면 됩니다. 저는 퇴근 일지를 의미하는 WorkDia..
들어가며 이번 글에서는 공식문서에서 소개하는 TypeORM의 2가지 패턴 중 Active-record패턴에 대해 코드로 알아보겠습니다. Active-recode패턴 이란? 각 entity파일에서 정의한 쿼리 메소드들을 이용해 데이터베이스에 접근하는 패턴입니다. 그리고 entity파일들은 find, save등의 기본 기능을 제공해주는 BaseEntity를 상속받아야 합니다. 크기가 크지 않고, 복잡하지 않은 프로젝트에 적용하기 좋은 패턴으로, 추후 프로젝트의 규모가 커지고, 복잡해질 경우 data-mapper패턴으로의 리팩토링을 고려해야 합니다. BaseEntity는 repository의 표준 기능들을 다 가지고 있기 때문에 repository, EntityManager를 사용하지 않아도 됩니다. repo..
사전준비 Linux계열의 AWS EC2를 생성해줍니다. STEP 1 패키지 업데이트를 해줍니다. # y옵션은 yes/no를 묻는 옵션을 모두 yes로 해주는 기능입니다. sudo yum update -y STEP 2 Docker를 설치해줍니다. sudo yum install docker -y STEP 3 아래 명령어로 Docker를 실행해줍니다. sudo service docker start STEP 4 EC2에게 Docker를 실행할 수 있는 권한을 부여해줍니다. sudo usermod -a -G docker ec2-user STEP 5 EC2에 재접속 후 docker 명령어를 실행합니다. 정상적으로 동작하는 것을 볼 수 있습니다. 마무리 지금까지 AWS EC2 Linux에서 Docker를 사용하기 위..
들어가며 이번 글에서는 node.js + express에서 Typescript를 사용하기 위한 세팅의 전반적인 과정에 대해서 다뤄보겠습니다. package.json 생성 작업하려는 directory 생성 후 아래의 명령어를 실행해 우리 서비스의 의존성을 관리해주는 package.json파일을 생성한다. $ yarn init package.json에서 우리가 사용하는 package들을 관리해주기 때문에, 나중에 yarn install 명령어로 필요한 package들을 설치할 수 있습니다. yarn init을 치면 뭘 많이 물어보는데 entry point만 주로 사용하는 index.ts나 app.ts로 설정해주고 나머지는 그냥 enter로 넘겨도 무방합니다. 필요한 package 설치 이제 기본적으로 필요한..
Library란? Library란 쉽게 도구라고 생각할 수 있다. 내가 원할 때 호출해서 사용하면 되기 때문입니다. 예를 들어, bcrypt라는 라이브러리를 사용하고 싶으면 내가 원하는 로직에서 호출해서 사용을 할 수 있습니다. Framework란? Framework는 뼈대라고 생각하면 됩니다. Framework는 개발자에게 서비스를 완성하기 위한 뼈대를 제공해주고, 개발자는 제공된 뼈대 위에서 코드를 작성해 서비스를 완성할 수 있습니다. 예를 들어, 장고 프레임워크에서는 url을 설정하기 위해서는 반드시 파일명을 url.py로 한 후 코드를 작성해야 정상적으로 동작한다. 장고 프레임워크가 내 코드를 동작시키는 것입니다. 정리 library와 framework의 차이점을 간단하게 표현하자면 "흐름의 제어..
들어가며 파이썬에는 다양한 자료구조가 있다. list, set, dictionary 등등이 존재한다. 이번에는 dictionary와 비슷한 defaultdict에 대해서 알아볼 예정이다. defaultdict란? 우선 형태는 dictionary와 동일하게 [key : value] 형식으로 구성된다. 그러나 이름에서 유추할 수 있듯, 모든 key에 대해 기본(default) 값을 설정해준다. 이렇게 글로 보면 이해가 잘 되지 않으니 코드를 보면서 더 알아보겠습니다. defaultdict사용법 1. import 하기 defaultdict는collections모듈에 속해있습니다. from collections import defaultdict 2. defaultdict 선언하기 defaultdict를 만들 ..
문제 링크 https://www.acmicpc.net/problem/1449 나의 풀이 기본적으로 물이 새는 위치를 정렬을 한다. start, end 포인터를 사용해 물이 새는 지점을 측정하기 시작한 지점[start]과 현재 항승이 서있는 [end]지점을 비교하며 테이프를 붙일지 안붙이고 한 칸 더 갈지 고민한다. 처음, start 는 0, end는 start 다음인 1부터 시작한다. end는 물이 샌 지점들을 모아놓은 배열의 index이기 때문에 n = 4인 경우, end가 3이 되면 배열의 마지막에 온 것이기 때문에 n-1보다 작거나 같을 때 까지 반복한다. end가 n-1보다 작거나 같을 때 까지 while문을 반복한다. 3가지 경우를 생각할 수 있다. 현재 항승이 서 있는 지점과 측정을 시작한 지..
들어가며 테스트 코드 작성 시 정상적인 기능 수행 결과를 테스트하는 것만큼 예외 상황을 테스트하는 것도 중요하기 때문에, JUnit5를 이용해 예외 상황에 대한 테스트 코드 작성을 알아볼 예정입니다. 테스트할 method 코드 public class Calculator { int sum(int a, int b){ if (a == 0 || b == 0){ throw new IllegalStateException("입력에 0이 있습니다."); } return a + b; } } 위 코드는 a, b 입력이 들어오면 두 수를 더해서 반환해주는 sum함수입니다. 만약 a, b 중 0이 들어오게 되면 IllegalStateException("입력에 0이 있습니다.") 오류를 발생시킵니다. 예외 테스트 코드 작성 i..