diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring"
deleted file mode 160000
index 1a028db..0000000
--- "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring"
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 1a028dbce426fcbba9bd33292b5b2ef294692808
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/compiler.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/compiler.xml"
new file mode 100644
index 0000000..d0187c2
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/compiler.xml"
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources.local.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources.local.xml"
new file mode 100644
index 0000000..8dec0f9
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources.local.xml"
@@ -0,0 +1,22 @@
+
+
+
+
+
+ #@
+ `
+
+
+ master_key
+ root
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources.xml"
new file mode 100644
index 0000000..f8b6069
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources.xml"
@@ -0,0 +1,12 @@
+
+
+
+
+ mysql.8
+ true
+ com.mysql.cj.jdbc.Driver
+ jdbc:mysql://localhost:3306
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d.xml"
new file mode 100644
index 0000000..6148432
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d.xml"
@@ -0,0 +1,1634 @@
+
+
+
+
+ mixed/mixed
+ InnoDB
+ InnoDB
+ |root||root|localhost|ALTER|G
+|root||root|localhost|ALTER ROUTINE|G
+|root||root|localhost|APPLICATION_PASSWORD_ADMIN|G
+|root||mysql.infoschema|localhost|AUDIT_ABORT_EXEMPT|G
+|root||mysql.session|localhost|AUDIT_ABORT_EXEMPT|G
+|root||mysql.sys|localhost|AUDIT_ABORT_EXEMPT|G
+|root||root|localhost|AUDIT_ABORT_EXEMPT|G
+|root||root|localhost|AUDIT_ADMIN|G
+|root||mysql.session|localhost|AUTHENTICATION_POLICY_ADMIN|G
+|root||root|localhost|AUTHENTICATION_POLICY_ADMIN|G
+|root||mysql.session|localhost|BACKUP_ADMIN|G
+|root||root|localhost|BACKUP_ADMIN|G
+|root||root|localhost|BINLOG_ADMIN|G
+|root||root|localhost|BINLOG_ENCRYPTION_ADMIN|G
+|root||mysql.session|localhost|CLONE_ADMIN|G
+|root||root|localhost|CLONE_ADMIN|G
+|root||mysql.session|localhost|CONNECTION_ADMIN|G
+|root||root|localhost|CONNECTION_ADMIN|G
+|root||root|localhost|CREATE|G
+|root||root|localhost|CREATE ROLE|G
+|root||root|localhost|CREATE ROUTINE|G
+|root||root|localhost|CREATE TABLESPACE|G
+|root||root|localhost|CREATE TEMPORARY TABLES|G
+|root||root|localhost|CREATE USER|G
+|root||root|localhost|CREATE VIEW|G
+|root||root|localhost|DELETE|G
+|root||root|localhost|DROP|G
+|root||root|localhost|DROP ROLE|G
+|root||root|localhost|ENCRYPTION_KEY_ADMIN|G
+|root||root|localhost|EVENT|G
+|root||root|localhost|EXECUTE|G
+|root||root|localhost|FILE|G
+|root||mysql.infoschema|localhost|FIREWALL_EXEMPT|G
+|root||mysql.session|localhost|FIREWALL_EXEMPT|G
+|root||mysql.sys|localhost|FIREWALL_EXEMPT|G
+|root||root|localhost|FIREWALL_EXEMPT|G
+|root||root|localhost|FLUSH_OPTIMIZER_COSTS|G
+|root||root|localhost|FLUSH_STATUS|G
+|root||root|localhost|FLUSH_TABLES|G
+|root||root|localhost|FLUSH_USER_RESOURCES|G
+|root||root|localhost|GROUP_REPLICATION_ADMIN|G
+|root||root|localhost|GROUP_REPLICATION_STREAM|G
+|root||root|localhost|INDEX|G
+|root||root|localhost|INNODB_REDO_LOG_ARCHIVE|G
+|root||root|localhost|INNODB_REDO_LOG_ENABLE|G
+|root||root|localhost|INSERT|G
+|root||root|localhost|LOCK TABLES|G
+|root||root|localhost|PASSWORDLESS_USER_ADMIN|G
+|root||mysql.session|localhost|PERSIST_RO_VARIABLES_ADMIN|G
+|root||root|localhost|PERSIST_RO_VARIABLES_ADMIN|G
+|root||root|localhost|PROCESS|G
+|root||root|localhost|REFERENCES|G
+|root||root|localhost|RELOAD|G
+|root||root|localhost|REPLICATION CLIENT|G
+|root||root|localhost|REPLICATION SLAVE|G
+|root||root|localhost|REPLICATION_APPLIER|G
+|root||root|localhost|REPLICATION_SLAVE_ADMIN|G
+|root||root|localhost|RESOURCE_GROUP_ADMIN|G
+|root||root|localhost|RESOURCE_GROUP_USER|G
+|root||root|localhost|ROLE_ADMIN|G
+|root||mysql.infoschema|localhost|SELECT|G
+|root||root|localhost|SELECT|G
+|root||root|localhost|SENSITIVE_VARIABLES_OBSERVER|G
+|root||root|localhost|SERVICE_CONNECTION_ADMIN|G
+|root||mysql.session|localhost|SESSION_VARIABLES_ADMIN|G
+|root||root|localhost|SESSION_VARIABLES_ADMIN|G
+|root||root|localhost|SET_USER_ID|G
+|root||root|localhost|SHOW DATABASES|G
+|root||root|localhost|SHOW VIEW|G
+|root||root|localhost|SHOW_ROUTINE|G
+|root||mysql.session|localhost|SHUTDOWN|G
+|root||root|localhost|SHUTDOWN|G
+|root||mysql.session|localhost|SUPER|G
+|root||root|localhost|SUPER|G
+|root||mysql.infoschema|localhost|SYSTEM_USER|G
+|root||mysql.session|localhost|SYSTEM_USER|G
+|root||mysql.sys|localhost|SYSTEM_USER|G
+|root||root|localhost|SYSTEM_USER|G
+|root||mysql.session|localhost|SYSTEM_VARIABLES_ADMIN|G
+|root||root|localhost|SYSTEM_VARIABLES_ADMIN|G
+|root||root|localhost|TABLE_ENCRYPTION_ADMIN|G
+|root||root|localhost|TELEMETRY_LOG_ADMIN|G
+|root||root|localhost|TRIGGER|G
+|root||root|localhost|UPDATE|G
+|root||root|localhost|XA_RECOVER_ADMIN|G
+|root||root|localhost|grant option|G
+performance_schema|schema||mysql.session|localhost|SELECT|G
+sys|schema||mysql.sys|localhost|TRIGGER|G
+ 8.0.33
+
+
+ armscii8
+
+
+ armscii8
+ 1
+
+
+ ascii
+
+
+ ascii
+ 1
+
+
+ big5
+
+
+ big5
+ 1
+
+
+ binary
+ 1
+
+
+ cp1250
+
+
+ cp1250
+
+
+ cp1250
+
+
+ cp1250
+ 1
+
+
+ cp1250
+
+
+ cp1251
+
+
+ cp1251
+
+
+ cp1251
+ 1
+
+
+ cp1251
+
+
+ cp1251
+
+
+ cp1256
+
+
+ cp1256
+ 1
+
+
+ cp1257
+
+
+ cp1257
+ 1
+
+
+ cp1257
+
+
+ cp850
+
+
+ cp850
+ 1
+
+
+ cp852
+
+
+ cp852
+ 1
+
+
+ cp866
+
+
+ cp866
+ 1
+
+
+ cp932
+
+
+ cp932
+ 1
+
+
+ dec8
+
+
+ dec8
+ 1
+
+
+ eucjpms
+
+
+ eucjpms
+ 1
+
+
+ euckr
+
+
+ euckr
+ 1
+
+
+ gb18030
+
+
+ gb18030
+ 1
+
+
+ gb18030
+
+
+ gb2312
+
+
+ gb2312
+ 1
+
+
+ gbk
+
+
+ gbk
+ 1
+
+
+ geostd8
+
+
+ geostd8
+ 1
+
+
+ greek
+
+
+ greek
+ 1
+
+
+ hebrew
+
+
+ hebrew
+ 1
+
+
+ hp8
+
+
+ hp8
+ 1
+
+
+ keybcs2
+
+
+ keybcs2
+ 1
+
+
+ koi8r
+
+
+ koi8r
+ 1
+
+
+ koi8u
+
+
+ koi8u
+ 1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+
+
+ latin1
+ 1
+
+
+ latin2
+
+
+ latin2
+
+
+ latin2
+
+
+ latin2
+ 1
+
+
+ latin2
+
+
+ latin5
+
+
+ latin5
+ 1
+
+
+ latin7
+
+
+ latin7
+
+
+ latin7
+ 1
+
+
+ latin7
+
+
+ macce
+
+
+ macce
+ 1
+
+
+ macroman
+
+
+ macroman
+ 1
+
+
+ sjis
+
+
+ sjis
+ 1
+
+
+ swe7
+
+
+ swe7
+ 1
+
+
+ tis620
+
+
+ tis620
+ 1
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+ 1
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ucs2
+
+
+ ujis
+
+
+ ujis
+ 1
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+ 1
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16
+
+
+ utf16le
+
+
+ utf16le
+ 1
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+ 1
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf32
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+ 1
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb3
+
+
+ utf8mb4
+ 1
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb4
+
+
+ utf8mb3_general_ci
+
+
+ utf8mb4_0900_ai_ci
+
+
+ utf8mb4_0900_ai_ci
+
+
+ utf8mb4_0900_ai_ci
+
+
+ utf8mb4_0900_ai_ci
+
+
+ utf8mb4_0900_ai_ci
+
+
+ utf8mb4_0900_ai_ci
+
+
+ utf8mb4_0900_ai_ci
+
+
+ 0
+ localhost
+ caching_sha2_password
+
+
+ 0
+ localhost
+ caching_sha2_password
+
+
+ 0
+ localhost
+ caching_sha2_password
+
+
+ localhost
+ caching_sha2_password
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ InnoDB
+ utf8mb4_0900_ai_ci
+
+
+ 7
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ varchar(20)|0s
+ 1
+ 4
+
+
+ id
+ btree
+ 1
+
+
+ name
+ btree
+ 1
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ UK_46ccwnsi9409t36lurvtyljak
+
+
+ 1
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ longtext|0s
+ 4
+
+
+ varchar(100)|0s
+ 5
+
+
+ varchar(15)|0s
+ 'NOT_RECEIVE'
+ 6
+
+
+ varchar(255)|0s
+ 7
+
+
+ varchar(50)|0s
+ 8
+
+
+ bigint|0s
+ 1
+ 9
+
+
+ user_id
+ id
+ user
+
+
+ id
+ btree
+ 1
+
+
+ user_id
+ btree
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ 1
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ date|0s
+ 4
+
+
+ int|0s
+ 5
+
+
+ int|0s
+ 6
+
+
+ bigint|0s
+ 1
+ 7
+
+
+ store_id
+ id
+ store
+
+
+ id
+ btree
+ 1
+
+
+ store_id
+ btree
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ 1
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ varchar(1024)|0s
+ 4
+
+
+ bit(1)|0s
+ b'0'
+ 5
+
+
+ varchar(20)|0s
+ 6
+
+
+ bigint|0s
+ 1
+ 7
+
+
+ user_id
+ id
+ user
+
+
+ id
+ btree
+ 1
+
+
+ user_id
+ btree
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ 1
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ longtext|0s
+ 1
+ 4
+
+
+ bigint|0s
+ 1
+ 5
+
+
+ bigint|0s
+ 1
+ 6
+
+
+ review_id
+ id
+ review
+
+
+ user_id
+ id
+ user
+
+
+ id
+ btree
+ 1
+
+
+ review_id
+ btree
+
+
+ user_id
+ btree
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ 2
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ longtext|0s
+ 1
+ 4
+
+
+ varchar(100)|0s
+ 5
+
+
+ varchar(15)|0s
+ 'NOT_BAD'
+ 6
+
+
+ bigint|0s
+ 1
+ 7
+
+
+ bigint|0s
+ 1
+ 8
+
+
+ store_id
+ id
+ store
+
+
+ user_id
+ id
+ user
+
+
+ id
+ btree
+ 1
+
+
+ store_id
+ btree
+
+
+ user_id
+ btree
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ 2
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ varchar(20)|0s
+ 1
+ 4
+
+
+ varchar(20)|0s
+ 1
+ 5
+
+
+ varchar(20)|0s
+ 'CLOSING'
+ 6
+
+
+ bigint|0s
+ 7
+
+
+ category_id
+ id
+ category
+
+
+ id
+ btree
+ 1
+
+
+ category_id
+ btree
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ 3
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ varchar(50)|0s
+ 4
+
+
+ date|0s
+ 5
+
+
+ varchar(40)|0s
+ 6
+
+
+ varchar(10)|0s
+ 7
+
+
+ date|0s
+ 8
+
+
+ varchar(20)|0s
+ 1
+ 9
+
+
+ varchar(20)|0s
+ 10
+
+
+ varchar(11)|0s
+ 11
+
+
+ int|0s
+ 12
+
+
+ varchar(255)|0s
+ 13
+
+
+ varchar(100)|0s
+ 14
+
+
+ varchar(10)|0s
+ 'ACTIVE'
+ 15
+
+
+ id
+ btree
+ 1
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ 1
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ varchar(15)|0s
+ 'NOT_COMPLETE'
+ 4
+
+
+ bigint|0s
+ 1
+ 5
+
+
+ bigint|0s
+ 1
+ 6
+
+
+ mission_id
+ id
+ mission
+
+
+ user_id
+ id
+ user
+
+
+ id
+ btree
+ 1
+
+
+ mission_id
+ btree
+
+
+ user_id
+ btree
+
+
+ 1
+ 1
+ PRIMARY
+
+
+ 5
+ bigint|0s
+ 1
+ 1
+
+
+ datetime(6)|0s
+ 2
+
+
+ datetime(6)|0s
+ 3
+
+
+ bigint|0s
+ 4
+
+
+ bigint|0s
+ 5
+
+
+ category_id
+ id
+ category
+
+
+ user_id
+ id
+ user
+
+
+ id
+ btree
+ 1
+
+
+ category_id
+ btree
+
+
+ user_id
+ btree
+
+
+ 1
+ 1
+ PRIMARY
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/UMP.uEgBAA.meta" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/UMP.uEgBAA.meta"
new file mode 100644
index 0000000..88d1e8a
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/UMP.uEgBAA.meta"
@@ -0,0 +1,2 @@
+#n:UMP
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/information_schema.FNRwLQ.meta" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/information_schema.FNRwLQ.meta"
new file mode 100644
index 0000000..1ff3db2
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/information_schema.FNRwLQ.meta"
@@ -0,0 +1,2 @@
+#n:information_schema
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/mysql.osA4Bg.meta" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/mysql.osA4Bg.meta"
new file mode 100644
index 0000000..86a53f1
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/mysql.osA4Bg.meta"
@@ -0,0 +1,2 @@
+#n:mysql
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/performance_schema.kIw0nw.meta" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/performance_schema.kIw0nw.meta"
new file mode 100644
index 0000000..9394db1
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/performance_schema.kIw0nw.meta"
@@ -0,0 +1,2 @@
+#n:performance_schema
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/study.yQ2LBg.meta" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/study.yQ2LBg.meta"
new file mode 100644
index 0000000..2c2dd6c
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/study.yQ2LBg.meta"
@@ -0,0 +1,2 @@
+#n:study
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/sys.zb4BAA.meta" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/sys.zb4BAA.meta"
new file mode 100644
index 0000000..2f4470b
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/dataSources/6a3648b3-68bf-4d47-aff1-c74cccdfe35d/storage_v2/_src_/schema/sys.zb4BAA.meta"
@@ -0,0 +1,2 @@
+#n:sys
+! [null, 0, null, null, -2147483648, -2147483648]
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/gradle.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/gradle.xml"
new file mode 100644
index 0000000..1ace7cf
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/gradle.xml"
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/jarRepositories.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/jarRepositories.xml"
new file mode 100644
index 0000000..fdc392f
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/jarRepositories.xml"
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/misc.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/misc.xml"
new file mode 100644
index 0000000..5821b2f
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/misc.xml"
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/modules.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/modules.xml"
new file mode 100644
index 0000000..69a5b1e
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/modules.xml"
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/modules/spring.main.iml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/modules/spring.main.iml"
new file mode 100644
index 0000000..afc1871
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/modules/spring.main.iml"
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/uiDesigner.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/uiDesigner.xml"
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/uiDesigner.xml"
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/vcs.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/vcs.xml"
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/vcs.xml"
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/workspace.xml" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/workspace.xml"
new file mode 100644
index 0000000..9ac5dd3
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/.idea/workspace.xml"
@@ -0,0 +1,232 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ "keyToString": {
+ "RequestMappingsPanelOrder0": "0",
+ "RequestMappingsPanelOrder1": "1",
+ "RequestMappingsPanelWidth0": "75",
+ "RequestMappingsPanelWidth1": "75",
+ "RunOnceActivity.OpenProjectViewOnStart": "true",
+ "RunOnceActivity.ShowReadmeOnStart": "true",
+ "WebServerToolWindowFactoryState": "false",
+ "database.data.extractors.current.export.id": "Comma-separated (CSV)_id",
+ "last_opened_file_path": "/Users/wuseong/Library/Mobile Documents/com~apple~CloudDocs/umc/spring-A/5th_Spring_A/우스_장우성/spring",
+ "node.js.detected.package.eslint": "true",
+ "node.js.detected.package.tslint": "true",
+ "node.js.selected.package.eslint": "(autodetect)",
+ "node.js.selected.package.tslint": "(autodetect)",
+ "nodejs_package_manager_path": "npm",
+ "project.structure.last.edited": "프로젝트",
+ "project.structure.proportion": "0.0",
+ "project.structure.side.proportion": "0.0",
+ "settings.editor.selected.configurable": "preferences.pluginManager",
+ "spring.configuration.checksum": "119b3df13ddf2e00acd0e388d154323c",
+ "vue.rearranger.settings.migration": "true"
+ },
+ "keyToStringList": {
+ "DatabaseDriversLRU": [
+ "mysql"
+ ]
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1699867682743
+
+
+ 1699867682743
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1700848301313
+
+
+
+ 1700848301314
+
+
+ 1700920308399
+
+
+
+ 1700920308399
+
+
+ 1701005705386
+
+
+
+ 1701005705386
+
+
+ 1701008710319
+
+
+
+ 1701008710320
+
+
+ 1701010699929
+
+
+
+ 1701010699929
+
+
+ 1701010745128
+
+
+
+ 1701010745128
+
+
+ 1701017789356
+
+
+
+ 1701017789357
+
+
+ 1701090383949
+
+
+
+ 1701090383949
+
+
+ 1703166637363
+
+
+
+ 1703166637363
+
+
+ 1703511920729
+
+
+
+ 1703511920729
+
+
+ 1703511941221
+
+
+
+ 1703511941221
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/HELP.md" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/HELP.md"
new file mode 100644
index 0000000..c5b9409
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/HELP.md"
@@ -0,0 +1,25 @@
+# Getting Started
+
+### Reference Documentation
+For further reference, please consider the following sections:
+
+* [Official Gradle documentation](https://docs.gradle.org)
+* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/docs/2.7.17/gradle-plugin/reference/html/)
+* [Create an OCI image](https://docs.spring.io/spring-boot/docs/2.7.17/gradle-plugin/reference/html/#build-image)
+* [Spring Web](https://docs.spring.io/spring-boot/docs/2.7.17/reference/htmlsingle/index.html#web)
+* [Spring Data JPA](https://docs.spring.io/spring-boot/docs/2.7.17/reference/htmlsingle/index.html#data.sql.jpa-and-spring-data)
+
+### Guides
+The following guides illustrate how to use some features concretely:
+
+* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/)
+* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/)
+* [Building REST services with Spring](https://spring.io/guides/tutorials/rest/)
+* [Accessing data with MySQL](https://spring.io/guides/gs/accessing-data-mysql/)
+* [Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-jpa/)
+
+### Additional Links
+These additional references should also help you:
+
+* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle)
+
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/build.gradle" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/build.gradle"
new file mode 100644
index 0000000..b126553
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/build.gradle"
@@ -0,0 +1,43 @@
+plugins {
+ id 'java'
+ id 'org.springframework.boot' version '2.7.17'
+ id 'io.spring.dependency-management' version '1.0.15.RELEASE'
+}
+
+group = 'umm'
+version = '0.0.1-SNAPSHOT'
+
+java {
+ sourceCompatibility = '11'
+}
+
+configurations {
+ compileOnly {
+ extendsFrom annotationProcessor
+ }
+}
+
+repositories {
+ mavenCentral()
+}
+
+dependencies {
+ implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
+ implementation 'org.springframework.boot:spring-boot-starter-web'
+ implementation 'org.springframework.boot:spring-boot-starter-validation'
+ implementation 'org.springdoc:springdoc-openapi-ui:1.6.15'
+ implementation 'io.springfox:springfox-swagger2:2.9.2'
+ implementation 'io.springfox:springfox-swagger-ui:2.9.2'
+ compileOnly 'org.projectlombok:lombok'
+ runtimeOnly 'com.mysql:mysql-connector-j'
+ annotationProcessor 'org.projectlombok:lombok'
+ testImplementation 'org.springframework.boot:spring-boot-starter-test'
+}
+
+tasks.named('bootBuildImage') {
+ builder = 'paketobuildpacks/builder-jammy-base:latest'
+}
+
+tasks.named('test') {
+ useJUnitPlatform()
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradle/wrapper/gradle-wrapper.jar" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradle/wrapper/gradle-wrapper.jar"
new file mode 100644
index 0000000..7f93135
Binary files /dev/null and "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradle/wrapper/gradle-wrapper.jar" differ
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradle/wrapper/gradle-wrapper.properties" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradle/wrapper/gradle-wrapper.properties"
new file mode 100644
index 0000000..3fa8f86
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradle/wrapper/gradle-wrapper.properties"
@@ -0,0 +1,7 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
+networkTimeout=10000
+validateDistributionUrl=true
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradlew" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradlew"
new file mode 100755
index 0000000..1aa94a4
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradlew"
@@ -0,0 +1,249 @@
+#!/bin/sh
+
+#
+# Copyright © 2015-2021 the original authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+#
+# Gradle start up script for POSIX generated by Gradle.
+#
+# Important for running:
+#
+# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
+# noncompliant, but you have some other compliant shell such as ksh or
+# bash, then to run this script, type that shell name before the whole
+# command line, like:
+#
+# ksh Gradle
+#
+# Busybox and similar reduced shells will NOT work, because this script
+# requires all of these POSIX shell features:
+# * functions;
+# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
+# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
+# * compound commands having a testable exit status, especially «case»;
+# * various built-in commands including «command», «set», and «ulimit».
+#
+# Important for patching:
+#
+# (2) This script targets any POSIX shell, so it avoids extensions provided
+# by Bash, Ksh, etc; in particular arrays are avoided.
+#
+# The "traditional" practice of packing multiple parameters into a
+# space-separated string is a well documented source of bugs and security
+# problems, so this is (mostly) avoided, by progressively accumulating
+# options in "$@", and eventually passing that to Java.
+#
+# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
+# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
+# see the in-line comments for details.
+#
+# There are tweaks for specific operating systems such as AIX, CygWin,
+# Darwin, MinGW, and NonStop.
+#
+# (3) This script is generated from the Groovy template
+# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
+# within the Gradle project.
+#
+# You can find Gradle at https://github.com/gradle/gradle/.
+#
+##############################################################################
+
+# Attempt to set APP_HOME
+
+# Resolve links: $0 may be a link
+app_path=$0
+
+# Need this for daisy-chained symlinks.
+while
+ APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
+ [ -h "$app_path" ]
+do
+ ls=$( ls -ld "$app_path" )
+ link=${ls#*' -> '}
+ case $link in #(
+ /*) app_path=$link ;; #(
+ *) app_path=$APP_HOME$link ;;
+ esac
+done
+
+# This is normally unused
+# shellcheck disable=SC2034
+APP_BASE_NAME=${0##*/}
+# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
+APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD=maximum
+
+warn () {
+ echo "$*"
+} >&2
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+} >&2
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "$( uname )" in #(
+ CYGWIN* ) cygwin=true ;; #(
+ Darwin* ) darwin=true ;; #(
+ MSYS* | MINGW* ) msys=true ;; #(
+ NONSTOP* ) nonstop=true ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD=$JAVA_HOME/jre/sh/java
+ else
+ JAVACMD=$JAVA_HOME/bin/java
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD=java
+ if ! command -v java >/dev/null 2>&1
+ then
+ die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+fi
+
+# Increase the maximum file descriptors if we can.
+if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
+ case $MAX_FD in #(
+ max*)
+ # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ MAX_FD=$( ulimit -H -n ) ||
+ warn "Could not query maximum file descriptor limit"
+ esac
+ case $MAX_FD in #(
+ '' | soft) :;; #(
+ *)
+ # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
+ # shellcheck disable=SC2039,SC3045
+ ulimit -n "$MAX_FD" ||
+ warn "Could not set maximum file descriptor limit to $MAX_FD"
+ esac
+fi
+
+# Collect all arguments for the java command, stacking in reverse order:
+# * args from the command line
+# * the main class name
+# * -classpath
+# * -D...appname settings
+# * --module-path (only if needed)
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if "$cygwin" || "$msys" ; then
+ APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
+ CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
+
+ JAVACMD=$( cygpath --unix "$JAVACMD" )
+
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ for arg do
+ if
+ case $arg in #(
+ -*) false ;; # don't mess with options #(
+ /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
+ [ -e "$t" ] ;; #(
+ *) false ;;
+ esac
+ then
+ arg=$( cygpath --path --ignore --mixed "$arg" )
+ fi
+ # Roll the args list around exactly as many times as the number of
+ # args, so each arg winds up back in the position where it started, but
+ # possibly modified.
+ #
+ # NB: a `for` loop captures its iteration list before it begins, so
+ # changing the positional parameters here affects neither the number of
+ # iterations, nor the values presented in `arg`.
+ shift # remove old arg
+ set -- "$@" "$arg" # push replacement arg
+ done
+fi
+
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Collect all arguments for the java command:
+# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
+# and any embedded shellness will be escaped.
+# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
+# treated as '${Hostname}' itself on the command line.
+
+set -- \
+ "-Dorg.gradle.appname=$APP_BASE_NAME" \
+ -classpath "$CLASSPATH" \
+ org.gradle.wrapper.GradleWrapperMain \
+ "$@"
+
+# Stop when "xargs" is not available.
+if ! command -v xargs >/dev/null 2>&1
+then
+ die "xargs is not available"
+fi
+
+# Use "xargs" to parse quoted args.
+#
+# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
+#
+# In Bash we could simply go:
+#
+# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
+# set -- "${ARGS[@]}" "$@"
+#
+# but POSIX shell has neither arrays nor command substitution, so instead we
+# post-process each arg (as a line of input to sed) to backslash-escape any
+# character that might be a shell metacharacter, then use eval to reverse
+# that process (while maintaining the separation between arguments), and wrap
+# the whole thing up as a single "set" statement.
+#
+# This will of course break if any of these variables contains a newline or
+# an unmatched quote.
+#
+
+eval "set -- $(
+ printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
+ xargs -n1 |
+ sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
+ tr '\n' ' '
+ )" '"$@"'
+
+exec "$JAVACMD" "$@"
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradlew.bat" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradlew.bat"
new file mode 100644
index 0000000..93e3f59
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/gradlew.bat"
@@ -0,0 +1,92 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%"=="" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%"=="" set DIRNAME=.
+@rem This is normally unused
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if %ERRORLEVEL% equ 0 goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if %ERRORLEVEL% equ 0 goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+set EXIT_CODE=%ERRORLEVEL%
+if %EXIT_CODE% equ 0 set EXIT_CODE=1
+if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
+exit /b %EXIT_CODE%
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/settings.gradle" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/settings.gradle"
new file mode 100644
index 0000000..ebf1ef8
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/settings.gradle"
@@ -0,0 +1 @@
+rootProject.name = 'spring'
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/Application.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/Application.java"
new file mode 100644
index 0000000..1712ec5
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/Application.java"
@@ -0,0 +1,15 @@
+package umc.spring;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+
+@SpringBootApplication
+@EnableJpaAuditing
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/ApiResponse.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/ApiResponse.java"
new file mode 100644
index 0000000..f9d8d4b
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/ApiResponse.java"
@@ -0,0 +1,44 @@
+package umc.spring.apiPayload;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyOrder;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import umc.spring.apiPayload.code.errorStatus.BaseErrorCode;
+import umc.spring.apiPayload.code.sucessStatus.BaseCode;
+import umc.spring.apiPayload.code.sucessStatus.SuccessStatus;
+
+@Getter
+@AllArgsConstructor
+@JsonPropertyOrder({"isSuccess", "code", "message", "result"}) //순서대로 JSON을 반환할 수 있도록 JSON은 순서가 중요하진 않지만 가독성 측면에서 유리
+public class ApiResponse {
+
+ @JsonProperty("isSuccess")
+ private final Boolean isSuccess;
+ private final String code;
+ private final String message;
+ @JsonInclude(JsonInclude.Include.NON_NULL) //Result에 대한 내용이 없으면 제외하고 반환을 한다.
+ private T result;
+
+
+ // 성공한 경우 응답 생성
+
+ public static ApiResponse onSuccess(T result){ //성공의 경우는 나눌 필요가 없음, OK 하나면 충분
+ return new ApiResponse<>(true, SuccessStatus._OK.getCode() , SuccessStatus._OK.getMessage(), result);
+ }
+ public static ApiResponse onSuccess(T result, SuccessStatus successStatus){ //혹시 모르니 OK 이외의 성공 상태를 전달하는 메서드
+ return new ApiResponse<>(true, successStatus.getCode() , successStatus.getMessage(), result);
+ }
+
+ //enum 코드를 받고 DTO를 통해 response객체를 만들어 응답을 반환
+ public static ApiResponse of(BaseErrorCode code, T result){ //실패의 경우는 다양하기 때문에 나누어야함 따라서 code 따라서 다름
+ return new ApiResponse<>(false, code.getReasonHttpStatus().getCode() , code.getReasonHttpStatus().getMessage(), result);
+ }
+
+ // 실패한 경우 응답 생성
+ // DTO를 통하지 않고 직접 응답 객체를 만드는 메서드
+ public static ApiResponse onFailure(String code, String message, T data){
+ return new ApiResponse<>(false, code, message, data);
+ }
+}
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/errorStatus/BaseErrorCode.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/errorStatus/BaseErrorCode.java"
new file mode 100644
index 0000000..4167988
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/errorStatus/BaseErrorCode.java"
@@ -0,0 +1,12 @@
+package umc.spring.apiPayload.code.errorStatus;
+
+import umc.spring.apiPayload.code.responseDTO.ErrorReasonDTO;
+
+
+
+public interface BaseErrorCode {
+
+ public ErrorReasonDTO getReason();
+
+ public ErrorReasonDTO getReasonHttpStatus();
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/errorStatus/ErrorStatus.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/errorStatus/ErrorStatus.java"
new file mode 100644
index 0000000..7148c90
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/errorStatus/ErrorStatus.java"
@@ -0,0 +1,55 @@
+package umc.spring.apiPayload.code.errorStatus;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springframework.http.HttpStatus;
+import umc.spring.apiPayload.code.responseDTO.ErrorReasonDTO;
+
+
+@Getter
+@AllArgsConstructor
+public enum ErrorStatus implements BaseErrorCode {
+ _INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "COMMON500", "서버 에러, 관리자에게 문의 바랍니다."),
+ _BAD_REQUEST(HttpStatus.BAD_REQUEST,"COMMON400","잘못된 요청입니다."),
+ _UNAUTHORIZED(HttpStatus.UNAUTHORIZED,"COMMON401","인증이 필요합니다."),
+ _FORBIDDEN(HttpStatus.FORBIDDEN, "COMMON403", "금지된 요청입니다."),
+ _INVALID_PAGE(HttpStatus.BAD_REQUEST, "COMMON411", "유효하지 않은 페이지 입니다."),
+ // User 관련 응답
+ USER_NOT_FOUND(HttpStatus.BAD_REQUEST, "USER4001", "사용자가 없습니다."),
+ NICKNAME_NOT_EXIST(HttpStatus.BAD_REQUEST, "USER4002", "닉네임은 필수 입니다."),
+
+ // Article Error
+ ARTICLE_NOT_FOUND(HttpStatus.NOT_FOUND, "ARTICLE4001", "게시글이 없습니다."),
+ // ~~~ 관련 응답 ....
+ TEMP_EXCEPTION(HttpStatus.BAD_REQUEST, "TEMP4001", "이거는 테스트"),
+ // FoodCategory 관련 응답
+ FOOD_CATEGORY_NOT_FOUND(HttpStatus.NOT_FOUND,"CATEGORY4001", "해당 음식 카테고리가 없습니다."),
+ // Store 관련 응답
+ STORE_NOT_FOUND(HttpStatus.NOT_FOUND,"STORE4001", "해당 가게가 없습니다."),
+ // Mission 관련 응답
+ MISSION_NOT_FOUND(HttpStatus.NOT_FOUND,"MISSION4001", "해당 미션이 없습니다."),
+ PASSED_DEADLINE_DATE(HttpStatus.BAD_REQUEST, "MISSION4002", "요청의 데드라인이 이미 지났습니다."),
+ ALREADY_ACCEPTED_MISSION(HttpStatus.BAD_REQUEST, "MISSION4003", "해당 사용자에게 이미 수락된 미션입니다.");
+ private final HttpStatus httpStatus;
+ private final String code;
+ private final String message;
+
+ @Override
+ public ErrorReasonDTO getReason() {
+ return ErrorReasonDTO.builder()
+ .message(message)
+ .code(code)
+ .isSuccess(false)
+ .build();
+ }
+
+ @Override
+ public ErrorReasonDTO getReasonHttpStatus() {
+ return ErrorReasonDTO.builder()
+ .message(message)
+ .code(code)
+ .isSuccess(false)
+ .httpStatus(httpStatus)
+ .build();
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/responseDTO/ErrorReasonDTO.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/responseDTO/ErrorReasonDTO.java"
new file mode 100644
index 0000000..6a07a9a
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/responseDTO/ErrorReasonDTO.java"
@@ -0,0 +1,15 @@
+package umc.spring.apiPayload.code.responseDTO;
+
+
+import lombok.Builder;
+import lombok.Getter;
+import org.springframework.http.HttpStatus;
+
+@Builder
+@Getter
+public class ErrorReasonDTO {
+ private final Boolean isSuccess;
+ private final String code;
+ private final String message;
+ private final HttpStatus httpStatus;
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/responseDTO/ReasonDTO.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/responseDTO/ReasonDTO.java"
new file mode 100644
index 0000000..d28087f
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/responseDTO/ReasonDTO.java"
@@ -0,0 +1,20 @@
+package umc.spring.apiPayload.code.responseDTO;
+
+
+import lombok.Builder;
+import lombok.Getter;
+import org.springframework.http.HttpStatus;
+
+
+/*
+ Response객체의 필드에 정보를 전달하기 위한 객체
+ */
+@Builder
+@Getter
+public class ReasonDTO {
+ private HttpStatus httpStatus;
+ private final Boolean isSuccess;
+ private final String code;
+ private final String message;
+
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/sucessStatus/BaseCode.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/sucessStatus/BaseCode.java"
new file mode 100644
index 0000000..6fe7d58
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/sucessStatus/BaseCode.java"
@@ -0,0 +1,10 @@
+package umc.spring.apiPayload.code.sucessStatus;
+
+import umc.spring.apiPayload.code.responseDTO.ReasonDTO;
+
+public interface BaseCode {
+
+ public ReasonDTO getReason();
+
+ public ReasonDTO getReasonHttpStatus();
+}
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/sucessStatus/SuccessStatus.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/sucessStatus/SuccessStatus.java"
new file mode 100644
index 0000000..f2c1157
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/apiPayload/code/sucessStatus/SuccessStatus.java"
@@ -0,0 +1,45 @@
+package umc.spring.apiPayload.code.sucessStatus;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import org.springframework.http.HttpStatus;
+import umc.spring.apiPayload.code.responseDTO.ReasonDTO;
+
+
+/*
+ 성공하는 코드정보를 담고, 코드에 대한 DTO객체를 build하여 생성하는 역할
+ 1. HTTP코드를 포함하여 생성하는 메소드 2. 포함하지 않고 생성하는 메소드, 두가지가 있음
+ */
+
+@Getter
+@AllArgsConstructor
+public enum SuccessStatus implements BaseCode {
+ _OK(HttpStatus.OK, "COMMON200", "성공"); //enum 타입도 생성자?를 지정할 수 있음
+
+ // 멤버 관련 응답
+
+ // ~~~ 관련 응답 ....
+ private final HttpStatus httpStatus;
+ private final String code;
+ private final String message;
+
+ @Override
+ public ReasonDTO getReason() {
+ return ReasonDTO.builder()
+ .message(message)
+ .code(code)
+ .isSuccess(true)
+ .build();
+
+ }
+ @Override
+ public ReasonDTO getReasonHttpStatus() {
+ return ReasonDTO.builder()
+ .message(message)
+ .code(code)
+ .isSuccess(true)
+ .httpStatus(httpStatus)
+ .build();
+
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/config/SwaggerConfig.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/config/SwaggerConfig.java"
new file mode 100644
index 0000000..fbabdad
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/config/SwaggerConfig.java"
@@ -0,0 +1,51 @@
+package umc.spring.config;
+
+//import io.swagger.v3.oas.models.Components;
+//import io.swagger.v3.oas.models.OpenAPI;
+//import io.swagger.v3.oas.models.info.Info;
+//import io.swagger.v3.oas.models.security.SecurityRequirement;
+//import io.swagger.v3.oas.models.security.SecurityScheme;
+//import io.swagger.v3.oas.models.servers.Server;
+//import org.springdoc.core.GroupedOpenApi;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+
+import io.swagger.v3.oas.models.Components;
+import io.swagger.v3.oas.models.OpenAPI;
+import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.security.SecurityRequirement;
+import io.swagger.v3.oas.models.security.SecurityScheme;
+import io.swagger.v3.oas.models.servers.Server;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+//같은 명의 어노테이션이 많아 import 잘하기
+@Configuration
+public class SwaggerConfig {
+
+ @Bean
+ public OpenAPI UMCstudyAPI() {
+ Info info = new Info()
+ .title("UMC Server WorkBook API")
+ .description("UMC Server WorkBook API 명세서")
+ .version("1.0.0");
+
+ String jwtSchemeName = "JWT TOKEN";
+ // API 요청헤더에 인증정보 포함
+ SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwtSchemeName);
+ // SecuritySchemes 등록
+ Components components = new Components()
+ .addSecuritySchemes(jwtSchemeName, new SecurityScheme()
+ .name(jwtSchemeName)
+ .type(SecurityScheme.Type.HTTP) // HTTP 방식
+ .scheme("bearer")
+ .bearerFormat("JWT"));
+
+ return new OpenAPI()
+ .addServersItem(new Server().url("/"))
+ .info(info)
+ .addSecurityItem(securityRequirement)
+ .components(components);
+ }
+}
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/MissionConverter.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/MissionConverter.java"
new file mode 100644
index 0000000..c9a0ba2
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/MissionConverter.java"
@@ -0,0 +1,57 @@
+package umc.spring.converter;
+
+import org.springframework.data.domain.Page;
+import umc.spring.domain.Mission;
+import umc.spring.domain.Review;
+import umc.spring.domain.mapping.UserMission;
+import umc.spring.web.dto.*;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class MissionConverter {
+ public static UserMissionResponseDTO.acceptResultDTO toAcceptResultDTO(UserMission userMission){
+ return UserMissionResponseDTO.acceptResultDTO.builder()
+ .userMissionId(userMission.getId())
+ .createdAt(LocalDateTime.now())
+ .build();
+ }
+
+ public static MissionResponseDTO.addResultDTO toAddResultDTO(Mission mission){
+ return MissionResponseDTO.addResultDTO.builder()
+ .missionId(mission.getId())
+ .createdAt(LocalDateTime.now())
+ .build();
+ }
+ public static Mission toMission(MissionRequestDTO.addDto request){
+
+ return Mission.builder()
+ .store(request.getStore())
+ .minimumAmount(request.getMinimumAmount())
+ .rewardPoint(request.getRewardPoint())
+ .deadline(request.getDeadline())
+ .build();
+ }
+
+ public static MissionResponseDTO.MissionPreviewDTO missionPreViewDTO(Mission mission){
+ return MissionResponseDTO.MissionPreviewDTO.builder()
+ .deadline(mission.getDeadline())
+ .minimum_amount(mission.getMinimumAmount())
+ .reward_point(mission.getRewardPoint())
+ .createdAt(mission.getCreatedAt().toLocalDate())
+ .build();
+ }
+ public static MissionResponseDTO.MissionPreViewListDTO missionPreViewListDTO(Page missionList){
+ List missionPreviewDTOList = missionList.stream()
+ .map(MissionConverter::missionPreViewDTO).collect(Collectors.toList());
+ return MissionResponseDTO.MissionPreViewListDTO.builder()
+ .isLast(missionList.isLast())
+ .isFist(missionList.isFirst())
+ .totalPage(missionList.getTotalPages())
+ .totalElements(missionList.getTotalElements())
+ .listSize(missionList.getSize())
+ .missionList(missionPreviewDTOList)
+ .build();
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/StoreConverter.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/StoreConverter.java"
new file mode 100644
index 0000000..cbea66c
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/StoreConverter.java"
@@ -0,0 +1,49 @@
+package umc.spring.converter;
+
+import org.springframework.data.domain.Page;
+import umc.spring.domain.Review;
+import umc.spring.web.dto.StoreRequestDTO;
+import umc.spring.web.dto.StoreResponseDTO;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class StoreConverter {
+ public static Review toReview(StoreRequestDTO.ReviewDto request){
+ return Review.builder()
+ // .user(request.getUser())
+ // .store(request.getStore())
+ .content(request.getContent())
+ .rate(request.getRate())
+ // .imagePath(request.getImagePath())
+ .build();
+ }
+
+ public static StoreResponseDTO.EnrollResultDTO toEnrollResultDTO(Review review){
+ return StoreResponseDTO.EnrollResultDTO.builder()
+ .reviewId(review.getId())
+ .createdAt(LocalDateTime.now())
+ .build();
+ }
+ public static StoreResponseDTO.ReviewPreviewDTO reviewPreViewDTO(Review review){
+ return StoreResponseDTO.ReviewPreviewDTO.builder()
+ .reviewer(review.getUser().getName())
+ .evaluation(review.getRate().toString())
+ .createdAt(review.getCreatedAt().toLocalDate())
+ .body(review.getContent())
+ .build();
+ }
+ public static StoreResponseDTO.ReviewPreViewListDTO reviewPreViewListDTO(Page reviewList){
+ List reviewPreviewDTOList = reviewList.stream()
+ .map(StoreConverter::reviewPreViewDTO).collect(Collectors.toList());
+ return StoreResponseDTO.ReviewPreViewListDTO.builder()
+ .isLast(reviewList.isLast())
+ .isFist(reviewList.isFirst())
+ .totalPage(reviewList.getTotalPages())
+ .totalElements(reviewList.getTotalElements())
+ .listSize(reviewList.getSize())
+ .reviewList(reviewPreviewDTOList)
+ .build();
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/TempConverter.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/TempConverter.java"
new file mode 100644
index 0000000..5e396d4
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/TempConverter.java"
@@ -0,0 +1,18 @@
+package umc.spring.converter;
+
+import umc.spring.web.dto.TempResponse;
+
+public class TempConverter {
+
+ public static TempResponse.TempTestDTO toTempTestDTO(){
+ return TempResponse.TempTestDTO.builder()
+ .testString("This is Test!")
+ .build();
+ }
+
+ public static TempResponse.TempExceptionDTO toTempExceptionDTO(Integer flag){
+ return TempResponse.TempExceptionDTO.builder()
+ .flag(flag)
+ .build();
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/UserConverter.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/UserConverter.java"
new file mode 100644
index 0000000..2ce05c4
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/UserConverter.java"
@@ -0,0 +1,43 @@
+package umc.spring.converter;
+
+import umc.spring.domain.User;
+import umc.spring.domain.enums.Gender;
+import umc.spring.web.dto.UserRequestDTO;
+import umc.spring.web.dto.UserResponseDTO;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+
+public class UserConverter {
+ public static UserResponseDTO.JoinResultDTO toJoinResultDTO(User User){
+ return UserResponseDTO.JoinResultDTO.builder()
+ .userId(User.getId())
+ .createdAt(LocalDateTime.now())
+ .build();
+ }
+
+ public static User toUser(UserRequestDTO.JoinDto request){
+
+ Gender gender = null;
+
+ switch (request.getGender()){
+ case 1:
+ gender = Gender.MALE;
+ break;
+ case 2:
+ gender = Gender.FEMALE;
+ break;
+ case 3:
+ gender = Gender.NONE;
+ break;
+ }
+
+ return User.builder()
+ .address(request.getAddress())
+ .specAddress(request.getSpecAddress())
+ .gender(gender)
+ .name(request.getName())
+ .userPreferList(new ArrayList<>())
+ .build();
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/UserPreferConverter.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/UserPreferConverter.java"
new file mode 100644
index 0000000..6f9044c
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/converter/UserPreferConverter.java"
@@ -0,0 +1,21 @@
+package umc.spring.converter;
+
+import umc.spring.domain.Category;
+import umc.spring.domain.mapping.UserPrefer;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class UserPreferConverter {
+
+ //음식 카테고리를 순회하며 UserPrefer 테이블에 인스턴스 생성
+ public static List toUserPreferList(List foodCategoryList){
+
+ return foodCategoryList.stream()
+ .map(foodCategory -> //
+ UserPrefer.builder()
+ .category(foodCategory)
+ .build()
+ ).collect(Collectors.toList());
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Category.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Category.java"
new file mode 100644
index 0000000..bb16f48
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Category.java"
@@ -0,0 +1,24 @@
+package umc.spring.domain;
+
+import lombok.*;
+import umc.spring.domain.common.BaseEntity;
+
+import javax.persistence.*;
+
+@Entity
+@Getter
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class Category extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @Column(nullable = false, unique = true, length = 20)
+ private String name;
+// 카테고리는 수정이 많이 일어나지 않으므로 양방향 x
+// @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
+// private List inquiryList = new ArrayList<>();
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Inquiry.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Inquiry.java"
new file mode 100644
index 0000000..cc42be6
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Inquiry.java"
@@ -0,0 +1,40 @@
+package umc.spring.domain;
+
+import lombok.*;
+import umc.spring.domain.common.BaseEntity;
+import umc.spring.domain.enums.InquiryStatus;
+import umc.spring.domain.enums.InquiryType;
+
+import javax.persistence.*;
+
+@Entity
+@Getter
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class Inquiry extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "user_id", nullable = false)
+ private User user;
+
+ @Enumerated(EnumType.STRING)
+ private InquiryType inquiryType;
+
+ @Column(length = 50)
+ private String title;
+
+ @Lob
+ private String content;
+
+ @Column(length = 100)
+ private String imagePath;
+
+ @Column(columnDefinition = "VARCHAR(15) DEFAULT 'NOT_RECEIVE'")
+ @Enumerated(EnumType.STRING)
+ private InquiryStatus inquiryStatus;
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Mission.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Mission.java"
new file mode 100644
index 0000000..98b6978
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Mission.java"
@@ -0,0 +1,44 @@
+package umc.spring.domain;
+
+import lombok.*;
+import umc.spring.domain.common.BaseEntity;
+import umc.spring.domain.mapping.UserMission;
+
+import javax.persistence.*;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@Getter
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class Mission extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ //각 미션은 식당이 있어야함
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "store_id", nullable = false)
+ private Store store;
+
+ private Integer minimumAmount;
+
+ private Integer rewardPoint;
+
+ private LocalDate deadline;
+
+ @OneToMany(mappedBy = "mission", cascade = CascadeType.ALL)
+ private List userMissionList = new ArrayList<>();
+
+ public void setStore(Store store){
+ if(this.store != null)
+ store.getMissionList().remove(this);
+ this.store = store;
+ store.getMissionList().add(this);
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Notification.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Notification.java"
new file mode 100644
index 0000000..52e864d
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Notification.java"
@@ -0,0 +1,33 @@
+package umc.spring.domain;
+
+import lombok.*;
+import umc.spring.domain.common.BaseEntity;
+
+import javax.persistence.*;
+
+@Entity
+@Getter
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class Notification extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ //각 알림은 유저가 있어야함
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "user_id", nullable = false)
+ private User user;
+
+ @Column(columnDefinition = "BIT(1) default 0")
+ private boolean read_check ; //알림확인 여부를 체크
+
+ @Column(length = 20)
+ private String title;
+
+ @Column(length = 1024)
+ private String content;
+
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Reply.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Reply.java"
new file mode 100644
index 0000000..e320fe0
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Reply.java"
@@ -0,0 +1,35 @@
+package umc.spring.domain;
+
+import lombok.*;
+import umc.spring.domain.common.BaseEntity;
+
+import javax.persistence.*;
+
+
+@Entity
+@Getter
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class Reply extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+
+ // 각 답변은 누가 달았는지, 어떤 리뷰에 달았는지가 정해져 있어야 함
+ @ManyToOne(fetch = FetchType.LAZY) //까먹어서 추가
+ @JoinColumn(name = "user_id", nullable = false)
+ private User user;
+
+ @OneToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "review_id", nullable = false)
+ private Review review;
+
+
+ @Lob
+ @Column(nullable = false)
+ private String content;
+
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Review.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Review.java"
new file mode 100644
index 0000000..03a1b28
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Review.java"
@@ -0,0 +1,60 @@
+package umc.spring.domain;
+
+import lombok.*;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import umc.spring.domain.common.BaseEntity;
+import umc.spring.domain.enums.Rate;
+
+import javax.persistence.*;
+import java.time.LocalDate;
+
+@Entity
+@Getter
+@DynamicInsert
+@DynamicUpdate
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class Review extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ //리뷰는 항상 어떤 유저가 썼는지 어떤 식당에 대해 썼는지가 정해져 있어야 함
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "user_id", nullable = false)
+ private User user;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "store_id", nullable = false)
+ private Store store;
+
+ @Column(columnDefinition = "VARCHAR(15) DEFAULT 'NOT_BAD'")
+ @Enumerated(EnumType.STRING) //enum타입 수정
+ private Rate rate;
+
+
+ @Column(nullable = false)
+ @Lob //65535바이트 이상 저장 가능, CLOB(Character Large Object)
+ private String content;
+
+ @Column(length = 100)
+ private String imagePath;
+
+ public void setUser(User user){
+ if(this.user != null)
+ this.user.getReviewList().remove(this);
+ this.user = user;
+ user.getReviewList().add(this);
+ }
+
+ public void setStore(Store store){
+ if(this.store != null)
+ this.store.getReviewList().remove(this);
+ this.store = store;
+ store.getReviewList().add(this);
+ }
+
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Store.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Store.java"
new file mode 100644
index 0000000..a1c2113
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/Store.java"
@@ -0,0 +1,42 @@
+package umc.spring.domain;
+
+import lombok.*;
+import umc.spring.domain.common.BaseEntity;
+import umc.spring.domain.enums.StoreStatus;
+
+import javax.persistence.*;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@Getter
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class Store extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "category_id")
+ private Category category;
+
+ @Column(nullable = false,length = 20)
+ private String name;
+
+ @Column(nullable = false,length = 20)
+ private String address;
+
+ @Column(columnDefinition = "VARCHAR(20) DEFAULT 'CLOSING'")
+ @Enumerated(EnumType.STRING)
+ private StoreStatus storeStatus;
+
+ @OneToMany(mappedBy = "store", cascade = CascadeType.ALL)
+ private List reviewList = new ArrayList<>();
+
+ @OneToMany(mappedBy = "store", cascade = CascadeType.ALL)
+ private List missionList = new ArrayList<>();
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/User.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/User.java"
new file mode 100644
index 0000000..eea4d6b
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/User.java"
@@ -0,0 +1,89 @@
+package umc.spring.domain;
+
+import lombok.*;
+import org.hibernate.annotations.ColumnDefault;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import umc.spring.domain.common.BaseEntity;
+import umc.spring.domain.enums.Gender;
+import umc.spring.domain.enums.SocialType;
+import umc.spring.domain.enums.Status;
+import umc.spring.domain.mapping.UserMission;
+import umc.spring.domain.mapping.UserPrefer;
+
+import javax.persistence.*;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Entity
+@Getter
+@DynamicUpdate //update, insert 시에 지정하지 않은 것에 대해 Null로 채워 보내지 않음
+@DynamicInsert // 값이 지장되지 않았을 때 동작하는 ColumnDefault가 동작하도록 할 수 있음
+@Builder // 모두 NULL로 채우면 일관성을 얻을 순 있음 -> 로딩 시점에 쿼리를 미리 생성해두고 재사용할 수 있습니다.
+ // 데이터베이스에 동일한 쿼리를 보내면 데이터베이스는 이전에 한 번 파싱된 쿼리를 재사용할 수 있습니다.
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class User extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @Column(nullable = false, length = 20)
+ private String name;
+
+ @Column(nullable = true, length = 20)
+ private String nickName;
+
+ @Column(columnDefinition ="VARCHAR(10)")
+ @Enumerated(EnumType.STRING)
+ private Gender gender;
+
+ @Column(columnDefinition = "DATE")
+ private LocalDate birthDate;
+
+ @Column(length = 50)
+ private String address;
+
+ @Column(length = 100)
+ private String specAddress;
+
+ @Column(length = 11)
+ private String phoneNumber;
+
+ @Column(length = 40)
+ private String email;
+
+ @Column(nullable = true)
+ @ColumnDefault("0")
+ private Integer point;
+
+ private LocalDate inactiveDate;
+
+ @Enumerated(EnumType.STRING)
+ private SocialType socialType;
+
+ @Column(columnDefinition = "VARCHAR(10) DEFAULT 'ACTIVE'")
+ @Enumerated(EnumType.STRING)
+ private Status status;
+
+ @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
+ private List inquiryList = new ArrayList<>();
+
+ @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
+ private List notificationList = new ArrayList<>();
+
+ @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
+ private List reviewList = new ArrayList<>();
+
+ @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
+ private List userMissionList = new ArrayList<>();
+
+ @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
+ private List replyList = new ArrayList<>();
+
+ @OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
+ private List userPreferList = new ArrayList<>();
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/common/BaseEntity.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/common/BaseEntity.java"
new file mode 100644
index 0000000..a4c52d5
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/common/BaseEntity.java"
@@ -0,0 +1,23 @@
+package umc.spring.domain.common;
+
+
+import lombok.Getter;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.EntityListeners;
+import javax.persistence.MappedSuperclass;
+import java.time.LocalDateTime;
+
+@Getter
+@EntityListeners(AuditingEntityListener.class)
+@MappedSuperclass
+public abstract class BaseEntity {
+ @CreatedDate
+ private LocalDateTime createdAt;
+
+ @LastModifiedBy
+ private LocalDateTime updatedAt;
+
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Gender.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Gender.java"
new file mode 100644
index 0000000..7bb0172
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Gender.java"
@@ -0,0 +1,5 @@
+package umc.spring.domain.enums;
+
+public enum Gender {
+ MALE, NONE, FEMALE
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/InquiryStatus.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/InquiryStatus.java"
new file mode 100644
index 0000000..40fdd81
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/InquiryStatus.java"
@@ -0,0 +1,5 @@
+package umc.spring.domain.enums;
+
+public enum InquiryStatus {
+ NOT_RECEIVE, RECEIVE, RESOLVE
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/InquiryType.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/InquiryType.java"
new file mode 100644
index 0000000..bab1ac6
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/InquiryType.java"
@@ -0,0 +1,5 @@
+package umc.spring.domain.enums;
+
+public enum InquiryType {
+ BUG, REPORT, ETC
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/MissionStatus.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/MissionStatus.java"
new file mode 100644
index 0000000..dabd8cd
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/MissionStatus.java"
@@ -0,0 +1,5 @@
+package umc.spring.domain.enums;
+
+public enum MissionStatus {
+ COMPLETE, CHALLENGING, EXPIRE
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Rate.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Rate.java"
new file mode 100644
index 0000000..321f7aa
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Rate.java"
@@ -0,0 +1,5 @@
+package umc.spring.domain.enums;
+
+public enum Rate {
+ VERY_GOOD, GOOD, NOT_BAD, BAD, VERY_BAD
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/SocialType.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/SocialType.java"
new file mode 100644
index 0000000..f0f1a09
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/SocialType.java"
@@ -0,0 +1,6 @@
+package umc.spring.domain.enums;
+
+public enum SocialType {
+ APPLE, GOOGLE, KAKAO, NAVER
+
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Status.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Status.java"
new file mode 100644
index 0000000..7e99776
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/Status.java"
@@ -0,0 +1,5 @@
+package umc.spring.domain.enums;
+
+public enum Status {
+ ACTIVE, INACTIVE
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/StoreStatus.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/StoreStatus.java"
new file mode 100644
index 0000000..bb5c57b
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/enums/StoreStatus.java"
@@ -0,0 +1,5 @@
+package umc.spring.domain.enums;
+
+public enum StoreStatus {
+ OPENING, CLOSING, OPEN_SOON, DAY_OFF
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/mapping/UserMission.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/mapping/UserMission.java"
new file mode 100644
index 0000000..752f73a
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/mapping/UserMission.java"
@@ -0,0 +1,58 @@
+package umc.spring.domain.mapping;
+
+import lombok.*;
+import umc.spring.domain.Mission;
+import umc.spring.domain.User;
+import umc.spring.domain.common.BaseEntity;
+import umc.spring.domain.enums.MissionStatus;
+
+import javax.persistence.*;
+
+@Entity
+@Getter
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class UserMission extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ //중간 테이블은 양쪽의 매핑정보가 null이면 안됨
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "mission_id", nullable = false)
+ private Mission mission;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "user_id", nullable = false)
+ private User user;
+
+
+ @Column(columnDefinition = "VARCHAR(15) DEFAULT 'NOT_COMPLETE'")
+ @Enumerated(EnumType.STRING)
+ private MissionStatus missionStatus;
+
+ public static UserMission createUserMission(User user, Mission mission){
+ UserMission userMission = new UserMission();
+ userMission.setUser(user);
+ userMission.setMission(mission);
+ userMission.setMissionStatus(MissionStatus.CHALLENGING);
+ return userMission;
+ }
+ public void setMissionStatus(MissionStatus missionStatus){
+ this.missionStatus = missionStatus;
+ }
+ public void setUser(User user){
+ if(this.user != null)
+ this.user.getUserMissionList().remove(this);
+ this.user = user;
+ user.getUserMissionList().add(this);
+ }
+ public void setMission(Mission mission){
+ if(this.mission != null)
+ this.mission.getUserMissionList().remove(this);
+ this.mission = mission;
+ mission.getUserMissionList().add(this);
+ }
+}
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/mapping/UserPrefer.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/mapping/UserPrefer.java"
new file mode 100644
index 0000000..a942d04
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/domain/mapping/UserPrefer.java"
@@ -0,0 +1,40 @@
+package umc.spring.domain.mapping;
+
+
+import lombok.*;
+import umc.spring.domain.Category;
+import umc.spring.domain.User;
+import umc.spring.domain.common.BaseEntity;
+
+import javax.persistence.*;
+
+@Entity
+@Getter
+@Builder
+@NoArgsConstructor(access = AccessLevel.PROTECTED)
+@AllArgsConstructor
+public class UserPrefer extends BaseEntity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "User_id")
+ private User user;
+
+ @ManyToOne(fetch = FetchType.LAZY)
+ @JoinColumn(name = "category_id")
+ private Category category;
+
+ //기존에 있던 user의 참조키중 자신에 대한 정보를 지우고, 매핑관계를 새로 설정
+ public void setUser(User user){
+ if(this.user != null)
+ this.user.getUserPreferList().remove(this);
+ this.user = user;
+ user.getUserPreferList().add(this);
+ }
+ public void setFoodCategory(Category foodCategory){
+ this.category = foodCategory;
+ }
+}
\ No newline at end of file
diff --git "a/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/exception/ExceptionAdvice.java" "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/exception/ExceptionAdvice.java"
new file mode 100644
index 0000000..12b5e0f
--- /dev/null
+++ "b/\354\232\260\354\212\244_\354\236\245\354\232\260\354\204\261/spring/src/main/java/umc/spring/exception/ExceptionAdvice.java"
@@ -0,0 +1,124 @@
+package umc.spring.exception;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.context.request.ServletWebRequest;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+import umc.spring.apiPayload.ApiResponse;
+import umc.spring.apiPayload.code.errorStatus.ErrorStatus;
+import umc.spring.apiPayload.code.responseDTO.ErrorReasonDTO;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolationException;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Optional;
+
+@Slf4j
+@RestControllerAdvice(annotations = {RestController.class, Service.class})
+public class ExceptionAdvice extends ResponseEntityExceptionHandler {
+
+
+ @ExceptionHandler(ConstraintViolationException.class)
+ public ResponseEntity