[LeetCode#1143] Longest Common Subsequence
·
Algorithm/내용 정리
❐ Description1. Requests주어진 두 문자열의 겹치는 subsequence 중 가장 긴 문자열의 길이를 반환하라.겹치는 부분이 없다면 0을 반환하라. 두 문자열의 순서를 유지한 채 공통으로 존재하는 가장 긴 부분 수열을 찾는 것 2. Constrains`1 제약 조건에 의하면 시간복잡도는 최대 O(n²)까지는 괜찮다.     ❐ Approach  1 - 2D memoization (Bottom - Up)class KtSolutionV1 { fun longestCommonSubsequence(text1: String, text2: String): Int { val maxRow = text1.length val maxCol = text2.length ..
LCS 알고리즘
·
Algorithm/내용 정리
❐ Description[LeetCode#1143. Longest Common Subsequence]를 풀면서 학습한 LCS 알고리즘 정리 *참고 블로그 : [알고리즘] 그림으로 알아보는 LCS 알고리즘    ❐ Longest Common Subsequence란?우선 Longest Common Subsequence의 의미를 이해하자.LCS란 두 문자열의 순서를 유지한 채 공통으로 존재하는 가장 긴 부분 수열을 찾는 것이다.부분 수열이기 때문에, 주어진 문자열에서 순서만 유지하면 몇 개든 건너 뛰어도 된다.Longest Common Substring이란?주어진 문자열에서 순서를 유지한 채 공통으로 존재하는 연속된 문자를 찾는 것     ❐ 점화식 이해하기1. 두 문자가 동일한 경우//text1[i - 1]..
DDD(Layerd) 기반으로 설계해보자!
·
Project/페이스콕
❐ Description페이스콕(레슨 파트)를 처음 설계할 때 DDD(Layered)를 적용하기로 마음 먹었다.이유는 과거에 위웃 프로젝트를 개발할 때 DDD를 점진적으로 적용하면서 많은 장점이 있다고 느꼈기 때문이다. 개발에 들어가기 앞서, 어떤 생각을 하면서 DDD 구조를 잡아가는지 기록하고 수정을 반복해보자!     ❐ 프로젝트 이해하기Bounded Context를 정하기 앞서, 해당 프로젝트의 기획과 비즈니스 플로우를 이해해야 했다.기획서를 바탕으로 분석한 결과, 프로젝트의 목적을 다음과 같이 정의할 수 있었다.베드민턴 레슨 예약 시스템을 제공하여유저가 보다 쉬운 경로로 베드민턴을 배울 수 있게하자! 위 목적을 도출하는 과정에서 중요 키워드(레슨, 예약, 유저)를 3개 추출했으며, "예약"이라는 ..
Bounded Context
·
Architecture/DDD
❐ Description도메인 주도 설계(에릭 에반스) 14장 내용 중 Bounded Context를 읽고 요약한 글이다.   ❐ Bounded Context1. Bounded Context란?Bounded Context는 규모가 큰 프로젝트에서 여러 개의 도메인이 공존할 때 각 도메인의 경계를명확히 구분하는 개념이다.   2. 왜 Bounded Context가 필요한가?규모가 큰 프로젝트에서는 여러 개의 모델이 존재하며, 팀마다 다르게 해석할 여지가 있다.동일한 시스템을 개발하는 팀이 서로 다른 모델을 적용하면 혼란이 발생할 수 있다.명확한 경계를 정의하지 않으면, 팀 간 모델 차리를 빠르게 인지하기 어렵다. 결과적으로 예상치 못한 시스템 오류가 발생할 가능성이 높다.  3. 바운디드 컨텍스트의 핵심 ..
Sealed Class & Interface
·
Langauge/Kotlin
❐ DescriptionEnum과 Sealed 모두 제한된 유형의 계층 구조를 표현하는데 사용되지만, 각각의 목적과 사용 방식에 차이가 있다.오늘은 Sealed class/interface의 특징과 enum class와 차이를 공부해보자.     ❐ Sealed Class1. 정의sealed class는 같은 파일 내에서만 하위 클래스를 가질 수 있도록 제한된 계층 구조를제공하는 추상 클래스의 한 종류다.sealed class Shape { class Circle(val radius: Double) : Shape() class Rectangle(val width : Double, val height : Double) : Shape() object NotAShape : Shape()}  2..
7. 언어의 사용 (확장 예제)
·
Architecture/DDD
❐ Description이번 장은 앞선 내용들을 활용한 실습 예제를 살펴보는 장이다.이번 장 내용중 `새로운 기능 도입 : 할당량 검사` 파트만 간단하게 정리해보자.    ❐ 새로운 기능 도입 : 할당량 검사요약하자면, 기존에 존재하는 `해운 모듈`에 `영업 관리 시스템`을 통합하는 것이다.`영업 관리 시스템`은 `해운 모듈`에 존재하는 도메인 모델을 염두해두고 만든 것이 아니기 때문에,Booking Application에서 `영업 관리 시스템`를 수용하게 되면, 결합도가 높아지고 유지 보수가 어려워진다.그럼 어떻게 서로 다른 모델을 가진, 두 모듈을 유연하게 통합할 수 있을까? 책에서는 Anti Corruption Layer(오류 방지 계층)를 소개해주고 있다.약간 Adapater Pattern과 유사..
RabbitMQ 도입기
·
Project/페이스콕
❐ DescriptionRabbitMQ에 대해서 공부왜 SQS를 걷어내고 RabbitMQ를 도입하게 된건가RabbitMQ와 SpringBoot 연동로컬에서 RabbitMQ 테스트      ❐ RabbitMQ란?[TODO] RabbitMQ란? 포스팅 링크[TODO] 표준 메세징 프로토콜 정리하기 (참고 링크)    ❐ RabbitMQ 도입하기1️⃣ Private EC2 접근하기우선 ssh 커맨드로 public EC2에 접근한다. 현재 RabbitMQ가 구동되는 EC2는 private-subnet에 있기 때문에public EC2에서 또 ssh 커맨드를 사용해야 한다. 그러나 public EC2에는 pem 파일이 없다. 따라서 내 로컬 PC에서 public EC2에 pem 파일을 옮겨줘야 한다. 이럴 때 sc..
SSH 터널링으로 private-subnet에 있는 RDS 접근하기
·
Project/페이스콕
❐ Description현재 RDS는 보안상의 이유로 private-subnet 위치한다. 그래서 매번 콘솔로 접근을 해야하는데,쫌 번거롭다고 느꼈다. 그래서 오늘은 SHH 터널링을 통해서 private-subnet에 위치한 RDS에 접근하려고 한다.최종적으로 DataGrip에서 확인할 수 있게 끔 설정을 마무리 해볼 것이다.     ❐ 터널링 준비하기1. IAM 정책 생성기본적으로 AmazonSSMManagedInstanceCore 정책이 필요하다.추가적으로 ssm:DescribeInstanceInformation 권한이 없다면, 아래 command를 실행할 때 권한이 없다는 에러가 발생한다. aws ssm describe-instance-information --query "InstanceInform..