Computer Science 35

단방향 암호화와 양방향 암호화 방식

IT 개발자로서 개발을 하다보면 이용자의 개인정보 보호를 위해 어떤 암호화 방식을 적용할 것인가를 마주하게 된다. 다양한 암호화 방식중에 단방향 암호화와 양방향 암호화에 차이를 알아보고 어떤 암호화 알고리즘이 있는지 살펴보자. ✅ 단방향 암호화 단방향 암호화는 원래대로 돌아갈 수 없는 암호화이다. 즉, 복호화가 불가능한 암호화를 말한다. 대표적으로 hash가 있으며 암호화된 값으로부터 다시 돌아갈 수 없기 때문에 단방향이라고 부른다. Hash 함수는 같은 입력 값에 대해 같은 출력값이 나오는게 보장이 되지만, 출력값으로 입력 값을 유추할 수 없다. 입력값 출력값 haki fa6f14f5791509d1d7b991788a1c88a9 haki fa6f14f5791509d1d7b991788a1c88a9 위와 같..

Computer Science 2024.01.20

인증과 인가

인증과 인가의 특징은 정확히 무엇이고 무엇이 다를까? 정확하게 짚고 넘어가보자. ✅ 인증 인증은 사용자의 신원을 검증하는 행위로 보안 프로세스에서 첫 번째 단계이다. 아파트로 예를 들면 주민이 아파트 공동 현관문에 출입 카드를 대는 것을 인증이라고 볼 수 있다. 사용자의 신원을 검증하는 방법은 여러가지가 있을 수 있지만 대체적으로 비밀번호를 사용한다. 사용자가 올바른 비밀번호를 입력했다면 시스템은 인증을 통해 유효하다고 판단하고 엑세스를 허용한다. ✅ 인가 인증과 조금 다르게 인가는 사용자가 어떤 리소스에 접근할 수 있는지, 또는 어떤 동작을 수행할 수 있는지 검증하는 것이다. 예를 들면 어떤 커뮤니티 홈페이지에 사용자로서 인증을 받고 서비스를 이용하고 있다고 볼 때, 인증된 사용자이기 때문에 글을 남길..

Computer Science 2023.04.02

쿠키(Cookie)와 세션(Session)

✅ 쿠키와 세션을 사용하는 이유 HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용된다. HTTP 프로토콜의 특징은 다음과 같다. 🔎 1. Connctionless 프로토콜 (비연결 지향) 클라이언트가 서버에 요청(Request)을 했을 때, 그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리 방식이다. HTTP는 먼저 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는 특성이 있다. HTTP가 TCP위에서 구현되었기 때문에 (TCP는 연결지향, UDP는 비연결 지향) 네트워크 관점에서 keep-alive는 옵션으로 connectionless의 연결비용을 줄이는 것을 장점으로 비연결지향이라 한다. 🔎 2. statele..

Computer Science 2023.02.08

함수형 프로그래밍의 특징과 장단점

✅ 함수형 프로그래밍이란? 함수형 프로그래밍은 하나의 프로그래밍 패러다임으로 정의되는 코딩 접근 방식이며, 자료처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임을 의미한다. ✅ 함수형 프로그래밍의 특징 🔎 1. 순수함수 (Pure function) 동일한 입력에는 항상 같은 값을 반환해야 하는 함수 함수의 실행이 프로그램의 실행에 영향을 미치지 않아야 하는 함수 함수 내부에서 인자의 값을 변경하거나 프로그램 상태를 변경하는 Side Effect가 없는 것 num = 1 def add(a): return a + num 위와 같은 예제에서는 add라는 함수 안에서 전역으로 선언된 변수인 num을 참조하기 때문에 순수함수라고 볼 수 없다. // 순수함수 def add(a..

Computer Science 2023.02.08

IPC(Inter-Process Communication)란?

✅ 프로세스(Process)의 개요 프로세스(Process)는 프로그램이 구동될 때 주 메모리에 적재되며, 메모리 상에서 실행되는 작업의 단위를 말한다. 즉 컴퓨터가 연속적으로 실행하고 있는 컴퓨터 프로그램을 뜻하며 작업(Task)와 같은 의미로 쓰인다. 프로세스는 원래 독립적이지만 상황에 따라 프로세스끼리 협력해야 되는 경우가 발생한다. 이럴 때 프로세스간 자원과 데이터를 공유할 수 있어야 하는데, 서로간의 통신을 위해 별도의 매커니즘이 필요하고, IPC라는 설비를 이용해 프로세스간 통신을 할 수 있게 된다. 📚 프로세스와 스레드에 대해 알아보기 프로세스(Process)와 스레드(Thread) ✅ 프로세스란? 프로세스는 운영체제로부터 자원을 할당받는 작업의 단위이다. 코드의 집합으로 이루어진 프로그램이..

Computer Science 2023.02.06

[DB] 데이터베이스 정규화란?

✅ 정규화란? 데이터베이스 정규화는 관계형 데이터베이스 데이터 모델의 중복을 최소화하고 데이터의 일관성, 유연성을 확보하기 위한 목적으로 데이터를 분해하는 과정을 뜻한다. 일반적으로 크고 제대로 조직되지 않은 테이블들을 잘 조직된 여러 개의 테이블을 나누는 과정이라고 생각하면 이해하기 쉽다. 정규화를 하는 목적은 데이터들을 조금 더 효율적으로 관리하는데에 그 목적이 있다. 불필요하거나 중복되는 데이터들을 제거한다. 이상현상(Anomaly)을 방지한다. 데이터 저장을 논리적으로 한다. 데이터를 효율적으로 관리하기 위해서는 위의 3가지를 고려해 데이터모델을 재설계해야 한다. 이렇게 정규화를 수행하면 비즈니스 로직에 변화가 생기더라도 데이터 모델의 변경을 최소화할 수 있다. ✅ 이상현상(Anomaly)이란? ..

Computer Science 2023.02.02

애자일(Agile)이란?

✅ 폭포수 모델(Waterfall Model)이란? 애자일에 대해 알아보기 전에 우리에게 익숙한 폭포수 개발 방식(Waterfall model)에 대해서 짚고 넘어가보자 폭포수 모델 Waterfall Model 소프트웨어 개발 생명주기(Software Development Life Cycle)에 기반하고 있는 소프트웨어 개발 기법으로, 워터폴 모델, 폭포수 모형, 선형 순차 모형, 단계적 생명주기라고도 한다. 한 번 떨어지면 거슬러 올라갈 수 없는 폭포수와 같이 소프트웨어 개발도 각 단계를 확실히 매듭짓고 다음 단계로 넘어간다는 의미에서 붙여진 명칭이다. 전통적인 시스템 생명주기 모델로 소프트웨어를 개발할 때 가장 널리 사용된다. 폭포수 모델로 프로젝트를 진행하면 보통 요구 사항 분석, 설계, 개발, 테..

Computer Science 2023.02.01

TDD(Test Driven Development)란?

✅ TDD란 무엇인가? TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다. 테스트 주도 개발(TDD)은 소프트웨어 개발 방법론 중의 하나로, 선 개발 후 테스트 방식이 아닌 선 테스트 후 개발 방식의 프로그래밍 방법을 말한다. 다시 말해 먼저 자동화된 테스트 코드를 작성한 후 테스트를 통과하기 위한 코드를 개발하는 방식의 개발 방식을 말한다. ✅ TDD를 이용한 개발방법 TDD는 기본적으로 위 3단계의 반복으로 진행하며 점진적으로 개발이 진행된다. Red 단계에서는 실패하는 테스트 코드를 먼저 작성한다. Green 단계에서는 테스트 코드를 성공시키기 위한 실제 코드를 작성한다. Blue 단계에서는 중복 코드 제거, 일반화 등의 리팩토링을 수행한다. 중요한 것은 ..

Computer Science 2023.01.31

[DB] 데이터베이스 인덱스(Index)란 무엇인가?

아직까지 미미한 양의 DB를 다뤄보았기 때문에 데이터 양이 증가할수록 실행 속도가 눈에 띄게 느려지는 경험을 해보지는 못했다. 하지만 DB데이터의 양이 증가할수록 쿼리를 잘 사용해야하고, 쿼리의 성능을 높이는 데 중요한 것은 인덱스를 적재적소로 활용해야 함은 잘 알고 있다. 오늘은 인덱스의 개념과 구조, 그리고 필요성, 사용했을 때 장단점들에 대해 정리해보고자 한다. ✅ 인덱스(Index)란? 인덱스(Index)는 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료구조이다. 테이블의 특정 컬럼(Column)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍으로 저장한다. 인..

Computer Science 2023.01.30

[python] 클린코드와 코드 리팩토링

✅ 클린 코드란? 클린 코드에 대해 유일하고 엄격한 정의는 존재하지 않는다. 하나의 통용되는 말이 있다면 바로 가독성이 높은 코드가 될 것이다. 즉, 클린 코드는 다른 개발자가 코드를 읽고 유지 관리를 할 수 있는지 여부에 달려 있다고 볼 수 있다. 클린코드로 코드를 작성하려면 다음과 같이 구현해야 한다. 네이밍이 잘 되어야 함(무슨 역할인지 명시) 변수, 함수, 클래스, 파일 이름 모두 해당 이름은 항상 "무엇을 하는지" 명확하게 드러내야 한다. 이름은 역할과 본질을 나타내 준다. 코딩할 때 가장 어려운 파트 오류가 없어야 함 중복이 없어야 함 중복 코드가 있다면 수정할 때 2번 이상 수정해야 함. 3번 이상 중복 코드가 등장하면, 어떻게든 한 곳으로 모아줘야 한다. 의존성을 최대한 줄여야 함 클래스 ..

Computer Science 2023.01.25
728x90