Base64 와 Base64Url Safe
·
개발
Base64와 관련하여 개발을 진행하다가, java.lang.IllegalArgumentException: Illegal base64 character 5f 와 같은 에러가 발생했다. 해당 오류는 Base64로 인코딩 된 데이터를 디코딩 할 때 발생했었는데, 원인을 알고보니 Base64Url Safe 로 인코딩한것을 Base64로 디코딩할려다가 발생한것이었다. 두개의 차이점은 뭘까? Base64우선 개념을 알아보자면, Base64 는 이미지와 같은 바이너리 데이터를 전송할 수 없는 환경에서 데이터를 인코딩하여 보내기 위해 사용된다. 예로 HTTP 요청, 이메일 환경등이 있다. 한마디로 바이너리 데이터를 읽을 수 있는 ASCII 데이터로 변환하는 과정이다. 인코딩 과정"A" 라는 데이터를 인코딩해서 보낸다..
SMTP 란 ? (Java / Oracle 기반 구현 )
·
개발
메일 구현은 해보았으나 SMTP 를 정확히 이해하지 못한 거 같아 글을 작성하게 되었다.이메일은 어떻게 전송될까? 인터넷 이메일 시스템 구조를 볼 때 크게 3개의 요소로 구분할 수 있다. 1. User Agent 사용자 장치이며, 메일을 작성하거나 읽기 등의 기능을 수행한다.일반적으로 컴퓨터나 스마트폰 등을 생각하면 된다.  2. Mail Server메일을 송수신을 제어하고, 다수 사용자들의 메일박스를 관리한다.구글이나 네이버와 같은 메일 서버들을 칭한다. 메일 서버는 메일 전송을 위한 출력큐 (outgoing message queue) 와, 메일을 관리하는 메일박스 (mail box) 를 지닌다. 3. SMTP (Simple Mail Transfer Protocol) 메일을 전송할 때 사용되는 프로토콜..
[Oracle / Tibero ] Synonym 이슈 / Synonym이란?
·
개발
배경회사 업무중, 개발 환경과 운영 환경 사이의 테이블이 일치하지 않는 상황이 있었다.운영 환경에 있는 테이블을 참조하여, 개발 환경에도 동일한 테이블을 생성해주었는데서버에서 테이블이 없다는 오류가 지속적으로 발생했음!   원인 이는 알고보니 서버에서 DB에 접근하는 계정과, DB에서 테이블을 컨트롤 하는 계정의 정보가 달랐기 때문이었다.(계정을 구분한 이유는 보안상의 이유가 있었음.) 그리고 서버 계정에서는 Synonym 기능을 활용하여 테이블에 접근하고 있었음.  해결 권한부여 자신이 만든 테이블이 아닐 경우, 테이블 조작의 권한이 존재하지 않음.따라서 GRANT 명령어로 특정 계정에 권한을 부여해주어야 함 -- ANOTHER_USER 에게 MY_TABLE 에 대한 SELECT 권한을 부여GRANT..
OAuth 회원가입, 로그인 유지를 어떻게 해야할까?
·
개발
OAuth 부스트캠프 학습 스프린트중에 OAuth를 구현할 일이 있었다. 요새 서비스라면 왠만하면 지원하는 기능인데, 나는 처음 구현해 보았다. 우선적으로 학습을 하고 구현을 하기로 했다. 학습에는 생활코딩 강의가 큰 도움이 되었으며 이후에 내 나름대로 흐름을 정리해보았다. https://opentutorials.org/course/3405 WEB2 - OAuth 2.0 - 생활코딩 수업소개 사용자가 가입된 서비스의 API에 접근하기 위해서는 사용자로부터 권한을 위임 받아야 합니다. 이 때 사용자의 패스워드 없이도 권한을 위임 받을 수 있는 방법이 필요합니다. 이를 위 opentutorials.org 그렇게 학습후에 간단하게 GitHub 기반 OAuth 로그인을 구현했다. 그런데 예상치 못한 문제가 있었..
Nest JS 프로젝트 배포 자동화 하기 (3) - 스크립트 작성
·
개발
(1) 편 - https://whiporithm.tistory.com/103 (2) 편 - https://whiporithm.tistory.com/104 젠킨스 스크립트 작성 및 배포 프로젝트 생성 현재 push 이벤트에 ci를 수행하는 젠킨스 프로젝트를 만들었는데, cd (배포) 프로젝트도 만들어서 ci가 이루어진 후에 cd 가 이루어지도록 설정하려고 한다. ci project -> 테스트, 도커 빌드, 도커헙에 push cd project -> 도커헙에서 pull, 도커 이미지 컨테이너화 (도커헙에 올리기 위해서 계정이 필요하니 없으면 만들자.) https://www.docker.com/products/docker-hub/ The World’s Largest Container Registry | Do..
Termius 로 ec2 ssh 접속하기
·
개발
최근에 Termius 라는 프로그램을 알게 되었다. ssh 접속을 편하게 할 수 있도록 지원해주며, 강점은 모바일로도 접속할 수 있다는 점 같다. 아 그리고 테마도 여러가지여서 예쁜 gui로 실행할수도 있다! 우선 아래 링크에서 설치해보자. https://termius.com/ Termius - SSH platform for Mobile and Desktop Termius helps to organize the work of multiple DevOps and engineering teams. It reduces the admin work for managing users. Enterprise compliance. SOC2 II report. termius.com 설치후 메인화면에서 좌측상단에 "NEW ..
Nest JS 프로젝트 배포 자동화 하기 (2) - docker 설치
·
개발
(1) 편 - https://whiporithm.tistory.com/103 (3) 편 - https://whiporithm.tistory.com/107 도커 설치 다음은 ec2에 도커를 설치해보겠다. 나는 아래 공식 사이트를 참고하여 설치했다. (예전에는 이런 툴 설치는 블로그를 자주 검색했는데, 공식 문서가 짱이더라.) 젠킨스처럼 os마다 설치 방식을 안내해주는데, 우분투로 확인해보자. https://docs.docker.com/desktop/install/ubuntu/ Install Docker Desktop on Ubuntu Learn how to install, launch and upgrade Docker Desktop on Ubuntu. This quick guide will cover pr..
Nest JS 프로젝트 배포 자동화 하기 (1) - jenkins, webhook
·
개발
(2) 편 - https://whiporithm.tistory.com/104 (3) 편 - https://whiporithm.tistory.com/107 서론 본격적인 프로젝트를 앞서, 배포 자동화를 한 번 경험해보고 싶었다. 개발로도 벅찰 거 같아 배포에도 신경을 많이 쓰고 싶지 않기에, jenkins와 docker를 활용한 간단한 배포 자동화 구조를 만들어보려 한다. Nest 프로젝트를 배포한다고 했지만, 언어나 프레임워크가 중요한건 아니긴 하다. 어찌되었던, 아래는 내가 생각한 구조이다. 우선 코드를 push 하면 Webhook을 통해 이벤트를 보낸다 이후에 빌드서버에서 해당 코드를 가져와 테스팅 및 빌드를 진행하고, 도커 이미지화를 시킨다. 이미지 파일은 docker hub 에 올리고, 배포 서버..
MSA 아키텍쳐란?
·
개발
서론 일반적으로 프로젝트를 개발하면 한 프로젝트 파일을 만들어서 관리한다. 이러한 일반적인 구조를 모놀리식 구조라고 하는데, 이와 다르게 서비스별로 프로젝트를 생성해서 이를 관리하는 MSA (Microservice Archtiecture) 구조도 존재한다. 대표적으로 아마존과 넷플릭스가 MSA를 사용한다고 알려져있다. 이전에 진행한 프로젝트를 MSA구조로 개발했는데 복습겸 정리해볼려한다. 모놀리식(Monolithic) vs 마이크로서비스(Microservice) Monolithic Architecture 모놀리식 구조는 한 프로젝트 파일에 모든 구성요소를 넣어 개발하는 구조를 의미한다. 전통적인 방법이다. 장점 상대적으로 운영하기 용이하다. => 프로젝트 파일이 하나이므로, 관찰 대상이 하나이다. 내부 ..
쿠키 / 세션 / 토큰(JWT) 의 차이는?
·
개발
서론 개발하다보면 로그인을 구현할때가 많다. 로그인 구현하는거야 쉬우나, 해당 유저가 로그인이 된 유저인지, 아닌지를 판단하는게 중요하다. http는 기본적으로 stateless 프로토콜이기에 이전에 접속한 클라이언트의 정보를 기억하지 않는다. 따라서 요청때 판단을 해야한다. 간단하게 생각해보면 모든 요청때 유저 정보를 보낼 수가 있을것이다. (쿼리 스트링과 같은 형태로 ) 당연히 이 방법은 보안적으로도 안좋고, 모든 요청에 유저 정보에 대한 파라미터를 받아야 하므로 개발도 힘들어질 것이다. 이런 문제들을 해결하기 위하여 쿠키, 세션, 토큰 등의 방식이 등장했고, 이들을 활용하여 권한이 있는 유저인지 판단한다. 개발할때는 부랴부랴 찾아서 어떻게든 구현 하는 편인데, 개념이 헷갈려서 정리해볼려고 한다. 인..