diff --git a/.gitignore b/.gitignore
index ba45fbb..d2d7ea5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,7 +57,7 @@ playground.xcworkspace
Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
-*.xcworkspace
+# *.xcworkspace
# Carthage
#
diff --git a/InMyMemory.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/InMyMemory.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/InMyMemory.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/InMyMemory.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/InMyMemory.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/InMyMemory.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/InMyMemory.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/InMyMemory.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
new file mode 100644
index 0000000..421b15b
--- /dev/null
+++ b/InMyMemory.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -0,0 +1,122 @@
+{
+ "pins" : [
+ {
+ "identity" : "cwlcatchexception",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/mattgallagher/CwlCatchException.git",
+ "state" : {
+ "revision" : "3b123999de19bf04905bc1dfdb76f817b0f2cc00",
+ "version" : "2.1.2"
+ }
+ },
+ {
+ "identity" : "cwlpreconditiontesting",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/mattgallagher/CwlPreconditionTesting.git",
+ "state" : {
+ "revision" : "dc9af4781f2afdd1e68e90f80b8603be73ea7abc",
+ "version" : "2.2.0"
+ }
+ },
+ {
+ "identity" : "nimble",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/Quick/Nimble",
+ "state" : {
+ "revision" : "437d2a6d35b835adaae2a0cac49efe02ef4e0f35",
+ "version" : "13.1.2"
+ }
+ },
+ {
+ "identity" : "quick",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/Quick/Quick",
+ "state" : {
+ "revision" : "ef9aaf3f634b3a1ab6f54f1173fe2400b36e7cb8",
+ "version" : "7.3.0"
+ }
+ },
+ {
+ "identity" : "reactorkit",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/ReactorKit/ReactorKit",
+ "state" : {
+ "revision" : "8fa33f09c6f6621a2aa536d739956d53b84dd139",
+ "version" : "3.2.0"
+ }
+ },
+ {
+ "identity" : "rxdatasources",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/RxSwiftCommunity/RxDataSources",
+ "state" : {
+ "revision" : "90c29b48b628479097fe775ed1966d75ac374518",
+ "version" : "5.0.2"
+ }
+ },
+ {
+ "identity" : "rxflow",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/RxSwiftCommunity/RxFlow",
+ "state" : {
+ "revision" : "d8d4e53d05239f1ec1bd8bec173907868afa0fa1",
+ "version" : "2.13.0"
+ }
+ },
+ {
+ "identity" : "rxswift",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/ReactiveX/RxSwift",
+ "state" : {
+ "revision" : "9dcaa4b333db437b0fbfaf453fad29069044a8b4",
+ "version" : "6.6.0"
+ }
+ },
+ {
+ "identity" : "snapkit",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/SnapKit/SnapKit",
+ "state" : {
+ "revision" : "f222cbdf325885926566172f6f5f06af95473158",
+ "version" : "5.6.0"
+ }
+ },
+ {
+ "identity" : "swift-snapshot-testing",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/pointfreeco/swift-snapshot-testing",
+ "state" : {
+ "revision" : "26ed3a2b4a2df47917ca9b790a57f91285b923fb",
+ "version" : "1.12.0"
+ }
+ },
+ {
+ "identity" : "swinject",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/Swinject/Swinject",
+ "state" : {
+ "revision" : "463cb2d659c8ae34899d18057ea5b1bb86fc3178",
+ "version" : "2.8.4"
+ }
+ },
+ {
+ "identity" : "then",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/devxoul/Then",
+ "state" : {
+ "revision" : "d41ef523faef0f911369f79c0b96815d9dbb6d7a",
+ "version" : "3.0.0"
+ }
+ },
+ {
+ "identity" : "weakmaptable",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/ReactorKit/WeakMapTable.git",
+ "state" : {
+ "revision" : "cb05d64cef2bbf51e85c53adee937df46540a74e",
+ "version" : "1.2.1"
+ }
+ }
+ ],
+ "version" : 2
+}
diff --git a/InMyMemory.xcworkspace/contents.xcworkspacedata b/InMyMemory.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..457db4c
--- /dev/null
+++ b/InMyMemory.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/InMyMemory.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/InMyMemory.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/InMyMemory.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/InMyMemory.xcworkspace/xcshareddata/swiftpm/Package.resolved b/InMyMemory.xcworkspace/xcshareddata/swiftpm/Package.resolved
new file mode 100644
index 0000000..421b15b
--- /dev/null
+++ b/InMyMemory.xcworkspace/xcshareddata/swiftpm/Package.resolved
@@ -0,0 +1,122 @@
+{
+ "pins" : [
+ {
+ "identity" : "cwlcatchexception",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/mattgallagher/CwlCatchException.git",
+ "state" : {
+ "revision" : "3b123999de19bf04905bc1dfdb76f817b0f2cc00",
+ "version" : "2.1.2"
+ }
+ },
+ {
+ "identity" : "cwlpreconditiontesting",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/mattgallagher/CwlPreconditionTesting.git",
+ "state" : {
+ "revision" : "dc9af4781f2afdd1e68e90f80b8603be73ea7abc",
+ "version" : "2.2.0"
+ }
+ },
+ {
+ "identity" : "nimble",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/Quick/Nimble",
+ "state" : {
+ "revision" : "437d2a6d35b835adaae2a0cac49efe02ef4e0f35",
+ "version" : "13.1.2"
+ }
+ },
+ {
+ "identity" : "quick",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/Quick/Quick",
+ "state" : {
+ "revision" : "ef9aaf3f634b3a1ab6f54f1173fe2400b36e7cb8",
+ "version" : "7.3.0"
+ }
+ },
+ {
+ "identity" : "reactorkit",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/ReactorKit/ReactorKit",
+ "state" : {
+ "revision" : "8fa33f09c6f6621a2aa536d739956d53b84dd139",
+ "version" : "3.2.0"
+ }
+ },
+ {
+ "identity" : "rxdatasources",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/RxSwiftCommunity/RxDataSources",
+ "state" : {
+ "revision" : "90c29b48b628479097fe775ed1966d75ac374518",
+ "version" : "5.0.2"
+ }
+ },
+ {
+ "identity" : "rxflow",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/RxSwiftCommunity/RxFlow",
+ "state" : {
+ "revision" : "d8d4e53d05239f1ec1bd8bec173907868afa0fa1",
+ "version" : "2.13.0"
+ }
+ },
+ {
+ "identity" : "rxswift",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/ReactiveX/RxSwift",
+ "state" : {
+ "revision" : "9dcaa4b333db437b0fbfaf453fad29069044a8b4",
+ "version" : "6.6.0"
+ }
+ },
+ {
+ "identity" : "snapkit",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/SnapKit/SnapKit",
+ "state" : {
+ "revision" : "f222cbdf325885926566172f6f5f06af95473158",
+ "version" : "5.6.0"
+ }
+ },
+ {
+ "identity" : "swift-snapshot-testing",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/pointfreeco/swift-snapshot-testing",
+ "state" : {
+ "revision" : "26ed3a2b4a2df47917ca9b790a57f91285b923fb",
+ "version" : "1.12.0"
+ }
+ },
+ {
+ "identity" : "swinject",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/Swinject/Swinject",
+ "state" : {
+ "revision" : "463cb2d659c8ae34899d18057ea5b1bb86fc3178",
+ "version" : "2.8.4"
+ }
+ },
+ {
+ "identity" : "then",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/devxoul/Then",
+ "state" : {
+ "revision" : "d41ef523faef0f911369f79c0b96815d9dbb6d7a",
+ "version" : "3.0.0"
+ }
+ },
+ {
+ "identity" : "weakmaptable",
+ "kind" : "remoteSourceControl",
+ "location" : "https://github.com/ReactorKit/WeakMapTable.git",
+ "state" : {
+ "revision" : "cb05d64cef2bbf51e85c53adee937df46540a74e",
+ "version" : "1.2.1"
+ }
+ }
+ ],
+ "version" : 2
+}
diff --git a/README.md b/README.md
index 131e189..f4a96a0 100644
--- a/README.md
+++ b/README.md
@@ -21,3 +21,9 @@ InMyMemory는 자신의 기억을 저장할 수 있는 앱입니다.
* Domain: Entity, Interface, UseCase
* Data: DB, Repository (Implementation)
* Presentation: View, Reactor, etc (UI)
+
+### 테스팅
+
+* XCTest
+* Quick, Nimble
+* SnapshotTesting