요즘 회사에서 Spring Boot 2.0, JPA, Hibernate 기반으로 API 서버를 새로 개발하고 있다. 다들 알다시피, Java 8부터는 시간 관련 클래스인 LocalDateTime 클래스가 새로이 추가되었다. 기존 Date 클래스와 여러 날짜 관련 유틸성 클래스들의 문제점들을 보완한 새로운 클래스이다. Spring Boot 버전대별로 LocalDateTime 클래스의 값을 Json 형태의 String 값으로 변환하는 방법을 설명하도록 하겠다. # Spring Boot (version: 1.5.x) { "localDateTime": { "month": "JUNE", "year": 2019, "dayOfMonth": 19, "dayOfWeek": "WEDNESDAY", "dayOfYear": ..
대부분의 개발자들은 자기가 만든 프로그램을 잘 믿지 않는다. 서버 개발자인 나는 처음으로 외주 작업을 진행했을 때, 내 프로그램이 장애 없이 잘 돌아가는지 계속해서 확인해보기도 하고, 원격으로 서버에 접속하여 로그를 살펴보기도 하고, 서비스 페이지 또는 애플리케이션에 들어가 보면서 솟구치는 불안함과 의심을 확인해봤었다 ( 주로 쇼핑몰 또는 기업을 대상으로 외주를 해서, 내 잘못으로 장애가 일어나면 금전적으로 피해보상을 해줘야 하기 때문에 매우 불안했다...ㅜㅜ ). 이런 나의 불안함은 회사에 들어와서도 고쳐지지 않았다. 아침에 출근해서 컴퓨터를 켜고, 가장 먼저 하는 일은 운영 서버에 접속해서 서비스 프로그램들의 로그와 상태를 확인하는 것이었다. 이렇게 직접 확인하는 방법이 별로 효율적이지 않다고 생각을..
어제 회사에서 앱을 스토어에 배포하고, 버전업을 테스트하는 과정에서 서버가 버전을 제대로 비교하지 못하는 이슈가 있었다. app 버전 정보를 저장하는 DB TABLE은 다음과 같다. [ app ] app_id package_name version_name created_at 1 'com.test.mobile' '1.0.0' 2019-03-06 1:00:10.000000 2 'com.test.mobile' '1.0.1' 2019-03-07 1:00:10.000000 3 'com.test.mobile' '1.0.5' 2019-03-08 1:00:10.000000 SELECT * FROM app WHERE package_name = {target_package_name} ORDER BY version_name..
최근 NestJS 기반으로 서버 개발을 하고 있다. S3에 사용자 프로필을 업로드해야 하는 요구사항이 있어 다음과 같이 코드를 작성하여 사용하고 있다. NestJS의 Multer 라이브러리와 Multer-S3를 활용한다. 검색을 해보면 대부분 Controller 단에서 Multer-S3 라이브러리를 불러와 업로드를 하는데, 서비스단에서 비즈니스 로직을 수행하는게 맞다고 생각하여 업로드 서비스로 구분하여 구현하였다. [config.module.ts] import { Global, Module } from '@nestjs/common'; import { ConfigService } from '../service/config.service'; // Make Configuration Module To Globa..
회사에서 서버 개발을 하다가, 모바일 API 전문 암호화 요구사항이 있어서 AES256 암호화 및 복호화 코드를 만들고 사용하고 있다. 코드는 다음과 같다 (Typescript 사용 중). import * as Crypto from 'crypto'; /** * AES Algorithm Based Data Encrypt Function * @param secretKey - Encrypt Key * @param plainText - The Data Of To Be Encrypt */ export const encryptWithAES256 = (secretKey: string, plainText: string): string => { const secretKeyToByteArray: Buffer = Buffe..
Spring Boot의 기본 로그 객체는 Logback으로 SLF4j의 구현체이다. Spring Boot 프로젝트를 실행하면 아래와 같이 LogBack의 기본 로그 포맷이 콘솔에 찍히게 된다. 업무에 사용되는 모니터링 시스템이나, 로깅 시스템에 따라 로그 포맷을 바꿔야 하는 경우가 있는데 이러한 경우 다음과 같은 방법으로 로그 포맷을 변경할 수 있다. 1. application파일에서 로깅 포맷을 변경 (저는 yml 형태로 application 파일을 설정합니다.) [ resources/application.yml ] logging: pattern: console: "%cyan([GatewayServer]) - %magenta([%d{yyyy:mm:dd HH:MM:ss}]) - %highlight([%-..
지난 포스트 [NestJS 기반 게시판 REST API 만들기] 2. 회원가입 및 로그인 기능을 위한 DB 연동 지난번 포스트에서는 데이터베이스를 연동하고, 유저 테이블을 만들고, 엔티티 클래스를 만들어 연동까지 했습니다. 이번 시간에는 회원가입 API를 만들어 유저 테이블에 직접 데이터를 넣어보고, 로그인 API를 통해 로그인 기능까지 구현해보겠습니다. 또한 입력 파라미터를 검증하는 과정과 에러 처리과정을 보여드리겠습니다. 1. UserService 구현하기 이전 포스트에서 만들어두기만 했던 UserService를 회원가입과 로그인 처리를 위해 구현해보도록 하겠습니다. 가장 먼저 사용자 패스워드를 암호화 하기 위하여 bcryptjs 라이브러리를 추가합니다. 사용자 비밀번호가 평문으로 저장되어있다면 법적..