Skip to main content

환경별로 다른 git 설정 적용하기

· 2 min read
Haril Song
Owner, Software Engineer at 42dot

TL;DR

  • includeIf 문법을 사용하면 특정 조건을 만족하는 git 설정 파일만 적용할 수 있다.
  • 업무 환경과 개인 환경을 분리하는데 유용하다.

Problems

  • 업무용 개발 환경과 개인 개발 환경이 분리되어 있다.
  • 그런데 global git config 는 개인 환경 기준으로 설정해놓고 사용하다보니 chezmoi 로 설정파일을 동기화할 때 업무 개발환경에 개인 설정이 overwrite 되어 적용되는 문제가 있었다.
  • 어떻게해야 업무 환경과 개인 환경을 안정적으로 분리할 수 있을까?

Kafka schema registry

· 6 min read
Haril Song
Owner, Software Engineer at 42dot

Problems

  • 메세지 스펙이 변경될 경우, 의존하고 있는 모듈 or Git Repository 마다 DTO 업데이트가 필요하다.
    • 하위호환성이나 상위호환성이 자주 깨진다.
    • DTO 관리의 복잡도가 선형적으로 증가한다.
    • Java 는 특히 Json 기반의 메세지를 다루기에 불편한 점이 많다.
  • 카프카는 ByteArray 형태로 메세지를 전송하나, 애플리케이션 레벨에서는 이를 역직렬화하여 관리하는 것이 권장된다.
    • payload 에 데이터를 담을 때마다 ByteArray 로 직렬화하는 과정, 그리고 이 반대 과정이 매번 이루어진다.
    • 코드 복잡도 상승
    • ByteArray - JSON - Object

Daily note 작성법

· 3 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

회사에서 시켜서, 혹은 개인의 니즈로 인해 daily 라고 부르는 일일 노트를 적곤 한다.

필자 또한 daily 를 적는데, 처음에는 회사의 요구로 인해 적기 시작했지만 적는 방식에 대해 많은 시행착오를 거쳐서 현재는 개인적인 용도로도 많이 적게 되었다.

이런 daily 는 어떻게 작성해야 편하게 적으면서도 활용도를 최대한 높일 수 있는지 간단하게 적어보려고 한다.

Useful Developer Tools - CLI Edition

· 6 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

Following up on the previous post about the best apps, let's look at recommended Command Line Interface (CLI) tools. All the tools introduced here have been used by me for at least 6 months and are essential installations when setting up new equipment.

zoxide

GitHub - ajeetdsouza/zoxide: A smarter cd command. Supports all major shells.

A tool that eliminates the need to remember paths for directories you've visited before. For example:

cd ~/.config/somewhere/longlong/path

# Next time, you can visit directly with this command
z path

This is incredibly convenient as you no longer need to remember where specific configuration files are located. Using zi displays a priority list, allowing for fuzzy searching.

Once you try it, you'll never want to go back to the time before using this tool.

mise

GitHub - jdx/mise: dev tools, env vars, task runner

A version manager for various environment variables, languages, and packages. It's highly stable due to its architecture and fast thanks to its Rust implementation. Its intuitive commands significantly reduce the learning curve.

I've already introduced it in a blog post, showing how much I love this tool. While there are several similar tools that can serve mise's role, I personally think it's the most recommendable among them. For example, direnv can be completely replaced by mise, and nix is overly complex with reduced versatility.

If you're a programming multilingual dealing with various languages, you should definitely try this.

chezmoi

chezmoi

If you use multiple devices, synchronizing development environments can be quite troublesome, especially for developers who frequently use CLI.

If you're not planning to give up on synchronization entirely and are wondering how to synchronize, try chezmoi. Even if you purchase new equipment, you won't need to spend time on initial setup.

Like mise, there's a post about how to use it on this blog for reference.

fzf

GitHub - junegunn/fzf: :cherry_blossom: A command-line fuzzy finder

With about 70k GitHub Stars, does it need more explanation? (For reference, spring-framework has 57k).

This open-source fuzzy finder, maintained by Korean developer junegunn, boasts incredible versatility through standard input/output piping.

If you need search functionality, regardless of the type, just use fzf. It's so widely used by various packages that you might have been using it indirectly without knowing of its existence.

fd

GitHub - sharkdp/fd: A simple, fast and user-friendly alternative to 'find'

Replaces the find command.

Written in Rust and up to 50% faster than find. It has clean highlighting and much more intuitive command options compared to find.

ripgrep

GitHub - BurntSushi/ripgrep: ripgrep recursively searches directories for a regex pattern while respecting your gitignore

Replaces the grep command. Although named ripgrep, it uses rg as the command.

Similar to fd, it's written in Rust. Compared to grep, you can get much more diverse information from the output. The commands are intuitive and easy to use, and with its speed, there's no reason not to use it.

Truly 'RIP, grep'.

lsd

GitHub - lsd-rs/lsd: The next gen ls command

Replaces the ls command.

The ls command is incredibly frequently used. While the command itself is old, it doesn't provide diverse information in its output. Using lsd can completely replace the existing ls.

bat

GitHub - sharkdp/bat: A cat(1) clone with wings.

Replaces the cat command.

While the cat command is simple output, using bat provides code highlighting. Sharp developers might worry about line output interfering with shell piping, but it doesn't interfere at all. Don't worry and enjoy this modern tool.

I use bat with an alias set to cat.

HTTPie

HTTPie – API testing client that flows with you

Replaces curl.

Although there's also an APP version, making me wonder which article to include it in, I personally only use the CLI version, so I included it here.

The reason I prefer HTTPie over curl is that it's very, very intuitive. Simple GET requests can be sent like this:

https httpie.io/hello

The response comes formatted like this:

Think about curl responses. Developers like pretty things too.

Orbstack

OrbStack · Fast, light, simple Docker & Linux

Replaces Docker Desktop.

When using Docker containers, it becomes a bit faster and eliminates some bugs. But its true value shows when using VMs - it can run VMs very lightly on Macs, where traditionally VMs were difficult to use. If you need to test on OSes like Ubuntu or Kali Linux, try using orbstack for very fast and convenient management. Personally, it was a very interesting experience.

atuin

GitHub - atuinsh/atuin: ✨ Magical shell history

While chezmoi could synchronize tool settings, atuin can synchronize command history used at work. No more struggling to remember what commands you used at work.

warning

One downside is that if you use Warp as your terminal, it's difficult to fully utilize atuin. Warp provides its own history feature that interferes with atuin. As a workaround, you can use the following command to search command history:

atuin history list | fzf

trash-cli

Implements "trash bin" functionality in the terminal. Therefore, you no longer need to fear rm -rf /. Because you can restore anything.

Do you need more reason than being free from rm -rf /, the developer's greatest enemy?

Conclusion

So far, I've introduced several tools that I personally really like.

In fact, there are many more tools worth recommending, but whatever anyone recommends, what works best for you is what you're comfortable with. Find and try others that suit your environment.

info

You can see all the tools I use here.

Useful Developer Tools - App Edition

· 7 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

It's been 13 years since I started using only MacOS.

Even before starting my career as a developer, I had a hobby of exploring various tools to use Mac more conveniently. It was fun just trying out new tools.

Many tools have come and gone through that journey.

This time, I want to introduce the tools that have survived and continue to help me overcome various challenges. I'll be introducing them in two parts - Apps and CLI, and this article will cover the App edition.

Tools for Network Monitoring

· 5 min read
Haril Song
Owner, Software Engineer at 42dot

banner

Overview

This is a brief session prepared for those who don't know where to start with their presentations. We'll introduce various tools that can be used for network monitoring and experimentation, along with explanations of how to use them.

Environment

What kind of environment should we prepare to study networking? While it depends on the topic you want to study, let's look at some commonly used methods.

Docker Network Types

· 7 min read
Haril Song
Owner, Software Engineer at 42dot

Overview

Docker has six network types in total:

  • Bridge
  • Host
  • IPvlan
  • MACvlan
  • Overlay
  • None

I think many backend developers either don't know much about network types or only use bridge networking even if they do. I was also curious about this topic and conducted a study. This article is an excerpt from the content I presented during that study.

We'll conduct practical exercises using Orbstack to run VMs.

Goodbye 2024, Hello 2025

· 11 min read
Haril Song
Owner, Software Engineer at 42dot

reminiscence

Overview

warning

As this is based on my personal diary, some parts might feel a bit cringeworthy 😂

So many things happened in 2024.

I'm starting this retrospective with such a cliché sentence because I can't think of anything better. Not everyone can start their writing with a sentence like "Mother died today." Or can they? I'm not sure.

[Book Review] Code Writing Guide

· 4 min read
Haril Song
Owner, Software Engineer at 42dot

Cover of Munetoshi Ishikawa's Code Writing Guide

info

This review was written with a copy of the book provided by the publisher, and this did not influence the content or evaluation of the review.

Overview

What makes code easy to review?

The Guide to Writing Readable and Review-Friendly Code is a book written by a current LINE developer based on their experiences. It thoroughly covers various methods and principles to enhance code readability.

Personally, I think it's an excellent introductory book on code conventions. Let me explain why.

Naver DAN 24 Review

· 10 min read
Haril Song
Owner, Software Engineer at 42dot

overview

Overview

  • 참가 일시: Nov 11, 2024
  • 장소: 코엑스 그랜드블룸
  • 관련 링크: DAN 24

운좋게도 네이버에서 주관한 DAN24 에 다녀올 수 있었습니다. 결론부터 말씀드리면, 24년에 참여한 컨퍼런스 중 가장 수준이 높았다고 할 수 있을 것 같아요. 아래는 대략적인 내용을 적어둔 것이며, 자세한 내용은 DAN24 공식페이지를 참고해주세요.