Profile img

Juntai Park

@arkjun@hackers.pub · 65 following · 82 followers

中年(중년)中小企業(중소기업) 開發者(개발자), 90年代(년대) Console Gamer(콘솔 게이머). 좋은 하루를 繼續(계속)해 나아간다. 좋은 하루가 모이면 좋은 人生(인생)이 된다.

韓国人のプログラマー、40代、小学生の息子とゲームするのが幸せ😃💕龍が如く 、ゼルダの伝説、マリオ、ピクミン好き

「いい1日を続ける」
いい1日を続けていけば、いい人生になる!

threads
@rkjun
x
@rkJun
uri.life
@arkjun@uri.life
GitHub
@arkjun

동일한 DB 스키마를 사용하는 4개의 프로젝트를 만들었다. UI 컴포넌트가 공통적으로 겹치는 부분도 있어서 이참에 Monorepo 구성을 검토했다가 (ChatGPT와 Claude의 답변 최우선순위도 Monorepo 구성으로 추천받았다) 결론적으로는 Private Package Registry를 사용해서 패키지 공유해서 쓰는 쪽으로 방향을 잡았다.

1
0
1
1

언젠가 해커스펍에서, Claude Code 내에 이미지 붙여넣기가 (Mac 기준으로)CMD + V 가 아니라 Ctrl + V 라는 글을 언뜻 본 적이 있는 것 같은데, 까먹고 있다가 다시 검색해서 찾았다.

Claude Code 대화에 이미지 추가

  1. Claude Code 창에 이미지를 드래그 앤 드롭
  2. 이미지를 복사하고 ctrl+v로 CLI에 붙여넣기 (cmd+v는 사용하지 마세요)
  3. Claude에게 이미지 경로 제공. 예: “Analyze this image: /path/to/your/image.png”

link: https://docs.anthropic.com/ko/docs/claude-code/common-workflows

3

주말에 이거 보자마자 저도 하고 싶어서, 출근해서 바로 적용했네요!

(회사명이나 개인정보만 살짝 제거했습니다)

discord presence 적용한 모습discord presence 적용한 모습
3

이번에 Amazon SES 메일 발송 처리를 추가해야 해서, Upyo 를 써 볼 수 있는 좋은 기회가 왔습니다. (SMTP 연동이어도 써볼 생각이었지만...)

README.md 의 Caution 을 보니 조금은 조심스럽지만, 한번 써보겠습니다!

Caution

This project is in early development and subject to change without notice.

개인적인 소망으로 https://unstable.upyo.org/logo.svg 로고에 한글도 들어가면 더욱 더 이쁠 것 같습니다!

4

去年の今頃、6年半勤めた会社から退職通知を受けた。開発チームは解散。驚きはなかったが、多少の寂しさと残念さはあった。最後まで配慮してもらえたことには感謝している。

この件で理解したのは、努力や意志だけではどうにもならないことがあるという事実。運や外部要因で流れが変わることもある。過信せず、状況の変化を受け入れる姿勢が必要。

身近で当たり前と思っていたものは、失って初めて価値に気づく。失う前に感謝しておくべきだと思った。

自分は感謝を習慣化できるタイプではない。時間が経つと忘れる。だからこうして記録する。

今ある環境や人間関係は当然ではない。感謝を忘れないようにしたい。

どうせまた忘れるだろう。その時はまた書く。

2

camelCasesnake_case がごちゃ混ぜになった変数名だらけのレガシーコードを見てると、機能追加なんか後回しでいいから、まずは命名規則を統一したくなるんだよな…。

3

이것은 hackers.pub 계정이 포함된 국내 (아니 세계) 최초의 명함이 아닙니까!? 😆 (나도 만들고 싶..)

4

時々、Threads やその他のSNSでコードブロックもされていない “生”のコードが投稿されているのを見ると、思わず Hackers' Pub を紹介したくなる。

同じように、コードブロックに対応していないメッセンジャーで長々としたコードを送られてくると、「もう Discord か Slack にしようよ」って言いたくなる。(実際使ってはいるけど、いくつかの窓口ではまだ使ってなかったりして…)

1

종종 코드블록되지 않은 날 것 그대로의 코드를 올린 글을 Threads나 여타 소셜 미디어에서 보다 보면, Hackers'Pub 을 소개시켜 주고 싶은 뽐뿌가 온다.

비슷한 이유로 코드블록을 지원하지 않는 메신저에서 장황한 코드를 공유받다 보면 Discord 나 Slack 쓰자고 하고 싶다. (물론 쓰고 있지만 일부 안쓰는 창구도 있어서..)

2

최근 나의 맥에는 브라우저 앱이 6개가 되었다고 한다.

  • Safari
  • Google Chrome
  • Firefox
  • Microsoft Edge
  • Dia
  • Zen

덤으로 메신저 갯수도 만만치 않음. (사내 메신저, Slack, Discord, Kakaotalk ...)

Browsers
3
1

2004年8月5日から始まったエンジニア人生、気づけばもう21年。本当にお疲れ様、21年間の自分。

  • すべてが素晴らしかった会社もあった。
  • 恨みや憎しみでいっぱいだった職場もあった。
  • 良いところも悪いところもあった会社。
  • 給料も退職金も払わなかったひどい会社。
  • ちょっと変わった会社もあったな…。
  • 本当に色々あった、波乱万丈の21年だった。

これからの10年も、自分自身にエールを送りながら――
すべてが思い通りにいくわけじゃないけれど、そんな時こそ、逃げずに、正面からぶつかって、前に進む覚悟で。

2

ロゴが変わっただけで、とても可愛らしい雰囲気の場所になった。気に入った。だって、可愛さが世界を救うから。

3

Claude Code + playwright 이용해서 간단한 화면 테스트도 시키고 있는데 나름 만족할 만큼, 잘 작동합니다. (로그인후에 특정화면의 기본값이 잘 설정되어 있는지 확인해라 등등)

3
3
2

Claude Code 의 지금 상태

계속 api overloaded error 가 나서 응답이 안오는데, 지금은 잘되니?

  ⎿  API Error (529 {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}) · Retrying in 1 seconds… (attempt 1/10)
  ⎿  API Error (529 {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}) · Retrying in 1 seconds… (attempt 2/10)
  ⎿  API Error (529 {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}) · Retrying in 2 seconds… (attempt 3/10)
  ⎿  API Error (529 {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}) · Retrying in 4 seconds… (attempt 4/10)
  ⎿  API Error (529 {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}) · Retrying in 8 seconds… (attempt 5/10)

(안된다고 한다 529 에러) Anthropic API Overloaded: Repeated 529 Errors During Request #3633

API Error 529 Overloaded
0

Claude Code 를 이용한 코드 작성 범위가 점점 늘어나, 기존과 유사한 화면과 기능에 대한 개발은 거의 50% 이상 맡기고 있는데, 조금만 써도 어느새 Claude Opus 4 limit reached, now using Sonnet 4 메시지 뜨면서 결과물의 만족도가 떨어지는 일이 반복적으로 일어나고 있다. 그래도 만족도가 아주 나쁘진 않아서 그냥저냥 쓰고는 있는데... $200 로 업그레이드 할 타이밍이려나...

3

뜬금 없지만, 애플 키보드 구형 (a1314 모델) 혹시 필요하신 분 계시면 나눔합니다.

  • 배터리 AA 2개 사용하는 모델입니다.
  • 안쓴지 좀 오래되었는데, 버리긴 아깝고, 쓰지는 않아서 필요한 분 있으면, 나눔하고 싶습니다.
  • 블투 연결해서 잘 작동하는지는 확인했습니다. 다만 언제 고장날지는 모르겠습니다; 쓰다 고장나면 그냥 버리셔도..)
  • 평일 제 회사앞까지 와 주셔야 합니다. 논현역 학동역 사이 (논현목련공원 인근)
  • 사내에 먼저 나눔시도를 해봤는데 구형이라 그런가 인기가 없네요.
  • 왠지 Hackers' Pub 에서도 인기가 없을 것 같긴 합니다만, 혹시 몰라서 올려봅니다!
1
2
1

Cursor 를 여전히 쓰고 있고, Cursor Tab 은 훌륭하다고 생각하지만, 연간구독이 만료되고 나면, Cursor 를 계속 사용하지는 않을 것 같다. (이렇게 말해놓고 또 쓸지도 모름) 너무 빠르게 바뀌어가고 좋은거 계속 나오는 느낌이라, 한달뒤에는 코드 에이전트로 뭐 쓰고 있을지 상상도 못하겠고, 전혀 모르겠다.

일단 지금은 Claude Code 와 gemini-cli 두개면 나한테는 적당히 충분한 상태.

불과 몇년전 Github Copilot Preview 나왔을 때만 해도 (자동완성) 기능 보고 우와 하던 게 엊그제 같은데..

3

atuin stats 근황

내가 제일 많이 쓰는 명령어는 cd 였다. 그리고 ll, npx 순.. tig 도 아슬아슬하게 순위권.

 atuin stats
[▮▮▮▮▮▮▮▮▮▮] 389 cd
[▮▮▮▮▮▮    ] 248 ll
[▮▮▮▮▮     ] 200 npx
[▮▮▮▮      ] 184 ssh
[▮▮▮▮      ] 178 vi
[▮▮        ]  95 curl
[▮▮        ]  84 ls
[▮▮        ]  78 clear
[]  74 brew
[]  69 tig
Total commands:   2906
Unique commands:  1096
내가 제일 많이 쓰는 명령어는 `cd`
2

코딩 얘기

  • 어제 Claude API 연동해서, Opus 4 모델로 짤막하게 써봤는데 요청당 거의 0.4$ 정도씩 사라지는 것을 목격하고, API 는 쓰면 안되겠구나 싶었습니다. (대충 5불 순삭)
  • 코드 에이전트 역할로 Claude Code Opus 4gemini-cli gemini-2.5-pro 의 응답 결과물이 개인적으로 꽤 만족스럽네요. Claude Code 는 쓰다 보면 어느 순간 Opus 4 에서 Sonnect 4 로 바뀌어 있네요. 사용제한이 있나 싶습니다.
/status 명령으로 확인 해보면 아래 처럼 적혀 있긴 합니다.

 Model • /model
  LDefault Opus 4 for up to 20% of usage limits, then use Sonnet 4
   (currently Opus)
  • Cursor 를 여전히 쓰고 있고, Cursor Tab 은 훌륭하다고 생각하지만, 연간구독이 만료되고 나면, Cursor 를 계속 사용할지는 고민을 해봐야 할 것 같습니다. VS Code 를 써도 되고, Windsurf 같은 대안도 있고요.
  • 코드 에이전트들이 CLI 에서 동작하니 에디터와는 독립적이지만 Claude Code 는 VS Code 확장으로 (자동 설치되어) 코드 변경사항을 에디터에서 바로 볼 수 도 있어서 좋네요.

그렇게, Claude Codegemini-cli 가 화면의 일정 영역을 차지하기 시작했습니다..

Chat Mode, Claude Code, gemini-cli in Cursor.
2
6

일전에 @kkungMinyoung Jeong 님께서 올려주신 Vibe Writing 글에, 숟가락을 얹어보았습니다. HammerSpoon 에서 쓰는 lua 코드에서 OpenRouter 의 google/gemini-2.0-flash-001 모델로 살짝 수정했습니다.

  • config, payload, 응답부 변경

바로바로 한영, 영한 변환하니까, 너무 편하고 좋네요. 다른 언어도 추가하고 그외 다른 활용 요소들도 생각 나서, 앞으로도 이것저것 만져볼 것 같네요.

local config = {
  open_router_api_key = "sk-...",
  open_router_api_url = "https://openrouter.ai/api/v1/chat/completions",
  model = "google/gemini-2.0-flash-001",
}

local function callOpenRouter(text, callback)
  if not config.open_router_api_key or config.open_router_api_key ~= "sk-..." then
    hs.alert.show("Config error: Please set your open_router_api_key in modules/ko-en.lua")
    return
  end

  local instruction = "입력된 문장이 영어일 경우 한국어로, 한국어일 경우 영어로 변환해줘. 의미를 모국어 사용자가 자연스럽게 받아들일 수 있게 정확하고 유창하게 전달하고, 불필요한 문장을 생략하여 명료하게 작성해. 번역어 외의 다른 문장을 추가하지 말고 번역 그 자체만 반환해."

  local payload = {
    model = config.model,
    messages = {
      {role = "assistant", content = instruction},
      {role = "user", content = text}
    },
    max_tokens = 4096,
    stream = false
  }

  local request_body = hs.json.encode(payload)

  local headers = {
    ["Content-Type"] = "application/json",
    ["Authorization"] = "Bearer " .. config.open_router_api_key,
    ["HTTP-Referer"] = "https://hammerspoon.ai",
    ["X-Title"] = "Hammerspoon Translator"
  }

  hs.http.asyncPost(config.open_router_api_url, request_body, headers, function(status, response, _)
    if status == 200 then
      local success, data = pcall(hs.json.decode, response)
      if success and data.choices and #data.choices > 0 and data.choices[1].message and data.choices[1].message.content then
        local translated = data.choices[1].message.content
        print("TR: " .. translated)
        callback(translated)
      else
        local error_message = "API call failed. Response: " .. hs.inspect(data)
        print(error_message)
        hs.alert.show(error_message)
        callback(nil)
      end
    else
      local error_message = "HTTP request failed. Status: " .. status .. ", Response: " .. response
      print(error_message)
      hs.alert.show(error_message)
      callback(nil)
    end
  end)
end
3
1

@chanjin65이찬진 님이 스레드에 올린 글 [1] 을 Hackers' Pub 에도 공유하려고 했는데, Hackers' Pub 에서 @chanjin65이찬진 님의 노트에 해당 글이 올라오지 않는다..


  1. 스레드의 페디버스 연동 기능이 개선되어, 페디버스 공유를 켜면 팔로우하는 페디버스 계정의 게시물들을 볼 수 있는 피드가 생겼고 페디버스 계정을 검색할 수 있다는 내용 ↩︎

0
3

예전에는 주로 Windows랑 Mac을 왔다 갔다 하면서 작업했는데, 요즘은 Mac mini랑 MacBook Air를 나눠서 쓰는 일이 많아지다 보니까, 슬슬 dotfiles 백업이나 공유가 필요하겠다~ 싶어졌다.

우선은 셸 히스토리를 백업하고 공유할 수 있도록 https://atuin.sh/ 를 설치해봤다. (@daidaisuke 님 블로그에서 우연히 본 건데, 감사합니다!)

6

これまでは主にWindowsとMacを行き来しながら作業してたんだけど、最近はMac miniとMacBook Airを使い分ける感じになってきて、dotfilesのバックアップとか共有がそろそろ必要かな〜と思い始めた。

とりあえず、シェルの履歴をバックアップ・共有できるように、https://atuin.sh/ を入れてみた。(@daidaisuke さんのブログでたまたま見かけたやつ。感謝です!)

2
2
1

KB카드 장애는 처음이라, 당황스럽다. 그래도 다행인 건 옛날에는 오직 KB카드만 썼는데, 지금은 대체할 다른 카드들도 많이 쓰고 있어서 아무런 타격이 없는 것이 다행..

failover 처리가 이렇게 중요합니다. 여러분..

2

개인적으로 만들고 싶은 조그마한 서비스가 두개있는데 둘 다 흥하고 있는 서비스들은 이미 있고, 그냥 내 입맛에 맞게 사부작사부작 만들어서 쓰고 싶은 욕망이 있다. 반대로, 바쁜데 굳이 왜... 라는 심리도 있다...

2

최근에 코딩하는 시간보다, 문서 작성과 커뮤니케이션에 소비하는 시간이 급격히 많아지다보니, 개발자라기 보다 회사원에 더 가깝게 느껴지는 기분이 든다. 요즘에는 모 시스템 구축의 견적서 작성하는 일을 하고 있는데, 개발보다 재미없지만, 예상 리소스를 예측하면서 이것저것 공부하는 시간만큼은 나름 소소하게나마 즐겁기는 하다.

2
1

오랜 기간 alfred 를 써왔고, 그동안 raycast 추천을 많이 받아왔음에도, alfred 가 영구 라이선스이기도 했고, 불편한 점도 없이 오랫동안 써와서 선뜻 바꿔 볼 마음이 들지 않았는데 최근 지속적인 뽐뿌가 있어 오늘 raycast 를 깔고 alfred 에서 쓰던 단축키 Ctrl + / 를 할당해 주었다.

2

俺のキーボード遍歴

2009年より前は正直よく覚えてないけど、

  • 2009年に Appleのテンキーレス無線キーボード(第2世代) を使い始めた。Mac用だけど、Windowsでも AutoHotkey でキー配置をカスタムして快適に使ってた。

  • 2013年に HHKB Professional 2 を購入。この頃からずっと Caps LockをCtrlにリマップして使ってる。今でもこの設定は欠かせない。

  • 2018年に ABKO HACKER K945P(テンキーレス・静電容量無接点) に乗り換えた。家では同じくABKOの K995P V3 を使ってる。会社で支給されたK945Pを使ってみたらかなり良くて、HHKBを手放してABKO無接点に一本化した。

最近、仕事用キーボードの基板にちょっとヒビが入った(使う分には全然問題ない)けど、それをきっかけに「そろそろ新しいのに変えてもいいかな…」っていう気分がちょっとずつ湧いてきた。

ABKOの無接点には満足してるから、次もそのシリーズから選ぶ予定。

今の候補:KN30 BT, KN35 BT, AKN10BT, LKN84 BT

1

나의 키보드 변천사

2009년 이전까진 잘 기억나지 않고,

  • 2009 애플 텐키리스 무선 키보드 (2세대) - 맥용이지만 윈도에서도 autohotkey 써서 키 커스텀해서 잘 썼다.
  • 2013 HHKB Pro 2 - 이후 모든 키보드 설정에서 caps lock 을 ctrl 로 커스텀해서 쓰고 있다
  • 2018 ABKO HACKER K945P 텐키리스 무접점 (집에서는 ABKO HACKER K995P V3) - 회사에서 지급받아 써보고 만족도가 높아서 HHKB 를 정리하고 앱코 무접점만 쓰고 있다.

마침 업무용 키보드 기판이 살짝 금이 가기도 해서 (쓰는데 아무 문제없지만) 키보드를 바꾸고 싶은 뽐뿌가 슬금슬금 올라온다.

앱코 무접점 키보드의 만족도가 높아서, 그 시리즈 중에 살 것 같다.

후보군 KN30 BT, KN35 BT, AKN10BT, LKN84 BT

4

이번주내내 인프라 구축에 몰두했는데 개발보다 더 재밌다. AWS 세팅 끝내고, Cloudflare 에 R2 구성하고, 업로드 샘플이랑 캐시퍼지하는 삭제샘플도 만들고 Grafana, Prometheus 로 모니터링 구축하고 Jenkins 에 CI/CD 세팅했다. (입사 초기에 사내 서버에 세팅한 것들을 클라우드로 옮겼다.) 나름의 보안정책들을 수립해가는 것도 묘미. (라고 해봐야 주요 접근 포인트는 죄다 사내망에서만 접근하게 하는 정도지만) 나머지 uptime kuma 올리고, 슬랙 경고 알림정도까지만 작업해 놓으면 당분간 또 만질 일 없겠지만, 그냥 개발 안하고 이런 것들만 했으면 좋겠단 생각도 들었다.

4

과거 Amazon CloudFront 를 쓰다가 요금폭탄을 경험한 적이 있어서, 선뜻 손이 가지 않는다. (물론 나중에 다시 CloudFront 를 쓰기는 했지만) 아무튼 이번에도 CDN 은 CloudFlare 로 선택했다. CDN을 CloudFlare 로 선택한 김에 저장공간도 R2 로 선택했다. (가격도 S3 보다 더 싸서...)

1

그나저나, useEffect 에서 Server Actions 호출 할 수 있는 거 나만 몰랐지 또.

https://nextjs.org/docs/app/building-your-application/data-fetching/server-actions-and-mutations#useeffect

컴포넌트가 마운트되거나 종속성이 변경될 때 서버 액션을 호출하기 위해 React useEffect 훅을 사용할 수 있습니다. 이는 글로벌 이벤트에 의존하거나 자동으로 트리거되어야 하는 변이에 유용합니다. 예를 들어 앱 바로 가기를 위한 onKeyDown, 무한 스크롤을 위한 교차점 관찰자 후크, 컴포넌트가 마운트되어 뷰 수를 업데이트할 때 등이 있습니다:

라고 합니다.

1

AWS 를 바닥 (vpc 세팅) 부터 새롭게 하고 있다. private, public subnet 나누고 NAT 인스턴스 올리고, 베스천으로 프록시점프해서 private 구간 인스턴스 ssh 접속 확인하고 nginx 올리고 next 프로젝트 가져와서 proxy pass 걸고 alb 넣고.. 콘솔에서 바닥부터 한땀한땀 설정하는 게 오랜만이라 그런가 재밌다.

(요즘 엔지니어들이라면 IaC로 단숨에 끝냈겠지만)

아무도 알아주지 않지만 견고하게(?) 세팅 끝냈다며 혼자 뿌듯해 하는 1인, 그렇게 하루종일 개발 안하고 인프라 만지작 거리다 하루가 끝났다.

5

2개 이상의 기기를 동시 컨트롤 할 때 (주로 윈도와 맥을 오갈 때) synergy 라는 프로그램으로 마우스, 키보드 공유해서 사용해 왔는데, 오늘 처음 (MacOS 내장기능의) 맥미니와 맥북에어간의 마우스 키보드 공유를 해보고 놀라움을 금치 못했다. 끊김도 없고 거의 네티이브 유사한 느낌으로 자연스럽다. 물론 제대로 완성도를 느끼려면 더 써봐야겠지만.

MacOS 에서 다른 맥북에 키보드와 마우스가 연결된 화면
4

마지막 회사라는 마음으로 일한다. 물론 진짜로 그렇지 않겠지만 (아니 그럴 수도 있지만) 그런 마음으로 임하면 좀 더 직원들에게 너그러워지고, 고객에게도 여유를 부릴 수 있다. 마지막인데 뭘 못해주겠어.

(하지만 내맘속 선을 넘어버리면 나 또한 투덜이 스머프가 될 것이야. )

TMI) 실제로 회사에서 대표를 제외하고는 나이 제일 많음.

1