1. Base64 인코딩이란?
Base64 인코딩은 이진 데이터를 ASCII 문자열 형식으로 변환하는 인코딩 방식입니다. 이 방식은 주로 이메일과 같은 ASCII 텍스트만을 지원하는 매체에서 바이너리 데이터를 전송할 때 사용됩니다. Base64는 64개의 출력 가능한 문자(대소문자 알파벳, 숫자, '+', '/', 그리고 '=' 패딩 문자)를 사용하여 8비트 바이트 데이터를 6비트 단위로 나누어 인코딩합니다.
2. 사용자 패스워드를 전송하고 보관하는 방법
전송
- HTTPS를 사용하여 패스워드를 안전하게 전송합니다.
- 패스워드를 클라이언트 측에서 해싱하여 서버로 전송할 수도 있습니다.
보관
- 패스워드는 해싱된 형태로 저장됩니다.
- 솔트(Salt)를 추가하여 더 안전하게 저장합니다.
- 보안성이 높은 알고리즘(예: bcrypt, Argon2)을 사용하여 해싱합니다.
3. 프로세스와 스레드 비교
프로세스
- 독립적인 메모리 공간을 가지고, 운영체제로부터 자원을 할당받아 실행됩니다.
- 프로세스간의 자원 공유는 IPC(Inter-Process Communication)를 통해 이루어집니다.
스레드
- 프로세스 내에서 실행되는 여러 실행 흐름으로, 동일한 메모리 공간을 공유합니다.
- 스레드간의 자원 공유는 상대적으로 간단합니다.
4. 동기와 비동기 비교
동기
- 작업을 순서대로 진행합니다.
- 하나의 작업이 완료될 때까지 다음 작업은 대기합니다.
비동기
- 여러 작업이 동시에 실행됩니다.
- 작업의 완료 여부와 상관없이 다음 작업이 진행됩니다.
5. Call by Reference란?
Call by Reference는 함수 호출 시, 인자로 참조(메모리 주소)를 전달하는 방식입니다. 이로 인해 함수 내에서 인자의 내용을 변경하면, 호출한 곳의 원본 데이터도 변경됩니다. C++에서는 & 키워드를 사용하여 참조를 전달할 수 있으며, Python에서는 리스트와 같은 가변 객체를 통해 구현할 수 있습니다.
6. 동시성과 병렬성 비교
동시성(Concurrency)
- 여러 작업이 시간을 나눠가며 실행됩니다.
- 단일 프로세서 환경에서도 구현 가능하며, 멀티스레딩이 이에 해당합니다.
병렬성(Parallelism)
- 여러 작업이 동시에 실행됩니다.
- 멀티 프로세서 or 멀티 코어 환경에서 구현 가능하며, 각각의 프로세서 or 코어가 독립적인 작업을 수행합니다.