전체 글 13

스프링의 의존성 주입(DI)

의존성 주입(DI, Dependency Injection)이란? 의존성(dependency)이란 하나의 객체 A가 다른 객체 B 없이 제대로 된 역할을 할 수 없는 관계를 말한다. 이때 객체 A가 객체 B에 의존적이다 라고 표현한다. 주입(injection)이란 객체 A가 객체 B를 만들어 사용하는 방식과는 달리, 객체 A가 객체 B를 필요로 한다는 신호를 보내면 제3의 존재(Injector)가 객체 B를 객체 A에 전달해주는 것을 의미한다. 따라서 의존성 주입이란, 객체 A가 의존성을 가질 객체 B를 필요로 하는 상황에서 제3의 존재가 객체 B를 찾아 객체 A에 전달해주는 것을 의미한다. 여기서 객체 A는 클라이언트를 의미하고, 객체 B는 서비스가 된다. 의존성 주입이 왜 필요한가? 서비스를 사용하는 ..

개발 2020.01.01

스프링 프레임워크(Spring Framework)란?

프레임워크란? 프레임워크(Framework)는 뼈대나 근간을 이루는 코드들의 묶음이다. 프레임워크는 프로그램의 기본 흐름이나 구조를 정하고, 개발자는 그렇게 미리 완성된 구조에 맞추어 코드를 작성한다. 따라서 개발자는 개발 시간을 단축할 수 있고, 코드의 일정한 품질이 보장되는 결과 또한 얻을 수 있다. 스프링 프레임워크의 등장 배경 스프링 프레임워크가 생겨난 2000년도 초엔 기업 단위의 대규모 개발이 활발함에 따라 여러 프레임워크가 이미 생겨나 자리 잡고 있었다. 하지만 그러한 프레임워크들의 문제점은 너무 무겁고, 복잡하고, 특정 분야에 전문적이며, 다른 프레임워크와의 융화가 쉽지 않다는 점이었다. 스프링 프레임워크는 그러한 프레임워크들의 문제점을 대부분 극복한 일종의 경량 프레임워크(light-we..

개발 2019.12.26

펜윅 트리(Fenwick Tree)란?

펜윅 트리란? 펜윅 트리는 배열의 부분 합(prefix sum)을 계산할 때 사용되는 자료구조이다. 바이너리 인덱스 트리(Binary Indexed Tree, BIT) 또한 펜윅 트리를 지칭하는 용어이다. 펜윅 트리를 왜 써야 하는가? 앞에서 펜윅 트리가 부분 합을 계산할 때 사용된다고 했다. 정확히 말하자면 펜윅트리는 실시간으로 배열의 요소가 업데이트 되는 상황에서 부분합을 구할 때 사용된다. 예를 들어 [4, 5, 6, 7, 8, 9] 배열이 있고, 0번 인덱스부터 3번 인덱스까지 더한다면 4+5+6+7 = 22가 된다. 여기서 2번 인덱스를 6에서 10으로 변경한다고 하자. 그렇다면 앞서 0번 인덱스부터 3번 인덱스까지 더한 부분 합 22는 더 이상 쓸모없게 된다. 2번 인덱스가 6에서 10으로 바..

개발 2019.12.22

함수 포인터(Function Pointer)란?

함수 포인터란? C언어의 문법 중, 변수가 아닌 함수를 가리키는 포인터를 말한다. int 자료형을 가리키는 int *, char 자료형을 가리키는 char * 포인터와 같이, 함수를 가리키는 포인터도 존재할 수 있다. 함수 포인터를 왜 쓰나요? 함수 포인터는 콜백(callback) 매커니즘을 구현할 때 함수를 또 다른 함수의 인자(argument)로 넘겨주기 위해 주로 사용된다. 또한, 여러 개의 함수를 배열로 관리하고자 할 때 사용할 수도 있다. 함수 포인터의 특징 함수 포인터도 포인터이기 때문에, 일반적인 포인터와 마찬가지로 메모리 주소를 가리킨다. 하지만 일반적인 포인터와 달리, 함수 포인터는 데이터가 아닌 코드의 위치를 가리킨다. 마치 배열을 가리키는 포인터가 배열의 시작부분을 가리키는 것과 같이..

개발 2019.12.02

커버로스 프로토콜(Kerberos Protocol)이란?

커버로스 프로토콜이란? 커버로스는 티켓(ticket) 기반의 컴퓨터 네트워크 인증 프로토콜이다. 보안이 보장되지 않은 네트워크 환경에서 요청을 보내는 유저와 요청을 받는 서버가 서로의 신뢰성을 확보하기위해 사용된다. 티켓이 뭔가요? 왜 쓰는거죠? 커버로스에서 사용하는 티켓은 유저 아이디를 안전하게 전달하는 데 사용되는 정보 패킷이다. 티켓에 포함하는 대표적인 정보들은 다음과 같다. 유저 아이디 유저 호스트의 IP 주소 타임 스탬프(time stamp, 시간 기록) 티켓 수명을 정의하는 값 세션 키 이러한 정보들을 담고 있는 티켓은 티켓을 발급하는 서버의 비밀 키(secret key)로 암호화(encrypt)된다. 커버로스 프로토콜의 동작 과정 AS(Authentication Server)는 요청을 보내는..

개발 2019.11.24

CSS 선택자(Selector)란?

CSS는 무엇인가? CSS는 Cascading Style Sheets의 약자로, html 혹은 xml로 쓰여진 문서를 어떻게 표현할 것인지를 명시하는 스타일시트(style sheet) 언어이다. 스타일 시트는 rule set(=rule)의 연속으로 구성된다. Rule set은 html 문서의 어떤 부분을 어떻게 렌더링할지 정해주는 역할을 한다. Rule set의 선택자(selector)는 html문서의 특정 요소(element)를 참조한 다음, 그 요소에 선언 블록(declaration block)에 해당하는 내용을 적용시켜준다. 선택자는 어떻게 html문서의 요소를 참조하는가? 선택자는 일종의 패턴이다. 따라서 선택자의 형태를 결정하는 것이 곧 html문서의 어떤 요소를 참조하는지 결정하는 것이라고 할..

개발 2019.11.15

패키지 매니저(Package Manager)란?

패키지 매니저란? 패키지 매니저(Package manager)는 패키지를 다루는 작업을 편리하고 안전하게 수행하기 위해 사용되는 툴이다. 여기서 패키지를 다루는 작업이란 패키지를 설치, 업데이트, 수정, 삭제하는 작업을 의미한다. 패키지가 뭔데요? 어디에 쓰는 건가요? 패키지는 라이브러리(library)와 유사한 개념이다. 라이브러리가 코드의 작성을 위해 사용되는 코드의 묶음이라면, 패키지는 코드의 배포를 위해 사용되는 코드의 묶음이다. 따라서 패키지는 경우에 따라 라이브러리를 포함할 수도 있으며, 일반적으로 라이브러리나 실행 파일(executable)을 포함한다. 패키지는 다음 3가지 정보를 가지고 있는 코드의 배포 단위이다. 컴파일한 소프트웨어의 바이너리(binary) 환경 설정(configurati..

개발 2019.11.12

어떤 정렬 알고리즘을 사용할 것인가?

어떤 정렬 알고리즘을 사용할 것인가? 컴퓨터 과학에는 숫자 혹은 문자를 오름차순, 혹은 내림차순으로 정렬하는 알고리즘이 필요한 경우가 종종 발생하며, 그 문제를 해결하기 위한 많은 정렬 알고리즘이 있다. 정렬 알고리즘은 일반적으로 시간복잡도가 작을수록 더 좋은 알고리즘이라고 할 수 있다. Bubble Sort, Selection Sort, Insertion Sort의 경우 O(n^2)의 시간복잡도를 가지고, Quick Sort, Merge Sort의 경우 O(nlgn)의 시간복잡도를 가지며, Counting Sort, Radix Sort의 경우 O(n)과 O(dn)의 시간복잡도를 가진다. (d는 Radix Sort의 자릿수) 같은 정렬 알고리즘인 Counting Sort나 Radix Sort의 경우 O(..

개발 2019.05.28

백준 9251번 LCS 문제 풀이 (C++)

백준 9251번 LCS 문제 풀이 http://boj.kr/9251 9251번: LCS LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. www.acmicpc.net 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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 #include #include #include #include #include #include #include #i..

개발 2019.04.14

ARP(Address Resolution Protocol)가 동작하는 과정

ARP의 작동 원리 스위치는 콜리전 도메인(Collision Domain)을 쪼개주고, 라우터는 브로드캐스트 도메인(Broadcast Domain)을 쪼개준다.ARP의 동작 과정을 살펴보기 위해 우리가 관심을 가져야 하는 것은 브로드캐스트 도메인이다.라우터로 인해 나누어지는 네트워크는 브로드캐스트 도메인이라는 명칭 외에도, 서브넷 혹은 LAN(Local Area Network)이라고 부를 수 있다. 위 그림에선 네트워크가 192.168.1.0/24와 192.168.2.0/24 두 개의 서브넷으로 나누어져 있다. (IP주소의 호스트부분이 0이라는 것은 그 네트워크 자체를 의미한다.) 각각의 서브넷에 속한 네트워크 장비들은 다음과 같다. -192.168.1.0/24에 속한 네트워크 장비들 (24는 서브넷마스..

개발 2019.03.24