프로그래밍(74)
-
[AWS] ECS 배포 에러 해결(GetAuthorizationToken, RegisterTaskDefinition)
개요신규로 개발 서버 및 운영 서버가 생겨 기존 소스를 활용하여(기존 소스도 머리박으며 작업했던 것) 배포 중 마주한 에러, 그 중에서도 IAM 사용자의 권한 설정과 관련된 해결 방법에 대해서 설명한다. 사용 기술타기업들의 인프라가 어떻게 구축돼있는지는 모르겠으나 우리 같은 경우 클라우드 플랫폼을 AWS를 쓰기 때문에 github actions와 aws관련 CLI를 사용하여 CD를 구축하였다. 이전에 ecs-cli를 사용했었으나 지원되지 않는 바람에 docker version과 관련된 배포 이슈가 생겨 마이그레이션 했었다(ecs-cli -> aws-cli). 에러1. GetAuthorizationToken실행 명령어run: | aws ecr get-login-password --region ${{se..
2025.03.19 -
JWT란?
개요Apple App Store Connect API를 사용하기 위해 JWT 토큰이 필요한 과정에서 알게 된 지식을 정리해보고자 한다.이전 프로젝트에서 Node jsonwebtoken 라이브러리를 활용해서 API 통신을 하고 있었으나 사용법만 숙지한 상태에서 깊은 이해가 부족했던 탓도 있다. JWT란?JWT는 JSON Web Token의 약자로 cookie나 session없이 Client와 Server의 인증을 진행하는 과정을 뜻한다. JWT의 구조1. header2. payload3. signature https://jwt.io/introduction위 공식문서에 나와있듯이 JWT의 구조는 세가지로 이루어져있다.표준으로 정해진 것으로는 header에 alg, type 프로퍼티를 가지고 payload에는..
2025.03.13 -
[Javascript] 배열을 비동기 처리하기 위한 Promise.all()의 사용법
개요순회작업에서 비동기 작업을 처리하는 과정에서 더 깊게 이해하게 된 Promise.all의 동작과 Javascript의 병렬처리 여부에 관해 정리해보고자 한다. 상황여러 요소가 있고 각 요소들에 대해 비동기 처리를 하려면 어떻게 해야할까?MDN을 참고해보면 forEach는 기본적으로 콜백함수를 기다리지 않는다고 명세돼있듯이 forEach내부에서 await를 걸어도 forEach문은 끝나게 된다. 콜백함수로 전달받은 인수인 함수를 실행만 하는 것이다. 다음의 간단한 예제를 살펴보자 예제1. forEach의 콜백함수를 비동기(async)로 선언한 경우async function promise1() { return new Promise(resolve => { setTimeout(() => { ..
2025.01.23 -
[Android] SharedPreference commit(), apply()
개요앱에서 중요한 요청을 실패할 경우 EncryptedSharedPreference를 사용해 정보를 저장하고 있다가 재요청을 날려야 하는 부분이 있었다.내가 원하는 부분인 onResumse 단계에서는 asynchronously한 동작과 함께 매핑된 데이터와 관련된 요청을 잘 수행하였다.그러나 문제는 sharedPreference객체의 edit 메서드 직후에 앱 자체를 crash를 발생시킬 경우였다.분명 Editor 클래스의 .edit()은 수행됐으나 SharedPreference에 저장되지 않는 것에 의문이 들어 찾아보니 commit과 apply의 차이에서 발생하는 문제였다. 해결요약하자면 commit은 디스크에 동기적으로 File write를 수행하나 main thread에서 사용할 경우 UI 렌더링..
2025.01.22 -
[VSCode] Typescript 단일 파일 디버깅 하는 법
개요npm 명령어가 아닌 간단하게 단일 파일에 대해서만 디버깅하고 싶은 상황이 생겨 타입스크립트 단일 파일에 대해 디버깅하는 법을 알아본다. 1. VSCode 파일 생성launch.json 파일을 루트 경로의 .vscode 하위에 생성하고 아래와 같이 추가한다.{ "name": "Launch Some TS File", "type": "node", "request": "launch", "runtimeArgs": [ "-r", "ts-node/register" ], "program": "${your_file_path}" }program에 추가하는 경로는 루트 경로부터 명시한다.ex) src/user/user.service.ts 추가 후 name에 해당하는 디버깅을 실행하면 ..
2024.12.27 -
[Typescript] CryptoJS 사용기
개요API 사용을 위해 요청 헤더 조건으로 crypto js를 통한 암호화가 필요했다.기존의 javascript 코드로 작성된 레퍼런스는 많았으나 '@types/crypto-js'를 사용하게 되면 CommonJS 모듈 방식을 사용하지 않기 때문에 라이브러리 분석을 통해 기존 코드를 타입스크립트에 호환되게끔 치환한다.(GPT를 사용하면 편하게 변환해줄 수 있긴 하겠다만 사용을 지양하는 편이라..크흠) 과정기본적으로 알아야 할 지식은 Crypto JS가 어떤 과정을 통해 암호화 하는가이다.1. SHA256, 512, HMAC 등 여러가지 암호화 알고리즘을 통해 해쉬값을 생성함2. 생성해낸 해쉬값을 32비트의 고정 길이 단어 배열을 생성해낸다.3. 생성된 단어배열을 인코딩(UTF-8, UTF-16, HEX)을..
2024.12.01