본문 바로가기
728x90
반응형

전체 글72

[만들면서 배우는 클린 아키텍처] 02. 의존성 역전하기 단일 책임 원칙 (Single Responsibility Principle, SRP)컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다. 만약 컴포넌트를 변경할 이유가 한 가지라면 우리가 어떤 다른 이유로 소프트웨어를 변경하더라도 이 컴포넌트에 대해서는 전혀 신경 쓸 필요가 없다. 변경할 이유라는 것은 컴포넌트 간의 의존성을 통해 너무 쉽게 전파된다. 점선 화살표처럼 전이 의존성이라고 하더라도 어떤 컴포넌트의 의존성은 각각 이 컴포넌트를 변경하는 이유 하나씩에 해당한다. 컴포넌트 A는 다른 여러 컴포넌트에 의존하는 반면 컴포넌트 E는 의존하는 것이 없다.컴포넌트 E를 변경할 유일한 이유는 새로운 요구사항에 의해 E의 기능을 바꿔야 할 때뿐이다. 반면 컴포넌트 A의 경우에는 모든 컴포넌트에 의존하고 있기 때.. 2024. 10. 5.
[만들면서 배우는 클린 아키텍처] 01. 계층형 아키텍처의 문제는 무엇일까? 계층형 아키텍처는 견고한 아키텍처 패턴이다.웹 계층에서는 요청을 받아 도메인 혹은 비즈니스 계층에 있는 서비스로 요청을 보낸다. 서비스에서는 필요한 비즈니스 로직을 수행하고, 도메인 엔티티의 현재 상태를 조회하거나 변경하기 위해 영속성 계층의 컴포넌트를 호출한다. 장점 (계층을 잘 이해하고 구성한다면)웹 계층이나 영속성 계층에 독립적으로 도메인 로직을 작성할 수 있다.도메인 로직에 영향을 주지 않고 웹 계층과 영속성 계층에 사용된 기술을 변경할 수 있다.기존 기능에 영향을 주지 않고 새로운 기능을 추가할 수도 있다.잘 만들어진 계층형 아키텍처는 선택의 폭을 넓히고, 변화하는 요구사항과 외부 요인에 빠르게 적응할 수 있게 해 준다.문제점코드에 나쁜 습관들이 스며들기 쉽게 만들고 시간이 지날수록 소프트웨어를.. 2024. 10. 4.
[알고리즘] 깊이 우선 탐색(DFS, Depth First Search) 깊이 우선 탐색? 그래프에서 깊은 부분(자식들)을 우선적으로 탐색하는 방식이다. DFS는 스택이나 재귀 함수를 사용해서 구현할 수 있다. 탐색 과정이 한없이 진행되는 것을 막고 싶다면 깊이 제한(depth bound)를 사용해서 한업이 진행되는 탐색을 막을 수 있다. 장점 현 경로상의 노드들만을 기억하면 되므로 저장공간의 수요가 비교적 적음 최선의 경우, 가장 빠른 알고리즘. 운 좋게 항상 해에 도달하는 올바른 경로를 선택한다면, 깊이 우선 탐색이 최소 실행시간에 해를 찾음 찾으려는 노드가 깊은 단계에 있다면 BFS보다 빠르게 찾을 수 있음 단점 찾은 해가 최단 경로가 된다는 보장이 없음 최악의 경우, 가능한 모든 경로를 탐험하고서야 해를 찾으므로, 해에 도달하는 데 가장 오랜 시간이 걸림 구현 스택 f.. 2023. 7. 10.
PriorityQueue (우선순위 큐) 1. PriorityQueue? 일반적인 큐의 구조 FIFO(First In First Out)를 가지지만 데이터가 들어온 순서가 아닌 우선순위에 따라 순위가 높은 데이터가 먼저 나가는 자료구조이다. 우선순위 큐에 저장할 객체는 필수적으로 Comparable Interface를 구현해야 하며, compareTo()를 통해 해당 객체에서 처리할 우선순위 조건을 리턴해주면 PriorityQueue가 순위가 높은 객체를 추출해준다. PriorityQueue는 Heap을 이용하여 구현하는 것이 일반적이다. (최대 값이 우선순위인 큐는 최대 힙, 최소 값이 우선순위인 큐는 최소 힙) 2. method priorityQueue.add(1)// 값 1 추가. 문제 발생시 exception 반환 priorityQueu.. 2023. 7. 7.
Sync & Async / Blocking & NonBlocking CPU는 한정적인 자원이기 때문에 한정적인 자원을 효율적으로 사용해서 성능을 향상하기 위해 사용 1. Sync & Async - 동기(Sync): 여러 작업들이 같이 시작하여 같이 끝남. 작업 중에 다른 작업이 끼어들지 못함. - 비동기(Async): 작업들의 시작과 끝이 다름. 시작과 종료 시기를 신경 쓰고 싶지 않을 때 사용. 작업 중에 다른 작업이 끼어들 수 있음. 2. Blocking & NonBlocking - Blocking: 다른 작업의 실행이 현재 작업의 실행을 막음. 실행한 작업의 제어권을 다른 작업이 가져감. 다른 작업이 끝나야 원래의 작업 다시 실행 - NonBlocking: 다른 작업의 실행이 현재 작업의 실행을 막지 않음. 다른 작업이 별도의 제어권을 얻어서 함께 실행됨. 2023. 7. 7.
[CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [4] - AWS IAM, Github Action - [CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [1] - [CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [2] - HTTPS - [CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [3] - Multi Module + Docker 빌드 & 배포하기 AWS IAM github action을 통해 빌드하기 위해 AWS Elastic Beanstalk에 접근할 수 있는 권한을 가진 사용자가 필요하다. AWS IAM 콘솔에 가서 사용.. 2022. 9. 19.
728x90
반응형