본문 바로가기

Backend

(76)
JVM 구조와 GC 종류 간단 정리 JVM Java byte code를 실행할 수 있는 주체 byte code를 OS에서 동작할 수 있도록 기계어로 변환하여 실행 JVM 언어 byte code는 다른 언어로도 만들 수 있음 - Java, Kotlin, Groovy, Scala, Clojure 특징 java byte code를 타켓 플랫폼에 상관없이 JVM 위에서 동작시켜 플랫폼 독립성 보장 스택 기반의 VM 가비지 컬렉션 (GC) 구조 Class Loader Runtime Data Area에 Java Class를 로드 로드(Loading) → 링크(Linking) → 초기화(Initialization) Runtime Data Area OS로부터 할당받는 메모리 영역 [JVM 메모리 구조] - Method Area: 클래스의 메타 정보, 모..
Spring Webflux ExceptionHandler Functional Endpoints Webflux에서 Annotated Controllers 패턴에서는 주로 MVC와 비슷하게 @ControllerAdvice 어노테이션과 @ExceptionHandler 어노테이션을 이용하는데요. Functional Endpoints 패턴에서는 주로 ErrorWebExceptionHandler을 활용합니다. 해당 인터페이스를 구현한 AbstractErrorWebExceptionHandler를 사용해볼거에요. AbstractErrorWebExceptionHandler 해당 생성자가 Deprecated 되었습니다. (Deprecated since 2.4.0 for removal in 2.6.0 in favor) @Deprecated public AbstractErrorWebExceptionHandler(Err..
Spring Boot ReactiveRedisTemplate<String, Integer> ReactiveRedisTemplate에서 value의 타입을 정하는 설정 코드에요. Java @Configuration public class RedisConfiguration { @Bean public ReactiveRedisTemplate numberRedisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { StringRedisSerializer keySerializer = new StringRedisSerializer(); GenericToStringSerializer valueSerializer = new GenericToStringSerializer(Integer.class); RedisSerializationContext.Redis..
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 ..
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..
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..