레일즈를 활용한 인공적 설계 입문

Railsによる人工的「設計」入門 / Yasuko Ohba (nay3) - Kaigi on Rails 2025

작성자
Kaigi on Rails
발행일
2025년 11월 25일

핵심 요약

  • 1 설계는 코드 수준이 아닌 추상적인 전체 구조를 상상하고 필요한 요소를 역산하는 활동입니다.
  • 2 초보 개발자가 설계에 어려움을 겪는 이유는 시스템을 코드로만 인지하고 절차를 설계로 오해하기 때문입니다.
  • 3 완성된 시스템을 구체적으로 상상하고 본질적인 목표부터 역산하여 필요한 디자인 파트를 도출하는 인공적 설계 방법을 제안합니다.

도입

소프트웨어 설계는 개발자에게 필수적인 역량이나, 그 습득과 교육은 매우 어려운 과제입니다. 특히 AI 시대에는 단순 구현을 넘어선 설계 능력이 더욱 중요해지고 있습니다. 본 발표는 설계가 무엇인지 명확히 정의하고, 초보 개발자가 설계 과정에서 겪는 어려움을 분석한 후, 레일즈(Rails) 환경에서 인공적으로 설계 활동을 유도할 수 있는 '역산(Back-calculation)' 방법론을 제안합니다. 이는 완성된 시스템을 상상하고 본질적인 가치 실현을 중심으로 필요한 요소를 단계적으로 도출하는 접근 방식입니다.

초보 개발자들이 설계에 어려움을 겪는 주요 원인은 다음과 같습니다.

1. 시스템 = 코드라는 인식

  • 설계 지시를 받으면 코드를 먼저 떠올리고, 다이어그램이나 표 작성을 코드 구현 후의 부수적인 작업으로 간주합니다. 이로 인해 ‘뇌내 구현’ 후 추출하는 비효율적인 방식으로 접근하게 됩니다.

2. 중요 요소 파악의 어려움

  • 중요한 기술적 요소를 미리 조사하라는 조언에도 불구하고, 어떤 코드를 작성할지 알아야 중요 요소를 파악할 수 있다고 생각하여 모든 코드를 처음부터 구상하려 합니다.

3. 절차를 설계로 오해

  • DB-모델-컨트롤러-뷰 순서의 구현 절차를 설계했다고 보고하는 경향이 있습니다. 이는 전체 시스템 구조에 대한 고민 없이 학습된 절차를 반복하는 것에 불과하여 잦은 재작업을 유발합니다.

이러한 문제를 해결하기 위해 발표자는 ‘역산(Back-calculation)’ 기반의 인공적 설계 방법론을 제시합니다.

1. 완성된 시스템 상상

  • 개발하고자 하는 기능(예: 사용자 CSV 임포트)이 최종적으로 어떤 모습으로 사용자에게 제공될지 구체적으로 상상합니다. (예: 업로드 화면, 성공/실패 메시지, 에러 처리 방식, 이력 관리 필요성 등)

2. 본질적인 목표 설정

  • 상상한 시스템에서 가장 핵심적으로 달성하고자 하는 가치(Goal)를 명확히 정의합니다. (예: UI가 아닌 ‘CSV로부터 사용자 등록/갱신’이라는 비동기 처리의 본질) 이는 복잡한 사고를 방지하고 중요한 부분에 집중하기 위함입니다.

3. 목표 달성에 필요한 요소 역산

  • 설정된 목표를 달성하기 위해 무엇이 필요한지 단계적으로 질문하고 답하며 요소를 도출합니다.
    • “사용자 등록/갱신을 위해 무엇이 필요한가?” -> “CSV 사용자 등록/갱신 비동기 처리가 필요하다.” (이것을 ‘스텝’이라 명명)
    • “비동기 처리는 어떤 형태인가?” -> “ActiveJob을 활용한 UserImportJob 형태일 것이다.”
    • “Job 내부의 처리는 어디에 작성할 것인가?” -> “재사용성을 고려하여 Import 모델에 구현한다.” (이때, ‘Import’와 같이 짧고 본질적인 이름을 부여하는 것이 중요)
    • “Import 모델을 만들기 위해 무엇이 필요한가?” -> “파일 업로드 시 Import 모델 레코드를 생성해야 한다.”

4. 주변 기능 포함 및 영역 분리

  • 도출된 핵심 기능 외에 목록, 상세 보기, 에러 표시 등 주변 기능들을 추가하고, 이를 로직, 등록 화면, 목록/상세 등으로 영역을 나누어 전체 구조를 정리합니다.

5. 절차 계획

  • 설계된 구조를 바탕으로 데이터 준비 용이성 등을 고려하여 개발 절차를 수립합니다. (예: Import 로직부터 시작할지, 등록 화면부터 시작할지 등)

이 과정에서 ‘비동기 처리’, ‘서비스 클래스’, ‘모델 중심’, ‘트랜잭션’ 등 레일즈 개발에 자주 사용되는 ‘디자인 파트(Design Parts)’를 활용하고, 초기 결정은 ‘가설(仮置き)’로 간주하여 유연하게 변경할 수 있도록 합니다. 특히 ActiveRecordAssociationsparams 구조, nested_attributes 등은 레일즈 설계 시 중요한 디자인 파트입니다.

결론

본 발표에서 제안하는 역산 기반의 인공적 설계 방법론은 초보 개발자가 코드 수준의 사고에서 벗어나 시스템 전체의 구조와 본질적인 가치를 중심으로 설계할 수 있도록 돕습니다. 완성된 시스템을 구체적으로 상상하고, 핵심 목표에서부터 필요한 요소를 단계적으로 역산하며 적절한 디자인 파트를 활용함으로써, 시스템 전체가 유기적으로 작동하는 설계를 이끌어낼 수 있습니다. 이 방법은 설계에 대한 막연함을 해소하고 체계적인 사고 과정을 통해 견고한 시스템을 구축하는 데 기여할 것입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!