아카이브 (74) 썸네일형 리스트형 express-session vs JWT Token (Refresh Token, Redis) 로그인 로직을 결정하면서 많은 고민이 있었다. 나는 항상 리프레시 토큰을 이용해 왔는데 문득 세션 방식은 어떨까 하는 생각이 들었기 때문이다. Danmi 프로젝트는 최대한 작게 바로 프로모션 될 수 있게 제작하는 프로젝트로 많은 리소스를 쓸 수 없다. 그리고 Danmi의 이용자들은 필라테스 회원으로 로그인 기능을 대부분 출석 용도로만 사용한다고 한다. Danmi의 이용자는 세션으로 인한 서버 과부하를 일으킬 정도로 많지는 않다. 그리고 세션은 1시간이 지나면 파기되도록 설정하였다. Refresh Token과 Redis를 사용하는 것 보다는 express-session에 session key를 UUID로 부여하는 것이 맞다고 생각하였다. UUID의 중복은 무한 for문을 돌려서 처리하였다. UUID가 중복.. Active Record Pattern vs Data Mapper pattern Active Record Pattern 엔티티 모델에서 BaseEntity를 상속 받아 사용한다. 엔티티 클래스 내부의 쿼리가 들어가는 메서드를 작성한다. import { BaseEntity, Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, } from 'typeorm'; import { Type } from '../dto/type.enum'; import bcrypt from 'bcrypt'; @Entity() export class Users extends BaseEntity { @PrimaryGeneratedColumn() userId: number; @Column() id: st.. autoJAVAcompiler 20240118 (v 1.0.0) 목적과 기능 src 디렉토리 안에 있는 모든 자바파일을 조회하여 변화가 감지되었을 경우 자동 컴파일을 진행한다. Github https://github.com/verdantjuly/autoJAVAcompiler 제작 로그 1. Calcualtor.java, Run.java 를 루트에서 실행 > 잘됨 2. Calculator.java를 src 폴더에 넣고 패키지로 만들어서 진행 > 안 됨 문제 : cannot find symbol 해결 : Workspaces: Remove Folder from Workspace... 참고자료 : https://velog.io/@doobyeol/VS-code-JAVA-import-%EC%97%90%EB%9F%AC https://stackoverflow.com/question.. 비동기 함수에서 return 만 하는 controller의 await 처리 실험 결과 : await 처리한 것이 1ms 빠르다. 결론 : 1ms 의 차이라면 현재는 await를 의무화 하지 않아도 괜찮으나, 대용량 데이터를 처리하는 경우 await 처리가 좋을 것 같다. 테스트 한 API method : GET 데이터 개수 : 26개 JSON : { "fcmToken" : "fcmToken29", "name" : "iPhone 11 pro max", "mode" : "ALARM", "startTime" : "2023-09-16 00:00:00", "endTime" : "2023-09-20 00:00:00", "type" : "PHONE", "activeStatus":true, "user":[{ "userId" : "verdantjuly" }] } await 처리 하지 않았을 때 aw.. Exception Filters 1. exceptionHandler.ts를 만든다. // exceptionHandler.ts import { HttpException } from "@nestjs/common"; import { HttpStatus } from "@nestjs/common"; export class InternalServerErrorException extends HttpException { constructor() { super("일시적인 오류가 발생했습니다.", HttpStatus.INTERNAL_SERVER_ERROR); } } 2. catch 된 에러가 있다면 throw를 발생시킨다. catch (error) { throw new InternalServerErrorException(); } 결과 참고자료 : htt.. feat : 알림 GET POST DELETE - 알림 GET POST DELETE - 기기 GET POST userId 추가하여 변경 //notification.service.ts import { Injectable } from "@nestjs/common"; import { CreateNotificationDto } from "./dto/create-notification.dto"; import { InjectRepository } from "@nestjs/typeorm"; import { NotificationEntity } from "./entities/notification.entity"; import { Repository } from "typeorm"; @Injectable() export class NotificationsService.. PCM 펄스 부호 변조 PCM 펄스 부호 변조 아날로그 신호를 0과 1(2진법)의 디지털 신호로 변환하는 방법 (미륵관심법에서는 PCM 데이터를 16비트로 저장하여 32,000 ~ -32,000사이의 범위를 갖는다. 2의 16승 = 65,536) 소리 등의 연속되는 값을 기록하기 위해 쓰인다. 음원을 표현하는 방식 파형을 미세한 시간 단위로 쪼개 펄스열로 바꾼 후 그것을 '부호(code)화'하여 디지털 신호로 '변조(modulation)'해 내는 기술 표본화(Sampling) - 양자화(Quantization) - 부호화(Encoding)의 과정을 거쳐서 진행된다 첫번째 단계인 표본화는 연속적인 아날로그 신호를 일정 시간 간격으로 끊어서 그 값을 취하는 것이다. 이렇게 해서 얻어진 신호를 이산 신호(Discrete-time.. FCM Firebase 클라우드 메시징 FCM Firebase 클라우드 메시징 Firesbase에서 제공하는 알림 메시지 전송이 가능한 크로스 플랫폼 메시징 솔루션 FCM 수명 주기 흐름 FCM에서 메시지를 수신하도록 기기를 등록합니다. 클라이언트 앱의 인스턴스가 메시지를 수신하도록 등록하여 앱 인스턴스를 고유하게 식별하는 등록 토큰을 받습니다. 다운스트림 메시지 전송 및 수신 메시지를 보냅니다. 앱 서버가 클라이언트 앱에 메시지를 보냅니다. 메시지는 알림 작성기 또는 신뢰할 수 있는 환경에서 작성되며 메시지 요청이 FCM 백엔드로 전송됩니다. FCM 백엔드는 메시지 요청을 수신하고 메시지 ID와 기타 메타데이터를 생성하여 플랫폼별 전송 레이어로 보냅니다. 기기가 온라인 상태이면 메시지가 플랫폼별 전송 레이어를 통해 기기로 전송됩니다. 기기에.. 이전 1 ··· 5 6 7 8 9 10 다음