본문 바로가기

CS

(39)
TDD와 BDD 패스트 캠퍼스 강의 'The RED 백발의 개발자를 꿈꾸며'와 카카오 if - "Kotest가 있다면 TDD 묻고 BDD로 가!"를 보고 정리 하였습니다. TDD와 BDD는 소프트웨어 개발 방법론에서 많이 쓰이는 것들이다. 이 두가지의 방법론은 전혀 다른 것이 아닌 테스트 코드를 작성하는 관점의 차이라고 볼 수 있다. 나의 경우, 분명 테스트 케이스를 설계하여 자신의 기능을 검증하는 것은 반드시 필요하다고 생각하지만 테스트 과정을 설계하는 것 자체가 어렵기도 하고, 그 과정에서 시간을 많이 소비하게 되어 효율적이지 않은 것 같다. TDD(Test Driven Development) 테스트로부터 시작하는 개발 방식(테스트 주도 개발)으로 기능을 구현하기 전에 테스트 케이스를 설계하고, 이 테스트를 통과할 ..
하노이 탑 문제 해결하기 문제 설명 세개의 탑이 있고 반경이 서로 다른 n개의 원반이 있다. 1. 한 번에 하나의 원반만 옮길 수 있다. 2. 쌓여있는 원반은 항상 아래의 원반보다 위의 원반이 작아야한다. 3. n개의 원반을 A에서 C로 옮겨라. 원반의 이동 횟수를 최소화하면서 이동 순서를 출력하라 문제 접근 위의 조건을 만족하며 n개의 원반을 C로 이동시키기 위해서는 반복적인 동작을 필요로 한다. 원반의 개수가 짝수인 경우 첫번째 원반을 B로 이동시키고, 홀수인 경우 C로 이동시키면서 처리하게 된다. 크게 생각해보면 n번의 원반을 C로 옮기기 위해서는 1부터 n-1번까지의 원반이 B에 위치해 있어야 한다. 즉 이 부분을 재귀적으로 처리한다면 문제를 쉽게 해결할 수 있다. 문제 해결 1. n번의 원반을 목적지(C)로 옮기기 위해..
Array VS Linked List 리스트 : 어떤 순서가 있는 데이터의 집합을 의미한다. Array(배열) 특징 Array는 배열로 연속적인 공간에 순차적으로 데이터를 저장할 수 있는 자료구조이다. 데이터를 입력할 때 인덱스 순서대로 입력이 되고, 메모리의 저장 위치도 인접한 위치에 저장이 된다. 데이터에 접근할 때는 인덱스 번호를 통해 접근하기 때문에 데이터의 양이 얼마나 많든 O(1)의 시간 복잡도로 탐색이 가능하다. 특정 인덱스의 데이터 삽입과 삭제에 있어서는 반드시 기존 데이터들의 이동을 필요로 하기에 O(n)의 시간이 소요된다. 배열을 정적으로 할당한 경우 배열의 크기는 Compile time에 할당되기 때문에 한번 사이즈가 정해지면 변경이 불가능하다. 배열은 메모리의 Stack 영역에 저장된다. 배열을 동적으로 할당한 경우 r..
Proxy 프록시 클라이언트와 서버 사이에서 중계 역할을 담당한다. 주로 보안, 트래픽 분산의 역할을 한다. 응용프로그램 수준에서만 동작(L7) 프록시(Proxy) 클라이언트와 서버 사이에서 중계기를 역할을 하며 서버 대신에 프록시 서버와 클라이언트 사이에서 통신을 하여 원활한 통신이 이루어질 수 있도록 하는 기능이 있음 캐시 / 필터 / 보안 / 트래픽 분산 등의 장점 서버의 대리 역할(리버스 프록시)을 할 때도, 클라이언트의 대리역할(포워드 프록시)을 할 때도 있음 프록시는 위치에 따라 포워드 프록시와 리버스 프록시로 나누어짐 포워드 프록시(Forward Proxy) 포워드 프록시는 인터넷과 클라이언트 사이에 위치 클라이언트의 요청을 프록시의 요청인 것처럼 하여 서버에 전송할 수 있음 서버에 요청된 정보를 캐시를 이용..
OSI 7 Layer와 TCP/IP 4 Layer OSI 7 계층과 TCP/IP 4 계층은 네트워크의 기본 계층 구조이다. TCP/IP 모델은 인터넷의 개발 이후 표준화되어 실질적인 통신에 쓰이고 있다. 즉, OSI 모델은 이론적으로 많이 활용이 된다. 일반적으로 하위계층은 하드웨어를 통해서 구현되었고, 상위 모델은 운영체제의 커널에 소프트웨어적으로 구현되었다. OSI 7 Layer 국제 표준기구(ISO)에서 표준화된 네트워크 구조를 제시한 기본 모델 통신 기능 7개의 계층으로 분할하여 각 계층마다 다른 계층과는 무관하게 자신의 독립적인 기능을 지원하도록 함 기술의 동작 원리나 분석할 때 많이 쓰임 1. Physical Layer (물리 계층) 하드웨어로 구성되어 있음 -> 전자회로 전기적 기계적 특성을 이용해서 통신 케이블로 데이터 전송 Bit(0, ..
Web에서의 인증과 인가(세션과 토큰) 보안에 있어서 인증과 인가는 필수적인 요소로 정보 시스템에서 사용자나 시스템의 접근을 제어하는 중요한 역할을 한다. 인증을 통해 사용자의 신원을 파악하고, 인가 과정을 거침으로서 사용자가 특정 자원이나 기능에 접근할 수 있는 권한을 확인하고 부여한다. 해당 글에서 혼동되기 쉬운 용어인 인증과 인가의 정리와 함께 웹에서는 인증과 인가가 어떠한 방식으로 이뤄지고 있는지 알아보자인증과 인가1. 인증(Authentication)사용자의 신원을 확인하는 절차인증은 사용자가 자신임을 증명하는 과정이다. 상황에서 예를 찾아보면 주민등록증이 해당한다. 2. 인가(Authorization)인증된 사용자가 특정 자원이나 기능에 접근할 수 있는지 확인하는 절차  인가는 확인된 사용자가 무엇을 할 수 있는지 결정하는 과정이다..
17. Git으로 버전 관리하기 Git VCS(Version Control System)인 소프트웨어 툴 지속적인 소스코드 관리 변경 사항 저장 병렬 처리가능 히스토리를 관리함에 따라 추적가능 Branch와 Merge 기능 제공 git 사용 환경 Setting하기 1. cmd 창에 git이 설치되어 있는지 확인합니다. ○ git --version 커맨드를 사용하여 설치되어 있는지 확인하고 없으면 아래 사이트에서 다운 받아줍니다. Git git-scm.com 2. 개행문자(Newline) 설정 # macOS, Linux $ git config --global core.autocrlf input # Windows $ git config --global core.autocrlf true 3. 사용자 정보 입력 #커밋(버전 생성)을 위한 정보..