본문 바로가기

반응형

전체 글

(76)
[디자인패턴] 객체지향 설계 원칙 SOLID 회사에 입사한지 1년이 넘어가는 JAVA 개발자지만 기존의 시스템을 운영/개발하면서 이전 개발자 분이 어떤 구조로 설계하셨는지, 내 코드가 그 설계를 해치지는 않는지 의구심이 들 때가 있다. 객체지향 설계 원칙을 공부하면서 생각에 확신을 더 갖고자 한다. 원칙을 지키는 사람이 되자 . . 화이팅 . . 객체지향 설계 5가지 원칙 SOLID 객체지향의 관점에서 자기 자신 클래스 안의 응집도는 높이고, 타 클래스 간 결합도는 낮추는 원칙 - SRP (Single Responsibility Principle) : 단일 책임 원칙 - OCP (Open-Closed Principle) : 개발 폐쇄 원칙 - LSP (Liskov Substitution Principle) : 리스코프 치환 원칙 - ISP (Int..
Bitbucket Bamboo CI/CD 구축 CI/CD CI (Continuos Integration) 개발, 리뷰 부터 빌드, 테스트까지의 과정이 통합적으로 이루어지는 것 CD (Continous Deployment) CI를 통해 수행된 결과물을 서버에 배포하는 것 CI/CD의 목적 어플리케이션 개발 단계를 자동화하여 보다 짧은 주기로 고객에게 제공하기 위함이다 빠른코드의 병합 정기적 혹은 빈번한 빌드 테스트 휴먼에러 방지 용이한 배포 * artifact : 소프트웨어 개발 프로세스에 의해 생산되는 무언가를 의미 Bitbucket과 Bamboo를 활용한 CI/CD bamboo 에서 build project 와 deploy project 를 별도로 관리하는 이유는 다음과 같다 권한 분리 build는 git push 마다 release version..
URL vs URI vs URN 흔히 알고있는 URL 이외에도 URI, URN이 있다는 것을 알게되었고 어떤 의미를 가지는지 어떻게 다른지 찾아보았다 ! URL ; Uniform Resource Locator 특정 서버에 존재하는 자원의 위치를 말한다 따라서 자원에 접근하는 방법이나 네트워크 위치를 표현하고 있어야한다 http://img.naver.net/static/www/dl_qr_naver.png - 네이버 앱QR코드의 이미지에 대한 URL URI ; Uniform Resource Identifier 통합 자원 식별자로서 네트워크 상에 존재하는 자원을 구분하는 식별자를 말한다 URI는 URN과 URL을 포괄하는 개념이다 URN ; Uniform Resource Name 자원의 이름을 나타낸다 따라서 해당 자원이 무엇인지 유일하게 ..
[알고리즘] Floyd Warshall Algorithm Floyd Warshall Algorithm 이란? 모든 정점에서 모든 정점으로 가는 최단거리를 구하는 알고리즘 특징 가중치/비가중치 그래프 모두에서 최단거리를 도출해낼 수 있다 음수 가중치를 가져도 사용가능하다 (단, cycle이 있고 가중치의 총 합이 음수인 경우엔 성립하지 않는다) 시간복잡도가 O(V³) 이다 다이나믹 프로그래밍(DP)을 사용하는 알고리즘이다 Floyd Warshall Algorithm 동작 과정 1. 모든 노드 무한대로 초기화 2. 자기 자신에게 가는 간선의 가중치는 0으로 설정 ( i -> i ) 3. 나머지 노드 방문하며 주변 노드에 방문하는 최단거리 갱신 - i 에서 j 로 가는데에 크게 두가지 경우로 나뉘고, 이 두가지 경우 중 최소값을 선택 1) i 에서 j 로 가는 경로..
프레임워크 vs 라이브러리 vs API 프레임워크 응용 프로그램이나 소프트웨어의 솔루션 개발 효율 향상을 목표로하는 소프트웨어 환경으로, 즉 프로그램에 기본이 되는 뼈대나 틀을 말한다 ex) JAVA 기반의 spring framework, python 기반의 django, javascript 기반의 node js 특징 소프트웨어의 형식 제공 → 규칙을 지켜가며 사용 응용프로그램이 수동적으로 프레임워크에 의해 사용됨 라이브러리 개발자가 사용할 수 있는 API들을 종류나 목적에 따라서 나누어 정의한 API 묶음, 즉 재사용 가능한 코드의 집합 ex) jQuery 특징 작은 기능들을 함수단위로 만들어 제공 응용프로그램이 능동적으로 라이브러리 사용 API (Application Programming Interface) 응용프로그램에서 사용할 수 있도..
[알고리즘] Trie Trie 란 ? 문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료구조 radix tree 혹은 prefix tree라고도 함 위와 같은 구조로 조회 시 문자열의 길이만큼의 시간 복잡도를 가진다 검색어 자동완성, 사전에서 찾기, 문자열 검사 등으로 활용된다 O(m) m:문자열 길이 Trie 구현 소스 class Node: def __init__(self, key): self.key = key self.child = dict() self.count = 0 class Trie: def __init__(self): self.head = Node(None) def insert(self, word): cur = self.head # 루트를 현재 포인터로 설정 for ch in word: cur.count..
[알고리즘] Dijkstra's Algorithm Dijkstra's Algorithm 두 정점 사이의 최단거리를 찾을 때 사용하는 알고리즘 가중치가 없는 최단거리를 구할 때 DFS, BFS 알고리즘을 사용하지만, 양의 가중치가 있고, 그 가중치가 모두 다를 경우 다익스트라 알고리즘을 사용한다 Dijkstra's Algorithm 동작 과정 1. 출발 노드 설정 2. 최단 거리 테이블 초기화 3. 방문하지 않은 노드 중에서 최단 거리가 가장 짧은 노드를 선택 4. 해당 노드를 거쳐 다른 노드로 가는 비용을 계산 후 최단 거리 테이블 갱신 5. 위 과정에서 3번과 4번을 반복 Dijkstra's Algorithm 구현 소스 아래는 다익스트라 알고리즘 문제인 '민준이와 마산 그리고 건우' 소스이다. https://www.acmicpc.net/problem/..
[DB] Index with B-Tree B-Tree Binary Tree 에서 확장된 트리 한 node가 가질 수 있는 child node의 수가 2개 이상인 트리 각 노드는 여러개의 key를 가질 수 있고 각 key에 대응하는 data도 가지고 있다 leaf node는 모두 같은 레벨에 존재해야 한다 B+ Tree B-Tree 에서 확장된 트리 branch node 에는 key값만 가지고 있고, leaf node에만 data가 저장된다 따라서 disk I/O 시 disk block에 더 많은 key를 배치할 수 있기 때문에 key 탐색 시 B-Tree 보다 상대적으로 적은 disk block만 읽어도 된다 (리프노드를 제외하고 데이터를 담아두지 않기 때문) ⟹ 성능 개선 leaf node는 linked list로 연결되어있다 B-Tree 가..

반응형