TLS 1.2 vs TLS 1.3
·
네트워크
TLSTLS(Transport Layer Security)는 전송 계층에서 개인 정보와 데이터 무결성을 제공하는 보안 프로토콜이다. 즉, 네트워크 상에서 데이터를 안전하게 주고 받기 위한 암호화 프로토콜이다.가장 최신 버전인 TLS 1.3은 2018년도에 나왔으며 현재는, TLS 1.2와 TLS 1.3이 주로 사용되고 있다.키 교환 알고리즘TLS 1.2/TLS 1.3 handshake 방식 비교TLS 1.2 1. Client Hello클라이언트가 서버에 접속하는 단계이다. 다만, 이때 클라이언트는 랜덤 데이터(Clinet Random)와 클라이언트 측에서 지원하는 암호화 방식을 서버에 함께 전송한다.2. Server Hello서버는 클라이언트의 인사에 답변한다. 서버 역시 클라이언트와 마찬가지로 랜덤 데..
캐시(Cache) 전략
·
Etc
Redis와 캐시캐시란?캐시란, 데이터의 원본보다 더 빠르고 효율적으로 엑세스할 수 있는 임시 데이터 저장소를 말한다. 캐시는 자주 사용하는 데이터를 메모리에 저장해 디스크나 데이터베이스 접근을 줄이고, 이로 인해 응답 시간을 단축시켜 전체 시스템의 성능을 향상시킨다.캐시로서의 레디스레디스는 단순하게 키-값 형태로 데이터를 저장하므로, 굉장히 간단하며 자체적으로 다양한 자료 구조를 제공하기 때문에 애플리케이션에서 사용하던 list, hash 등의 자료 구조를 변환하는 과정 없이 레디스에 바로 저장할 수 있다. 또한 레디스는 모든 데이터를 메모리에 저장하는 인메모리 데이터 저장소이기 때문에 데이터를 검색하고 반환하는 것이 상당히 빠르다는 특징을 가지고 있다.캐싱 전략읽기 전략1. Look Aside애플리케..
HTTP 1 vs HTTP 2 vs HTTP 3
·
네트워크
HTTP 1HTTP/0.9는 오직 GET 메서드만 지원했으며, 요청에 헤더가 존재하지 않았다. 응답 역시 상태 코드나 헤더 없이 오직 HTML 파일의 본문만 포함되어 있었다.HTTP/1.0에서는 비로소 상태 코드와 헤더가 도입되었고, POST 등의 추가적인 메서드들도 지원되기 시작했다. HTTP는 처음에 하나의 요청(request)에 대해 하나의 응답(response)만을 주고받는 단순한 구조로 시작했다. 즉,1. 서버와 TCP 연결을 맺고(3-way handshaking)2.요청을 보내고3.응답을 받은 후4. TCP 연결을 닫는다.HTTP 1.0은 매 요청마다 이런 4 단계를 반복하는 구조였다. 하지만 이런 방식은 매 요청마다 새로운 TCP 연결을 생성해야 한다는 점, 웹이 점점 더 미디어 중심으로 변..
결합 알고리즘과 성능
·
데이터베이스
결합 알고리즘옵티마이저가 선택 가능한 결합 알고리즘은 크게 3가지가 존재한다. 어떤 알고리즘을 선택할 지 여부는 데이터 크기 또는 결합 키의 분산이라는 요인에 의존하는데, 그 중 가장 빈번하게 볼 수 있는 알고리즘은 Nested Loops로 결합 알고리즘의 기본이 되는 알고리즘이다. MySQL의 옵티마이저도 기본적으로 Nested Loop Join을 사용하여 테이블을 조인한다고 한다.Nested LoopsNested Loops는 이름 그대로 중첩 반복을 사용하는 알고리즘이다. 결합 대상 테이블(Table A)에서 레코드를 하나씩 반복하며 스캔한다. 이런 테이블을 드라이빙 테이블(Driving Table) 또는 외부 테이블(Outer Table)이라고 한다. 다른 테이블(Table B)는 드리븐 테이블(D..
InnoDB 스토리지 엔진의 잠금
·
데이터베이스
이전의 포스팅에서 MySQL의 InnoDB에서는 Repeatable Read 격리 수준에서도 Phantom Read(유령 읽기) 문제가 발생하지 않는다는 내용을 언급했었다. 이번 포스팅에서는 그 이유와 InnoDB 스토리지 엔진의 잠금에 대해 알아보고자 한다.InnoDB 스토리지 엔진의 잠금InnoDB 스토리지 엔진은 MySQL에서 제공하는 잠금과는 별개로 스토리지 엔진 내부에서 레코드 기반의 잠금 방식을 탑재하고 있다. 레코드 락일반적으로 레코드 자체만을 잠그는 것을 레코드 락(Record Lock)이라고 한다. 다만, 한가지 중요한 점은 InnoDB 스토리지 엔진은 레코드 자체가 아니라 인덱스의 레코드를 잠근다. 인덱스 레코드에 락을 거는 것과 테이블 레코드에 락을 거는 것은 큰 차이가 있다.인덱스와..
SW 마에스트로 16기 최종 합격 후기
·
끄적끄적
정말 하고 싶었던 소프트웨어 마에스트로 16기에 합격했다!! 올해 모집인원이 110명으로 반토막이 나서 결과가 나올 때까지 정말 끝까지 걱정했지만 다행히 합격했다:DSW 마에스트로를 준비하다SW 마에스트로의 선발 과정은 상당히 긴 편이다. 코딩 테스트도 2번이나 보고 심지어 면접까지 존재한다.서류 작성1. [자기소개] SW분야의 전문성을 키우기 위해 몰입했던 경험과 도전이 무엇인지, 또한 이러한 성장과정을 통해 얻은 배움은 무엇인지를 서술하여 주시기 바랍니다.2. [연수계획서] SW마에스트로 과정 참여를 통해 어떠한 프로젝트를 수행하고 싶은가요? 해당 프로젝트를 수행하기 위한 계획과 이루고자 하는 목표가 무엇인지 구체적으로 서술하여 주시기 바랍니다. 이번 16기 서류 문항은 2개였고, 매년 문항이 비슷한..
동시성 제어에 대해 알아보자
·
데이터베이스
동시성 제어만약 여러 사용자가 동시에 데이터베이스에 접근하는 상황에서 적절한 통제가 이루어지지 않는다면, 데이터베이스의 무결성이 깨져 의도하지 않은 결과가 반환되는 문제가 발생할 수 있다. 따라서 DBMS에서는 동시성 제어 (Concurrency Control)를 통해 데이터베이스의 무결성을 보호하고, 트랜잭션이 항상 정확하고 일관된 데이터를 참조할 수 있도록 조정한다.동시성 제어의 목표는 트랜잭션이 동시에 실행될 수 있도록 허용하면서도 데이터의 일관성과 무결성을 유지하는 것이다.동시성 제어 기법1. LockingLocking은 공유 자원에 대한 동시 엑세스를 제어하는 전통적인 방법이다. 잠금을 획득한 스레드만 공유 자원(Critical Section)에 접근할 수 있어 신뢰성과 안정성이 높다. 하지만,..
트랜잭션 격리수준
·
데이터베이스
트랜잭션이란?트랜잭션은 작업의 완전성을 보장해 준다. 즉, 트랜잭션은 논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구하여 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않도록 해준다. 잠금(Lock)과 비슷한 개념이라고 생각할 수 있지만, 잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다.또한, 트랜잭션은 여러 개의 변경 작업을 수행하는 쿼리가 조합됐을 때만 의미 있는 개념이 아니다. 트랜잭션은 하나의 논리적인 작업 셋에 쿼리의 수와 상관없이 원자성을 보장하는 것이다.주의사항트랜잭션 범위를는 최소화해하는 것이 좋다. 이유가 무엇일까? 데이터베이스 커넥션은 개수가 제한적이어서 각 단위 프로그램이 커넥션을 소..
[BOJ] 나머지 합 (Java) - 골드 3
·
자료구조&알고리즘
문제 링크https://www.acmicpc.net/problem/10986 사실 문제를 보자마자 너무 놀랐다. 삼성 SDS Pro 시험 2차 시험 문제가 거의 똑같았기 때문이다. 그리고 티어를 보고 다시 한번 놀랐다. 시험장에서 4시간 동안 고민했던 문제가 고작 골드3이라니.. 뭔가 허무하기도 했고 실력이 많이 늘었다고 생각했는데 아직 많이 부족하구나 라는 겸손이 생기게 된 문제였다... (+ 시험장에서 쫄지 말자!) 아직 문제 푸는 속도도 그렇고 아이디어를 떠올리는 것도 그렇고 골드 위주의 문제들을 많이 풀어봐야 할 것 같다.문제 접근이 문제는 모든 경우를 구하고자하면 시간초과가 발생하게 된다. N의 범위를 살펴보면 1 ≤ N ≤ 10^6로 전체 구간 길이의 경우의 수는 NC2이기 때문이다. 때문에 ..
어느 날 데드락이 찾아왔다.
·
데이터베이스
문제상황한끼족보 서비스는 유저 피드백을 바탕으로 2차 MVP 때, 메뉴를 등록하고 수정 및 삭제할 수 있는 기능을 도입하기로 했다. 해당 플로우를 스프린트 기간 내에 열심히 구현해서 성공적으로 배포까지 완료했다. 이렇게 서비스를 배포하기 직전, 기획 팀원들이 QA를 진행하는 도중에 에러가 발생했다는 연락을 받게 되었다. 로그를 확인해본 결과 DB단에서 발생한 에러였고 원인을 분석하기 위에 MySQL에 접속해 show engine innodb status; 명령어를 통해 로그를 확인한 결과, 데드락이 발생했다는 로그를 발견하게 되었다. 이번 글에서는 왜 데드락이 발생했는지, 어떻게 해결했는지 살펴보고자 한다.실제 로그 로직 흐름테이블 구조현재 한끼족보의 데이터베이스 구조는 다음과 같다. 하나의 식당에 여러..