Ruby의 duck typing 장점과 위험은?
공통 인터페이스를 명시 선언 없이 조합해 빠르게 확장할 수 있습니다. 반면 계약이 암묵적이므로 경계에서는 테스트, 명확한 이름, 필요하면 타입 검사 도구로 실패 지점을 앞당겨야 합니다.
PRACTICAL LANGUAGE GUIDE
Ruby와 Rails의 백엔드 제품 개발, 운영 자동화, 설계 원칙과 면접 준비를 정리한 실무 가이드입니다.
Rails의 관례로 CRUD와 관리자 도구를 빠르게 만들되, 결제·권한·재고 같은 핵심 규칙은 서비스 객체나 도메인 객체로 이름 붙여 분리하세요. 느린 작업은 요청 경로에서 빼고 잡 큐로 넘기며, N+1 쿼리는 로그와 실제 데이터 규모에서 확인합니다.
작은 팀이 고객 피드백을 빨리 반영하고, 검증된 웹 제품 관례를 활용하고 싶다면 적합합니다. 극단적으로 낮은 지연 시간이나 CPU 집약 처리량이 제품의 핵심이라면 Go·Rust·Java 계열을 별도 검토하세요.
class CreateSubscription
def call(user:, plan:)
raise ArgumentError, '이미 구독 중입니다' if user.subscribed?
Subscription.transaction do
subscription = user.subscriptions.create!(plan: plan)
BillingJob.perform_later(subscription.id)
subscription
end
end
end트랜잭션으로 상태 변경을 묶고, 외부 결제 호출은 재시도 가능한 비동기 작업으로 분리합니다.
INTERVIEW PREP
공통 인터페이스를 명시 선언 없이 조합해 빠르게 확장할 수 있습니다. 반면 계약이 암묵적이므로 경계에서는 테스트, 명확한 이름, 필요하면 타입 검사 도구로 실패 지점을 앞당겨야 합니다.
목록에서 각 행이 연관 데이터를 다시 조회하는 패턴을 로그·APM으로 확인합니다. eager loading을 적용하되 필요한 관계만 미리 읽고, 인덱스와 페이지 크기까지 함께 검토합니다.
NEXT STEP