Hello I'm Developer Jun Young Choi
(Test) TDD와 BDD의 간단한 소개와 차이점
TDD와 BDD, 누구나 다 중요하다고 생각하고 필요하다고 생각하는데 막상 이 둘의 개념이 정확히 무엇이고 둘 간의 차이가 어떤건지에 대해서는 명확하게 답할 수 없었다. Kakao if에서 TDD와 BDD…
(MySQL) Transaction isolation level
Transaction의 isolation level이란, 여러 transaction이 동시에 처리될 때, 특정 transaction이 다른 transaction…
(Microservice Pattern) 5. Business logic 설계
Business logic이 여러 Service에 산재하는 MSA에서는 복잡한 business logic을 개발하기가 Monolith에 비해서 훨씬 까다롭다. 대표적인 골치 아픈 문제는 아래와 같다. Domain model…
(Microservice Pattern) 4. Transaction management - Saga
MSA 기반의 Application을 만드는 과정에서 가장 중요한게 ACID한 Transaction을 보장하는 것이다. MSA에서는 구조적인 한계 때문에 ACID Transaction 대신 Saga라는 message driven 방식의 local…
(Microservice Pattern) 3. IPC
3.1 MSA IPC 개요 상호 작용 스타일 Service API에 알맞은 IPC를 선택하기 전에 client/service간 상호 작용 스타일을 잘 살펴보면, Requirements에서 벗어나는 일 없이 개발이 가능하다. client/service…
(Microservice Pattern) 2. 분해 전략
2.1 - Microservice Architecture란 무엇인가? SW Architecture란, 구성 요소 및 그들 간의 dependency로 엮인 고수준의 구조물. multidimmensional…
(Docker) Docker network command 정리
docker network? Docker container는 기본적으로 격리된 환경에서 돌아가기 때문에, 다른 container와 통신이 불가능하다. 그렇기 때문에 kafka나 flink를 clustering하기 위해서는 여러 개의 container…
(Microservice Pattern) 1. 모놀리식 지옥에서 벗어나라 요약
1.1 - 서서히 모놀리식 지옥에 빠져들다 기존 legacy(FTGO) 아키텍쳐가 비대해지면서 생기는 문제 (ex. 배포 및 dependency 관리의 어려움, …)가 발생하여 이를 해결하기 위한 방법으로 MSA…
(Spring) Custom Serializer를 활용해서 Response object를 jsonarray 형태로 바꾸기
Problem Spring에서 API를 개발할 때 흔히 DTO를 ResponseEntity안에 넣어서 반환한다. 하지만 요구사항에 따라서 DTO의 특정 항목을 제외시키거나, 추가하거나, Class의 구조와는 전혀 다른 형태로 Response…
(Spring Data JPA) Entity의 PK를 비즈니스 값으로 잡으면 안되는 이유
Problem 보통 Entity를 설계할 때 PK를 어떤걸로 잡을 지 고민하는 경우가 많다. 종종 비즈니스 로직 상의 unique key나 이러한 여러 key값을 조합하여 composite key를 생성해서 PK…
(MySQL) Clean Shutdown
MySQL server가 시작되거나 종료될 때는 MySQL server(InnoDB storage engine)의 buffer pool 내용을 백업하고 기록하는 과정이 내부적으로 실행, 실제 buffer pool의 내용을 백업하는게 아니라 pool…
(Leetcode) 177. Nth Highest Salary
Description: Write a SQL query to get the nth highest salary from the Employee table. For example, given the above Employee table, the nth…
(Leetcode) 1417. Shuffle the Array
Description: Given the array nums consisting of elements in the form . Return the array in the form . Example 1: Example 2: Example…
(Leetcode) 700. Search in a Binary Search Tree
Description: You are given the of a binary search tree (BST) and an integer . Find the node in the BST that the node’s value equals and…
(Spring) DI를 하는 세 가지 방법(@Resource, @Inject, @Autowired)의 차이
Bean Object 사이에 DI를 위해서 dependency meta 정보를 작성하는 방법은 크게 두 가지가 있다. 명시적으로 구체적인 bean을 지정하는 방법 일정한 규칙에 따라 자동으로 선정하는 방법 보통 후자의 방법에서 type…
(Leetcode) 1025. Divisor Game
Description: Alice and Bob take turns playing a game, with Alice starting first. Initially, there is a number on the chalkboard. On each…
(Basic concept) Topic, Partition, Record
Topic, Partition Topic은 Kafka에서 data를 구분하기 위해 사용하는 단위이며, Topic은 1개 이상의 partition을 가지고 있다. Partition에는 producer들이 보낸 data…
(Basic concept) Kafka Client
Kafka Client Kafka cluster에 명령을 내리거나 data를 송/수신 하기 위해서 Producer, Consumer, Admin client를 제공하는 Kafka Client를 이용해서 Application을 개발한다. Kafka…
(Basic concept) Broker, Cluster, Zookeeper란
Broker, Cluster, Zookeeper Broker는 Client와 data를 주고받기 위해 사용하는 주체이자, data를 분산 저장하여 장애가 발생하더라도 안전하게 사용할 수 있도록 도와주는 application 1개의 broker…
(Leetcode) 338. Counting Bits
Description: Given an integer , return an array of length such that for each ( <= <= ), is the number of ’s in the binary…
(Java) Introduce Stream
Stream이란? Data 처리 연산을 지원하도록 source에서 추출된 연속된 요소들이라고 정의 가능하다. Java 8에 새로 추가된 기능으로 선언적으로 collection 데이터를 처리할 수 있게 코드를 짤 수 있다. 별도 multi-thread…
(Leetcode) 121. Best Time to Buy and Sell Stock
Description: You are given an array prices where is the price of a given stock on the day. You want to maximize your profit by choosing a…
(Leetcode) 1. Two Sum
Description: Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You…
(Java) Introduce Garbage Collection
Garbage Collector? C와는 다르게 JAVA는 code상에서 임의로 memory를 명시적으로 해제하지 않는다. Heap내의 Object 중 Garbage를 검색하고, 이를 처리해서 Heap의 Memory를 회수하는 기능 Garbage…
Introduce Kafka
탄생 배경 LinkedIn의 파편화 된 내부 service간 data flow를 개선하기 위해서 탄생 Before 각 단위 시스템 끼리 직접 통신하며 데이터 처리 각 단위 시스템 간 소스 관리 및 버전 관리에서 문제가 발생 After…
(Spring MVC) Filter와 Interceptor의 차이점
Problem Spring MVC를 이용해서 특정 request에 대한 전처리, 후처리가 필요한 경우가 있는데, 이런 기능을 구현하기 위해서 Interceptor나 Filter…
(Spring Data Jpa) @Column(nullable=false)와 @NotNull의 차이
Problem Entity Class를 작성하면서, field값들에 대한 Validation check를 해야 할 필요가 있는데, 이러한 경우 사용되는 과 두 annotation에 대한 정확한 비교를 해 보자 둘 다 해당 field에 null…
(Leetcode) 704. Binary Search
Description: Given a sorted (in ascending order) integer array nums of n elements and a target value, write a function to search target in…
(Leetcode Challenge) Sort Colors
Description: Given an array with n objects colored red, white or blue, sort them in-place so that objects of the same color are adjacent…
(Java) Java Basic Study
Primitive Type 몇 가지 Java Primitive Type의 이름을 제시하고, 해당 Type이 JVM에서 어떻게 처리될 지 설명하라 boolean, int, double와 같은 Primitive type이 존재한다. JVM…
(Leetcode Challenge) Search Insert Position
Description: Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if…
(Leetcode Challenge) Invert Binary Tree
Description: Invert a binary tree. Example: Input: Output: Code:
(Leetcode Challenge) Is Subsequence
Description: Given a string s and a string t, check if s is subsequence of t. A subsequence of a string is a new string which is formed…
(Leetcode Challenge) Power Of Two
Description: Given an integer, write a function to determine if it is a power of two. Example: Example2: Example3: Code:
(Leetcode) 438. Find All Anagrams in a String
Description: Given a string s and a non-empty string p, find all the start indices of p’s anagrams in s. Strings consists of lowercase…
(Leetcode) 701. Insert into a Binary Search Tree
Description: Given the root node of a binary search tree (BST) and a value to be inserted into the tree, insert the value into the BST…
(Leetcode) 1329. Sort the Matrix Diagonally
Description: Given a m * n matrix mat of integers, sort it diagonally in ascending order from the top-left to the bottom-right then return…
(Leetcode) 1282.Group the People Given the Group Size They Belong To
Description: There are n people whose IDs go from 0 to n - 1 and each person belongs exactly to one group. Given the array groupSizes of…
(Leetcode) 69. Sqrt(x)
Description Implement int sqrt(int x). Compute and return the square root of x, where x is guaranteed to be a non-negative integer. Since…
(Leetcode) 627. Swap Salary
Description Given a table salary, such as the one below, that has m=male and f=female values. Swap all f and m values (i.e., change all f…
(Leetcode) 1114. Print in Order
Description Suppose we have a class: The same instance of Foo will be passed to three different threads. Thread A will call first(), thread…
(Leetcode) 807. Max Increase to Keep City Skyline
Description In a 2 dimensional array grid, each value gridi represents the height of a building located there. We are allowed to increase…
(Leetcode) 620. Not Boring Movies
Descrption X city opened a new cinema, many people would like to go to this cinema. The cinema also gives out a poster indicating the movies…
(Leetcode) 595. Big Countries
Description There is a table World A country is big if it has an area of bigger than 3 million square km or a population of more than 2…
(Leetcode) 1179. Reformat Department Table
Description Table: (id, month) is the primary key of this table. The table has information about the revenue of each department per month…
(Leetcode) 442. Find All Duplicates in an Array
Description Given an array of integers, , some elements appear twice and others appear once. Find all the elements that appear in this…
(Leetcode) 912. Sort an array
Description Given an array of integers , sort the array in ascending order. Note 1 <= A.length <= 10000 -50000 <= Ai <= 50000 Code Another…
(Kotlin) Kotlin Basic Syntax Study
Define Variables var / val ES6의 let/const와 유사한 느낌이나, Type checking 역시 존재 변수의 타입을 명시적으로 선언하지 않았을 경우에는 compile…