이 책을 읽게 된 이유 나는 프로젝트 경험이 부족하여 대규모 시스템을 직접 설계해 본 경험이 없다. 백엔드 개발자라면 대규모 시스템이 어떻게 이루어져 있는지, 어떻게 설계하는지 알아야 할 것 같아 이 책을 읽게 되었다. 책 소개 IT 경력자라도 느닷없이 대규모 시스템을 설계하려고 하면 막막하다고 느낄 수 있다. 특히나 면접을 보는 상황이라면 더욱 눈앞이 캄캄해질 것이다. 복잡한 시스템을 설계할 때는 어디서부터 어떻게 시작해야 할까? 이 책은 16가지 실제 시스템 설계 면접 문제와 상세한 답안을 제시한다. 시스템 동작 원리를 시각적으로 보여 주는 188개의 도해로 설명하면서 4단계 접근법으로 면접 문제를 풀 수 있도록 돕는다. 이 책을 통해 면접관이 평가하려는 항목과 그 이유를 내부자 관점에서 들을 수 있..
CAP 정리란? 브루어의 정리란? CAP 정리 또는 브루어(Brewer)의 정리는 다음과 같은 세 가지 조건을 모두 만족하는 분산 컴퓨터 시스템은 존재하지 않음을 증명한 정리이다. 일관성(Consistency) : 모든 노드가 같은 순간에 같은 데이터를 볼 수 있다. 가용성(Availability) : 모든 요청이 성공 또는 실패 등의 결과를 반환활 수 있다. 파티션 허용(Partition tolerance) : 메시지 전달이 실패하거나 시스템 일부가 망가져도 시스템이 계속 동작할 수 있다. 위의 세 가지 조건의 첫 글자를 따서 CAP정리라고 부른다. 여기서 분산 시스템은 동시에 둘 이상의 노드(물리적 또는 가상머신)에 데이터를 저장하는 네트워크를 뜻한다. 세 가지 조건에 대해 더 자세히 알아보자면 다음..
AWS Cloud Practitioner 자격증이란? AWS는 다양한 자격증을 취득할 수 있다. 그중 AWS Cloud Practitioner는 가장 기본인 자격증이다. 이후엔 Architect, Operations, Developer 등 분야를 나누어 Associate 등급, Professional 등급 등을 취득할 수 있다. Cloud Practitioner 자격증은 AWS의 클라우드 기술의 개념과 보안, 운영 비용 등 AWS 클라우드 서비스를 사용하는 데 가장 기초적인 지식을 테스트하는 문제들이 출제된다. 응시 계기현재 재직 중인 회사에서 온-프레미스에서 클라우드로의 전환을 계획하고 있다. 앞으로 많은 회사들이 클라우드 체계로 넘어갈 것이라고 생각했다. 평소에도 관심이 많던 클라우드 서비스에 ..
블로그 이사합니다아래에서 확인 가능합니다.https://code-lab1.com/clustered-index/ [DB] Clustered Index 와 Non-Clustered Index 차이, 테이블 스캔(Table Scan)이란? 인덱스 스캔(Index Scan)이란? -clustered Index는 row의 물리적 정렬 순서를 설정하는 index 유형이다code-lab1.com Index란?Index는 테이블에서 데이터의 위치를 가리키는 자료구조이다. Index가 없다면 원하는 데이터를 찾기 위해서 테이블 전체를 뒤져야 할 것이다. 이러한 Index는 크게 Clustered Index와 Non-Clustered Index 두 가지로 나눌 수 있다. 참고) [DB] 인덱스(index)란? 인덱스 ..
오버로딩(Overloading)이란? 오버로딩은 같은 클래스 내에 여러 개의 같은 이름의 메서드를 정의하는 것이다. 이때 메서드의 이름은 같지만 매개변수(parameter)의 개수나 타입이 달라야 한다. return 값만 다른 것은 오버로딩이라고 볼 수 없다. 예를 들어 아래와 같이 Food 클래스 내에 여러 가지의 eat 메서드를 정의할 수 있다. public class Food{ void eat(Noodle noodle){ System.out.println("후루룩"); } void eat(Pizza pizza){ System.out.prinln("냠냠"); } void eat(Noodle noodle, Ramen ramen){ System.out.prinln("호로록~"); } } 같은 메서드 명이..
NamedParameterJdbcTemplate이란? JdbcTemplate은 파라미터를 순서대로 바인딩한다. String sql = "update item set item_name=?, price=?, quantity=? where id=?"; template.update(sql, itemName, price, quantity, itemId); 예를 들어 위와 같은 코드가 있다면, sql의 ?에 itemName, price, quantity, itemId 파라미터가 순서대로 바인딩된다. 이렇게 순서를 제대로 지킨다면 문제가 없는 코드이다. 하지만 모종의 이유로 위의 SQL 코드를 변경하게 된다고 생각해보자. 실무에서 수십 개의 파라미터를 사용한다고 했을 때 순서에 맞춰 파라미터를 바인딩 하기는 쉽지 않..
JdbcTemplate이란? JdbcTemplate은 JDBC 코어 패키지의 중앙 클래스로 JDBC의 사용을 단순화하고 일반적인 오류를 방지하는데 도움이 된다. 개발자가 JDBC를 직접 사용할 때 발생하는 다음과 같은 반복 작업을 대신 처리해준다. 커넥션 획득 statement를 준비하고 실행 결과를 반복하도록 루프를 실행 커넥션 종료, statement 및 resultset 종료 트랜잭션을 다루기 위한 커넥션 동기화 예외 발생 시 스프링 예외 변환기 실행 쉽게 말해 JdbcTemplate은 개발자가 JDBC 기술을 쉽게 사용할 수 있도록 도와주는 클래스이다. 참고) [Spring] JDBC(Java Database Connectivity)란? JDBC 드라이버란? [Spring] JDBC(Java Da..
투 포인터 알고리즘(Two-Pointers Algorithm)이란? 투 포인터 알고리즘은 말 그대로 두 개의 포인터를 이용해 문제를 해결하는 알고리즘을 뜻한다. 보통 l(left), r(right)나 s(start), e(end) 같은 식으로 포인터의 이름을 붙인다. 투 포인터 알고리즘을 설명하기 위해 하나의 알고리즘 문제를 소개하겠다. https://www.acmicpc.net/problem/2003 2003번: 수들의 합 2 첫째 줄에 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,000,000)이 주어진다. 다음 줄에는 A[1], A[2], …, A[N]이 공백으로 분리되어 주어진다. 각각의 A[x]는 30,000을 넘지 않는 자연수이다. www.acmicpc.net 백준에서 풀어볼 수..
에러(Error)와 예외(Exception) 체크 예외와 언체크 예외에 알아보기 전에 Error와 Exception에 대해 알아보자. 자바에서 오류(Error)란 시스템이 종료되어야 할 수준의 수습하기 힘든 심각한 문제를 의미한다. 이러한 오류는 개발자가 미리 예측하여 처리하기 힘든 것이 대부분이기 때문에 오류에 대한 처리는 매우 힘들다. 반면 예외(Exception)는 개발자가 구현한 로직에서 발생한 실수 혹은 사용자의 영향에 의해 발생하는 예측하고 방지할 수 있는 문제를 뜻한다. 참고) [JAVA] 예외 처리(Exception Handling)에 대하여, try-catch문, 오류(error)와 예외(exception) 오류(error)와 예외(exception) 자바에서 오류(error)란 시스템이..
DataSource에 대한 이해 DataSource는 커넥션을 획득하는 방법을 추상화하는 인터페이스이다. 이 인터페이스의 핵심 기능은 커넥션 조회이다. 특히 자바에서는 javax.sql.DataSource라는 인터페이스를 제공해준다. 만약 사용자가 DriverManager를 통해 커넥션을 획득하다가 나중에 HikariCP 커넥션 풀을 이용하려고 하면 커넥션을 획득하는 애플리케이션 코드를 모두 변경해야 한다. 하지만 이 커넥션을 획득하는 방법을 추상화해놓은 DataSource 인터페이스를 이용한다면 해당 인터페이스의 구현체만 갈아 끼우면 된다. 따라서 애플리케이션 로직은 DataSource 인터페이스에만 의존하도록 하면, 사용자는 커넥션을 획득하는 방법을 바꾸더라도 애플리케이션 로직을 변경하지 않아도 된다..