diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationController.kt
new file mode 100644
index 0000000..89163e7
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationController.kt
@@ -0,0 +1,33 @@
+package kr.co.vividnext.sodalive.member.stipulation
+
+import kr.co.vividnext.sodalive.common.ApiResponse
+import org.springframework.security.access.prepost.PreAuthorize
+import org.springframework.web.bind.annotation.GetMapping
+import org.springframework.web.bind.annotation.PostMapping
+import org.springframework.web.bind.annotation.RequestBody
+import org.springframework.web.bind.annotation.RequestMapping
+import org.springframework.web.bind.annotation.RestController
+
+@RestController
+@RequestMapping("/stplat")
+class StipulationController(private val service: StipulationService) {
+    @PostMapping
+    @PreAuthorize("hasRole('ADMIN')")
+    fun enrollment(@RequestBody request: StipulationDto) = ApiResponse.ok(
+        service.enrollment(request),
+        "등록되었습니다."
+    )
+
+    @PostMapping("/modify")
+    @PreAuthorize("hasRole('ADMIN')")
+    fun modify(@RequestBody request: StipulationModifyRequest) = ApiResponse.ok(
+        service.modify(request),
+        "수정되었습니다."
+    )
+
+    @GetMapping("/terms_of_service")
+    fun getTermsOfService() = ApiResponse.ok(service.getTermsOfService())
+
+    @GetMapping("/privacy_policy")
+    fun getPrivacyPolicy() = ApiResponse.ok(service.getPrivacyPolicy())
+}
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationDto.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationDto.kt
new file mode 100644
index 0000000..effec70
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationDto.kt
@@ -0,0 +1,11 @@
+package kr.co.vividnext.sodalive.member.stipulation
+
+data class StipulationDto(
+    val id: Long = 0,
+    val title: String,
+    val description: String
+) {
+    constructor(stipulation: Stipulation) : this(stipulation.id!!, stipulation.title, stipulation.description)
+
+    fun toEntity() = Stipulation(title, description)
+}
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationModifyRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationModifyRequest.kt
new file mode 100644
index 0000000..9e49c05
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationModifyRequest.kt
@@ -0,0 +1,6 @@
+package kr.co.vividnext.sodalive.member.stipulation
+
+data class StipulationModifyRequest(
+    val id: Long,
+    val description: String
+)
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationService.kt
new file mode 100644
index 0000000..617b071
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/stipulation/StipulationService.kt
@@ -0,0 +1,38 @@
+package kr.co.vividnext.sodalive.member.stipulation
+
+import kr.co.vividnext.sodalive.common.SodaException
+import kr.co.vividnext.sodalive.member.stipulation.StipulationIds.PRIVACY_POLICY_ID
+import kr.co.vividnext.sodalive.member.stipulation.StipulationIds.TERMS_OF_SERVICE_ID
+import org.springframework.data.repository.findByIdOrNull
+import org.springframework.stereotype.Service
+import org.springframework.transaction.annotation.Transactional
+
+@Service
+@Transactional(readOnly = true)
+class StipulationService(private val repository: StipulationRepository) {
+    fun enrollment(request: StipulationDto) {
+        repository.save(request.toEntity())
+    }
+
+    fun getTermsOfService(): StipulationDto {
+        val stipulation = repository.findByIdOrNull(TERMS_OF_SERVICE_ID)
+            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
+
+        return StipulationDto(stipulation)
+    }
+
+    fun getPrivacyPolicy(): StipulationDto {
+        val stipulation = repository.findByIdOrNull(PRIVACY_POLICY_ID)
+            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
+
+        return StipulationDto(stipulation)
+    }
+
+    @Transactional
+    fun modify(request: StipulationModifyRequest) {
+        val stipulation = repository.findByIdOrNull(request.id)
+            ?: throw SodaException("잘못된 요청입니다\n앱 종료 후 다시 시도해 주세요.")
+
+        stipulation.description = request.description
+    }
+}