목차 Index 인덱스란 말 그대로 색인이다. 여기선 주어진 데이터베이스에서 원하는 자료를 빨리 찾을 수 있도록 도와주는 일종의 자료구조라 할 수 있다. 원하는 테이블의 컬럼(둘 이상도 가능하다)에 인덱스를 생성한다는 말은 데이터베이스 내부에서 해당 컬럼이 저장된 주소값을 가지는 자료구조를 테이블과 논리, 물리적으로 독립된 구조로 설계하는 것을 가리킨다. 이때 생성되는 인덱스는 컬럼의 값과 물리적 주소를 키/밸류로 가지는 구조를 가지며, 이를 이용해 빠른 탐색이 가능해진다. 참고로 인덱싱을 하지 않은 테이블의 경우, 원하는 값을 얻어내기 위해 모든 테이블을 스캔하는 Table Scan을 실행하며, 이는 최악의 경우 O(n)의 시간복잡도를 가지게 된다. 더 나가기 전에 장/단점과 인덱싱을 사용하기 좋은 환..
목차 서비스의 규모와 사용자가 증가해 한 대의 서버로는 트래픽을 감당할 수 없을 때, 보통은 비용이 많이 드는 수직적 확장(Scale-Up) 대신 수평적 확장(Scale-Out)을 선택한다. 이처럼 수평적으로 확장된 서버를 로드밸런스와 함께 사용하면 쉽게 서버의 부하를 분산시킬 수 있다. 하지만 이때 서버마다 사용하는 데이터베이스 역시 분산되면서 기존에는 존재하지 않았던 문제가 생기게 된다. 바로 세션을 사용하는 경우의 사용자 정보 및 요청 저장이 분산된다는 것인데, 예를 들면 A서버에 저장된 세션아이디를 가진 고객이 B서버로 요청을 했을 때 B서버는 세션 정보를 가지지 않기 때문에 사용자에게 새로운 자격증명, 즉 로그인 등을 요구하게 된다. 즉, 서버 사이의 데이터 정합성이 깨질 수 있다는 말이다. 조..
목차 HTTP 상태 코드는 말 그대로 HTTP 요청에 대한 응답의 상태 코드이다. 크게 100번대부터 500번대까지의 코드가 존재하며, 그중 100번대는 사실상 쓰이지 않는다고 한다. 어디에 어떤 코드가 있는지 대략 정리하고 넘어가자. 1XX - Informational Response 정보 전달을 위한 상태코드. 조건부 응답을 가리키며 요청을 제대로 받았고 작업이 진행되고 있다는 표시이다. 사실상 쓰이지 않는 코드번호가 되었지만 최근 웹소켓(101)과 특정 프로토콜(WebDAV, 102)에서 다시 쓰이고 있다고 한다. 100 - Continue 101 - Switching Protocols 102 - Processing(처리중) 103 - Early Hints(서버는 응답을 준비 중, 사용자의 사전로딩..
목차 흔히 애자일 방법론이라 불리는 애자일 프로세스는 특정한 하나의 방법론을 가리키는 것이 아니다. 애자일(Agile = 기민한, 재빠른)한 개발을 하도록 도와주는 다양한 방법론 전체를 아우르는 단어라고 보는 게 정확하다. 이에 대해서는 위키백과에 너무도 상세하게 정리가 되어있으므로, 나는 필요한 부분만 정리하는 걸 목표로. Background 애자일 프로세스의 등장 배경에는 기존에 사용되던 폭포수 방법론에 대한 회의가 있다. 다른 말로는 소프트웨어 개발과 다른 공학의 프로세스 사이의 큰 차이점에 대한 인지가 있다고 볼 수도 있다. 소프트웨어 개발은 유동적이고, 개방적이며, 고객의 요구사항은 자주 바뀌어 예측 가능하지가 않다. 따라서 제한된 시간과 비용 안에서 불완전한 정보와 예측 불가능한 변경사항만을 ..
MSA란 정확하게 정의된 어휘는 아니지만 대략 서비스를 잘게 쪼개 여러 가지 이득을 노리는 구조이다. 반대말까진 아니지만 비교되는 구조로 모놀리식 아키텍처(Monolithic Architecture)가 있으며 최근 스타트업의 기술블로그를 구경하면 모놀리식에서 MSA로 전환한다는 말이 많이 보인다. 이 글에서는 두 아키텍처의 간단한 비교와 장단점에 대해서 알아보자. Monolithic Architecture 모놀리식 아키텍처는 이름 그대로 하나의 구조에 모든 서비스가 포함된 구조를 가리킨다. 크고 아름다운 하나의 구조 안에 모든 서비스가 들어있기 때문에 비교적 단순하며, 이에 따른 장단점은 아래와 같다. 장점 단순한 구조를 가지고 있기 때문에 개발 난이도가 낮고 속도가 빠르다. 하나의 통합된 DB를 가지기..
목차 Join Join은 간단히 말하면 필요에 의한 두 개 이상의 테이블 간 결합이다. 여기서 필요란 당연하다면 당연하게도 사용자의 필요, 따라서 개발자의 필요를 가리킨다. 따라서 Join은 필요와 목표에 의한 새로운 테이블을 (임시로) 생성하며, 데이터를 손쉽게 조회할 수 있도록 도와준다. 계속해서 테이블의 결합방식에 따른 Join의 종류를 알아보자. Inner Join Inner Join은 교집합에 해당한다. 두 테이블의 공통된 요소만 가져와 테이블을 구성하기 때문이다. 우선 다이어그램을 보면 아래와 같이 생겼다. 계속해서 간단한 두 개의 테이블로 예를 들어보자. 각 테이블에서 서로 연관된 내용만 뽑아 테이블을 생성한 것을 확인할 수 있다. 계속에서 SQL 표현식을 살펴보면, 아래와 같은 두 가지 방..
Hash 배열은 빠른 검색 속도를 가지고 있으나 삽입/삭제 시 많은 비용이 소모된다. 이를 극복한 LinkedList는 삽입/삭제의 비용이 적지만 데이터가 많아질수록 검색에 비용이 많이 든다. 해시는 이를 극복하기 위해 도입된 개념이다. 해시, 해시 함수(Hash Function)란 임의의 길이를 갖는 임의의 데이터를 받아 고정된 길이의 데이터를 리턴하는 단방향 함수를 말한다. 가장 쉬운 예로는 나머지 연산자(%)가 있을 수 있겠다. 해시 함수의 특징은 아래와 같으며, 비교적 간단한 알고리즘으로 시스템 자원을 덜 소모한다, 즉 해시값 생성에 많은 시간이 들지 않는다. 해시값을 해독할 때는 많은 시간이 든다. 같은 입력 값에 대해선 같은 출력 값이 보장되며, 출력 값은 고르게 분포한다. 입력값이 아주 조금..
목차 여기저기에서 이름은 많이 주워들은 엔진엑스. 좋다! 빠르다! 가볍다! 길래 쓰지 않을 이유가 없어 보여 한 번 써볼까 하고 기웃거리는 것이 이 글의 목적이다. 엔진엑스는 2004년 10월, 러시아에서 태어났고 현재는 미국에서 자라고 있는 오픈소스 웹 서버 소프트웨어이다. 여기서 웹 서버란 사용자에게 네트워크를 통해 서비스를 제공하는 컴퓨터(의 집합)를 가리킨다. 엔진엑스는 이런 웹 서버에서 사용하는 프로그램 중 하나라고 할 수 있다. 더욱 많이 들어본 아파치 HTTPd(역시 웹 서버 소프트웨어이다)를 빠르게 대체하고 있으며 22년 5월 기준 시장 점유율 1위를 기록하고 있다. 특징으로는 비동기 방식의 동시접속 처리에 특화된 작동방식이라고 하는데, 되는대로 알아보자. Apache HTTPd vs. N..
시큐리티 관련 글을 찾아 읽다가 RBAC, ABAC라는 약어를 접하게 되었다. 처음엔 그냥 무시하고 지나갔으나, 잊을만하면 한 번씩 눈에 띄어서 그냥 정리하고 넘어가기로 한다. RBAC(Role-Based Access Control) 이름에서 추측할 수 있듯이 사용자의 역할에 따라 각종 접근 권한을 결정하는 방식이다. 스프링 시큐리티로 회원 권한을 설정할 때 ROLE_USER 하는 식으로 정하는 방식이 바로 이것이다. 각종 메서드와 엔드포인트의 접근 및 사용권한과 로그인 지속시간 여부 등을 역할별로 할당할 수 있다. ABAC(Attribute-Based Access Control) 이 방식은 접근 권한을 사용자와 리소스 속성에 따라 결정하는 방식이다. RBAC를 대체하는 개념이 아닌 보완하는 개념이라고 ..
목차 Scale-Up 가장 먼저 생각할 수 있는, 단순하면서도 확실한 방법이다. 사용하고 있는 서버 자체의 Cpu, Ram 등을 업그레이드해서 처리 용량과 속도를 올리게 된다. 단점 역시 단순한데, 좋은 부품은 비싸며, 출시된 제품의 성능 한계가 명확하다는 점이다. 비용 대비 성능 증가폭이 상대적으로 작다. Scale-Out 다음으로 생각할 수 있는 방법은 수평 확장이다. 서버 하나의 처리속도와 용량을 올리는 것이 아닌, 서버의 대수를 증가시켜 처리 용량을 늘린다. 수직 확장에 비해 비용이 비교적 적게 든다. 단순히 대수를 늘리기 때문에 업그레이드에 한계가 없는 듯 보인다. Amdahl's law 그러나 이는 정확하게는 처리 용량에만 해당되는 말이고, 처리 속도의 경우는 암달의 법칙에 의해 한계가 뚜렷하..
- Total
- Today
- Yesterday
- 세모
- 알고리즘
- 남미
- 중남미
- 동적계획법
- 지지
- 기술면접
- BOJ
- Python
- 유럽
- 유럽여행
- 세계일주
- 세계여행
- 스프링
- a6000
- 파이썬
- 여행
- Backjoon
- 백준
- 칼이사
- RX100M5
- Algorithm
- 면접 준비
- 자바
- 야경
- 리스트
- 스트림
- spring
- 맛집
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |