오늘도 커밋하는 북극곰

점점 이도저도 아닌 개발자가 되어가는중

전체 글 28

「애자일에도 리팩터링이 필요하다 — Corporate Agile을 읽고」 - 2

https://minipolarbear1.tistory.com/29 이어서 이 글을 읽으면서 내가 가장 많이 떠올린 것이 글을 정리하면서 최근 업무에서 내가 반복해서 했던 질문들을 생각해봤다.나는 개발 업무를 하면서 기획이나 정책을 전달받았을 때 꽤 자주 이런 질문을 한다.“왜 이렇게 해야 하지?”처음에는 단순히 개발하기 전에 요구사항을 정확하게 이해하기 위해서였다.그런데 여러 PRD를 검토하고 개발 과정에서 발생하는 문제를 경험하면서 조금씩 다른 생각이 들기 시작했다.문서에 적혀 있다고 해서 반드시 올바른 정책인 것은 아니고, 프로세스에 정의되어 있다고 해서 반드시 필요한 과정인 것도 아니다.오히려 개발자로서 중요했던 것은 문서에 적혀 있지 않은 부분을 발견하는 것이었다.개발하면서 계속 만났던 것은 ‘..

일상/일기장 2026.09.04

「애자일에도 리팩터링이 필요하다 — Corporate Agile을 읽고」 - 1

https://minipolarbear1.tistory.com/28 글에 느낀점 그렇다면 우리 개발 프로세스는 어떨까?이 글을 읽으면서 자연스럽게 현재 내가 경험하고 있는 개발 프로세스를 생각해보게 되었다.우리 역시 최근 개발 과정에서 발생하는 여러 문제를 줄이기 위해 프로세스를 계속 개선하고 있다.대표적으로 기획 단계에서 PRD를 작성하고, 개발팀에 전달하기 전에 체크리스트를 확인하고, 필요한 경우 사전 기술 검토를 진행한다.PRD가 개발 가능한 수준까지 준비되면 엔지니어링 리뷰를 거쳐 개발을 시작하고, 이후에는 리뷰 횟수나 소요 기간 등을 기록하면서 프로세스 자체도 개선해 나가는 방식이다.이런 과정이 만들어진 이유는 분명하다.개발을 시작한 이후 요구사항이 계속 변경되거나, 정책이 명확하지 않아 개발자..

일상/일기장 2026.09.04

[테크 인사이트] 애자일이 문제일까, 우리가 만든 ‘기업식 애자일’이 문제일까?

소프트웨어 개발 조직에서 애자일(Agile)은 이제 너무 익숙한 단어다.스크럼, 스프린트, 데일리 스크럼, 백로그, 스프린트 플래닝, 회고, 리뷰, 스토리 포인트, Velocity….애자일을 도입한 조직이라면 한 번쯤 들어봤을 용어들이다.그런데 이상한 점이 있다.애자일은 원래 변화에 빠르게 대응하고 불필요한 절차를 줄이기 위한 방식인데, 실제 조직에서는 오히려 회의와 절차가 늘어나고 개발자가 Jira 티켓과 일정에 맞춰 움직이는 상황이 발생한다.Daniel Rothmann은 이를 **Corporate Agile(기업식 애자일)**이라고 부른다.원문: It’s time to break free from Corporate Agile — Daniel Rothmann, 2024애자일의 핵심은 사실 단순하다애자일..

Vue에서 Tiptap WYSIWYG 에디터 적용기 (Quill → Tiptap 전환)

관리자 페이지에서 공지사항을 관리하는 기능을 개발하면서 기존 vue-quill 에디터의 한계가 눈에 보이기 시작했다.그래서 새로운 에디터를 찾던 중 Tiptap을 발견했고, 실제로 적용하면서 얻은 경험을 정리해본다.— Vue 기반 서비스에 가장 적합한 모던 Headless Rich Text Editor2025년 현재 WYSIWYG 에디터 시장은TinyMCE → CKEditor → Quill로 이어지는 전통적인 흐름에서이제는 Tiptap + Lexical 같은 “Headless 기반 모던 에디터”로 넘어오고 있습니다. 여기서는 그중에서도 가장 빠르게 성장 중인 Tiptap을직접 Vue 프로젝트(관리자 페이지)에서 적용한 경험을 중심으로 정리합니다.🔍 Tiptap이란?ProseMirror 기반 Headle..

개발/Vue 2025.11.21

[NestJS] Controller 라우트 순서 때문에 발생한 “Validation failed (numeric string is expected)” 에러 정리

NestJS 기반의 관리자 서버를 구현하던 중,정상적으로 작동하던 /admin/find-me API가 갑자기 400 에러를 내뿜었다.로그에는 다음과 같은 메시지가 찍혔다.ERROR (400) - /admin/find-me유효하지 않은 파라미터 - Validation failed (numeric string is expected) - /admin/find-me이번 글은 그 문제의 원인과 해결 과정을 정리한 실전 포스트모템이다. 1. 문제 상황관리자 정보를 조회하는 API가 아래처럼 구성되어 있었다.@Controller('admin')export class ServerAdminController { constructor(private readonly serverAdminService: ServerAdmin..

개발/Next.js 2025.11.11

[테크 인사이트] “조용하지만 확실한 이동: 왜 개발자들이 다시 JDBC로 돌아가고 있는가”

최근 백엔드 개발자들 사이에서 ORM(JPA/Hibernate/Spring Data 등)에서 순수 JDBC로 점진 회귀하는 현상이 조용히 퍼지고 있습니다. Medium 글의 주장에 더해, 업계 전반의 경험과 커뮤니티 반응을 종합해 보면, 그 배경엔 투명성, 성능, 예측 가능성이라는 키워드가 있습니다. Everyone’s Quietly Moving Back to JDBC — Here’s Why That Should Worry YouIf you look closely at what senior backend engineers are doing lately, something strange is happening: they’re quietly moving back to plain…medium.com 1. “..

Nuxt3에서 useFetch 에러 발생과 $fetch로 해결한 사례

Vue 3 + Nuxt 3 기반의 프로젝트에서 매체 리스트를 가져오는 과정에서 useFetch를 사용했다가 다음과 같은 에러를 마주했다. 이 글은 그 문제 상황과 원인, 해결 방법을 기록한 실전 포스트모템이다.문제 상황 매체 검색 조건이 바뀔 때마다 API를 다시 호출해 리스트를 갱신하는 기능을 refetchMediaList()라는 함수로 구현했고, 이 함수 안에서 다음과 같이 apiFetch()를 사용했다.const { data, error } = await apiFetch('/api/media-item/list', { ... }); 그런데 이 함수는 watch() 내부나 lodash.debounce() 안에서 호출되고 있었고, 다음과 같은 에러가 발생했다.에러 메시지[unhandledRejection..

개발/Vue 2025.06.17

[Vuetify] v-treeview로 전체 열기/닫기 하려다가 결국 재귀 컴포넌트로 바꾼 이야기

1. 하고 싶었던 것매체 카테고리 트리 구조를 Vue 3 + Vuetify 3로 구현하고 있었는데카테고리 리스트가 트리 구조라서“모두 펼치기” / “모두 닫기” 기능이 필요했다. Vuetify 3에 v-treeview가 있어서v-model:open으로 열고 닫을 노드 ID 배열만 넘겨주면 된다길래“오 이거 쉽게 되겠네” 하고 가볍게 시작했다. 2. 첫 번째 시도 ( v-treeview + open 배열)expandAll() { // 부모 노드만 id this.expandedItems = this.mediaItemCategoryVo.map(item => item.id);} 근데 막상 써보니까부모 노드만 열리고, 자식 노드는 안 열린다. 3. 그러면 하위까지 다 넣으면 되지 않을까?collectAllN..

개발/Vue 2025.04.27

[Vuetify] v-treeview 트리뷰 구현 중 겪은 시행착오 정리 (Labs 컴포넌트 사용 시 주의사항)

nestjs로 구현했던 내용을 vue로 컨버전 하는중에서 발생한 이슈 정리 ~ Vue 3 에서 컴포넌트를 구현하면서 겪은 문제와 해결 방법을 정리합니다.TreeView가 “안 보인다”, “데이터는 있는데 글씨가 안 나온다” 등의 문제로 고생하신다면 반드시 확인해보세요. 1. 트리뷰는 뜨는데 텍스트가 안 보임원인: Vuetify는 기본적으로 title 필드를 텍스트로 사용. 내가 쓴 데이터는 label을 사용하고 있었음.해결:item-text="label" 명시적으로 설정또는 데이터를 label → title로 필드명을 변환혹은 데이터 변경:this.mediaItemCategoryVo = data.map((item) => ({ ...item, title: item.label, children: ..

개발/Vue 2025.04.17

[Vuetify] 사용자 관리 테이블 구성 가이드

Vue 3 + Vuetify + vue-facing-decorator 환경에서 v-data-table을 활용한 사용자 목록 테이블 구성 방법을 정리합니다.1. headers 선언Vuetify 3에서는 text 대신 title을 사용해야 합니다.headers = [ { title: 'ID', value: 'id', sortable: true }, { title: '사용자명', value: 'fullKoreanName', sortable: true }, { title: '사용자 상태', value: 'userStatusCommonCode.displayValue', sortable: false }, { title: '전화번호', value: 'phone', sortable: true }, { titl..

개발/Vue 2025.04.03