분류 전체보기

👨🏻‍💻 Development/🏗 Infra

[Review] "배민쇼핑라이브를 만드는 기술: 채팅 편"를 읽고

다니던 전 회사에서 NestJS와 Redis Pub/Sub 기능을 사용하여 분산환경에서의 채팅 서버를 구축한 적이 있었다. 하지만 개념들을 짚지않은채로 일단 되면 된다는 식으로 막무가내로 개발을 진행한 결과 나에게 남은 것도 없었고, 안정적인 서버를 구축할 수 없었다. 8개월이 지나고 프로그래머스 대브매칭에서 부트캠프를 진행하던 와중 이전 팀 멘토님께서 기술 블로그를 공유해 주셔서 읽어보았는데 나에게 너무 감명 깊었고 나에 대한 회고와 함께 리뷰를 해보기로 했다. "배민쇼핑라이브를 만드는 기술: 채팅 편" 배민쇼핑라이브 채팅을 자체 구현하기 위해 비동기 처리를 위한 Spring WebFlux와 채팅 서버들이 Redis Pub Sub을 통해 메시지를 주고받았도록 구성하였다. 또한 클라이언트와 통신을 위해 ..

👨🏻‍💻 Development/𝐀 Algorithm

2021년 09월 17일 TIL - 플로이드 와샬 알고리즘 (Java)

문제풀다가 모든 점에 대한 최단경로를 구해야하는 문제를 풀다가 플로이드 와샬을 떠올랐지만 알고리즘을 까먹엇다. (대충 3중 for문 이라는 것 정도..) 특징 다익스트라 알고리즘은 하나의 정점에서 출발했을 때 다른 모든 정점으로의 최단 경로를 구하는 알고리즘. 플로이드 와샬 알고리즘은 모든 정점에서 모든 정점으로의 최단 경로를 구하는 알고리즘. 3중 for 문 (제일 밖) 첫 번째 for 문: 거쳐가는 노드 두 번째 for 문 : 출발 노드 세 번째 for 문 : 도착 노드 검증 출발→거쳐 + 거쳐→도착 가 출발→도착 보다 더 짧으면? 출발→도착 갱신. Code for(int k = 0; k < number ; k++) { for(int i = 0; i < number ; i++) { for(int j ..

👨🏻‍💻 Development/☕️ Java

2021년 09월 16일 TIL - Mocking Static Method

배경 & 문제점 바우처 관리 프로그램을 JAVA Spring 프레임워크로 구현하다가 Test Code 작성 중에 난관에 부딪혔다. VoucherService 테스트 코드를 작성하는데 Mockito 라이브러리를 이용해서 행위에 대한 테스트를 구현한다. class VoucherServiceTest { @Test @DisplayName("voucher가 생성되어야 한다.") void testCreateVoucher() { // ... } } Voucher Class를 만드는 VoucherFactory 클래스의 method인 createVoucher() 가 정해진 인스턴스(fixedAmountVoucher)를 반환하도록 mocking하려고 한다. // VocherFactory.class public class ..

👨🏻‍💻 Development/𝐀 Algorithm

2021년 09월 10일 TIL - 이진 탐색

변별력 있는 탐색 문제에서 이진 탐색이 자주 출몰한다. 이진 탐색이란 우선! 정렬된 리스트에서 사용 가능하다. 탐색 범위를 반으로 줄여나가면서 데이터를 빠르게 탐색 한다. 3가지 변수가 사용됨 : 시작점, 끝점, 중간점 직접 구현 public class Solution { public int binarySearch(int[] arr, int target) { int first = 0; // 시작점 int last = arr.length - 1; // 끝점 int mid; // 중간점 while (first

👨🏻‍💻 Development/💾 Database

2021년 09월 09일 TIL - Database Transaction Isolation Level

Transaction Isolation Level Transaction이란 데이터베이스에서 하나의 논리적 작업 단위를 구성하는 일련의 연산들의 집합을 트랜잭션이라고 한다. 트랜잭션은 A.C.I.D 성질이라고 하는 다음의 네 가지 성질로 설명된다. Atomicity 트랜잭션의 모든 연산들이 정상적으로 수행 완료되거나 아니면 전혀 어떠한 연산도 수행되지 않은 상태를 보장 (0 or 1) Consistency 고립된 트랜잭션의 수행이 데이터베이스의 일관성을 보존 랜잭션 수행 전후의 데이터베이스 상태는 각각 일관성이 보장되는 서로 다른 상태 Isolation 여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야 한다. Durability 트랜잭션이 ..

👨🏻‍💻 Development/𝐀 Algorithm

2021년 09월 08일 TIL - Heap (Java)

Heap 우선 순위 큐를 하다가 Heap 구조를 사용한다는 것을 보았는데 Heap 자료구조란 무엇일까? 힙은 일종의 BinaryTree 이며 수의 집합에서 가장 작은 수나 가장 큰 수만을 자주 꺼내올 때 유용한 자료구조 가장 큰 / 작은 수 가져올때 시간 복잡도 : O(log N) 예: 최소 힙 구현 규칙이 있다. 루트는 가장 작은 값이여야 함. 자식은 자신보다 크기만 하면됨. 완전 이진 트리의 규칙을 그대로 적용 힙을 배열 형태로 구현 왼쪽 자식은 (자신의 인덱스 * 2) 오른쪽 자식은 (자신의 인덱스 * 2 + 1) 자신의 부모는 (자신의 인덱스 / 2) Heap 정의 public class Heap { public static final int MAX_N = 10001; public int[] ar..

👨🏻‍💻 Development/☕️ Java

2021년 09월 07일 TIL - 의존 역전 원칙 (Java)

높은 수준의 모듈? 낮은 수준의 모듈? 이해가 안되어서 TIL에 정리하고자 한다. Dependency Inversion Principle (의존관계 역전) 높은 수준의 모듈은 낮은 수준의 모듈에 의존하지 않아야 한다. 두 모듈 모두 추상화에 의존해야 한다. 추상화는 세부 사항에 의존하지 않아야 한다. 세부 사항은 추상화에 의존해야 한다. 예시 만일 우리가 MySQL 데이터베이스 사용하는 자바 어플리케이션을 만든다고 해보자. 그래서 (높은 수준) Java Application에서 (낮은 수준)MySQL ODBC Driver class를 이용해 작업하고 있다. // Java Application public class Main { public static void main(String[] args) { My..

황일용
'분류 전체보기' 카테고리의 글 목록 (3 Page)