코드를 짜다가 아래와 같은 경험을 겪었습니다."외부 카카오톡 알림톡 API 가 버전업 되었는데, 서비스 레이어 코드까찌 싹 다 고쳐야 하네" "데이터베이스를 MySQL 에서 MongoDB 로 바꾸자고 하는데, 비즈니스 로직 전체를 뜯어야 하는구나" 저와 같은 고통을 겪고 있는 개발자분들은, 100% 고수준 컴포넌트와 저수준 컴포넌트의 관계가 잘못 설계되었기 때문일 것입니다.이 글을 쓰는 목적은 두 개념을 완벽하게 마스터하고, 단단한 코드를 짜기 위해 정리할 겸 같은 고민을 겪고 있는 개발자들에게 조금이나마 도움이 될 것 같아 정리하였습니다. 컴포넌트란 무엇인가?본론으로 들어가기 전에 '컴포넌트' 라는 단어부터 짚고 넘어가자면, 컴포넌트라고 하면 프론트엔드의 React 컴포넌트가 먼저 떠오를 수 있지만, ..
기존 코드의 문제점과 원인 분석회사에서 자체 개발하고 배포하고 있는 기존 시스템은 20초마다 차트를 실시간으로 갱신하는 구조였다.하지만 시간이 지날수록 대시보드가 느려지고 서버가 버벅이는 고질적인 문제가 발생하면서 이러한 문제점을 발견하고 고치는 부분을 기록한 블로그이다. 문제의 코드 data.setsTime(data.getsTime().substring(0,8) + "0800"); 프론트에서 20초마다 "최근 1분 전부터 현재까지" 의 신규 데이터만 요청을 하고 있었다.하지만 백에서 이 시작 시간을 강제로 아침 08:00 으로 고정하고 있는 코드를 발견하였다. 결국 최근의 1분전부터 현재까지의 데이터만 필요하지만 오후 17:00 에 차트를 갱신하게 되면서기존 데이터를 재사용하지 않고 9시간 치 누적 ..
소프트웨어를 만들 때 우리는 필연적으로 '여러 개의 데이터' 를 다루게 됩니다.이때 아무생각 없이 아래와 같은 코드를 짤 수가 있습니다.List orderItems = new ArrayList();List cars = new ArrayList();List lottoNumbers = new ArrayList(); 이렇게 컬렉션(List, Map, Set 등) 을 아무런 보호 장치 없이 서비스 레이어나 여기저기에 날것으로 노출하는 순간, 코드는 서서히 스파게티로 변하기 시작합니다. 1급 컬렉션이란?소트웍스 앤솔러지라는 책의 '객체지향 생활 체조 원칙' 에서 처음 제안하였습니다."컬렉션을 포함한 클래스는 반드시 다른 멤버 변수를 가지지 않아야 한다" 즉, List 나 Map 같은 컬렉션을 하나의 클래스로 꽁..
다른 개발자분께서 도메인이 무엇이냐 라고 물어볼 때 정확히답변을 하지 못해 공부하면서 다른 개발자분들에게도 알려주기 위해 정리하였습니다. 다른 개발자들과 대화하거나 아키텍처 관련 책을 읽을 때 "도메인" 이라는 단어를 자주 들엇습니다."도메인 레이어를 분리해야 합니다.", "도메인 모델에 비즈니스 로직을 모으세요.", "그건 도메인이 아니라 인프라 영역입니다."대충 '비즈니스 로직이 들어가는 곳이네..' 하고 넘어가기는 했지만, 최근에 누군가 "그래서 도메인이 정확히 무엇인데?" 라고 물어보면 말문이 턱 막혔습니다. 따라서 오늘 이 글을 통해 소프트웨어 공학에서 말하는 도메인(Domain) 의 진짜 의미부터 시작해서, 왜 이 개념을 뼛속까지 이해해야 '지속 가능한 좋은 코드' 를 짤 수 있는지 아주 깊..
회사에서 하네스 엔지니어링 스터디가 있어 개념을 정리했습니다. 기본개념하네스 엔지니어링을 간단하게 말하자면 AI 에이전트가 일을 잘하게 만드는 바깥 시스템을 설계하는 일을 말합니다.AI 가 업무를 끝까지 안정적으로 해낼 수 있게 환경을 설계하는 작업입니다. 단순히 프롬프트를 잘 쓰는 수준을 넘어서, 에이전트가 어떤 도구를 쓰고, 무엇을 참고해 어디서 검증을 하고, 실패하면 어떻게 복구할지 AI 의 작업 전반을 아우르는 실행 환경을 이용자가 구성하고 통제하는 개념이기 때문입니다. 이 개념은 본질을 AI 가 그 일을 안정적으로 수행하도록 환경과 규칙을 구성하는 것이라고도 할 수 있습니다.더 쉽게AI 가 작업하면서 길을 잃지 않도록 '안전한 놀이터' 와 '규칙' 을 만들어 주는 일 이라고 이해하면 됩니다.인공..
프로그래밍을 하다 보면 점점 새로운 기능을 만드는 시간보다 버그를 찾는 시간이 더 많아집니다.처음에는 System.out.println , console.log 를 찍는 등 원시적인 방법으로 해도 충분하지만 점점 복잡한 프로그램과 복잡한 버그들을 다루면서 이런 단순한 기능으로는 충분하지 않게 됩니다. 이럴 때 버그를 찾기 위해 편한 여러 기능을 제공해 준느 걸 디버거 라고 합니다.보통은 IDE 에 내장 돼 있고, 흔히 제공되는 기능들이 정해져 있습니다. 사용법우선 내가 디버깅을 하고 싶은 코드로 가고 거기에 BreakPoint 를 추가하면 됩니다.디버깅을 하는 방법은 아래와 같이 2가지로 나누게 됩니다. 1. Line 번호가 있는 부분 마우스로 클릭하기2. Command + F8 단축키 사용 Brea..
이 글은 단순한 작업 기록을 넘어, 비슷한 문제를 겪을 동료들에게 가이드가 될 수 있도록 작성하였습니다. 단순히 "배포에 성공했다" 는 결과보다, 그 과정에서 마주친 수많은 'Permission Denied' 와 '접속불가' 메시지들을 어떻게 논리적으로 해결했는지 초점을 맞췄습니다. 저와 같은 주니어 개발자분들에게 이 글이 도움이 됐으면 좋겠습니다. 대두분을 로컬 환경에서 테스트를 하고 Git 에 배포하는 과정만 하다가 실제 서비스를 24시간 꺼지지 않는 별도의 서버에 돌아가게 만들어보라는 요청에 Maven 과 Spring 기반의 프로젝트를 회사 원격 서버에 올리는 임무를 진행했습니다. Terminus 를 통해 서버에 접속하여 보안상 공용 계정이 아닌 내 전용 계정을 생성하여 작업을 진행하였습니다.톰캣..