
트리트리란 노드와 간선으로 이루어진 자료구조로 부모노드에서 자식노드로 향하는 계층 구조를 이루고 있다.그래프의 한 종류이지만 트리는 사이클이 존재하지 않고 노드간 연결 경로는 부모에서 자식으로 오직 하나 뿐이라는 특징이 있다.트리에는 이진트리, 이진탐색트리, 완전이진트리가 존재한다. 선형구조로는 계층 구조를 사용하지 못하기에 트리라는 자료구조를 사용한다.대표적인 사용사례가 DB의 인덱스 페이지이다.책의 목차와 같은 계층 구조를 통해 데이터의 빠른 접근을 보장한다. 트리의 정의하나의 루트 노드가 반드시 존재루트 노드를 제외한 모든 노드는 부모노드를 갖음모든 노드는 0개 이상의 자식 노드를 가질 수 있음사이클이 존재하지 않음노드의 갯수가 N이면, 간선의 수는 N-1트리는 방향그래프? 무방향 그래프?그래프 이..
DNS(Domain Name System)도메인 이름을 IP 주소로 변환해주는 시스템 DNS의 구성요소도메인 네임 스페이스도메인에 해당하는 IP를 찾기 위해 사용하는 규칙(닷을 기준으로 계층적 구조를 이룸)네임 서버도메인 정보에 대응하는 IP를 관리하는 서버계층 구조로 이루어져 있으며 상위 계층은 하위계층의 IP주소를 반환하고 최하위 SLD에서 IP 주소를 반환함리졸버DNS Query를 DNS 서버에 요청하거나 응답을 캐싱 DNS 서버의 계층 구조[계층 구조에 따른 분류]1. Root DNS Server설명: DNS 계층 구조의 최상단에 있는 서버입니다.역할: 사용자가 요청한 도메인의 **최상위 도메인(.com, .net, .kr 등)**에 해당하는 **TLD 서버의 위치(IP)**를 알려줍니다.예시: ..

OSI 7계층은 컴퓨터 네트워크 통신이 일어나는 7단계의 표준 프로토콜이다.네트워크 장비마다 다른 통신 방식으로 발생하는 통신 충돌 현상을 방지하고자 표준 프로토콜을 만들었고,이를 통해 통신의 과정을 단계별로 분류하여 흐름 파악을 용이하게 하고, 문제 상황 발생시 각 단계에서 대응할 수 있는 구조를 갖추게 되었다. 각 계층의 특징1. 물리계층데이터를 전기적 신호로 변환하여 전송하는 오로지 전기적 신호로 변환해서 주고 받는 기능만 존재(데이터를 어디에 보낼지, 어떻게 보낼지에 대한 규칙을 정하는 것은 아님 )PDU : 비트케이블, 허브, 리피터, 랜이 해당 2. 데이터 링크 계층네트워크 장비(포인트 투 포인트) 간의 데이터 전송CRC 기반의 오류 제어, 흐름제어를 담당함CRC는 오륨 검출 코드를 의미함m..
시간복잡도외부적인 요인은 제외하고 해당 알고리즘에 가장 기본이 되는 연산의 수행횟수빅오 표기법정확한 시간 보다는 입력 크기에 따른 실행 시간의 성장률에 주목한 표기법따라서 최고차 항만 표현하고 나머지 항과 상수는 모두 제외한다.* 최고차항만 표현하는 이유입력 크기 n이 무한히 커지면, 가장 높은 차수의 항이 전체 성능에 지배적인 영향을 미치게 되고, 나머지 항이나 상수는 상대적으로 영향이 미미해지기 때문이다. 자료구조데이터를 효율적으로 저장하고 관리하기 위한 구조를 자료구조라 한다.자료구조는 크게 선형 자료구조와 비선형 자료구조로 구분이 되며,구현하는 방식에 따라 배열기반, 포인터 기반으로 다시 한번 나뉘게 된다. 선형 자료구조의 종류데이터가 순차적으로 나열되어 있는 자료 구조배열리스트(ArrayList..
트랜잭션의 격리 수준이란 여러 트랜잭션이 동시에 처리 될 때, 다른 트랜잭션에 의해 영향을 받는 정도이다.트랜잭션 격리 수준은 아래와 같이 4단계로 이루어져있다.READ UNCOMMITTEDREAD COMMITTEDREPEATABLE READSERIALIZABLE각 단계에서 발생할 수 있는 상황과 격리수준 및 동시 처리 성능은 아래와 같다. DIRTY READNON-REPEATABLE READPHANTOM READ격리 수준동시 처리 성능READ UNCOMMITTEDOOO낮음높음READ COMMITTEDXOO REPEATABLE READXXX SERIALIZABLEXXX높음낮음일반적으로 격리 수준이 높아질수록 동시 처리 성능이 크게 떨어진다고 하지만, mysql에서 serializable을 제외한 나머..
DB 연동 테스트는 Repeatable하고 Independent한 테스트 환경을 유지하는 것이 중요하다.테스트를 여러번 실행해도 같은 결과가 보장되기 위해서 db의 상태가 변하지 않고 늘 일관되게 유지되야한다. 이번 포스팅에서 Flyway, TestContainer를 이용하여 일관되고 독립된 테스트 db를 구축하는 방법에 대해 소개하려고 한다. Flywayflyway는 DB 마이그레이션(변경사항)을 형상관리하는 소프트웨어이다.프로그래밍 코드를 형상관리하는 git과 같이 DB 마이그레이션 정보를 담은 sql 파일을 형상관리한다고 생각하면 된다. flyway는 주로 형상관리 목적으로 사용되지만 테스트 DB 환경 구축을 위해 사용될 수도 있다.반복 실행 가능한 R 파일을 통해 더미 데이터를 추가하여 DB 상태..

용어 정리 테스트 더블 : 실제 객체들 대신해서 테스팅에서 사용하는 모든 객체Dummy : 객체는 전달 되지만 사용되지 않는 객체Fake : 실제 동작은 하나 production과는 달리 단순화된 동작을 제공Stub : 미리 준비해둔 결과를 제공Spy : Stub의 역할을 하며 호출 내용에 대해 기록Mock : 호출 기록을 저장함, 주로 return type이 없는 더블에 많이 적용함 테스트 코드를 작성할 때, 테스트 대상이 아닌 의존 객체를 테스트 더블로 대체하여 사용하는 경우 모키토 프레임워크를 많이 이용한다.나 역시도 모키토 프레임워크를 이용하여 테스트 더블들을 조작하며 여러 시나리오에 대해 테스트를 했었다.허나, 모키토 프레임워크의 리플렉션 사용으로 인한 테스트 실행시간 부하, 스레드 언세이프로 ..
스프링 테스트의 경우 컨텍스트 로딩으로 많은 시간을 잡아 먹는다.잦은 컨텍스트 로딩은 테스트 코드 실행 시간을 많이 잡아먹는 주범이기도 한다.스프링은 각 테스트 케이스에서 사용하는 컨텍스트 설정이 같다면 이전에 로드했던 컨텍스트를 재사용하는 캐싱 기능이 존재한다.별도의 옵션 설정이 필요한 것은 아니고 컨텍스트 설정만 같다면 자동으로 재사용한다. [컨텍스트가 리로딩 되는 케이스]@WebMvcTest( value = [ MemberFindController::class ])class MemberFindControllerTest : BaseMockMvcTest() { @MockBean lateinit var memberFindReadCase: MemberFindReadCase companion..