반응형

AI 툴로 편집한 Spring.Net + NHibernate 학습 가이드를 만들어봤습니다. 레거시 시스템을 분석하고 유지보수 및 추후 개발을 하기 위해 완전히 동일한 형태는 아니지만, .Net 쪽에서 당시 Spring 형태로 만들려고 했던 Spring.Net 과 Nhibernate 의 이해도를 높이기 위해 작성하였습니다. 아직 가이드 데로 코딩까지는 안해봤지만, 앞으로 내용을 검토해 가며, 업데이트 하려고 합니다.

[소개영상]

 

 

🚀 당신의 .NET 엔터프라이즈 개발 여정을 위한 완벽한 가이드

.NET 생태계에서 Spring.NET과 NHibernate는 강력한 엔터프라이즈 애플리케이션을 구축하는 데 필수적인 프레임워크입니다. 하지만 아쉽게도 이 두 기술을 효과적으로 조합하여 실무에 적용하는 방법에 대한 양질의 한글 자료는 부족한 것이 현실입니다.

여기, 바로 그 갈증을 해소해 줄 프로젝트를 소개합니다! "Spring.NET + NHibernate 완벽 학습 가이드"는 기초부터 고급까지, 실무에 필요한 모든 지식을 체계적이고 단계적으로 안내하는 종합 튜토리얼 시리즈입니다.

Spring.Net 의 기본 개념


💡 왜 이 가이드를 선택해야 할까요?

  • 한글 자료의 갈증 해소: Spring.NET과 NHibernate에 대한 깊이 있는 한글 학습 자료를 찾기 어려웠던 분들을 위해 제작되었습니다.
  • 실전 프로젝트 중심: 단순히 이론만 나열하는 것이 아니라, 게시판, 사용자 관리, 쇼핑몰 시스템과 같은 실제 프로젝트를 직접 구축하며 학습합니다.
  • 체계적인 단계별 학습: 00번부터 19번까지, 총 20개의 튜토리얼을 순서대로 따라가다 보면 어느새 전문가 수준의 지식을 갖추게 될 것입니다.
  • 최신 모범 사례 반영: 의존성 주입(DI) 일관성, Spring.NET 기반의 Unit of Work 패턴, 선언적 트랜잭션, NHibernate 필터 기반 Soft Delete, 이벤트 리스너 기반 Audit Trail 등 현대적인 아키텍처 및 디자인 패턴을 적용했습니다.
  • 완벽한 예제 코드: 각 튜토리얼마다 동작하는 완전한 예제 코드가 제공되어, 개념을 즉시 실습하고 확인할 수 있습니다.

🎯 이 가이드를 통해 무엇을 배울 수 있나요?

  • Spring.NET IoC/DI/AOP: 제어의 역전, 의존성 주입, 관점 지향 프로그래밍의 핵심 개념과 실전 적용.
  • NHibernate ORM: 객체-관계 매핑의 기본부터 HQL, LINQ, Criteria API, Stored Procedure 활용 고급 쿼리까지.
  • 탄탄한 계층형 아키텍처: Domain, Data, Service, Web 계층을 명확히 분리하고 통합하는 방법.
  • RESTful Web API 개발: 기존 MVC 프로젝트에 Web API를 통합하여 모바일/SPA 클라이언트와 연동하는 방법.
  • 고급 디자인 패턴: Repository, Spring.NET 컨텍스트 기반의 Unit of Work, Specification, Soft Delete, Audit Trail 등 실무에서 유용한 패턴들을 직접 구현하며 체득.
  • 트랜잭션 관리: ACID 속성, 격리 수준, 선언적 트랜잭션을 통한 데이터 일관성 및 동시성 문제 해결.
  • 성능 최적화 및 보안: 캐싱(2차 캐시), Eager/Lazy Loading, SQL Injection, XSS, CSRF 방지, 비밀번호 해싱 등.

🧑‍💻 어떤 분들에게 추천하나요?

  • .NET Framework 기반의 엔터프라이즈 애플리케이션 개발에 관심 있는 개발자.
  • Spring.NET 또는 NHibernate를 체계적으로 배우고 실무에 적용하고 싶은 분.
  • 객체지향 설계 원칙과 최신 아키텍처 패턴을 .NET 환경에서 적용하고 싶은 분.
  • Java Spring Framework 경험이 있어 .NET 환경으로 전환하려는 분.
  • 레거시 .NET 프로젝트의 유지보수 또는 현대화 방안을 모색하는 분.

🌟 지금 바로 학습을 시작하세요!

더 이상 흩어진 정보를 찾아 헤매지 마세요. "Spring.NET + NHibernate 완벽 학습 가이드"는 당신의 .NET 엔터프라이즈 개발 역량을 한 단계 끌어올릴 최고의 파트너가 될 것입니다.

지금 바로 프로젝트를 확인하고, 당신의 .NET 개발 여정을 시작해 보세요!

➡️ Spring.NET + NHibernate 완벽 학습 가이드 프로젝트 방문하기


Happy Learning! 📚
Made with ❤️ for .NET Developers

반응형
반응형

최근 인터넷 상에서 보이는 더 위처3 의 새로운 dlc 관련 내용을 폴란드어에서 번역해서 공유합니다. 2025년 12월 16일자 소식입니다.

[출처: https://strefainwestorow.pl/analizy/noblesecurities-cdprojekt-wiedzmin-dlc-orion-cyberpunk DeepL 로 번역되었습니다.]

노블 증권의 애널리스트에 따르면, ‘위쳐 3’ 확장팩 출시 일정은 2026년 5월로 예정되어 있으며, CD PROJEKT 주식 매수를 권고하고 있다.
노블 증권의 애널리스트 마테우시 크르자노프스키는 최근 보고서에서 CD 프로젝트의 주요 프로젝트 일정과 예산을 업데이트했다. 그는 2026년 5월 ‘위쳐 3’ 유료 확장팩 출시와 2027년 4분기 ‘위쳐 4’ 출시를 예상하며, 삼부작 전체의 제작 및 마케팅 비용이 크게 증가할 것으로 전망했다. 이후에는 멀티플레이어 요소가 포함된 사이버펑크 게임 ‘오리온(Orion)'이 출시될 예정이며, '시리우스(Sirius)'와 '카니스 마요리스(Canis Majoris)’ 프로젝트도 재편될 전망이다. 이 모든 것은 'GTA VI'와의 시장 경쟁 속에서 진행될 것이다.
노블 증권의 이 보고서는 12월 16일 공개되었으며, 이는 투자자 포털 '스트레파 인베스토르(Strefa Inwestorów)'가 마테우시 크르자노프스키와의 인터뷰를 게재한 직후였다. 해당 인터뷰에서 그는 자신의 예측에 대한 세부 사항 일부를 공개한 바 있다. 그는 특히 CD 프로젝트의 미발표 프로젝트 중 하나가 ‘위쳐 3'의 DLC일 것이라고 제안했는데, 이는 이전 3부작의 마지막 부분과 새 시리즈의 시작을 연결하는 가교 역할을 하며, 동시에 '위쳐 4’ 캠페인의 출시와 맞물릴 것이라고 설명했다.

2026년 5월 ‘더 위쳐 3’ 유료 확장팩 출시 및 ‘W4’ 마케팅 시작.
노블 증권의 한 애널리스트는 내년 중반 ‘더 위쳐 4’ 출시가 주요 초점이 될 것으로 전망한다.
보고서는 “2026년 5월 '위쳐 3'의 유료 확장팩(DLC) 추가 출시를 예상한다. 내년 1,100만 장 판매(개당 30달러)를 전망하며, 제작 예산은 5,200만 폴란드즈워티(PLN)로 추정된다. 이번 출시가 '위쳐 4'의 본격적인 마케팅 캠페인을 시작할 것”이라고 밝혔다.
해당 애널리스트는 내년 출시 예정인 소규모 비공개 프로젝트에 대해서도 추정치를 제시했다.
보고서는 “내년에 공개될 수 있는 기타 비공개 프로젝트의 예산을 2,800만 폴란드 즐로티로 추정하며, 내년 잠재적 매출 수익은 6,100만 폴란드 즐로티로 예상한다”고 덧붙였다.

위쳐 4는 2027년 말 출시 예정이며, 3부작 가격은 인상될 전망이다.
회사 경영진이 위쳐 4가 2027년 이전에는 출시되지 않을 것이라고 발표한 이후, 노블 증권은 제작 주기 추정치를 1년 연장하여 이제 게임이 2027년 4분기에 출시될 것으로 예상하고 있습니다.
"현재 개발 비용의 연장 및 구조로 인해 게임 예산 추정치를 14억 PLN(마케팅 비용도 동일 금액)으로 상향 조정하게 되었습니다. 그러나 후속작들이 W4 기술을 기반으로 할 예정임을 고려할 때, 3부작 전체 예산은 21억 PLN에서 32억 PLN으로 증가했습니다. 또한 출시 일정 집중(경영진은 6년 내 새 3부작 전체 출시를 원함)과 브랜드 인지도 상승으로 인한 마케팅 캠페인 시너지 효과가 발생할 수 있으며, 이는 CP77 비용 기반 모델 대비 판매 비용 절감으로 이어질 수 있습니다"라고 보고서는 설명합니다.

오리온 멀티플레이어 버전 – CP77 10주년 기념 첫 공개.
사이버펑크 후속작과 관련해 노블 시큐리티스는 스튜디오의 두 번째 핵심 프랜차이즈 프로젝트를 담당하는 팀이 현재 135명으로 구성되어 있으며, 향후 2년 내 규모가 두 배로 확대될 것이라고 밝혔습니다.
“멀티플레이어 모드를 제작에 통합하려는 의지로 인해, 벤치마크 W4 작업 진척 상태를 넘어 제작 기간을 연장하게 되었습니다. 그 결과 예산은 15억 PLN으로 증가했으며, 2030년 4분기(CP77 10주년) 출시를 예상합니다”라고 보고서는 덧붙였습니다... 중략...

반응형
반응형
I. 들어가며: '바이브 코딩'의 시대와 그 한계
 
1. AI 코딩 시대의 도래
AI 코딩 도구의 등장으로 소프트웨어 개발의 문턱이 극적으로 낮아졌습니다. 이제 누구나 간단한 아이디어만으로도 빠르게 애플리케이션을 만들 수 있는 시대가 열렸습니다. 이러한 현상 속에서 '바이브 코딩(vibe-coding)'이라는 새로운 용어가 등장했습니다. 이는 단순한 아이디어 에 의존해 코드를 짜는 것처럼, 명확한 계획 없이 즉흥적으로 AI와 상호작용하며 개발하는 방식을 의미합니다.
 
 
2. '바이브 코딩'의 정의 및 문제점 분석
바이브 코딩이란 "트윗 길이의 짧은 문장으로 아이디어를 설명하고, AI가 코드를 작성하게 한 뒤, 문제가 생기면 또 다른 지시를 내려 고치는 방식"으로 정의할 수 있습니다. 실무에서 우리 모두는, 저를 포함해서, 명확한 계획 없이 일단 시작하고 보자는 유혹에 빠지곤 합니다. 바로 이 지점에서 프로젝트가 길을 잃기 시작합니다. 이 방식은 초기 프로토타입을 빠르게 만드는 데에는 효과적이지만, 두 가지 핵심적인 문제점을 안고 있습니다.
 방향성 상실: 긴 슬랙(Slack) 스레드에서 대화가 길어질수록 원래 논점에서 벗어나는 경험을 해본 적이 있을 겁니다. 바이브 코딩도 이와 비슷합니다. 명확한 목표 없이 계속해서 AI에게 프롬프트를 수정하며 지시하다 보면, 처음 의도했던 것과 전혀 다른 결과물이 만들어지기 쉽습니다. 개발 과정이 중심을 잃고 표류하게 되는 것입니다.
 품질 저하: 바이브 코딩은 코드 품질, 아키텍처, API 패턴, 보안 표준, 장기적인 유지보수성 등 프로덕션급 소프트웨어의 핵심 요소들을 간과하기 쉽습니다. AI는 주어진 프롬프트에만 의존하기 때문에, 전체적인 구조나 장기적인 유지보수를 고려한 코드를 생성하기 어렵습니다. 결국 초기에는 빠르게 결과물을 얻는 것처럼 보이지만, 숨겨진 버그와 기술 부채가 쌓여 나중에 더 많은 수정 작업을 초래하게 됩니다.
 
3. 스펙 주도 개발(SDD) 소개
이러한 문제들에 대한 해결책으로 **스펙 주도 개발(Spec-Driven Development, SDD)**이 주목받고 있습니다. SDD는 "나중에 시간을 절약해주는 잠시 멈춤"이라는 개념으로 설명할 수 있습니다. 무작정 코딩을 시작하는 대신, 먼저 만들고자 하는 소프트웨어의 기능, 요구사항, 제약 조건 등을 명확하게 정의한 '명세서(specification)' 즉, 설계도를 만드는 체계적인 접근법입니다.
이 설계도는 개발 과정에서 인간과 AI 모두가 따라야 할 명확한 '북극성'이 되어, 방향을 잃지 않고 품질 높은 소프트웨어를 만들 수 있도록 돕습니다.
그렇다면 바이브 코딩과 스펙 주도 개발은 구체적으로 어떤 차이가 있을까요? 다음 섹션에서 두 가지 접근법을 한눈에 비교해 보겠습니다.
 
 
II. 한눈에 비교하기: 스펙 주도 개발(SDD) vs. 바이브 코딩
 
스펙 주도 개발(SDD)과 바이브 코딩의 핵심적인 차이점을 아래 표를 통해 명확히 비교할 수 있습니다.
기준
바이브 코딩
스펙 주도 개발(SDD)
시작점
모호한 프롬프트
명확하고 구조화된 명세서
프로세스
반복적인 프롬프트 수정과 코드 생성의 순환
명세 → 계획 → 작업 → 구현의 체계적 단계
개발자의 역할
AI에게 지시하는 프롬프트 엔지니어
AI와 협력하는 시스템 설계자 및 검토자
결과물
빠른 프로토타입, 숨겨진 버그와 기술 부채 발생 가능성
신뢰성 높은 고품질 코드, 유지보수의 용이성
핵심 비유
끝없는 슬랙 스레드
모두가 공유하는 청사진(Source of Truth)
이처럼 명확한 차이를 보이는 스펙 주도 개발이 왜 더 신뢰할 수 있는 접근 방식인지, 그 구체적인 장점들을 자세히 살펴보겠습니다.
 
 
III. 왜 스펙 주도 개발(SDD)을 사용해야 할까?
소프트웨어 개발을 처음 배우는 학생의 입장에서 스펙 주도 개발(SDD)은 복잡한 프로젝트를 성공적으로 이끌어갈 수 있는 강력한 무기가 됩니다. SDD가 제공하는 핵심 이점은 다음과 같습니다.
1. 명확한 목표 설정 이는 앞서 언급한 '방향성 상실' 문제를 정면으로 해결합니다. 잘 정의된 명세서는 끝없는 슬랙 스레드처럼 표류하는 대신, 프로젝트의 모든 참여자가 따라야 할 명확한 등대가 되어줍니다. 이를 통해 "우리가 무엇을 만들고 있었지?"라는 개발 과정의 혼란을 방지하고, 프로젝트에 참여하는 인간과 AI 모두가 처음부터 끝까지 같은 목표를 향해 나아가게 합니다.
 
2. 품질 높은 결과물 이는 AI가 추측에 의존해 코드를 생성하며 발생하는 '품질 저하' 문제를 근본적으로 해결합니다. 명확한 명세서가 있으면 AI는 주어진 설계도에 따라 코드를 생성하기 때문에 버그가 적고, 구조적으로 더 안정적이며 일관성 있는 코드를 만들 수 있습니다. 이는 단순히 '작동하는' 코드를 넘어, 장기적으로 유지보수하기 좋은 '잘 만들어진' 코드를 얻게 됨을 의미합니다.
 
3. 진정한 AI 협업 파트너 이는 개발자의 역할을 단순한 '프롬프트 엔지니어'에서 벗어나게 합니다. SDD를 통해 AI는 단순히 명령을 수행하는 코드 생성 도구를 넘어, 개발자의 의도를 깊이 이해하고 협력하는 진정한 '파트너'가 될 수 있습니다. 명세서는 개발자의 생각을 AI에게 전달하는 가장 정확한 언어이며, 이 명확한 소통을 바탕으로 AI는 잠재력을 최대한 발휘하여 개발자를 도울 수 있습니다.
이러한 개념적 장점들이 실제 개발 과정에서는 어떻게 구체화되는지, 구인구직 앱 개발 예시를 통해 알아보겠습니다.
 
 
IV. 실전 예제: 구인구직 앱 개발로 배우는 SDD 4단계
예제 소개
여기서는 간단한 '구인구직 앱(job seekers app)' 개발 사례를 통해 SDD의 4단계 프로세스를 살펴보겠습니다. 이 앱은 사용자가 면접 질문에 음성으로 답변하면, 이를 녹음하고 분석하여 구직자에게 피드백을 제공하는 인터뷰 준비용 애플리케이션입니다. 개발자의 재치있는 '엘리베이터 피치'에 따르면, 이 앱은 구직자들이 실제 면접처럼 질문에 답하고, 그 결과를 분석하여 정량화된 점수와 피드백을 제공함으로써 면접 기술을 향상시키는 것을 목표로 합니다.
 
SDD 4단계 설명
1단계: 명세(Specification) - '무엇을' 만들지 정의하기
첫 단계로, 우리는 앱의 Figma 디자인을 AI에게 전달했습니다. AI는 즉시 로그인, 프로필 관리를 포함한 방대한 요구사항 목록을 생성해냈죠. 하지만 숙련된 개발자로서 우리는 MVP(최소 기능 제품)에 이 모든 것이 필요하지 않다는 것을 압니다. 그래서 우리는 직접 개입하여 핵심 기능인 '인터뷰 연습'에만 집중하도록 불필요한 기능들을 덜어내는 '범위 조율' 역할을 수행했습니다. 이것이 바로 인간 개발자의 전략적 판단이 빛을 발하는 순간입니다. 이 단계는 기술적 구현이 아닌, 앱의 기능과 목표, 즉 '무엇(WHAT)' 을 정의하는 데 집중합니다.
 
2단계: 계획(Plan) - '어떻게' 만들지 설계하기
명세서가 확정되자, 우리는 AI에게 '어떻게(HOW)' 이 기능을 구현할지에 대한 기술 설계 문서를 요청했습니다. AI는 전체적인 아키텍처와 StartScreen, QuestionScreen 같은 필요한 화면 컴포넌트 목록을 제안했습니다. 하지만 여기서도 인간의 통찰력이 필요했습니다. AI가 만든 초기 설계에는 '사용자 음성을 텍스트로 변환하는 기능'이나 '분석을 위해 Claude AI SDK를 사용'하는 것과 같은 핵심 기술 계획이 빠져 있었습니다. 우리는 이 구체적인 기술 계획을 직접 추가하여 설계를 보완하고 완성했습니다.
 
3단계: 작업(Task) - 실행 계획을 잘게 쪼개기
잘 만들어진 기술 설계도를 바탕으로, AI는 코딩에 필요한 모든 단계를 체크리스트 형태의 '작업 목록'으로 만들었습니다. 하지만 AI가 제안한 작업 순서는 최적이 아니었습니다. 그래서 우리는 사용자가 즉시 눈으로 확인할 수 있는 UI 관련 작업을 초기 단계에 배치하도록 순서를 전략적으로 재조정했습니다. 이 작은 변화를 통해 우리는 더 빠르게 테스트 가능한 MVP를 만들어 피드백을 받을 수 있게 되었고, 프로젝트의 방향성을 조기에 검증할 수 있었습니다.
 
4단계: 구현(Implementation) - AI가 실제로 코드를 작성하기
마지막으로, 우리는 AI에게 잘 정리된 작업 목록에 따라 코드를 작성하도록 지시했습니다. AI가 파일 생성, 라이브러리 설치, 코드 작성을 자동으로 수행하는 동안, 우리는 감독관의 역할을 수행했습니다. 단순히 지켜보는 것을 넘어, 각 단계의 결과물이 우리가 처음 정의했던 명세서와 계획에 정확히 부합하는지 전체 과정을 감독하고 검토하며 최종 결과물의 품질을 보장했습니다.
이처럼 SDD는 아이디어를 체계적인 단계를 거쳐 신뢰할 수 있는 소프트웨어로 만드는 전 과정을 안내합니다. 그렇다면 이러한 변화가 개발자에게는 궁극적으로 어떤 의미를 가질까요?
 
 
V. 결론: AI 시대의 개발자, 코더에서 설계자로
SDD의 핵심 가치 요약
SDD는 단순히 코딩 전에 문서를 하나 더 작성하는 관료적인 절차가 아닙니다. 수많은 프로젝트를 거치며 깨달은 것은, 이것이 AI라는 강력한 도구를 길들이고 그 잠재력을 극대화하기 위한 필수적인 **'생각의 틀(framework)'**이라는 사실입니다. 모호한 지시 대신 명확한 설계도를 제공함으로써, 우리는 AI의 예측 불가능성을 통제하고 그 잠재력을 극대화할 수 있습니다.
 
개발자의 역할 변화 강조
'바이브 코딩'의 즉각적인 속도가 매력적인 유혹일지라도, 견고하고 신뢰성 높은 소프트웨어로 가는 길은 결국 설계자의 규율과 명확한 청사진으로 포장됩니다. SDD가 보편화되면서 개발자의 역할은 근본적으로 변화하고 있습니다. 더 이상 키보드 앞에서 한 줄 한 줄 코드를 입력하는 '코더(Coder)'에 머무르지 않습니다.
 
이제 개발자는 시스템 전체의 청사진을 그리는 '설계자(Architect)', AI의 작업을 지휘하는 '지휘자(Orchestrator)', 명확한 의도를 정의하는 '명세서 저자(Spec Author)', 그리고 AI의 결과물을 검증하는 **'최종 수문장(Guardian)'**으로 진화하고 있습니다. AI 시대의 개발자는 코드를 '만드는' 사람에서, 훌륭한 코드가 '만들어지도록' 설계하고 이끄는 사람으로 거듭나게 될 것입니다.

 

반응형
반응형
  • Direct X version: 11
  • Resolution: 1280x800
  • Refresh rate: 90Hz
  • FXAA: On
  • MSAA: Off
  • Vsync: Off
  • Population Density: 70%
  • Population Variety: 100%
  • Distance Scaling: 80% (Potential for 100% but needs further testing)
  • Texture Quality: Very High
  • Shader Quality: High
  • Shadow Quality: Normal
  • Reflection Quality: High
  • Reflection MSAA: Off
  • Water Quality: Very High
  • Particles Quality: Normal
  • Grass Quality: Very High
  • Soft Shadows: Soft
  • Post FX: High
  • Motion Blur Strength: Personal preference
  • Antistropic Filtering: 8-16x
  • Ambient Occlusion: Normal
  • Tesselation: Normal

Advanced Graphics:

  • Long Shadows: Off
  • High-Resolution Shadows: Off
  • High Detail Streaming While Flying: On
  • Extended Distance Scaling: Off
  • Frame Scaling Mode: 3/2 (1x500) - This smooths out jaggies a lot better
반응형
반응형

Mac Mini의 내부 256GB SSD가 금방 차는 문제를 해결하고, iMovie와 Xcode를 외장 하드로 옮겨 용량을 확보하는 방법을 정리했습니다. 혹시 더 좋은 방법이 있으면 확인 후 업데이트 하겠습니다.


1️⃣ 외장하드 준비

  • 외장하드 이름: MacData
  • 포맷: APFS
  • 권장: SSD (속도 문제 최소화)

폴더 구조

MacData/
└── iMovieLibrary/       # iMovie 보관함
└── Applications/        # 외장 앱

2️⃣ 내부 디스크 용량 확인

df -h /
  • 용량 확인 후, 어떤 파일/폴더가 공간을 차지하는지 분석
du -sh ~/* | sort -h
du -sh ~/Library/* | sort -h
du -xh / | sort -h | tail -20  # 대용량 폴더 TOP 20 확인

3️⃣ iMovie 보관함 외장 이동

1. 외장 폴더 생성

  • Finder에서 외장하드 MacData 열기 → 새 폴더 iMovieLibrary 생성

2. 보관함 이동

  • Finder에서 ~/Movies/iMovie 보관함.imovielibrary → 외장 iMovieLibrary 드래그 앤 드롭

3. iMovie에서 연결

  1. iMovie 실행
  2. 상단 메뉴 → File → Open Library → Other… → Locate…
  3. 외장하드 iMovieLibrary/iMovie 보관함.imovielibrary 선택
  4. (선택) Preferences → Library Location에서 기본 보관함으로 설정

외장 하드 미연결 시 프로젝트 열기 불가
SSD 권장


4️⃣ Xcode / 개발자 캐시 정리 (추가 용량 확보)

# Xcode DerivedData 삭제
rm -rf ~/Library/Developer/Xcode/DerivedData

# 시뮬레이터 전체 삭제
rm -rf ~/Library/Developer/CoreSimulator

# 아카이브 파일 삭제
rm -rf ~/Library/Developer/Xcode/Archives

# iOS DeviceSupport 삭제
rm -rf ~/Library/Developer/Xcode/iOS\ DeviceSupport
  • 추가 20~30GB 확보 가능
  • 안전, 재설치 가능

5️⃣ 사용자 캐시 정리

rm -rf ~/Library/Caches/*
  • 일부 시스템 관련 캐시는 삭제 불가 (CloudKit, Music, Safari 등)
  • 용량 차지 크지 않음 → 무시 가능

6️⃣ 내부 디스크 상태 확인

df -h /
  • iMovie 외장 이동 + Xcode/캐시 정리 후 예시:
Size: 228GB
Used: 10GB
Avail: 41GB
Capacity: 21%
  • 안정적 운영 가능

7️⃣ 추가 팁

  • iMovie 외장 보관함 주기적 백업
  • Xcode 캐시 주기적 정리
  • 외장하드 앱 사용 시 속도 고려 (SSD 권장)
  • 내부 보관함/임시 파일 삭제로 용량 확보

✅ 결론

  • 내부 디스크 256GB는 시스템과 필수 앱만 유지
  • 대용량 작업(영상 편집, 앱 설치 등)은 외장 1TB에 저장
  • 주기적 캐시 정리 및 외장 보관함 관리로 안정적 사용 가능
반응형
반응형

안녕하세요 다음 글은 claude-code 가 작성한 블로그 글입니다. 오전에 만든 앱을 테스트 하기 위해 준비하는 과정을 정리해서 공유해 드립니다. 

너무 오래 전에 어플을 테스트 및 등록 해 보고, 너무 오랜만에 작업하는 것이여서, 개발자 콘솔 환경도 많이 바뀌었고, 없던 기능들도 많아져서, 진행하는데에 막힘이 많았습니다. 하지만 ai 가 잘 가이드를 해줘서 내부테스트 패키지가 무사히 잘 등록이 되었습니다. 

google play 내 - 내부테스트 링크

 

Flutter 앱 Google Play 내부 테스트 배포 완벽 가이드

작성일: 2025-11-10
프로젝트: RentHouse (가재 Flutter 임대관리 앱)
목표: RevenueCat 구독 기능 테스트를 위한 Google Play Console 내부 테스트 배포


📌 시작하기 전에

이 글은 Flutter 앱을 Google Play Console의 내부 테스트(Internal Testing) 트랙에 처음 배포하면서 겪은 실제 문제들과 해결 과정을 기록한 것입니다. 특히 RevenueCat 구독 기능을 테스트하기 위해서는 반드시 Play Console을 통해야 하므로, 이 과정이 필수입니다.

내부 테스트 vs 프로덕션

구분 내부 테스트 프로덕션
심사 ❌ 없음 (즉시 배포) ✅ 있음 (3-7일)
테스터 수 최대 100명 무제한
공개 범위 지정된 테스터만 전체 사용자
취소/수정 ✅ 언제든지 가능 ⚠️ 어려움
RevenueCat 테스트 ✅ 가능 ✅ 가능

🔐 1단계: Android 앱 서명 설정

Google Play에 앱을 업로드하려면 Release 서명이 필수입니다.

1.1. Keystore 생성

cd renthouse

keytool -genkey -v -keystore upload-keystore.jks \
  -keyalg RSA -keysize 2048 -validity 10000 -alias upload \
  -storepass YOUR_PASSWORD -keypass YOUR_PASSWORD \
  -dname "CN=Your Name, OU=Development, O=Company, L=City, ST=State, C=KR"

중요 포인트:

  • validity 10000: 27년 유효 (Google Play 요구: 최소 25년)
  • ⚠️ 처음에 3개월로 설정했다가 오류 발생!
    오류: 너무 일찍 만료되는 인증서로 서명한 APK

 

1.2. key.properties 생성

android/key.properties 파일 생성:

storePassword=YOUR_PASSWORD
keyPassword=YOUR_PASSWORD
keyAlias=upload
storeFile=../upload-keystore.jks

 

1.3. build.gradle.kts 수정

android/app/build.gradle.kts:

import java.util.Properties
import java.io.FileInputStream

// Keystore 속성 로드
val keystorePropertiesFile = rootProject.file("key.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
    keystorePropertiesFile.inputStream().use { keystoreProperties.load(it) }
}

android {
    // ... 기존 설정

    signingConfigs {
        create("release") {
            keyAlias = keystoreProperties["keyAlias"] as String
            keyPassword = keystoreProperties["keyPassword"] as String
            storeFile = file(keystoreProperties["storeFile"] as String)
            storePassword = keystoreProperties["storePassword"] as String
        }
    }

    buildTypes {
        release {
            signingConfig = signingConfigs.getByName("release")
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

 

1.4. .gitignore 업데이트

절대 커밋하면 안 되는 파일들:

# Android signing keys (NEVER commit these!)
*.jks
*.keystore
/android/key.properties
upload-keystore.jks

 

📱 2단계: Target SDK 업데이트

Google Play는 Target SDK 35 이상을 요구합니다 (2025년 11월 기준).

2.1. build.gradle.kts 수정

android/app/build.gradle.kts:

android {
    defaultConfig {
        applicationId = "com.a88888.renthouse"
        minSdk = flutter.minSdkVersion
        targetSdk = 35  // 34 → 35로 변경 ✅
        versionCode = flutter.versionCode
        versionName = flutter.versionName
    }
}

발생했던 오류:

현재 앱이 34의 API 수준을 타겟팅하고 있지만,
API 수준 35 이상을 타겟팅해야 합니다.

 

📦 3단계: App Bundle (AAB) 빌드

3.1. 버전 코드 증가

pubspec.yaml:

version: 0.7.0+3
         ^^^^^  ^
         |      └─ versionCode (Play Console에서 고유해야 함)
         └──────── versionName (사용자가 보는 버전)

문제 발생:

버전 코드 2는 이미 사용되었습니다.
다른 버전 코드를 사용해 보세요.

해결:

  • 이전: 0.7.0+2
  • 수정: 0.7.0+3

 

3.2. App Bundle 빌드

cd renthouse

# Clean build (선택사항)
flutter clean

# AAB 빌드
flutter build appbundle

결과:

✓ Built build/app/outputs/bundle/release/app-release.aab (62MB)

Warning 무시 가능:

Release app bundle failed to strip debug symbols from native libraries.

→ 앱 기능에는 영향 없음, 프로덕션 배포 전에 해결 권장


 

🚀 4단계: Google Play Console 설정

4.1. 내부 테스트 트랙 생성

  1. Google Play Console 접속
  2. 앱 선택: RentHouse
  3. 테스트 > 내부 테스트(Internal testing)
  4. 새 버전 만들기 클릭

 

4.2. AAB 업로드

  1. Android App Bundle 업로드
    • 파일: build/app/outputs/bundle/release/app-release.aab
    • 드래그 앤 드롭
  2. 출시명 입력: "구독테스트버전" (개발자만 보임)
  3. 출시 노트 작성:
    - RevenueCat 구독 기능 연동
    - Firestore 구독 동기화
    - Target SDK 35 업데이트
  4. 검토저장 및 출시

 

4.3. 테스터 추가

중요! 테스터를 추가하지 않으면 아무도 다운로드할 수 없습니다.

  1. 테스터 탭 클릭
  2. 이메일 목록 만들기
  3. 목록 이름: "Internal Testers"
  4. 이메일 추가: 본인 Gmail 주소
  5. 저장
  6. 트랙에 추가 (내부 테스트 트랙 선택)

 

4.4. 라이선스 테스터 추가 (구독 테스트용)

구독 기능을 무료로 테스트하려면 라이선스 테스터 등록 필수!

  1. 설정 > 라이선스 테스트
  2. 라이선스 테스터 섹션
  3. 이메일 추가: 본인 Gmail
  4. 라이선스 응답: LICENSED 선택
  5. 저장

효과:

  • ✅ 구독 구매 시 실제 결제 없음
  • ✅ RevenueCat 구독 플로우 전체 테스트 가능

 

📲 5단계: 테스트 앱 설치

5.1. 테스트 링크 받기

  1. 내부 테스트 페이지
  2. 테스트 방법 섹션
  3. 공유 가능한 링크 복사
    • 예: https://play.google.com/apps/internaltest/xxxxxxxx

 

5.2. Android 기기에서 설치

  1. 테스트 링크를 모바일 브라우저에서 열기
  2. 테스터가 되기 버튼 클릭
  3. Google Play에서 다운로드 클릭
  4. 앱 설치

⚠️ 주의: 테스터로 등록한 Gmail 계정으로 로그인된 기기여야 함!


 

🐛 트러블슈팅: 발생한 문제들

문제 1: 디버그 모드로 서명

오류:

디버그 모드로 서명한 APK 또는 Android App Bundle을 업로드했습니다.

원인:

  • build.gradle.kts에서 signingConfig = debug 사용

해결:

  • Release 서명 설정 (위 1단계 참고)

 

문제 2: 인증서 유효기간 부족

오류:

너무 일찍 만료되는 인증서로 서명한 APK

원인:

  • Keystore 생성 시 validity 값이 너무 작음 (3개월)

해결:

# 27년 유효 인증서 생성
keytool -genkey -v -keystore upload-keystore.jks \
  -validity 10000 ...  # 10,000일 = 27.4년

확인:

keytool -list -v -keystore upload-keystore.jks -storepass YOUR_PASSWORD
# Valid from: 2025-11-10
# Valid until: 2053-03-28 ✅

 

문제 3: Target SDK 34

오류:

현재 앱이 34의 API 수준을 타겟팅하고 있지만,
API 수준 35 이상을 타겟팅해야 합니다.

해결:

// android/app/build.gradle.kts
targetSdk = 35  // 34 → 35

 

문제 4: 버전 코드 중복

오류:

버전 코드 2는 이미 사용되었습니다.

원인:

  • 이전에 업로드한 AAB와 동일한 versionCode

해결:

# pubspec.yaml
version: 0.7.0+3  # +2 → +3으로 증가

참고:

  • 한 번 사용한 버전 코드는 재사용 불가
  • 삭제한 릴리즈의 버전 코드도 재사용 불가

 

문제 5: 테스터 미지정

경고:

아직 테스터가 지정되지 않았기 때문에
어떤 사용자도 이 버전을 이용할 수 없습니다.

해결:

  • 위 4.3단계: 테스터 이메일 목록 생성 및 추가

 

📊 RevenueCat 구독 테스트 준비

내부 테스트 배포가 완료되면 RevenueCat 구독 기능을 테스트할 수 있습니다.

RevenueCat API Key 확인

lib/core/services/revenuecat_service.dart:

const apiKey = 'goog_KWVteD89709876789858765WFgLQCM';

확인 사항:

  • ✅ API Key 형식: goog_xxxxx (Android)
  • ✅ RevenueCat Dashboard에서 발급받은 Public Key
  • ❌ Secret Key (sk_xxxxx)는 절대 앱에 포함 금지

다음 단계

  1. Google Play Console > 제품 > 구독
  2. 구독 상품 등록:
    • premium_monthly: 월간 ₩5,000
    • premium_yearly: 연간 ₩50,000
  3. RevenueCat Dashboard > Products
    • Google Play 구독 상품 가져오기
  4. Entitlement 생성: premium
  5. 모바일 기기에서 구독 구매 테스트
  6. Firestore에서 구독 정보 동기화 확인

✅ 체크리스트

빌드 준비

  • Keystore 생성 (27년 유효)
  • key.properties 설정
  • build.gradle.kts 서명 설정
  • .gitignore에 keystore 추가
  • Target SDK 35 설정
  • pubspec.yaml 버전 코드 증가

Play Console 설정

  • 내부 테스트 트랙 생성
  • AAB 업로드 (62MB)
  • 출시 노트 작성
  • 테스터 이메일 목록 생성
  • 라이선스 테스터 추가
  • 저장 및 출시

RevenueCat 준비

  • API Key 설정 확인
  • Firestore 구독 동기화 코드 구현
  • Google Play 구독 상품 등록 (다음 단계)
  • RevenueCat Products 가져오기 (다음 단계)
  • 구독 테스트 (다음 단계)

🎯 결과

최종 빌드 정보:

파일: app-release.aab
크기: 62MB
버전: 0.7.0+3
Target SDK: 35
인증서 유효기간: 2025-11-10 ~ 2053-03-28
상태: ✅ 내부 테스트 배포 완료

배포 상태:

  • ✅ Google Play Console 내부 테스트 트랙
  • ✅ 테스터 지정 완료
  • ✅ 라이선스 테스터 등록 완료
  • ✅ 테스트 링크 발급 완료

💡 배운 점

  1. 인증서 유효기간은 충분히 길게
    • 최소 25년 이상 (Google Play 요구사항)
    • 권장: 27년 (10,000일)
  2. 버전 코드는 항상 증가
    • 한 번 사용한 코드는 재사용 불가
    • 삭제한 릴리즈도 마찬가지
  3. Target SDK는 최신으로
    • 2025년 11월 기준: SDK 35 이상 필요
    • Google Play 요구사항은 계속 업데이트됨
  4. 테스터 설정 필수
    • 내부 테스트도 테스터 지정 필요
    • 라이선스 테스터는 구독 테스트용 별도 설정
  5. AAB vs APK
    • Play Console 업로드: AAB 권장
    • 직접 설치 테스트: APK
    • RevenueCat 테스트: Play Console 필수 (AAB)

📚 참고 자료


🔗 관련 문서

 

반응형
반응형

2025.10.30-01. #바이브코딩 으로 앱 만들기 - 과연 가능할까?

 

01. #바이브코딩 으로 앱 만들기 - 과연 가능할까?

안녕하세요! 오늘은 제가 진행하고 있는 'Renthouse(가제)' 프로젝트에 대한 조금 특별한 이야기를 공유하고자 합니다. 이 프로젝트는 Flutter로 제작된 크로스플랫폼 임대 관리 애플리케이션으로,

yobine.tistory.com

위의 글 이어서 실제 Renthouse 프로젝트의 바이브코딩 진행 과정 과 내용을 공유합니다.

바이브코딩이 어느정도 프로토타입 개발 경험을 바탕으로 가능한 것을 알았으니, 정말 시제품을 만들고 싶었습니다. 사실 이 RentHouse 아이디어는 개인적으로도 필요하기도 해서 구상하고 있던 프로그램이기 때문에, 출시 이후에도 지속적으로 업그레이드도 할 것 같기도 하고, 어느정도 금액이 나오면 좀더 나은 서비스를 제공할 계획도 있습니다. 나만 쓰더라도 좀 편하게 사용이 안될까.. 하며 아이디어가 계속 나오더라고요.

여하튼, 프로토타입 때, Gemini-flash 가 만든 코드를 경험 했기 때문에, (물론 생각보다 만족스러웠지만, 의외로 만족스럽지 않은 부분도 많았습니다.) 이번에는, 유료이지만 Claude Code를 선택했습니다. 결론부터 말씀 드리자면, 3개월 정도 진행 하였고, 현재 출시까지 원하는 기능 중 1개 제외하고 모두 구현되어 있습니다. 

우선, 많은 개발자분들이 클로드코드가 코딩에 최적화되어 있다고 평가했기 때문입니다. 또한 이번에는 제가 중간에 개입하지 않는 것을 목표로 했습니다. 100% 바이브 코딩으로 진행 하였습니다. 음.. 그러기 위해서.. 제가 이미 잘 아는 언어 대신, 아예 모르는 언어를 선택하였습니다.

멀티플랫폼도 지원해야 한다는 점 때문에, 많은 개발자분들께서 추천하는 Flutter 를 선택하게 되었습니다. Flutter 는 이미 여러번의 버전업을 거치면서 상당히 안정화되었고, 고품질의 결과물을 낼 수 있으며, 또한 개발하기도 편리하다는 평가를 많이 접하게 되었습니다. 또한 실제로 YouTube에서도 최신 Flutter 버전이 충분히 실무에 활용 가능하다며 여러 적용 사례들도 확인할 수 있었고요.
그래서 최종적으로, 이번 프로젝트는 Flutter로 진행하기로 결정했습니다.

프로토타입을 통한 요구사항 만들기 

우선 프로토타입을 전달하여 PRD (제품 요구사항 정의서) 를 만들기로 했습니다. LLM 과 UI 가 뛰어난 ChatGPT 를 활용하였습니다.

 

다음은 ChatGPT 에게 전달받은 개발 검토 및 개선 제안입니다. 4-5번의 수정을 거쳐서 만들어진 내용입니다. 물론 다음과 같이 만들어진 이후, 꽤 많은 수정 작업을 거쳐서 내용에 없는 기능이 추가되었거나, 만들었지만 빠진 내용도 있습니다. 초기에 ai (ChatGPT) 가 검토한 개발 검토 보고서를 공유합니다. 

더보기
# RentHouse 1차 개발 검토 & 개선 제안 (건물주 중심 관점 · v2) _작성: 2025-09-09_

## 1) 핵심 사용자(Target)
- **건물주/소규모 임대사업자(Owner/Landlord)** — 10~30 유닛 규모
- 반복 업무(계약·청구·수납·보고서) 자동화와 한눈 현황 파악이 최우선

## 2) 현황 요약
- 구현: 자산/유닛, 임차인, 계약, **청구 관리**, 대시보드, 로컬 DB(Drift)  
- 남은 핵심: **수익관리(수납/영수증/보고서 심화)**, RBAC, 작업주문(유지보수), 설정, 품질/테스트  
- 참고: 1단계 리포트의 기능 요약(로그인/자산/임차인/계약/청구, M3/반응형/라우팅/Drift/대시보드)  
  → 세부 근거는 문서 하단 “참고/근거” 섹션 참조.

---

## 3) 건물주 관점 주요 니즈(요약)
1. **수익/현황을 한눈에** — 월세 수입, 미납, 공실
2. **청구→수납→영수증** 자동화
3. **문서·증빙(PDF)** — 계약서·영수증·점검표 (※ 법적 증빙은 후순위)
4. **유지보수 요청 추적** — 요청→할당→처리→완료
5. **권한 위임(RBAC)** — 관리인/회계사에 제한 권한

---

## 4) “원래 계획된 파일 3개”와 가치 연결(요약)
- **임대차 계약서 PDF** — 법적 관계 증빙 (후순위)
- **월별 수익·임차인 현황 보고서 PDF** — 경영 지표
- **입주/퇴실 체크리스트 PDF** — 시설 상태·분쟁 예방

---

## 5) 우선 강화: 수익관리(Revenue Management) — **상세 설계**

### 5.1 데이터 모델(최소 확장)
- `Billing(id, lease_id, yearMonth, issueDate, dueDate, totalAmount, status)`  
  - `status`: `DRAFT | ISSUED | PARTIALLY_PAID | PAID | OVERDUE | VOID`
- `BillingItem(id, billing_id, name, category, quantity, unitPrice, tax, amount, memo)`
- **신규** `Payment(id, tenant_id, method, amount, paidDate, reference, memo)`
  - `method`: `CASH | TRANSFER | CARD | ETC`
- **신규** `PaymentAllocation(id, payment_id, billing_id, amount)`  
  - 부분 수납/여러 청구서에 배분 가능
- **선택** `Adjustment(id, billing_id, type, amount, reason)`  
  - `type`: `DISCOUNT | WRITE_OFF | LATE_FEE | ADJUST_UP/DOWN`
- **선택** `Receipt(id, payment_id, number, pdfUrl/hash)` — 영수증 메타

> **중복 청구 방지**: `(lease_id, yearMonth)` 유니크 인덱스

### 5.2 워크플로우
1) **월초 자동 청구 생성**  
   - 트리거: 사용자가 “청구 생성” 실행(로컬 앱은 상시 백그라운드가 없으므로 _수동/반자동_ 버튼 우선)  
   - 규칙: 계약기간 내 유효한 Lease에 대해 1건씩 생성, 기존 존재 시 스킵  
   - 프레이밍: 보증금·월세·관리비·유틸리티 항목 템플릿 적용
2) **수납(Payment) 등록**  
   - 금액 입력 → **자동 배분**(가장 오래된 미납부터) 또는 수동 배분  
   - 결과: Billing 상태 전이(예: `ISSUED→PARTIALLY_PAID→PAID`)
3) **영수증 발행(PDF)**  
   - Payment 기준 단일/복수 Billing 배분 내역 포함  
   - 고유 번호/일자/금액/납부방법/임차인/세부배분/발행자
4) **연체/가산금(선택)**  
   - `dueDate`+X일 초과 시 `LATE_FEE` Adjustment 추가(비율/정액)  
   - 미납 Aging 산출(0–30/31–60/61–90/90+ 일)
5) **정산/환불**  
   - 초과 입금은 `Credit`(양수 조정) 또는 다음달 상계  
   - 환불은 음수 Payment(또는 별도 Refund)로 기록

### 5.3 계산/검증 규칙
- 금액 단위: **KRW 정수(원)** — 반올림 없는 합산(세금도 원 단위)  
- **일할 계산(Proration)**: 중도 입주/퇴실 시 `월세 × (사용일/월일수)`  
- 증감: **임대료 인상분**이 월 중 발생 시 이월 분리 또는 일할  
- Deposit 전용: 별도 계정으로 관리, 임대료 상계는 명시적 전표(Adjustment)로 처리  
- 데이터 제약: Payment ≤ 미납 합계(단, 크레딧 허용 시 초과 가능)

### 5.4 UI/UX 사양
- **대시보드 KPI**:  
  - 이번 달 _청구/수납/미납_, 공실 수, 연체 비중  
- **청구 리스트**: 상태 배지, 연체 필터, 합계/미납 합계, **대량 선택→대량 발행**  
- **수납 화면**: 자동배분 미리보기, 수동배분 Drag-to-allocate(데스크톱), 빠른 입력(숫자패드)  
- **영수증 PDF**: 로고/사업자 정보/발행자, 항목·배분 테이블, 하단 바코드/QR(선택)  
- **리포트(다운로드)**:  
  - **월별 수익**(청구 vs 수납, 전년동월 대비)  
  - **연체 리포트/에이징**(임차인·유닛별)  
  - **점유율 vs 잠재 수익**(공실 손실 추정)
- **CSV 가져오기(선택)**: 은행 입출금 CSV 업로드 → 키워드/금액 일치로 반자동 매칭

### 5.5 수용 기준(예시)
- (월초) “청구 생성” 실행 시 **중복 0건**, 로그에 건수/스킵 사유 기록  
- 부분 수납 케이스에서 배분 합계 = Payment 금액 **일치**  
- 영수증 PDF **1초 내 생성**, 재현성 있는 번호 체계  
- Aging 리포트 합계 = 미납 합계 **일치**, 필터(기간/자산/유닛/임차인) 동작

### 5.6 테스트 포인트
- 단위: 일할/가산금/배분/상태전이, 유니크 제약  
- 위젯: 수납 배분 UI, 대량 발행  
- 통합: 청구→수납→영수증→리포트 합계 정합성

---

## 6) 우선 강화: **보안/RBAC & 유지보수(Work Order)** — 구현 아이디어

### 6.1 보안 & RBAC (백엔드 전환 전 _프론트 가드_ 전략)
- **역할/권한 모델**: `OWNER, ADMIN, MANAGER, ACCOUNTANT, STAFF, READONLY`  
  - 권한 토글: 모듈×액션(`read/create/update/delete/export/approve`)
- **라우팅 가드**: `go_router.redirect`에서 세션/역할 검사  
- **위젯 가드**: `can('bills.create')` 헬퍼로 버튼/액션 노출 제어  
- **로컬 인증 상태**: 개발 단계에선 **Mock 세션** + 기기 보안 저장소  
  - `flutter_secure_storage`로 토큰/키 저장(키체인/Keystore/DPAPI)  
- **로컬 DB 암호화**(권장): Drift + SQLCipher(or sqlite_crypt)  
  - 암호화 키는 보안 저장소에서 파생, 앱 기동 시 언락  
- **감사 로그(AuditLog)**: 주체·액션·대상·이전/이후 값·시각·클라이언트 정보  
- **PII 최소화/마스킹**: 주민번호 미저장 또는 **마지막 4자리만**, 연락처 마스킹 표시  
- **잠금/재시도 제한**: 로그인 5회 실패 시 일시 락(로컬)  
- **에러/크래시**: `logger` + (선택)`sentry_flutter`, 민감정보 스크럽

> 주의: 프론트 가드는 **UX/사고 예방용**이며, **최종 보안은 서버에서**. 백엔드 도입 시 JWT 스코프/정책 + 서버 권한 재검증으로 승격.

### 6.2 유지보수(Work Order)
**데이터 모델**
- `WorkOrder(id, unit_id?, lease_id?, title, category, priority, status, dueDate, assignee, createdBy, createdAt, updatedAt)`  
  - `status`: `OPEN | ASSIGNED | IN_PROGRESS | ON_HOLD | DONE | CANCELLED`  
  - `priority`: `LOW | NORMAL | HIGH | URGENT`
- `WorkOrderActivity(id, work_order_id, type, comment, createdBy, createdAt)`  
  - `type`: `COMMENT | STATUS_CHANGE | PHOTO | FILE`
- `Attachment(id, ownerType, ownerId, name, mimeType, size, url/hash)`

**플로우**
- 발생(임차인/점검표/관리자) → 접수(카테고리/우선순위) → 할당 → 진행/코멘트/사진 → 완료/평가  
- **SLA**: 우선순위별 목표 기한(초기엔 표시만, 알림은 후순위)

**UI/UX**
- **리스트 + 칸반 보드**(상태별 컬럼), 필터(자산/유닛/우선순위/상태/기간)  
- 상세: 타임라인(활동/사진/파일), 상태 전환, 할당 변경  
- 체크리스트 연계: 체크 항목 “수리 필요” → **워크오더 생성** 바로가기  
- PDF 요약(선택): 완료 보고서(사진/비용/조치 내역)

**수용 기준**
- 상태 전환 규칙 준수(예: `DONE` 이후 재개는 `REOPEN` 기록)  
- 첨부 업로드/미리보기 동작, 20MB 이미지 10장에서도 UI 지연 없음  
- 리스트/칸반 필터·정렬 조합에서 결과 일관성

---

## 7) 단기 실행 플랜(3일)
- **D1**: RBAC 스캐폴딩(라우트/위젯 가드), Drift 암호화 PoC, Audit 로그 테이블  
- **D2**: Payment/Allocation 모델·화면, 수납 배분·영수증 PDF(기본 템플릿)  
- **D3**: Work Order 리스트·상세·상태전환, 칸반 보드(간이), 대시보드 KPI 연동

---

## 8) (후순위) 백엔드 연동 방향 — **3·4차 개발**
- 인증: 폼 로그인 → **JWT(roles/permissions 포함)**, 토큰 갱신/만료 처리(서버)  
- 대량 작업: **청구 대량 발행/보고서 생성**은 **비동기 Job** + 진행상태 폴링  
- 파일: 계약서/영수증/점검표 PDF는 **서버 렌더링** + 버전/감사로그  
- 알림: 이메일/카카오(선택) — 연체/만료/작업 배정 트리거

---

## 9) 결론
- 본 v2는 건물주가 당장 가치 체감하는 **수익관리**와 **보안/RBAC·유지보수**를 구체화  
- 백엔드 연동은 후순위로 미뤄도, 프론트/로컬 중심으로 충분히 **운영 가능한 스코프** 확보  
- 차기 스프린트는 “청구→수납→영수증→리포트”와 “워크오더 기본 흐름” 완성이 목표

---

## 참고/근거
- 1단계 완료 리포트: **로그인/자산/임차인/임대/청구 구현**, M3/반응형/라우팅/Drift/대시보드 등 현황  
- 남은 작업(우선순위): **결제(수납), Work Order, RBAC, 보고서 강화** 명시

 

위의 내용처럼, 개발 프로세스 중, 단순한 코드 생성을 넘어, 기획 단계부터 AI가 깊숙이 관여 시켰습니다. 화면설계도 요청했었고요. 답변은 wireframe 으로 전달 받았으며, 이 wireframe 을 통해 화면 요구사항은 초기에 끝났습니다. 물론 이후 필요한 기능들이 추가되면서 조금씩 변경은 되었지만, ChatGPT 가 전달 해준 wireframe 의 화면 설계와 구현 가능한 디자인 설계도는 이후 Claude-code 와 협업 씨 많은 토큰?을 아낄 수 있었습니다.

ChatGPT 가 만들어준 대시보드의 wireframe 파일과 설명서

 AI 툴들과 와 함께 구상한 설계가 구체화된 후, 본격적인 '바이브 코딩'이 시작되었습니다. 저는 해결해야 할 문제나 구현할 기능들.. 즉 '목표' / '요구사항' 을 제시했고, AI는 그 목표를 달성하기 위한 계획과 최적의 코드를 제안했습니다. 다음은 앱내 알림 서비스를 구현하면서 전달한 요구사항을 가지고 to-do 리스트를 만든 후, 제 피드백을 받고, 하나씩 진행하는 화면입니다.

todo 를 계획하고 하나씩 완료해 가는 claude-code : 세션 리밋이 넘 빨리 걸렸음.


위의 화면에서는, 당연히 todo 리스트는 제가 정리해서 공유한 요구사항 내용을 가지고 만든 리스트이지만, 간혹 과제를 던져주면 알아서 과제내에서 wbs 를 만들어 진행전에 저와 계획을 공유하며 리뷰/피드백을 받고 진행하였습니다. 최근 admobs 를 활용한 광고 배너를 모바일에 추가하는 작업을 진행하였는데 꽤 수월하게 진행되었습니다. 개발 완료 후, 진행 사항 내용을 보여주는 화면입니다. 토큰 때문에 오류외 피드백은 잘 안하는 편이지만, 이번만큼은 별다른 오류나 실수 없이 한번에 진행되어서 피드백을 주었습니다. -- ai 도 좋아하는 표현을 좀 적극적으로 하면 더 할텐데 말이죠. ㅋㅋ

코드 작업 후, 테스트 피드백을 주며 ai 와 대화하는 화면

물론 버그는 있습니다. 코딩 작업 이후엔 바로바로 빌드 테스트를 진행하였지만, 실제 화면 테스트는 어느정도 시나리오의 흐름 때문에 활용 가능한 데이터를 기다려야 하는 경우도 있었고, 가상으로 만들어 진행 하기도 했습니다.

최근 해결한 '월별 수익 보고서의 자산 필터' 문제가 좋은 예시입니다.

문제 제기 (나): "보고서의 월별 수익 화면에 자산 필터가 있는데, 특정 자산을 선택해도 금액이 바뀌지 않아. 원인을 분석하고 해결책을 제안해 줘."


이 문제를 듣고 AI는 reports_screen.dart, reports_controller.dart, reports_repository.dart 등 관련된 여러 파일을 스스로 분석했하였고, UI의 선택 값이 데이터 조회 로직까지 전달되지 않는다는 근본 원인을 정확히 찾아냈습니다. 그리고 단순히 UI 코드만 수정하는 것이 아니라, 데이터 흐름 전체를 개선하는 구조적인 해결책을 제시했습니다. 데이터베이스 쿼리부터 컨트롤러, UI까지 각 계층에서 수정해야 할 부분을 진행전에 명확히 알려주었습니다. 제안한 코드를 제가 최종 검토하고 프로젝트의 일관성을 해치지 않는지 확인한 후 적용되었습니다.

제가 방향을 제시하고, AI가 제 의도를 이해할 때까지 설명하여, 실제 개발자처럼 움직일 수 있도록 하여 원하는 결과물을 만들어 내었던 재미난 경험이었습니다.

이번 바이브크딩 프로젝트 통해 AI 툴 (ChatGPT, Gemini-CLI, Claude-Code) 들은 단순 코더가 아니었습니다. 비록 역할별로 다른 AI 툴들을 넘나들며 활용하였지만, 바이브코딩은 다음과 같은 이유로 가능했습니다.

  1. 복잡하게 얽힌 코드들 속에서 문제의 근본 원인을 찾아냈습니다. (Claude-Code, Gemini-CLI)
  2. 비효율적인 로직 대신, 성능과 구조를 고려한 더 나은 아키텍처를 제안했습니다. (Claude-Code, Gemini-CLI)
  3. 제가 요청하면, 방금 수정한 내용에 대한 기술 문서를 Markdown 형식으로 깔끔하게 정리하여 docs 폴더에 저장해 주었습니다. (ChatGPT, Gemini-CLI, Claude-Code)

단순히 3개의 Tool 로만 진행하였지만, 결과물은 무척 만족스럽습니다. 

물론 '바이브 코딩'이 항상 순탄했던 것은 아닙니다. '요구사항'의 상세함이 결과물의 품질을 결정한다.. 입니다. 즉 "대충 만들어줘"라는 식의 모호한 요구사항은 결과물의 품질을 보장할 수 없었습니다. 초기 기획 단계에서 PRD와 와이어프레임을 상세하게 정의했던 것처럼, 풍부하고 구조화된 '요구사항'을 제공할수록 AI 파트너는 더 정확하고 뛰어난 결과물을 만들어냈습니다.

최종 결정과 책임은 인간의 몫.. 저의 몫이였습니다.: AI는 놀랍도록 정확했지만, 프로젝트의 전체적인 방향성이나 최종 사용자 경험의 미묘한 차이까지 책임져 주지는 않습니다. 제안된 코드를 비판적으로 검토하고 최종 결정을 내리는 것은 여전히 저의 가장 중요한 역할이었습니다.

이 프로젝트를 통해 얻은 가장 큰 교훈은, AI는 개발자를 대체하는 것이 아니라, 개발자의 능력을 증폭시키는 강력한 도구(Force Multiplier)라는 것입니다. AI 덕분에 저는 혼자서 기획, 분석, 개발, 문서화까지, 마치 작은 팀처럼 일할 수 있었습니다.

결론: 새로운 개발 패러다임, 바이브 코딩
'Renthouse(가제)' 프로젝트는 AI와의 협업이 더 이상 먼 미래의 이야기가 아님을 증명하고 있습니다. 개발자의 역할은 모든 코드를 한 줄 한 줄 작성하는 것에서, AI라는 강력한 파트너에게 명확한 '요구사항'을 제시하고 전체적인 품질을 책임지는 '아키텍트' 또는 '오케스트라의 지휘자'로 변화하고 있습니다.

아직 AI와의 협업을 시도해보지 않으셨다면, 여러분만의 '바이브'를 가지고 작은 프로젝트부터 시작해보시길 강력히 추천합니다. 아마 코딩하는 방식에 대한 생각이 완전히 바뀌게 될지도 모릅니다.

마지막으로, 가트너에서 발표한 10가지 2025년의 주요 기술 트랜드라는 글을 ChatGPT 를 통해 번역하여 블로그에 올린 기억이 있습니다. 이때만 해도 ChatGPT 는 기존 검색엔진보다 "말 많은 검색 툴" 로만 여겼었지요. 하지만 2025년 한해간 급격히 많은 업그레이드가 되었고, 많은 AI 툴들이 만들어져서 서비스화 되었습니다. 2025 년은 ai 의 해라고 해도 과언이 아닐것 같네요.

AI를 의사결정 에이전트로 전환 가트너는 에이전틱 AI가 향후 2~3년 내에 등장할 것으로 예상하며, 정보 요약과 같은 작업을 넘어 개인을 대신해 실제로 행동을 취하는 능력을 갖출 것으로 보고 있습니다. 사용자에게 옵션을 제시하는 대신, 허가를 받으면 사용자에게 최적의 옵션을 선택할 수 있게 될 것입니다
출처:
https://yobine.tistory.com/605
[#Yobine:티스토리]

2025 년 #가트너 (#Gartner) 에서 발표한 10가지 주요 전략 기술 트렌드 :: #Yobine

 

2025 년 #가트너 (#Gartner) 에서 발표한 10가지 주요 전략 기술 트렌드

자료출처 : Gartner: The Top 10 Strategic Technology Trends For 2025 (Techrepublic.com) -  by  Ben Abbott번역: COPILOTAI를 의사결정 에이전트로 전환 AI 거버넌스를 위한 기술 플랫폼 허위 정보 방어 도구포스트 양자

yobine.tistory.com

 

반응형
반응형
 

Google NotebookLM | 신뢰할 수 있는 정보에 기반한 조사 및 사고 파트너

AI의 기능을 활용해 빠르게 요약하고 메모를 작성하세요. NotebookLM은 신뢰할 수 있는 정보를 기반으로 하는 강력한 가상 조사 어시스턴트입니다.

notebooklm.google.com

 

안녕하세요! 오늘은 제가 진행하고 있는 'Renthouse(가제)' 프로젝트에 대한 조금 특별한 이야기를 공유하고자 합니다. 이 프로젝트는 Flutter로 제작된 크로스플랫폼 임대 관리 애플리케이션으로, 기획부터 설계, 개발, 문서화까지 전 과정이 AI 코딩 파트너들 (Claude-code, Gemini-CLI, 그리고 ChatGPT) 과 함께 진행되고 있습니다.

장비: asus 게이밍 노트북 과 별도 중국산 포터블 모니터 .. 그리고 무난한 중국산 무선 키보드

 

아시는분들도 많겠지만, 기본적인 소프트웨어 개발 프로세스는 다음과 같습니다. 출처: DBpia

소프트웨어 개발 방법론은 요구사항 분석, 설계, 구현, 테스트, 유지보수 단계를 포함하며, 폭포수 모델, 애자일 방법론 등 다양한 접근 방식이 존재합니다.........

저는 요구사항 분석 부터, 설계, 구현 (실제 코딩), 테스트 (중 테스트 코드 작성) 부분.. 그리고 이후에 유지보수 단계까지 모두  "바이브 코딩(Vibe Coding)" 개발 방식으로 진행하기로 선택했습니다.

음..  바이브 코딩이 뭘까요? 혹시 모르시는 분들을 위해 다음 내용을 공유 합니다. (출처 : DBpia ) 

1. Vibe Coding의 특징
Vibe Coding은 자연어 처리를 통해 코드 생성을 지원하여 프로그래밍의 대중화를 목표로 합니다.
자연어 기반 코드 생성: Vibe Coding은 자연어를 통해 코드 생성을 지원함으로써 프로그래밍 입문 장벽을 낮추고 코딩의 대중화에 기여할 수 있습니다.코딩 효율성 증대: 인공지능 기술을 활용하여 코딩 작업의 효율성을 높이는 데 기여할 수 있습니다.

2. Vibe Coding의 장점
Vibe Coding은 자연어 기반 코드 생성을 통해 프로그래밍 진입 장벽을 낮추고 코딩 대중화에 기여할 수 있습니다.
프로그래밍 접근성 향상: 자연어 기반 코드 생성은 프로그래밍 입문자에게 더 쉬운 접근성을 제공합니다.

Vibe Coding은 자연어 기반 코드 생성을 통해 프로그래밍의 대중화와 효율성 증대에 기여할 수 있습니다.

위의 내용은 자연어 처리를 통한 코드 생상 내용만 나오지만, 제가 프로젝트의 전체적인 방향성을 LLM 툴을 통해 제시하면, AI가 구체적인 산출물로 만들어내는 방식으로 진행 하였고, 그 결과 또한 생각 했던 것 보다 훨씬 뛰어났기 때문에, 이 글을 통해 AI와 함께 '바이브 코딩'으로 실제 앱을 개발하는 것이 과연 가능한지.. 그리고 어떤 경험이었는지 공유해 보겠습니다.

시작: 추상적인 '아이디어' 를 구체적인 '설계'로 (요구사항 분석 및 설계)

프로젝트의 시작은 간단한 한 줄 명령이 아니었습니다. 물론 "임대 관리 업무를 디지털로 간소화한다"는 추상적인 '이이디어'에서 출발했지만, 이 아이디어를 구체화하기 위해 AI 파트너와 수많은 대화를 나누었고, 꽤 놀라운 산출물들이 전달 되었습니다.

LLM 툴은 가장 사용하기 편했고, 접근하기 좋았던 ChatGPT 를 이용했습니다. 수많은 대화가 오고갔지만, 가장 처음 받았던 답변을 공유합니다.

개발자 질문: property 를 한글로 하면 뭘까? 그리고 하나의 property 의 종류가 꽤 있는데, 이걸 등록할 때.. 음.. 만약 아파트면.. 주소만 있으면 되지만, 빌딩이면, 내부 건물의 유닛이 몇개인지 알아야 하고 개당 유닛의 특징도 적어야 할 것 같은데.. 일단 지침에도 적었지만, 이걸 관리 하는 프로그램을 만들고 싶어

ChatGPT: property를 한글로 옮길 때 일반적으로 “부동산” 또는 **“자산”**이라고 번역합니다.
프로그램 관점에서는 “관리 대상이 되는 부동산 매물”이란 뜻에서 간단히 “부동산” 이라 부르는 게 자연스럽습니다.... 
더보기

 

1. 부동산(Property) 종류 예시

  • 아파트
    • 주소, 동·호수 정도의 정보만 있으면 기본적으로 등록 가능
  • 빌딩(상업용 부동산)
    • 전체 주소
    • 총 층수, 호실(유닛) 수
    • 각 유닛(Unit)별 면적, 용도(사무실·상가 등), 임대 상태 등
  • 오피스텔 / 상가 / 단독주택 / 다가구주택
    • 각각 필요한 속성이 조금씩 다름
    • 예를 들어 단독주택은 대지면적·건축면적·방·화장실 개수 등

2. 등록 시 고려해야 할 구조

  1. Property 엔티티
    • id (PK)
    • type (ENUM: APARTMENT, BUILDING, OFFICE, HOUSE, …)
    • address (String)
    • name (예: “강남역 A빌딩”)
    • totalFloors (건물 전체 층수, 빌딩인 경우)
    • 그 외 공통 속성들(관리비 여부, 주차대수 등)
  2. Unit 엔티티 (Property 에 종속)
    • id (PK)
    • propertyId (FK → Property.id)
    • unitNumber (호실 번호)
    • area (면적)
    • useType (사무실/상가/주거…)
    • rentStatus (임대 중/공실)
    • monthlyRent 등

아파트의 경우 보통 Unit을 따로 두지 않고, 동·호수를 address 필드 또는 별도 컬럼(buildingCode, unitNumber)로 처리하기도 합니다.


3. 간단한 데이터 모델 예시 (Spring Boot + JPA)

 
@Entity public class Property... 생략

4. 등록 절차 아이디어

  1. Property 등록 화면
    • 타입 선택 → 기본 정보 입력(이름·주소 등)
    • 빌딩/오피스 등 유닛이 필요한 타입이면 “유닛 정보 추가” UI 노출
  2. Unit 일괄 등록 기능
    • 엑셀 업로드 혹은 호실 리스트 + 공통 속성 일괄 생성
  3. 관리(조회/수정/삭제)
    • Property 단위로 요약 정보 제공
    • 내부 Unit 리스트 확인, 개별 편집 기능

정말 괜찮은 답변이여서, 이대로 화면에 구현이 가능할까.. 실제 spring-boot JPA 를 사용하여 웹(web) 기반 프로트타입 개발을 시작했습니다. 사실, 이 프로젝트를 생각한건 꽤 오래전이여서, github 에 레퍼지터리를 만들어 놓고, 진행을 어떻게 할까 생각만 하다가 진행을 안하고 있었는데, ai 덕에 진행이 되었네요 ^^a .... 음 여하튼.. 혹시 궁금해 하시는 분들을 위해서.. 프로토 타입이란.. (출처: DBpia) 

인텔리제이, 터미널 (제미나이 소통 체널) 스프링 부트 3.4.3 으로 작업 하는 화면

프로토타입 방법론은 소프트웨어 공학에서 요구사항을 명확히 하기 어려운 경우, 개발 초기 단계에서 시제품을 만들어 사용자의 피드백을 반영하며 점진적으로 시스템을 완성해 나가는 접근 방식이다. 이는 반복적인 개발 과정을 통해 시스템의 완성도를 높이는 데 기여하며, 사용자 중심 설계의 중요한 방법론으로 간주된다. 특히, 불확실성이 높은 프로젝트에서 위험을 줄이고, 최종 제품의 사용자 만족도를 향상시키는 데 효과적이다.

제가 좋아하는 Agile 개발 방법 시작 전, 기반이 되는 시제품을 미리 만들어 보는 방법입니다. 코드 구현에 테스트한 ai 툴은 gemini-cli 였습니다. gemini-cli를 선택한 이유는 단순했습니다. 무료였고, 꽤 강력한 코딩 능력을 보여준다고 했기 때문입니다. 그래서 한 달 정도 시간을 내서 테스트 삼아 작업을 해 봤는데, 예상보다 결과가 괜찮았어요. 그때는 어떤 화면을 만들고 어떤 기능을 넣어야 할지 구체적으로 정리가 안 되어 있었습니다.

직접 웹 애플리케이션을 만들어 보면서 자연스럽게 요구사항이 정리되었고, 나름의 요구사항 명세서까지 프로토타입을 통해 뽑아낼 수 있었습니다. 프로토 타입 작업하면서, 중간중간에 즉흥적으로 떠오르는 기능이나 반드시 들어가야 한다고 생각되는 부분들은 바로바로 추가하면서 진행 했고요. 제가 웹 애플리케이션 개발을 해봤어서, 만약 AI가 제대로 결과물을 내지 못하면 제가 직접 손을 대서 보완할 수 있었습니다. 이런 점에서 자바를 선택한 것도 자연스러운 선택이었습니다.

Gemini-CLI 는 하루에 고급 기능(gemini-pro) 을 제한적으로만 쓸 수 있었지만, 단순 CRUD 작업은 잘 수행했기 때문에 큰 문제는 없었습니다. 만약 gemini-flash 를 사용하면서 오류가 생기면 제가 바로 IDE를 열어 직접 수정했고, 이후 AI에게 피드백을 주면서 다시 확인받는 방식으로 진행했기 때문에 작업이 크게 지연되지는 않았습니다. 약 3-4주 정도.. 이 과정을 거치면서, AI를 활용해 바이브 코딩을 할 때 어떤 방식으로 요구사항을 제시해야 하는지 감을 잡을 수 있었습니다.

https://youtu.be/jcXF12t93vw

 

- YouTube

 

www.youtube.com

 

프로토타입 결과물: [ github : Renthouse : youp-han/RentHouse: 프로토타입 ]

프로토타입은 말 그대로 시제품이였고, 초기 개발 테스트 버전이여서 LLM 을 통해 분석한 내용이 실제 코드를 통한 CRUD 기능이 되는지, 화면 디자인이 원하는 대로 나오는지 확인하는 단계여서, 결과물에 매우 만족하였습니다. 

이어지는 글: #바이브코딩 으로 앱 만들기 - 실제 코딩 진행

 

02. #바이브코딩 으로 앱 만들기 - 실제 코딩 진행

2025.10.30-01. #바이브코딩 으로 앱 만들기 - 과연 가능할까? 01. #바이브코딩 으로 앱 만들기 - 과연 가능할까?안녕하세요! 오늘은 제가 진행하고 있는 'Renthouse(가제)' 프로젝트에 대한 조금 특별한

yobine.tistory.com

 

반응형
반응형

부동산 임대 관리를 위한 종합 솔루션

unirent - 임대관리 솔루션

📋 프로젝트 소개

UniRent는 부동산 관리자를 위한 Flutter 기반의 크로스 플랫폼 임대 관리 애플리케이션입니다. 물건 관리, 임차인 관리, 계약 관리, 청구서 발행 등 부동산 임대 업무의 전 과정을 효율적으로 처리할 수 있도록 설계되었습니다.

✨ 주요 기능

📊 대시보드

  • 주요 지표 실시간 모니터링
  • 물건/임차인/계약 현황 한눈에 파악
  • 청구/수납 현황 통계

unirent - 임대관리 솔루션 : 대시보드 화면 [윈도우]

 

🏢 자산 관리

  • 건물 및 호실 등록/수정/삭제
  • 호실별 상세 정보 관리
  • 자산 상태 추적 (임대가능/임대중/점검중)

👥 임차인 관리

  • 임차인 정보 등록 및 관리
  • 연락처 및 계약 이력 관리
  • 임차인별 청구 내역 조회

📝 계약 관리

  • 임대차 계약 생성 및 관리
  • 계약 상태 추적 (활성/만료/해지)
  • 계약 기간 및 조건 관리
  • 보증금/월세 정보 관리

unirent - 임대관리 솔루션 : 계약관리 화면 [윈도우]

💰 청구 및 결제

  • 월세 자동 청구서 생성
  • 청구 템플릿 관리
  • 결제 내역 추적
  • 미수금 관리

📈 비용 관리

  • 건물/호실별 비용 기록
  • 비용 카테고리별 분류
  • 비용 통계 및 분석

📱 활동 로그

  • 시스템 활동 이력 추적
  • 사용자 작업 기록

📄 보고서

  • 각종 관리 보고서 생성

unirent - 임대관리 솔루션 : 월별 보고서 화면 [윈도우]

⚙️ 설정

  • 사용자 프로필 관리
  • 시스템 설정

 

🏗️ 아키텍처

Clean Architecture + MVVM 패턴

이 프로젝트는 Clean ArchitectureMVVM(Model-View-ViewModel) 패턴을 결합하여 확장 가능하고 유지보수가 용이한 구조로 설계되었습니다.

lib/
├── app/                      # 앱 설정, 테마, 라우팅
│   ├── router.dart          # go_router 기반 네비게이션
│   └── theme.dart           # Material 3 테마 설정
│
├── core/                     # 공유 유틸리티 및 인프라
│   ├── auth/                # 인증 로직
│   ├── database/            # Drift 데이터베이스 설정
│   ├── network/             # HTTP 클라이언트 구성
│   └── rbac/                # 역할 기반 접근 제어
│
└── features/                 # 기능 기반 모듈
    ├── auth/                # 로그인 및 인증 UI
    ├── dashboard/           # 메인 대시보드
    ├── property/            # 물건 및 호실 관리
    ├── tenant/              # 임차인 관리
    ├── lease/               # 계약 관리
    ├── billing/             # 청구 및 청구 템플릿
    ├── payment/             # 결제 관리
    ├── expense/             # 비용 관리
    ├── activity/            # 활동 로그
    ├── reports/             # 보고서
    └── settings/            # 설정

 

데이터 흐름

┌─────────────────────────────────────────────┐
│  Presentation Layer (View)                  │
│  - Screens & Widgets                        │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│  Application Layer (ViewModel)              │
│  - Riverpod Controllers                     │
│  - Business Logic                           │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│  Data Layer (Model)                         │
│  - Repositories                             │
│  - Data Sources (Local/Remote)              │
└────────────────┬────────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────────┐
│  Domain Layer                               │
│  - Entities (Freezed Models)                │
│  - Business Models                          │
└─────────────────────────────────────────────┘

 

🚀 핵심 기술 스택

프레임워크 & 언어

  • Flutter ^3.9.2 - 크로스 플랫폼 UI 프레임워크
  • Dart - 프로그래밍 언어

상태 관리

  • Riverpod ^2.5.1 - 타입 안전한 상태 관리
  • riverpod_annotation ^2.3.5 - 코드 생성 기반 Provider

데이터 모델링

  • Freezed ^2.5.2 - 불변 데이터 클래스 생성
  • json_serializable ^6.9.0 - JSON 직렬화

데이터베이스

  • Drift ^2.17.0 - SQLite ORM (타입 안전)
  • sqflite ^2.3.3 - Android용 SQLite
  • sqflite_common_ffi ^2.3.3 - Windows/Linux용 SQLite

네트워크

  • Dio ^5.5.0 - HTTP 클라이언트

라우팅

  • go_router ^14.2.0 - 선언적 라우팅

UI/UX

  • Material 3 - 최신 디자인 시스템
  • 반응형 디자인 - 모바일/데스크톱 적응형 레이아웃

문서 처리

  • pdf ^3.11.1 - PDF 생성
  • printing ^5.13.2 - PDF 인쇄
  • excel ^4.0.3 - Excel 파일 처리
  • csv ^6.0.0 - CSV 처리

기타

  • uuid ^4.4.0 - 고유 ID 생성
  • intl ^0.19.0 - 국제화 및 날짜 포맷
  • logger ^2.4.0 - 로깅
  • flutter_secure_storage ^9.2.2 - 보안 저장소

 

💎 프로젝트의 장점

1. 확장 가능한 아키텍처

  • Clean Architecture로 계층 분리
  • MVVM 패턴으로 비즈니스 로직과 UI 분리
  • 기능별 모듈화로 독립적인 개발 가능

2. 타입 안전성

  • Freezed를 통한 불변 데이터 모델
  • Riverpod의 컴파일 타임 타입 체크
  • Drift의 타입 안전한 쿼리

3. 코드 생성 자동화

  • build_runner를 통한 보일러플레이트 최소화
  • Freezed, Riverpod, JSON 직렬화 자동 생성
  • 생산성 향상 및 휴먼 에러 감소

4. 크로스 플랫폼 지원

  • 단일 코드베이스로 모바일(Android/iOS), 데스크톱(Windows), 웹 지원
  •  
    unirent - 임대관리 솔루션 : [윈도우]
  • 플랫폼별 최적화된 데이터베이스 지원 - sqlite 기본
  • unirent - 임대관리 솔루션 : [ios - 아이폰]
  • 반응형 UI로 다양한 화면 크기 대응

unirent - 임대관리 솔루션 : [android - 태블릿]

 

 5. 오프라인 우선 설계

  • 로컬 SQLite 데이터베이스로 오프라인 작동
  • 빠른 응답 속도
  • 향후 서버 동기화 기능 추가 예정
  • 로그인 : firebase 연동

6. 유지보수성

  • 명확한 폴더 구조
  • 관심사의 분리
  • 테스트 가능한 설계 : 모든 주요 기능 의 테스트 코드 작성 완료

7. 현대적인 기술 스택

  • 최신 Flutter & Dart 버전
  • Material 3 디자인
  • 업계 표준 라이브러리 사용

📝 라이선스

📧 개발 및 비지니스 협업 문의 : youp.han@gmail.com 


UniRent - 스마트한 임대 관리의 시작

반응형
반응형

원본: https://yobine.tistory.com/616 번역 입니다. 

2017년, 대학원 시절 뛰어난 동료들과 훌륭한 교수님의 지도 아래 “DevOps Capabilities, Challenges, and Solutions” 라는 논문을 함께 집필했을 때, 우리는 기업이 DevOps를 성공적으로 도입하기 위해 필요한 네 가지 핵심 역량을 정리했습니다:

  • 사람(People)
  • 프로세스(Process)
  • 기술(Technology)
  • 산출물(Artifacts)

이 프레임워크는 DevOps가 단순히 도구를 넘어선다는 점을 설명하는 데 도움이 되었습니다. DevOps는 문화, 워크플로우, 그리고 우리가 만들어내고 관리하는 결과물에 관한 것이었습니다.

2025년인 지금, 여전히 이 네 가지 역량은 필수적이라고 생각합니다. 달라진 것은 현대 기업 환경에서 이들이 표현되고 실천되는 방식입니다.


👥 사람 (People)

  • 2017년: 협업과 문화가 핵심이었고, HR의 역할은 DevOps 마인드셋을 갖춘 인재를 채용하고 사일로를 허무는 것이었습니다.
  • 2025년: 문화는 여전히 중심이지만, HR 실무는 AI 기반 채용, 지속적 학습, 스킬 매핑으로 진화했습니다. 빠르게 변하는 기술 환경에서 팀이 적응력을 유지하도록 돕는 방향으로 바뀌고 있습니다.

🔄 프로세스 (Process)

  • 2017년: 애자일 워크플로우, CI/CD 파이프라인, 자동화가 중심이었습니다.
  • 2025년: AI가 프로세스를 재편하고 있습니다.
    • 사건 예측 분석(Predictive Analytics)
    • 생성형 AI 기반 런북
    • 자가 치유(Self-healing) 파이프라인
      이제 프로세스 차원은 자율성과 지능까지 포함하게 되었습니다.

💻 기술 (Technology)

  • 2017년: 클라우드 도입, 컨테이너, Chef, Puppet, Ansible, Docker 같은 도구들이 선도적이었습니다.
  • 2025년:
    • 쿠버네티스(Kubernetes)는 기본 전제가 되었고,
    • GitOps, 정책-코드화(Policy-as-Code), 플랫폼 엔지니어링,
    • AI 보강 관측성(Observability)이 주류를 차지하고 있습니다.

기술은 끊임없이 진화하지만, DevOps 역량은 여전히 변화를 가능하게 하고 확장하는 것에 초점이 맞춰져 있습니다.


📦 산출물 (Artifacts)

  • 2017년: 빌드, 배포 패키지, 스크립트, 모니터링 로그가 DevOps의 산출물이었습니다.
  • 2025년:
    • 모니터링 및 관측 시스템이 메트릭, 트레이스, 로그, AI 생성 인사이트 같은 풍부한 산출물을 만들어냅니다.
    • 이제 이 산출물은 단순한 부산물이 아니라, 의사결정과 자동화를 이끄는 적극적 자산이 되었습니다.

✨ 성찰 (Reflection)

AI가 워크플로우를 바꾸고 기술이 계속 진화하더라도, 사람·프로세스·기술·산출물이라는 네 가지 역량은 DevOps 성숙도의 토대입니다.

이 관점은 제 개인적인 읽음과 생각에서 비롯된 것이며, 도구는 오고 가지만 DevOps의 핵심 원칙은 여전히 이어진다는 사실을 일깨워 줍니다.

반응형

+ Recent posts