TIL
-
[DB] 트랜잭션 사용하기 in node.js + Error해결TIL 2024. 3. 26. 18:31
프로젝트 내에서 배너이미지 등록API를 개발하다가 트랜잭션이 필요해져서 구현하게되었다. 배너이미지 등록 API는 [기존 배너이미지 삭제]와 [새로운 배너이미지 등록] 작업이 DB에서 둘다 이루어져야 한다. 만약 [기존 배너이미지] 작업은 성공하고, [새로운 배너이미지 등록] 작업이 실패한다면, 등록된 배너이미지만 사라져 버리 는 문제가 발생한다. 2가지 작업 모두 실패하여 기존 이미지만 남아있게 하기, 2가지 작업 모두 성공하여 기존이미지 삭제후, 새로운 이미지로 대체하기 경우의 수를 이 2가지로 만들기 위해서 트랜잭션을 이용해야했다. 트랜잭션) pool.query('BEGIN'); //트랜잭션 시작지점설정 pool.query('COMMIT'); //트랜잭션 끝나는지점설정 pool.query('ROLLB..
-
[DB] Bulk Insert VS 단일 Insert 비교 실험TIL 2024. 3. 25. 22:26
프로젝트 알림기능을 구현하던중, 동시에 여러명에게 알림 데이터를 추가해야하는 상황이 발생했다. 원래 for문을 돌려서 insert문을 회원수만큼 돌리려고했으나 나중에 이것이 비효율적이라는 사실을 알게 되었다. (SELECT문으로 가져온 데이터의 개수만큼 반복문으로 다시 쿼리문을 실행하는 것은 이 작업이 얼마나 오래 걸릴지 가늠 조차할수 없을 정도로 큰 작업이 될 수 있기 때문에 반드시 제약해주는 장치가 있어야한다. Like Bulk Insert) 그러다 Bulk Insert문을 이용해서 한번에 데이터들을 삽입할 수 있다는 것을 알게되어 단일 Insert와 비교해보기로 했다. Bulk Insert) 한번의 Insert문 안에 VALUES를 여러개 넣어주면된다 INSERT INTO films (code, t..
-
[Error] The bucket does not allow ACLs - 이미지업로드하기TIL 2024. 3. 19. 18:06
이미지 업로드 기능을 구현하기위해서 IAM 계정 생성 - 액세스키 발급까지 하고나면 AWS에 접속은 되나 S3접속시 다음과 같은 에러가 발생했다. The bucket does not allow ACLs 해당버킷이 ALC을 허용하지않습니다 ACL이란 버킷이나 버킷 객체에 액세스를 허용하거나 제한하는 권한설정이다 다만 Bucket Policy와의 차이점은 bucket policy는 버킷에만 권한 설정이 가능하고, ACL은 버킷뿐만아니라, 버킷객체에 권한설정이 가능하다는 것이다. 그래서 ACL은 각 객체마다 다른 권한 설정이 필요할때 사용한다. 대신 버킷정책은 JSON을 통해 더 세밀하게 권한설정을 조정할 수 있지만, ACL은 그렇지 못하다. 해당 버킷에 ACL을 활성화 해주는법) S3 - 해당 버킷 - 권한..
-
[Error] AWS-SDK, multer - this.client.send is not a functionTIL 2024. 3. 19. 17:31
이미지를 업로드하는 기능을 추가하기위해서, multer와 sdk 모듈을 사용하다보면 에러가 발생한다. TypeError: this.client.send is not a function multer-s3는 3.x.x 버전이고, aws-sdk는 2.x.x버전일때 다음과같은에러가 발생한다 multer-s3를 다운그레이드하여 2.x.x로 맞춰주면 해결된다 multer-s3 삭제 npm uninstall multer-s3 multer-s3 재설치 npm install multer-s3@2.9.0
-
[AWS] AWS Access key와 Secret Access Key - 이미지업로드 기능TIL 2024. 3. 19. 15:48
프로젝트에서 게임 대표 이미지를 저장하고 불러오는 기능이 있다. 이미지를 저장할때 AWS-S3에 저장해야하는데 프로그램 내( AWS CLI, AWS-SDK )에서 AWS의 자원에 접근하기 위해서 는 Access key와 Secret Access Key가 필요하다. aws 웹 콘솔로 로그인을 할때 계정 ID,PW를 입력하는 것과같이, 프로그램내에서 aws서비스에 접속하기위해서는 같은 역 할을 해줄 것들이 필요한데, 그것이 액세스키와 시크릿 액세스키이다. Access key(액세스키) : 유저 번호에 해당하는 키Secret Access Key : 비밀번호에 해당하는 키 IAM 계정을 이용한다면 루트계정을 이용하여 만들 수 있다 IAM - 사용자 - 계정명(k1ju) - 보안자격증명 - 액세스키 생성..
-
[GitHub]프로젝트 협업시작하기( git flow )TIL 2024. 3. 7. 15:25
깃허브로 협업 프로젝트를 시작하기 위해서는 팀장역할을 할 사람이 필요하다. 각자 역할분담 이외에도, 1명은 프로젝트에서 초기설정을 해줘야하는 부분이 있기 때문이다. 팀장은 프로젝트폴더를 만들고, 기본세팅해주고, 깃허브 레포지토리에 올려서 팀원들이 다운받을 수 있게해줘야한다. 깃허브로 협업하는 도중에, 팀원들끼리 브랜치를 다루는 방식이 다를 경우 서로 꼬일 수 있기때문에, 이러한 일을 방지하교 자 브랜치 전략으로 git flow방식을 이용하기로 했다. Git Flow 방식 협업과 버전관리의 효율성을 높이기위한 브랜치 관리 방식. master 브랜치최종적으로 배포되어 사용자들에게 전달되는 코드를 담는 브랜치 develop 브랜치개발중인 최신코드를 통합한 브랜치 feature 브랜치새로운 기능을..
-
[aws] 프라이빗IP, NAT , CIDRTIL 2024. 2. 29. 16:34
사설IP (프라이빗 IP) ㄴ사설망 내부에 구성된 외부인터넷망으로 통신이 불가능한 IP IPv4에서 IP주소가 부족한 문제를 해결하기위해 만든 개념 하나의 망에는 사설IP를 부여받은 기기들과 NAT기능을 갖춘 Gateway로 구성 외부로 통신할때는 통신가능한 공인 IP로 사용 IPv6에서는 IP주소가 거의 무한히 많기때문에 굳이 이런개념이 없다(프라이빗 IP는 IPv4에만 적용되는 개념) NAT -> 사설IP가 공용IP로 통신할 수 있도록 주소를 변환해주는 방법 -> 사설 네트워크 내의 여러개의 기기들을 하나의 공인 IP주소를 사용해서 인터넷에 접속하기위해 사용한다 3가지 종류 존재Dynamic NAT : 1개의 사설IP를 공인 IP 그룹(NAT pool)에서 사용가능한 IP를 가져와서 연결 Stati..
-
[DB] DB 모델링 - 소셜 로그인기능TIL 2024. 2. 25. 17:14
소셜 로그인 기능이 구현된 서비스에서는 db 설계를 어떻게 해야할지 고민해봤다 고민해봐야 할 점들은 다음과 같았다. 1. 소셜로그인 계정과 로컬 계정은 db에 저장할때 공통된 데이터도있고, 다른 데이터도 있다. 이를 어떻게 구분해서 관리할 것인가? ㄴ테이블 분리 vs 테이블 통합 2. 식별관계 vs 비식별 관계 3. soft delete 결과) 1. 소셜계정, 로컬계정, 사용자에 대한 테이블을 모두 분리하여 db설계를 했다. 테이블을 왜 모두 통합하지않고 분리했는가?) -> 소셜로그인 기능 도입으로, 계정의 종류에 따라 필요한 데이터 종류들이 많이 달라지게되었다. 이렇게되면, 계정마다 필요하지않은 데이터에 대한 값들은 null로 저장되어 테이블내에 null 값이 많아지게된다. 적어도 한 개의 행에서 nu..