관리 메뉴

사과하는 제라스

[Swift 지식] Single Source Of Truth(SSOT)란? 본문

제라스의 Swift 공부/Swift 지식

[Swift 지식] Single Source Of Truth(SSOT)란?

Xerath(제라스) 2024. 3. 12. 16:02

목차

    728x90
    반응형

    서론

    안녕하세요~! 개발자 제라스입니다! 👋🏻🤖👋🏻

     

    제가 최근에 Apple Developer Academy를 하면서 SwiftUI 학습을 하고 있었는데요.

    제가 또 이게 처음이다보니 @State, @Binding을 공부하면서 Single Source Of Truth(SSOT)라는 개념을 보게 되었습니다.

    이게 또 뭔가!!!

     

    그래서!

    이 SSOT가 뭔지 한번 정리해보고자 합니다. 뭔가 이건 정리해둬야 할 중요한 개념이라고 생각을 했거든요ㅎㅎ

    그럼 오늘도 한번 시작해보겠습니다.

    Single Source Of Truth(SSOT)가 뭔데??

    아니 무슨 이렇게 별.다.줄이 많나 싶지만 이건 뭔가 중요해보이는 개념처럼 읽혀요.

    저만 그런가요??ㅋㅋㅋ

     

    일단 이거 한국어로 해석하면 단일 진실 공급원입니다.

    말이 이해가 어렵죠...??

    일단 정의부터 적어보자면,

    정보 시스템 설계 및 이론 중 하나로 정보와 스키마를 오직 하나의 출처에서만 생성하거나 편집하도록 하는 방법론입니다.

     

    즉, 어떤 데이터가 있으면 그걸 오직 하나의 저장소에서만 관리하는 방식이라는 겁니다.

    그럼 이 개념이 왜 필요한건가?

    왜냐하면 데이터가 한 곳에서 만들어지고 수정되는 것이 데이터의 흐름을 관리하고 유지보수할 때 이해하기 편하기 때문입니다.

    우리가 어떤 데이터를 여러 곳에 분산해놓고서 이걸 여러 곳에서 다룬다고 합시다.

    그럼 우리는 이 데이터가 어디서 오는지 일일이 추적을 해야하기에 그것을 찾아내는 건 무척 귀찮고 힘들죠.

     

    근데, 하나의 저장소를 뽝! 하고 두고 거기서 데이터가 나오고 들어가도록만 해두면 어느 곳에서든 그 저장소에 방문해서

     

    "A 값 줘!", "B값 이거로 저장해줘!"

     

    이런 방식이 가능해집니다.

     

    그리고 생각해보면 어떤 데이터를 한 곳에서만 다뤄야 동기화 같은 걱정도 안해도 되잖아요? 예를 들면 A저장소, B저장소에 각각이 있다고 하면 A에서 변경하도록 요청했는데 B에서 변경이 안 일어나거나 변경 전의 데이터를 내줄 수도 있으면 같은 데이터에 대해 값이 달라지는 문제가 생깁니다.

     

    그럼 이 개념은 왜 공부해요?

    일단 SwiftUI를 공부하면서 이 개념은 Property Wrapper 학습 시 중요한 부분이에요.

    일단 iOS 17 이전에 주로 쓰던 Property Wrapper들을 적어보자면,

    /// SwiftUI에서의 여러가지 속성 래퍼(Property Wrapper)
    @State: 값 유형의 속성에 대한 저장소로 사용
    @Binding: 두 개의 View 간에 데이터를 전달하고 동기화 시 사용
    @ObservedObject: 관찰 가능한 객체를 생성
    @EnvironmentObject: 앱의 전역 상태를 나타낼 때 사용

     

    이런 방식으로 속성 래퍼들을 변수 혹은 class, struct 앞에 붙여서 사용하는데 이때 붙이는 이유는 데이터의 연동, 흐름을 이어주거나 제공하기 위해서입니다.

    보통은 @State를 붙여둔 데이터와 @Binding을 붙여둔 변수를 갖는 View 간에 의존성을 만드는 과정이 주입니다.

    (다만, 이건 용법적인 면에서의 개인 견해이기 때문에 혹시 더 알아보고 싶으시다면 직접 찾아보시면 좋을 것 같습니다.)

     

    즉, Binding으로 받아온 데이터에 변화를 주면 @State 처리되어 있는 데이터도 변화가 생기고 그것을 사용하고 있는 다른 View들에서이 데이터들도 값을 변화시키죠. 그렇기에 데이터가 모두 동일한 값을 갖도록 합니다.

     

    근데... 지금 이렇게 쓰면서 '으엥? 이거 어디서 들어본 거 같긴 한데...?' 했는데 생각해보니 제가 한창 React Native 공부할 때 썼던 Redux도 이 패러다임을 적용한 상태 관리 라이브러리입니다...!!

     

    아 왠지 익숙하더라...🤦🏻‍♂️🤦🏻‍♂️🤦🏻‍♂️

     

    간단히 상태관리 라이브러리인 Redux에 대해서 얘기해보자면 Redux에는 3가지 원칙이 있습니다.


    1. Single Source Of Truth(SSOT)

    2. Read-Only State

    3. Changes from pure functions

     

    참고: https://redux.js.org/understanding/thinking-in-redux/three-principles

     

    Three Principles | Redux

    Introduction > Three Principles: Three key principles for using Redux

    redux.js.org

     

    Redux도 Store에서 데이터를 갖고 있고 이걸 각 View에서 가져다가 쓰죠.

    만약 변경을 해야하는 경우라면 Action을 통해 Reducer를 거쳐서 값이 Update 됩니다.

    마무리

    아 뭔가 SwiftUI에서 알게 된 SSOT를 공부하다가 갑자기 Redux로 끝난 기분인데..😅😅

    이 개념이 오직 스유에서만 쓰는 패러다임이 아니니 개념의 적용 범위를 넓게 봐주시면 좋을 것 같아요.

    SSOT라는 개념이 사실 무지 어려운 개념은 아니에요.(겉만 보고 쉽다는 제라스... 겸손해라.)

    그렇기 때문에 단순히 SwiftUI 개발을 하면서 이 개념을 아주 깊게 파보거나 Apple에서 바라보는 패러다임을 깊게 이해하려 하지 않는 이상 이정도만 이해하고 넘어가도 좋을 것 같습니다!

     

    그럼 오늘도 끝까지 읽어주셔서 감사드리고 더 좋은 포스팅으로 돌아오겠습니다.👍🏻😃👍🏻

    참고

    https://velog.io/@qwer15417/SwiftUI-%EB%B7%B0-%EC%82%AC%EC%9D%B4%EC%9D%98-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%9D%90%EB%A6%84-%EA%B4%80%EB%A6%AC

     

    [SwiftUI] 뷰 사이의 데이터 흐름 관리

    ios app dev tutorials를 보고 번역한 글입니다.정보를 여러 개 복사해 놓는 것은 당신의 앱에 버그를 유발할 수 있습니다. 데이터 중구난방 버그를 피하려면 SSOT(Single Source of Truth)를 당신의 앱에 사용

    velog.io

    https://onlyfor-me-blog.tistory.com/696

     

    단일 진실 공급원(Single Source Of Truth)이란?

    가급적이면 데이터가 만들어지고 수정되는 작업이 여러 곳이 아닌 한 곳에서 일어나면 좋다. 여러 곳에서 일어나면 디버깅할 때 값의 흐름을 추적하는 것이 귀찮고 힘든 작업이 되며, 유지보수

    onlyfor-me-blog.tistory.com

    https://kimhaeun.com/59

     

    [SwiftUI] 헷깔리는 State, Binding, ObservedObject, EnvironmentObject 총정리

    SwiftUI에서의 Single Source of Truth(SSOT, 단일 진실 공급원)란 데이터의 일관성과 정확성을 유지하기 위한 중요한 개념이다. 정보 시스템에 대한 SSOT(Single Source Of Truth) 아키텍처 또는 SPOT(Single Point Of Tr

    kimhaeun.com

     

    https://ssangq.netlify.app/posts/react-redux

     

    Redux를 파헤쳐보자 (삽으로...) 첫 번째 - Develop To be a Developer

    React Hooks를 사용하면서 state 관리는 useReducer와 ContextAPI를 사용했다. Redux, MobX 가 가장 뜨거운 state 관리 library라고 하지만, hooks에 내장되어 있는 API를 사용함에 있어 크게 불편하거나 다른 상태관

    ssangq.netlify.app


    아직 꼬꼬마 개발자입니다.

    더 나은 설명이나 코드가 있다면 언제든 환영입니다.

    적극적인 조언과 피드백 부탁드립니다!

     

    그럼 오늘도 개발 가득한 하루되세요!

    - Xerath -

    🤖🤖🤖🤖🤖🤖🤖

     

    728x90
    반응형