최근에 Flutter로 구현한 클라이언트 앱을 테스트하던 중 예상치 못한 문제가 발견되었다. 분명 서버로부터 시간도 정상적으로 받아오는데 DateTime.now()를 통해 현재시간과 비교를 해봐도 9시간이 넘어가는 시간으로 표시가 되던 것이다. 짐작컨대 이것도 골치 아픈 UTC시간대 이슈일 것으로 생각되었고 실제 Raw 데이터를 확인했을 때 시간이 이렇게 표시가 되던 것이다. 왼쪽: DateTime.now() 오른쪽: DateTime.parse(data['postedDateTime']); 시간 숫자 자체는 DB에 저장된 시간이랑 동일하다 문제는 저 뒤에 Z자 하나 때문에 Flutter에서는 이것을 UTC 시간으로 인지를 해버리는 탓에 실제로 toLocal() 함수를 돌렸을 때 +9 시가 된 18시로 표시..
우리는 소프트웨어를 구현하면서 확장성, 유지보수성을 체계적으로 극복하기 위해 다양한 고민을 해왔다. 그리고 디자인 패턴은 그러한 불편함을 극복하기 위해서 다양한 방법으로 탄생해왔다. 물건을 생산하기 위해 가장 효율이 좋은 방법. 즉 패턴, 소프트웨어에서는 그러한 것들을 디자인 패턴이라 부르고 많은 개발자들은 확장성과 유지보수성을 위해 디자인 패턴을 따르고자 했다. 가장 단순하면서 널리 사용되며, 웹에서 아직까지도 사용 중인 MVC패턴, 그리고 MVC에서의 단점을 극복하기 위해 파생된 MVP패턴 그리고 MVC에서 또 한 번 파생되어 의존성 부분을 최소화시킨 MVVM 패턴까지, 시대를 거듭하면서 그 시대에 사용하는 Web이나 App 등 과 같은 서비스에서 요구하는 패턴이 있고, 위의 3가지 패턴은 그에 따라..
최근에 C#으로 구현된 프로젝트의 API를 개발하던 중 개발사에서 개발한 암호화 시크릿 키가 8자리로 되어 AES128 방식을 적용한 알고리즘을 건네받았다. Node.js에서 똑같은 알고리즘과 시크릿 키를 적용하여 아래처럼 구현을 해뒀다 encryptAES128: (text) => { const aesKey = '12345678'; let cipher = crypto.createCipheriv('aes-128-ecb', aesKey, null,); let encryptedData = Buffer.concat([cipher.update(text), cipher.final()]); return encryptedData.toString('base64'); } 그런데 한 가지 문제 점이 발생했는데 aes128 ..
1. 개인정보의 처리 목적 (‘http://cajava.tistory.com’이하 ‘DreamSoft’) 은(는) 다음의 목적을 위하여 개인정보를 처리하고 있으며, 다음의 목적 이외의 용도로는 이용하지 않습니다. - “디바이스 저장소”를 사용하여 “디바이스 내의 사진 가져오기”기능을 사용합니다. 2. 정보주체의 권리,의무 및 그 행사방법 이용자는 개인정보주체로서 다음과 같은 권리를 행사할 수 있습니다. ① 정보주체는 (‘http://cajava.tistory.com’이하 ‘DreamSoft’) 에 대해 언제든지 다음 각 호의 개인정보 보호 관련 권리를 행사할 수 있습니다. 1. 개인정보 열람요구 2. 오류 등이 있을 경우 정정 요구 3. 삭제요구 4. 처리정지 요구 정보를 전혀 수집 하지 않으므로, 모두..
몇 시간 동안 삽질해서 겨우 알아낸 오류 하나를 잡게 되었다. 원인은 Flutter의 외부 dependency인 flutter_sounds를 사용하려고 추가를 한 다음 IOS에서 빌드를 하려 하는데 deploy버전이 안 맞는 등 각종 오류가 폭발하다가 flutter clean 또는 IOS 폴더를 통째로 지우고 flutter create . 를 쓰는 방법을 해봤다. 물론 해결은 안 됐다. 그리고 최종적으로 직면한 오류가 Undefined symbol: ___gxx_personality_v0 인데 Xcode 내에서 빌드를 하여도 동일한 문제가 발견되었던 것을 보았다. 구글에 여기저기 찾아보니 깃허브에서 해결방법을 올려준 것을 보았고 M1 맥북에서 자주 발생하는 오류로 보였다. IOS buildSetting에..
JWT는 사실 세션, 쿠키 방식의 인증 방법에서 자주 거론되는 인증, 인가 구현 기술 중 한 가지이다. 이름은 많이 들어왔지만 정확히 자세한 원리는 알지 못했던 상태라 이번 기회에 깊게 탐구해보고 알게 된 내용들을 정리해보려 한다. 1. JWT란 JWT(Json Web Token)는 서버, 클라이언트 간 권한을 확인하고 인가 (Authorization)를 할 때 사용하여 웹상에서 Json형태로 주고받는 토큰을 얘기한다. 기존의 세션(Session)과 쿠키(Cookie) 방식으로 클라이언트의 인가(Authorization)를 구현하면서 여겨지던 불편한 점을 개선하고 시스템 자원의 사용량이 줄이게 되어, 속도가 중요시되는 클라이언트와 API 개발을 할 때 많이 사용되는 방식이다. 2. JWT의 구조 JWT는..