본문 바로가기

인증,보안

HMAC 내가 했던 프로젝트에서 개발이 거의 끝날 때쯤 무결성 체크가 필요하다는 요청이 들어왔다. 그 당시 책임 개발자로서 나와 함께 프론트엔드 개발을 하셨던 책임님께서 HMAC을 사용해야 한다고 하시고 이를 개발해 주셨다. 그때는 내용을 구체적으로 이해하지 못했는데, 돌이켜보니 내가 지속적으로 만나게 될 문제라 생각이 들었다. 그래서 이 것을 정리해보고자 한다. HMAC(Hashed Message Authentication Code)는 데이터의 신뢰성과 무결성을 확인하는 데 일반적으로 사용되는 일종의 메시지 인증 코드(MAC)이다. HMAC은 비밀 키를 사용하여 데이터의 무결성과 신뢰성을 확인하는 데 사용할 수 있는 고정 길이 메시지 인증 코드를 생성하는 암호화 알고리즘인 것이다. HMAC 알고리즘은 비밀 키와.. 더보기
[Git] 브랜치 관리와 고급 기능 학습 내용 최근에 경험했던 두 개의 팀 프로젝트를 하며 은근히 머리를 아프게 하는 것이 git에 관련된 문제였다. 생각보다 많은 충돌과 그것을 되돌리는데 어려움을 많이 겪었다. 그것을 극복하기 위해 많이 사용한 것이 브랜치를 더 세부적으로 나누는 방법이었다. 그렇게 사용하니 충돌이나 의도하지 않은 코드 수정에 대비하기 아주 좋았다. 당연히 팀 차원에서의 코드 관리 역시 훨씬 수월해짐을 느꼈다. 브랜치 브랜치란 독립적으로 어떤 작업을 진행하기 위하 개념이다. 개발을 하다가 한 페이지 안에 여러 기능을 따로 구현하기 위해 코드를 복사해야 하는 일이 자주 발생한다. 이때 브랜치 기능을 활용하면 코드가 변경될 우려 없이 독립적으로 개발할 수 있다. 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작.. 더보기
[인증/보안] 기초2 학습 내용 Cookie 쿠키는 서버에서 클라이언트에 데이터를 저장하는 방법의 하나이다. 서버가 원할 때 서버는 클라이언트에서 쿠키를 이용하여 데이터를 가져올 수 있다. 쿠키를 이용하는 것은 단순히 서버에서 클라이언트에 쿠키를 전송하는 것만 의미하는 것은 아니고 클라이언트에서 서버로 쿠키를 전송하는 것도 포함된다. 서버가 쿠키를 이용해서 데이터를 저장하고 원할 때 이 데이터를 다시 불러와 사용할 수 있지만 데이터를 저장한 이후 아무 때나 데이터를 가져올 수는 없다. 데이터를 저장한 이후 특정 조건들이 만족하는 경우에만 다시 가져올 수 있다. 1) Domain 쿠키 옵션에서 도메인 정보가 존재하면 클라이언트에서 쿠키의 도메인 옵션과 서버의 도메인이 일치해야 한다. 여기서 도메인이란 우리가 흔하게 볼 수 있는.. 더보기
[인증/보안] 기초1 학습 내용 내가 처음에는 풀스택 그리고 그 후에는 백엔드로 프로젝트를 두번 경험하면서 가장 많이 참고한 레퍼런스 문서중 하나가 바로 이번 쳅터이다. 그러면서 인증/보안을 어떻게 효율적으로 안전하게 하는가가 백엔드 개발자에게 중요한 역량이라는 것을 느꼈다. 이번 쳅터에서 다룰 부분은 아주 기초적인 부분이다. 간단히 HTTPS와 Cookie, 세션, 토큰기반인증 방식을 다룬다. 이 부분부터 잘 공부해두어야 앞으로 다룰 수많은 인증/보안 기술을 잘 다룰 수 있을 것이다. HTTPS 프로토콜 HTTPS는 Hyper Text Transfer Protocol Secure Socket layer의 약자이다. HTTP over SSL(TLS), HTTP over Secure 라고 부르기도 한다. HTTPS는 HTTP .. 더보기
[Linux] 권한과 환경변수 학습 내용 내가 진행하고 있는 부트캠프의 섹션 3은 백엔드에 관련된 전반적인 애용으로 데이터베이스, 인증/보안 그리고 베포에 대한 내용을 학습하게 된다. 그러니 당연히 CLI의 환경에 대한 기초적인 이해는 필수이다. 그래서 이번 시간에는 CLI의 사용 권한이 무엇인지 그리고 그것을 조작하는 방법과 환경변수에 대한 개념을 학습한다. 그리고 간단히 CLI를 통해 필요한 내용을 불러와서 확인하는 데에 사용되는 몇 가지 명령어를 알아보고자 한다. 사용 권한 CLI에서 파일을 보거나, 수정하거나, 실행할 때는 권한이 필요하다. 왜냐하면 Linux에서 사용하는 폴더와 파일에는 모두 권한이 있기 때문이다. 그 권한은 읽기(Read), 쓰기(Write), 실행(Execute)으로 나뉜다. 이것을 확인하기 위해 CLI에.. 더보기
Git 기초1 학습 내용 우리가 어떤 작업을 할 때는 단번에 모든 기능을 구현할 수 있지만, 보통은 기본적인 기능을 구현해두고 필요할 때마다 기능을 추가하는 식으로 작업한다. 이것을 업데이트라고 한다. 그러나 이렇게 기능을 하나씩 추가하다 보면 갑자기 에러를 만날 수도 있고 이전 버전의 확인이 불가피하게 필요한 경우가 있다. 이런 기능을 수행해주는 것이 바로 Git이다. Git은 버전 관리 시스템(Version Control System)이다. 말 그대로 버전을 관리해준다. 각 버전 별로 변경된 이력들을 저장하는 것이다. 다시 이전 버전으로 되돌아가야 하는 상황이면 이전 변경 이력들이 기록되어 있기 때문에 되돌아가는 것이 가능하다. 또 Git은 여러가지 원격 저장소를 이용하여 백업과 협업을 할 수 있게 한다. 대표적인.. 더보기
Linux 기초2 패키지(package)와 런타임(runtime) 학습 내용 리눅스 운영체제에는 패키지라는 것이 있다. 패키지는 한 프로그램이 작동할 때 필요한 모든 것들을 묶어놓은 것이다. 어떤 프로그램을 실행하고자 할 때에는 많은 프로그램이 필요할 수 있다. 그것을 한 번에 해결하고자 묶어놓은 것을 패키지라고 한다. 쉽게 말해서 윈도의 설치 파일이라고 생각하면 된다. 패키지의 구성에 대해 살펴보면 프로그램 파일, 프로그램 설치 파일, 프로그램 설치 설명서, 프로그램에 대한 정보를 담은 파일 등으로 구성되어 있다. 하나의 프로그램이 정상적으로 설치되고 동작하기 위한 모든 파일이 압축되어 있는 것이다. 그런데 이 패키지 역시 독립적으로 사용하면 여러 문제를 가지게 된다. 만약 패키지를 독립적으로 제각각 설치한다고 하면 우리는 패키지의 프로그램을 사용하거나 업데이트하는 .. 더보기
Linux 기초1 터미널(Terminal) 학습 내용 컴퓨터를 조작하기 위한 입력과 출력을 I/O(input/output, '아이오')라고 한다. 우리가 사용하는 컴퓨터에서 input을 해주는 장치에는 키보드, 마우스, 카메라, 마이크 등이 있다. 모두 컴퓨터에 명령을 전달해주는 장치이다. 반대로 output을 해주는 장치는 모니터, 스피커 등을 들 수 있다. 오늘 살펴볼 리눅스의 터미널은 키보드의 입력과 모니터의 출력으로 컴퓨터의 모든 작업을 할 수 있는 인터페이스다. GUI란 graphical user interface로 그래픽 화면을 통해 아이오를 하는 우리가 흔히 사용하는 윈도우나 리눅스의 우분투이다. GUI를 사용하여 드래그 앤 드래그를 통해 폴더를 이동시키거나 클릭을 통해 파일을 실행시키는 등의 명령을 할 수 있다. CLI라는 인터페이.. 더보기