반응형

Programming/Web 37

BCrypt 동작원리 파헤치기(BCryptPasswordEncoder)

BCrypt 암호화를 사용하면서 내부적으로 랜덤 한 salt가 생기고, 그에 따른 결과 해시 값이 매번 바뀌는 것을 확인하며 동작 원리가 궁금해서 찾아본 내용입니다. BCrypt 암호화는 무엇인지? 동작원리는 무엇인지? Java 코드를 통해 살펴보겠습니다. BCrypt란? BCrypt는 블로피시(Blowfish) 암호에 기반을 둔 암호화 해시 함수로 현재까지 사용 중인 가장 강력한 해시 메커니즘 중 하나이며, 1999년 USENIX에서 발표되었습니다. BCrypt는 패스워드를 해싱할 때 내부적으로 랜덤 한 salt를 생성하기 때문에 같은 문자열에 대해서 매번 다른 해싱 결과를 반환하는데요. (하지만 해싱 결과로 반환되는 String의 길이는 매번 60으로 동일합니다.) 이처럼 salt가 통합된 형식으로 ..

Programming/Web 2022.09.04

GCP 인스턴스 SSH 접속하는 방법

앞전에 아래 포스팅의 과정을 통해 구글 클라우드 플랫폼 GCP 무료 서버를 생성했었는데요. 서버 생성 후 'SSH 키를 통해 해당 서버에 접속하는 방법'에 대해 정리한 내용입니다. 해당 과정대로 진행하면 생각보다 간단하게 서버에 접속할 수 있습니다. (로컬에서 ssh 키를 생성 -> gcp에 ssh 키 등록 -> 인스턴스 접속) 구글 클라우드 플랫폼 GCP 무료 서버 생성하기(22년 6월 기준) 구글 클라우드 플랫폼(Google Cloud Platform) 무료 서버 생성하는 방법에 대해서 알아보겠습니다. 구글링을 통해 GCP 무료 서버 구축 방법을 찾아보면 포스팅이 작성된 기간에 따라 서버 구축에 관련 wildeveloperetrain.tistory.com 1. SSH 키 생성하기 ssh 키를 통해 서..

Programming/Web 2022.07.29

SSO(Single Sign-On) jwt 동작 이론 살펴보기

SSO란, SSO(Single Sign-On)은 하나의 시스템(인증 서버)에서 클라이언트에 대한 인증을 수행하고, 그 인증 정보를 가지고 추가적인 인증 없이 다른 서비스들도 사용할 수 있도록 하는 기능입니다. (통합 인증, 단일 인증, 단일 계정 로그인, 싱글 사인온 등으로 다양하게 불리고 있습니다.) Single Sign-On을 사용하면 여러 서비스에 대한 로그인 처리가 간소해지기 때문에 편리하다는 장점이 있는데요. 하지만 하나의 인증 정보로 여러 서비스를 사용하기 때문에 보안적인 부분에 대해 더욱 신경을 써야 하며, 결제, 개인정보 등 중요 요청의 경우에는 이중 인증 등의 절차를 추가하는 등의 과정이 필요합니다. SSO의 다양한 방식, SSO에서는 인증 서버를 거친 사용자의 인증 정보에 대한 유효성을..

Programming/Web 2022.07.24

구글 클라우드 플랫폼 GCP 무료 서버 생성하기(22년 6월 기준)

구글 클라우드 플랫폼(Google Cloud Platform) 무료 서버 생성하는 방법에 대해서 알아보겠습니다. 구글링을 통해 GCP 무료 서버 구축 방법을 찾아보면 포스팅이 작성된 기간에 따라 서버 구축에 관련된 내용이 달라 헷갈릴 수 있는데요. 해당 포스팅은 '2022년 6월 기준' 구글 가이드 무료 사양에 맞는 서버 생성 방법을 작성한 글입니다. 아래 링크는 위 이미지의 출처인 구글 가이드를 첨부해두었으니 참고 부탁드리겠습니다. https://cloud.google.com/free/docs/gcp-free-tier/?hl=ko#compute (구글 가이드 링크) 위 무료 사항에서 주목해야 할 부분은 리전, 인스턴스 머신, 디스크 및 용량인데요. 리전은 오리건(us-west1), 아이오와(us-cen..

Programming/Web 2022.06.20

구글 클라우드 플랫폼(GCP) 프로젝트 삭제하는 방법

구글 클라우드 플랫폼(Google Cloud Platform)에서 사용중인 프로젝트를 삭제하는 방법입니다. 기존에는 프로젝트를 생성하여 API만 사용하다가 GCP 무료 서버를 만들기 위해서 들어왔는데, 기존에 만들어놓은 사용하지 않는 프로젝트들을 제거하려는 과정에서 생각보다 삭제 방법이 바로 보이지 않아서 혹시 찾으실 분들을 위해 방법 남겨놓습니다. 먼저 GCP 메인 화면에서 삭제하고자하는 프로젝트를 선택하여 들어갑니다. 프로젝트 삭제는 프로젝트 설정 부분에서 이뤄지는데요. 우측 상단의 버튼을 통해 프로젝트 설정으로 들어가거나, 좌측 IAM 및 관리자의 카테고리 중 설정 버튼을 통해 프로젝트 설정으로 이동합니다. 설정 우측 부분에 종료 버튼을 통해 프로젝트를 종료할 수 있는데요. 프로젝트는 즉시 종료되는..

Programming/Web 2022.06.19

ngrok 외부에서 로컬 개발환경 localhost 접근하기(mac)

ngrok을 사용하여 외부에서 로컬 개발환경 localhost에 접근하는 방법을 살펴보겠습니다. (기본적인 동작은 설치 및 가입 이후 간단한 명령어만 사용하면 되기 때문에 크게 어렵지 않습니다.) 먼저 ngrok에 대해서 설명하자면, ngrok은 로컬 개발환경인 localhost에서 구동 중인 웹 서비스를 외부 인터넷 환경에서 접근할 수 있도록 만들어주는 툴입니다. Ngrok exposes local servers behind NATs and firewalls to the public internet over secure tunnels. (ngrok 공식 홈페이지에서는 다음과 같이 설명되어 있습니다.) 웹 서비스를 개발하다 보면 localhost가 아닌 외부 환경에서 개발 중인 서비스에 접근해야 하는 경..

Programming/Web 2022.04.01

동기와 비동기, 블로킹과 논블로킹 개념 정리

'동기와 비동기, 블로킹과 논블로킹 - 비슷한 듯하면서도 비슷하지 않은 개념들' 프로그래밍을 하며 자주 접하게 되는 단어들이지만 개념적으로 명확하게 차이를 짚고 넘어간 적이 없었는데 이번에 WebClient를 사용하기 위해 공부하던 중 Spring WebFlux, Reactive Programming의 개념을 접하며 논블로킹(Non-Blocking)에 대해서 그리고 블로킹과 동기, 비동기에 대해서도 정리할 필요성을 느껴 정리하게 되었습니다. 동기(Synchronous)와 비동기(Asynchronous) - 동기 방식 동기(Synchronous) 방식은 데이터의 요청과 결과가 한 자리에서 동시에 일어나며, 현재 작업의 응답이 끝남과 동시에 다음 작업이 요청됩니다. 세탁기 돌리기 로봇 청소기로 바닥 청소하기..

Programming/Web 2021.12.28

디자인 패턴 - 퍼사드 패턴 (Facade Pattern) 개념과 예시

'디자인 패턴 중 하나인 퍼사드 패턴(Facade Pattern) 개념과 예시' *** 'Facade'는 프랑스어 'Façade'에서 유래된 단어로 건물의 출입구로 이용되는 정면 외벽 부분을 가리키는 말로 '건물의 정면'을 의미합니다. Facade Pattern의 목적은 복잡한 서브 시스템을 인터페이스로 감싸서 사용하기 쉽게 만드는 것인데요. 객체 지향 프로그래밍 분야에서 많이 사용되며, 제3의 API(Third Party API) 같은 외부 라이브러리를 추상화하는데도 사용됩니다. Gof(Gang of Four)에 따르면 Facade 패턴은 "하위 시스템을 보다 쉽게 사용할 수 있게 해주는 고급 인터페이스"로 정의되어 있습니다. 퍼사드 패턴은 디자인 패턴(Design Patterns) 중에서도 구조 패턴..

Programming/Web 2021.12.16

Apache Log4j2 치명적 취약점, 해결방안은? CVE-2021-44228

Log4j2 치명적 취약점 'CVE-2021-44228' Log4j2는 아파치 소프트웨어 재단에서 자바(Java) 언어로 제작된 로깅 라이브러리로, 서버와 프로그램의 유지 관리를 목적으로 동작 상태를 기록으로 남기기 위해서 사용되는 기능입니다. 이번에 발견된 'CVE-2021-44228', Log4Shell 혹은 LogJam으로 명명된 취약점은 '마인크래프트'에서 처음 확인되었고, 자바(Java) 언어로 개발된 마인크래프트 버전에서 프로그래밍 코드로 이루어진 특정 채팅 메시지를 입력하면 대상 컴퓨터에서 원격으로 프로그램을 실행시킬 수 있는 것으로 나타났습니다. 이는 Log4j2 중에 존재하는 'JNDI(Java Naming and Directory Interface)' 인젝션 취약점을 악용한 것으로, 이..

Programming/Web 2021.12.12

프로그래밍 시간 표현 단위 Unix Time ( = Epoch Time ) 이란

프로그래밍을 하게 되면 '1635083262' 와 같은 형식의 숫자만으로 시간을 표현하는 경우가 있습니다. 이 같은 표현 방식을 Unix Time 또는 Epoch Time 이라고 하는데요. Unix Time, Epoch Time은 부르는 이름만 다를 뿐 같은 것을 의미합니다. (POSIX Time 이라고도 합니다.) 이것은 시간을 나타내는 방식으로, '1970년 1월 1일 00:00:00 협정 세계시(UTC)' 부터의 경과 시간을 초로 환산하여 정수로 나타낸 것입니다. * 유닉스 시간에서 윤초(Leap Second)는 반영하지 않습니다. 이 시간 표현 방식은 유닉스 계열의 운영체제나 여러 다른 운영 체제, 파일 형식들에서 사용되며, 어떤 일이 발생했을 때 무엇이 먼저 발생하고, 나중에 발생했는지를 판단할..

Programming/Web 2021.10.24
반응형