/users
/posts
/slides
/apps
/books
mysetting
/users
/posts
/slides
/apps
/books
Jeremy Kim
Software Engineer@daangn
Seoul. Korea
Joined on 2021년 05월 22일
Profile
Slide
Post
Like
3:35 5/23
sungjk.github.io
3:35
sungjk.github.io
coyled.com
https://sungjk.github.io/
stuff from coyled
최종 피드 수집: 2024-10-01 02:46
전체 (63)
13d
Apache Flink - Hello, World!
Apache Flink를 처음 접하신 분이나 간단한 예제를 작성해보고 싶은 분들을 위해 작성한 글이에요. Architecture를 포함한 자세한 내부 동작 방식은 Apache Flink 공식 문서를 참고해주시길 바랄게요.
Apac
0
0
0
읽기모드
3M
ZGC(Z Garbage Collector)
ZGC(Z Garbage Collector)는 JVM 진영에서 Serial → Parallel → CMS → G1 이후에 새롭게 등장한 Garbage Collector 입니다. JDK 11에 Experimental로 추가되었고,
0
0
1
읽기모드
3M
데이터 중심 애플리케이션 설계(Designing Data-Intensive Applications)
1장. 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션
p.6
신뢰성(Reliability)
하드웨어나 소프트웨여 결함, 심지어 인적 오류(human error) 같은 역경에 직면하더라도 시스템은 지속적으로 올바르게
0
0
1
읽기모드
6M
Stacked Diffs(Stacked PR)
커밋을 잘게 쪼개거나 PR(Pull Request) 본문에 친절하고 자세한 내용을 담아서 코드 리뷰를 요청하는 것은 리뷰를 좀 더 효율적으로 하기 위한 당연한 방법으로 여겨지곤 합니다. 이 외에도 더 나은 코드 리뷰 프로세스와 피
0
0
0
읽기모드
9M
AWS re:Invent 2023 후기
AWS re:Invent는 매년 미국 라스베이거스(Las Vegas)에서 열리는데, 세계 3대 컨퍼런스 중 하나라고 한다. 행사에 참여하기 전에는 그저 큰 행사 중 하나라고만 알고 있었는데 막상 다녀와보니 정말 맞는 말인거 같다는
0
0
0
읽기모드
1y
효율적인 테스트를 위한 Stub 객체 활용법
요즘 회사에서 테스트 코드를 작성하는 재미가 쏠쏠하다. 예전엔 정말 귀찮은 시간이었는데 지금은 나름의 노하우가 생겨서 그런 것 같다. 구체적으로 무엇이 달라졌을까? 그동안 테스트 코드를 작성하는 건 왜 힘들었을까? 크든 작든 오랜
0
0
0
읽기모드
1y
Netty Channel, EventLoop
Netty framework를 사용하다보면 Channel, EventLoop 같은 용어들을 자주 마주하게 된다. Spring Webflux에 대해 조금 알고 있다면 EventLoop가 조금은 친숙할 것이다. 크게 Thread 기반
0
0
2
읽기모드
1y
꾸준히 한다는 것
Lovin’ Spoonful - Daydream
달리고 있을 때 어떤 일을 생각하느냐, 라는 질문을 종종 받는다. 그런 질문을 하는 것은 대체로 오랜 시간을 달려본 경험이 없는 사람들이다. 그리고 그런 질문을 받을 때마다 나는 깊
0
0
2
읽기모드
1y
글또 8기를 마치며
지난 6개월
2023년 2월부터 7월까지 6개월 동안의 글또 8기 활동의 마지막 글이다. 패스를 한 번도 쓰지 않고 2주 마다 글쓰기 마쳤다. 6개월 동안 12개의 글을 썼구나. 다시 읽어보면서 어떤 글을 썼는지 살펴보자.
202
0
0
2
읽기모드
1y
IntelliJ 안에서 gRPC 호출 테스트하기
평소 gRPC Client를 개발하다가 호출 테스트를 위해 grpcurl을 주로 사용했다. gRPC Server가 Reflection Protocol을 지원하면 Stub 등을 만드는 프리 컴파일 과정이 필요없이 런타임에 gRPC
0
0
2
읽기모드
1y
모든 일은 때가 있다
흔히 인생을 사계절에 비유한다. 조금 진부한 것 같지만 계절의 비유만큼 인생을 잘 설명해주는 것도 없다. 인생이 란 매 순간에 일어난 일들만으로는 완결적인 의미를 가질 수 없다. 그것들이 서로 연결되면서 이 단계에서 저 단계로 넘
0
0
0
읽기모드
1y
Kotlin 코드 컨벤션 맞추기(feat. Spotless)
유지보수성, 결합도, 응집도 등의 특성들이 소프트웨어의 품질을 향상시키기 위한 전략이라고 한다면, 코드 품질을 개선하기 위한 전략으로는 코드 리뷰, 정적 분석, 코딩 컨벤션 등이 있다. 이 중에서도 정적 분석과 코딩 컨벤션을 도와
0
0
2
읽기모드
1y
ThreadPoolTaskExecutor의 waitForTasksToCompleteOnShutdown 속성 알아보기
어느 날, 회사에서 새로운 기능을 추가한 후 테스트를 하는 과정에서 비동기로 실행되는 작업이 제대로 동작하지 않는걸 확인했다.
에러 내용을 보면 ExecutorService를 통해 비동기적으로 2가지 작업이 실행되는데, 하나는 O
0
0
4
읽기모드
1y
Kafka의 ACKS, ISR 설정에 따른 NOT_ENOUGH_REPLICAS 에러 원인 살펴보기
운영중인 서비스에서 카프카로 이벤트 메시지를 발행하고 있다. 그런데 어느날 갑자기 개발 환경에서 아래와 같은 에러가 발생하면서 Producer의 메시지 발행이 실패하고 있었다.
그리고 위 에러와 관련 있어 보이는 아래 메시지도 발
0
0
2
읽기모드
1y
사내 JVM 챕터 테크톡 후기
4월초에 회사 블로그에 “매일 배포하는 팀이 되는 여정” 이라는 주제로 2편의 글을 작성했다. 틈틈히 회사에서 경험한 엔지니어링 관련 내용들을 블로그에 정리했었는데, 이 내용들을 보기 좋게 다듬었더니 글을 완성시키기까지 하루? 이
0
0
0
읽기모드
1y
기술적 겸손함을 가진 개발자되기
어느덧 실무 연차로 치면 7년차 개발자가 되었다. 첫 회사에서 처음 1년은 프론트엔드 개발을 했었으니, 백엔드 개발은 6년 정도 됐구나. 그동안 함께 일했거나 마주쳤던 서버 개발자들과 실무 커리어 그리고 기술 스택 면에서 조금 다
0
0
5
읽기모드
1y
Feature Toggle 150% 활용하기
지난 포스팅에서 우리 팀에 맞는 Git Branch 전략 선택하기라는 주제로 Github Flow를 적용한 이야기를 기록했었다. 글로 표현하려니.. 모든걸 다 담아내기엔 어려움이 적지 않았다. 실제로는 더 많은 고민과 이야기가 있
0
0
0
읽기모드
1y
우리 팀에 맞는 Git Branch 전략 선택하기
지금 팀에 합류한지 어느덧 2년이 다 되어간다. 합류 당시 작성된 코드 베이스가 한 줄도 없는 상황에서 새로운 제품을 만드는 것과 별개로, 개발 문화와 프로세스도 함께 만들어 나아갔다. 그 중에서도 배포를 하는 과정에서 우리 팀에
0
0
7
읽기모드
1y
다시 계획적인 글쓰기를 위해
매년 새해가 되면 친구들과 모여서 올해에 이루고 싶은 것들을 각자 적어보고 공유하는 시간을 가진다. 올해는 한라산에서 해돋이를 보고 카페에서 각자 2023년 목표를 적어보았다. 목표와 구체적인 계획을 작성하기 전에 작년엔 어떤 것
0
0
3
읽기모드
1y
Feature Branch
Feature Branch는 개발자가 새 기능에 대한 작업을 시작할 때 만드는 브랜치로, 소스 코드 브랜칭 패턴중 하나다. 개발자가 피쳐에 대한 모든 개발을 완료하면 나머지 팀의 변경 사항과 기능을 통합하는(integrates)
0
0
0
읽기모드
1y
Circuit Breaker
네트워크를 통해서 다른 시스템에서 실행 중인 소프트웨어를 원격으로 호출하는건 일반적인 패턴이다. 메모리 내에서 하는 호출과 원격 호출의 가장 큰 차이점 중 하나는, 원격 호출은 실패하거나 정해진 타임아웃 시간에 도달할 때까지 응답
0
0
0
읽기모드
1y
Frequency Reduces Difficulty
‘고통스러우면 더 자주하라‘는 말을 좋아한다. 표면적으로는 무의미해 보이지만, 깊이 파고 들어보면 행복을 가져다 주는 가치가 있다.
이에 대한 예시로 통합(Integration)이 있다. 대부분의 개발자는 자신이 한 작업을 다른
0
0
2
읽기모드
1y
Feature Toggles (aka Feature Flags)
Feature Toggles은 코드를 수정하지 않고 시스템 동작을 바꾸는 기술이다. "Feature Toggling"은 사용자에게 새로운 기능을 빠르고 안전하게 제공하는데 도움을 주는 패턴이다. Feature Toggles은 Fe
0
0
0
읽기모드
2y
Test Doubles - Stubbing
Stub은 없는 행위를 테스트가 함수에 덧씌우는 방법이다. 테스트에서 실제 구현을 대체할 수 있는 쉽고 빠른 방법이다. 아래 코드는 Stub을 이용해서 신용카드 서버의 응답을 시뮬레이션하는 예이다.
@Test
public void
0
0
0
읽기모드
2y
Java LocalDateTime과 MySQL DATETIME
Java 에서 날짜, 시간 데이터를 다루기 위해 제공하는 타입인 LocalDateTime과 MySQL에서 날짜, 시간 데이터를 다루기 위해 제공하는 타입인 DATETIME의 관계에 대해서 알아보겠습니다.
MySQL의 날짜/시간 관
0
0
989
읽기모드
2y
Gradle Test 실행시 Exception 포맷 지정하기
날짜, 시간과 관련된 테스트 코드를 작성하다 보면 로컬 환경에서는 잘 성공하는데, CI에서는 실패하는 현상을 종종 마주하게 된다. 대부분 Time Zone 설정이 로컬은 KST인데 CI는 UTC라서 발생하는 문제였다. 이번에도 마
0
0
0
읽기모드
2y
마스터스 오브 스케일
책 소개 키워드
스타트업, 기업가, 기업문화, 스타트업 성장, 리더십
인상 깊은 구절
p24 하지만 우리는 결국 자신의 직감에 귀를 기울여야 한다.
p38 투자자들이 당신의 아이디어를 받아들이지 않는다면 비슷한 아이디어를 가진 다
0
0
0
읽기모드
2y
도메인 주도 개발 시작하기
오탈자
p.125 코드 if (account.isBlocked()) -> if (store.isBlocked())
1. 도메인 모델 시작하기
p.33 핵심 규칙을 구현한 코드는 도메인 모델에만 위치하기 때문에 규칙이 바뀌거나 규칙
0
0
1
읽기모드
2y
만들면서 배우는 클린 아키텍처
계층형 아키텍처의 문제는 무엇일까?
계층형 아키텍처는 데이터베이스 주도 설계를 유도한다.
웹 계층은 도메인 계층에 의존하고, 도메인 계층은 영속성 계층에 의존하기 때문에 자연스레 데이터베이스에 의존하게 된다.
전통적인 계층형 아키
0
0
0
읽기모드
2y
설득을 위한 6가지 지름길
자신의 능력으로만 다른 사람을 설득하기 보다는 다른 사람들이 이미 하고 있는 행동을 보여주는게 더 효과적이다.
상호성(Reciprocity)
누군가로부터 호의, 선물 같은걸 제공받았다면 그걸 다시 돌려줘야하는 의무감을 느끼는 것
0
0
1
읽기모드
2y
Mocks Aren't Stubs
Regular Tests
public class OrderStateTester extends TestCase {
private static String TALISKER = "Talisker";
private static S
0
0
0
읽기모드
2y
날마다, 브랜드
백 명이 알고 있는 브랜드, 열 명이 좋아하는 브랜드, 한 명이 사랑하는 브랜드. 좋은 브랜드의 기준은 무엇일까.
오랜 시간 약속을 묵묵히 지켜내는 일은 어쩌면 다른 브랜드와 차별화하는 것보다 훨씬 더 어렵고 수고스러울지도 모른다
0
0
0
읽기모드
2y
마케터의 일
마케터는 어떤 고민과 생각을 하는지 잘 담아낸 책. 이 책을 읽고 ‘카피 한 줄에 몇 날 며칠 밤샘의 고민과 그들이 경험한 삶이 담아져 있겠구나’ 는 생각이 들었다.
p.16 누구에게 팔면 좋을지, 그들은 어떤 사람들인지, 그들은
0
0
0
읽기모드
2y
M1 맥북에서 gRPC osx-aarch_64 바이너리 문제 해결하기
Apple M1 맥북을 지급받고 개발 환경을 셋팅했는데, grpc를 사용중인 프로젝트에서 gradle build 스크립트가 실패했다.
이유는 별다른 옵션을 주지 않으면 grpc 패키지를 받아올때 환경에 따라서 x86_64 또는 a
0
0
111
읽기모드
2y
배움은 계속된다.
좋은 시스템을 설계하려면 다년간 많은 지식을 쌓아야 한다. 지식을 쌓는 한가지 지름길은, 실세계에서 쓰이는 시스템의 구조를 공부하는 것이다.
페이스북 타임라인: 비정규화의 힘
페이스북에서의 규모 확장성
타임라인: 한 사람의 인생을
0
0
0
읽기모드
2y
내가 느끼고 있는 감정 알아보기
나는 지금 어떤 감정을 느끼고 있을까? 우리는 경험한 만큼 느끼고 생각하고 볼 수 있다. 그래서 어떤 사물이나 상황을 마주했을 때 사람마다 느끼는 감정이 다르다. 그래서 내가 느끼고 있는 어떤 감정을 상대방에게 설명하는 건, 그
0
0
2
읽기모드
2y
코드 품질 개선하기(feat. ktlint)
Lint
유지보수성, 결합도, 응집도 등의 특성들이 소프트웨어의 품질을 향상시키기 위한 전략이라고 한다면, 코드 품질을 개선하기 위한 전략으로는 코드 리뷰, 정적 분석, 코딩 컨벤션 등이 있다. 이 중에서도 정적 분석과 코딩 컨벤
0
0
5
읽기모드
2y
UX Writing - 공백 상태와 404페이지
공백 상태
공백 상태를 그대로 내버려 두면 기본적으로 사용자에게 무엇이 없는지 알려주는 것이 된다. 즉, 사용자에게 무엇이 있는지 말할 기회를 놓치게 되는 것이다. 여기에 있을 수 있었던 것, 사용자가 해당 서비스로부터 얻을 수
0
0
47
읽기모드
2y
UX Writing - 플레이스홀더와 버튼
플레이스홀더
무엇보다 중요한 두 가지 원칙은 다음과 같다.
1. 레이블과 플레이스홀더를 분리하라.
레이블은 사용자에게 해당 입력 필드에 어떤 정보를 입력해야 하는지 알리는 제목 또는 질문이다. 사용자가 입력을 시작하면 해당 레이블
0
0
0
읽기모드
2y
UX Writing - 에러 메시지와 성공 메시지
에러 메시지
에러 메시지는 다음과 같은 세 가지 목표를 달성해야 한다.
문제가 있다는 것과 그 문제가 무엇인지 간단하고 명확하게 설명해야 한다.
사용자가 중단됐던 곳으로 되돌아가 프로세스를 바로 끝낼 수 있는 해결책을 제시해야 한
0
0
140
읽기모드
2y
대화형 글쓰기(UX Writing)
통념을 깰 준비가 돼 있는가?
인터페이스가 더 인간적이고 사회적 규범과 잘 맞을수록 더 많은 사용자가 접속하고 반응하며, 인터페이스가 제공하는 것이 더 설득력을 갖게 된다. 따라서 디지털 제품의 보이스앤톤이 최대한 사람의 대화에
0
0
11
읽기모드
2y
좋은 서비스 디자인
좋은 서비스는 찾기 쉽다.
좋은 서비스는 목적을 분명하게 설명한다.
좋은 서비스는 사용자의 기대치를 설정한다.
좋은 서비스는 사용자가 원하는 결과를 얻을 수 있도록 한다.
좋은 서비스는 친숙한 방식으로 기능한다.
좋은 서비스는 사
0
0
0
읽기모드
3y
코루틴(Coroutine)
비동기(Asynchronous), 논블로킹(Non-blocking) 프로그래밍은 자원을 효율적으로 활용하기 위해 중요하게 고려해야 할 부분이다. 그리고 코틀린은 언어 수준에서 코루틴(Coroutine)을 제공함으로써 이 문제를 유
0
0
0
읽기모드
3y
언카피어블(UNCOPYABLE)
여느때처럼 점심 먹고 커피 한 잔 하러 카페에 갔다. 음료 주문을 하다가 카페 포스기에 있는 로고가 눈에 들어왔다. 어디서 많이 본 로고였는데.. 어디서 봤더라,,, 한참을 생각해보니 HTTP Client로 많이 사용되는 OkHt
0
0
0
읽기모드
3y
글또 5기를 마치며
잊고 있었는데, 생각해보니 글또 시작 전에 Get comfortable with being uncomfortable라는 글을 주제로 다짐글을 썼었네요. 글또 활동하면서 기대하는 점과 어떤 글을 쓸지에 대해 기록했었어요. 그때 작성
0
0
0
읽기모드
3y
리팩터링 3 - Refactoring 3
8. 기능 이동
8.1 함수 옮기기(Move Function)
// Before
class Account {
get overdraftCharge() {...}
}
// After
class AccountType {
get
0
0
3
읽기모드
3y
리팩터링 5 - Refactoring 5
12. 상속 다루기
12.1 메서드 올리기(Pull Up Method)
// Before
class Employee {...}
class Salesman extends Employee {
get name() {...}
}
cl
0
0
0
읽기모드
3y
리팩터링 4 - Refactoring 4
10. 조건부 로직 간소화
10.1 조건문 분해하기(Decompose Conditional)
// Before
if (!aDate.isBefore(plan.summerStart) && !aDate.isAfter(plan.summe
0
0
0
읽기모드
3y
리팩터링 2 - Refactoring 2
6. 기본적인 리팩터링
함수 구성과 이름 짓기는 가장 기본적인 저수준 리팩터링이다. 그런데 일단 함수를 만들고 나면 다시 고수준 모듈로 묶어야 한다.
6.1 함수 추출하기(Extract Function)
// Before
func
0
0
2
읽기모드
3y
리팩터링 1 - Refactoring 1
1. 리팩터링: 첫번째 예시
프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고 나서 원하는 기능을 추가한다.
리팩터링할 코드 영역을 꼼꼼하게 검사해줄 테스트 코드들부터 마련해
0
0
0
읽기모드
3y
더 나은 글쓰기를 위한 여정
한닥치?
지금으로부터 6년 전. 그 당시 이유는 모르겠지만, 현대O토에버라는 회사에 인턴을 지원했었다. 그때까지 레포트를 제외하고는 글을 써본 경험이 없어서 내가 쓴 글에 문제가 없는지 친구에게 피드백을 받으러 갔었다. 6년이 지
0
0
0
읽기모드
3y
비난과 비판의 차이
회사 뿐만 아니라 어느곳에서든 마주하기 쉬운게 비난하는 사람이다. 비난에는 힘이 들어가지 않는다. 일례로 선거철이 지나고 어느 특정 정당 혹은 인물이 당선되면 "그래, 네가 얼마나 잘하나 보자." 라고 비난의 준비를 한다. 그래서
0
0
6
읽기모드
3y
가변성(Variance) 알아보기 - 공변, 무공변, 반공변
주로 Java, Kotlin, Scala를 사용하는데 Generic을 잘 활용하려면 먼저 가변성(Variance)에 대한 이해가 필요하다고 생각하여 정리를 시작하게 되었습니다. Variance는 번역하면 가변성 또는 변성이라고 표
0
0
24
읽기모드
3y
커뮤니케이션 방식과 PR 템플릿 개선해보기
개발자가 갖추어야 할 9가지 기술(https://youtu.be/fHyTA-UIcqs)
프로세스는 전체 시스템을 보호해주고, 어떤 사람이 실수를 해도 계속해서 나아갈 수 있도록 도와준다.
회사라는 곳은 각기 다른 개성을 가진
0
0
1
읽기모드
3y
플랫폼 레볼루션
2020년 회고에도 잠깐 언급했었는데, 이직을 하면서 고려했던 것 중 '하나가 플랫폼 개발에 대한 경험을 할 수 있는가?' 였다. 그동안 사용자와 직접 맞닿은 서비스를 주로 개발했던 터라 서비스 뒷단에 존재하는 플랫폼은 어떻게 만
0
0
0
읽기모드
3y
Kafka Producer 알아보기
Kafka는 비즈니스 소셜네트워킹 서비스인 링크드인에서 시스템 복잡도가 늘어나고 파이프라인이 파편화됨에 따라, 개발이 지연되고 데이터 신뢰도가 떨어지는 문제를 해결하기 위해 만들어진 데이터 처리 시스템이다. 초기 Kafka는 다음
0
0
0
읽기모드
3y
Kafka Consumer 알아보기
Kafka는 비즈니스 소셜네트워킹 서비스인 링크드인에서 시스템 복잡도가 늘어나고 파이프라인이 파편화됨에 따라, 개발이 지연되고 데이터 신뢰도가 떨어지는 문제를 해결하기 위해 만들어진 데이터 처리 시스템이다. 초기 카프카는 다음과
0
0
4
읽기모드
3y
제레미의 2020년 회고
당장 눈 앞에 보이는 무언가를 해결하는 것보다 더 중요한 것은, 어떤 일이 있었고 어떤 경험을 했는지 되돌아보는 것이다. 이건 회사 뿐만 아니라 회사 밖에서 이루어지는 모든 일에 적용되고, 심지어 인간관계에서도 마찬가지다. 그동안
0
0
0
읽기모드
3y
귀차니즘을 해결해주는 Alfred
Mac에는 정말 유용한 앱들이 많은데, 그 중에서 귀차니즘을 해결해주는 Alfred를 소개하려 합니다. 개인적으로 Alfred는 사용해보지 않은 사람은 있어도, 한 번만 사용해 본 사람은 없을거라 생각합니다. 그만큼 강력하고 없으
0
0
0
읽기모드
3y
암호화 알고리즘과 Spring Boot Application에서 Entity 암호화
하루가 멀다 하고 개인정보 유출 사고가 터지고 있다. 처음에는 충격적으로 받아들여졌지만 사고가 거듭될수록 반응도 둔감해졌다. 그래서 잇따른 정보 유출 사고에 "개인정보는 이미 공공재"라는 자조 섞인 말까지 나왔다. 그래서 보안으로
0
0
0
읽기모드
3y
Get comfortable with being uncomfortable
불편한 것이 편안해질 때까지
지금은 유명인이 된 채사장 작가의 팬이 되었다. 작가님이 쓴 책을 하나, 둘 사서 읽어보았고, 최근에는 유튜브 채널도 운영 중이라서 컨텐츠가 올라올 때마다 구독하고 있다. 그러다 문뜩 세바시에서 불편한
0
0
0
읽기모드
3y
Practical 모던 자바
2. 인터페이스와 클래스
최초 자바 버전에서는 인터페이스에 다음과 같은 제약이 있었다.
상수를 선언할 수 있다. 해당 상수는 반드시 값이 할당되어 있어야 하며 값을 변경할 수 없다. 명시적으로 final을 선언하지 않더라도 fin
0
0
0
읽기모드
4y
규칙 없음 - No Rules Rules
넷플릭스 방문 인증샷
2015년 여름, 학교에서 실리콘밸리에 있는 회사 투어를 갔었다. 말로만 듣던 회사들을 방문하면서 감탄사가 끊이질 않았었는데, 넷플릭스는 그렇지 않았다. 한국에는 왓챠도 없던 시절이라 그때는 이 회사가 뭘하는
0
0
1
읽기모드
About
Badge
Contact
Activity
Terms of service
Privacy Policy