{"id":37057,"date":"2024-11-01T09:54:28","date_gmt":"2024-11-01T09:54:28","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=37057"},"modified":"2024-11-01T12:59:16","modified_gmt":"2024-11-01T12:59:16","slug":"%ec%bd%94%ed%8b%80%eb%a6%b0-%ec%95%88%eb%93%9c%eb%a1%9c%ec%9d%b4%eb%93%9c-%ec%95%b1-%ea%b0%9c%eb%b0%9c-%ea%b0%95%ec%a2%8c-%ed%83%9c%ec%8a%a4%ed%81%ac-%ea%b4%80%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/37057\/","title":{"rendered":"Kotlin Android app development course, task management"},"content":{"rendered":"<p><body><\/p>\n<article>\n<p>Hello! This time, as part of a series of lectures on Android app development using Kotlin, we will create a task management application. This application will provide users with the ability to manage their to-do list and will help in learning basic CRUD (Create, Read, Update, Delete) operations.<\/p>\n<h2>1. Project Setup<\/h2>\n<p>First, we need to set up a new Android project. Open Android Studio and follow these steps:<\/p>\n<ul>\n<li>Click on <strong>New Project<\/strong>.<\/li>\n<li>Select <strong>Empty Activity<\/strong> and click <strong>Next<\/strong>.<\/li>\n<li>Enter &#8216;TaskManager&#8217; in Project Name and set <strong>Language<\/strong> to <strong>Kotlin<\/strong>.<\/li>\n<li>Finally, click on <strong>Finish<\/strong>.<\/li>\n<\/ul>\n<h2>2. Define Data Model<\/h2>\n<p>Define a data model class called <code>Task<\/code> that represents a task. This class will have properties for the task&#8217;s title, description, and completion status:<\/p>\n<pre><code>data class Task(\n    var id: Long = 0,\n    var title: String,\n    var description: String,\n    var isCompleted: Boolean = false\n)<\/code><\/pre>\n<h2>3. Design User Interface<\/h2>\n<p>The basic user interface of the task management application consists of the following elements:<\/p>\n<ul>\n<li>A RecyclerView that displays the list of tasks<\/li>\n<li>A button to add a new task<\/li>\n<li>Options to edit and delete tasks<\/li>\n<\/ul>\n<p>First, we modify the <code>activity_main.xml<\/code> file to set up the user interface:<\/p>\n<pre><code>&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\"&gt;\n\n    &lt;Button\n        android:id=\"@+id\/btn_add_task\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Add New Task\"\/&gt;\n\n    &lt;androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id\/recycler_view\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"0dp\"\n        android:layout_weight=\"1\"\/&gt;\n\n&lt;\/LinearLayout&gt;<\/code><\/pre>\n<h2>4. Setup RecyclerView<\/h2>\n<p>We display the list of tasks using RecyclerView. Next, we create a <code>TaskAdapter<\/code> class to show the task items in a list format:<\/p>\n<pre><code>class TaskAdapter(private val tasks: List<task>) : RecyclerView.Adapter<taskadapter.taskviewholder>() {\n\n    inner class TaskViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {\n        val taskTitle: TextView = itemView.findViewById(R.id.task_title)\n        val taskDescription: TextView = itemView.findViewById(R.id.task_description)\n        val taskStatus: CheckBox = itemView.findViewById(R.id.task_status)\n    }\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TaskViewHolder {\n        val view = LayoutInflater.from(parent.context).inflate(R.layout.task_item, parent, false)\n        return TaskViewHolder(view)\n    }\n\n    override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {\n        val task = tasks[position]\n        holder.taskTitle.text = task.title\n        holder.taskDescription.text = task.description\n        holder.taskStatus.isChecked = task.isCompleted\n\n        holder.taskStatus.setOnCheckedChangeListener { _, isChecked ->\n            task.isCompleted = isChecked\n        }\n    }\n\n    override fun getItemCount(): Int {\n        return tasks.size\n    }\n}<\/taskadapter.taskviewholder><\/task><\/code><\/pre>\n<h3>4.1. Create task_item.xml Layout<\/h3>\n<p>Create the <code>task_item.xml<\/code> file for each item in the RecyclerView as follows:<\/p>\n<pre><code>&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"&gt;\n\n    &lt;TextView\n        android:id=\"@+id\/task_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"18sp\"\/&gt;\n\n    &lt;TextView\n        android:id=\"@+id\/task_description\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:textSize=\"14sp\"\/&gt;\n\n    &lt;CheckBox\n        android:id=\"@+id\/task_status\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\/&gt;\n\n&lt;\/LinearLayout&gt;<\/code><\/pre>\n<h2>5. Implement Add and Delete Task Features<\/h2>\n<p>We will implement the functionality to add new tasks and delete existing ones. Add the following code in <code>MainActivity<\/code>:<\/p>\n<pre><code>class MainActivity : AppCompatActivity() {\n\n    private val taskList = mutableListOf<task>()\n    private lateinit var taskAdapter: TaskAdapter\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_main)\n\n        taskAdapter = TaskAdapter(taskList)\n        findViewById<recyclerview>(R.id.recycler_view).apply {\n            layoutManager = LinearLayoutManager(this@MainActivity)\n            adapter = taskAdapter\n        }\n\n        findViewById<button>(R.id.btn_add_task).setOnClickListener {\n            showAddTaskDialog()\n        }\n    }\n\n    private fun showAddTaskDialog() {\n        val dialogView = LayoutInflater.from(this).inflate(R.layout.dialog_add_task, null)\n        val taskTitleInput = dialogView.findViewById<edittext>(R.id.task_title_input)\n        val taskDescriptionInput = dialogView.findViewById<edittext>(R.id.task_description_input)\n\n        AlertDialog.Builder(this)\n            .setTitle(\"Add New Task\")\n            .setView(dialogView)\n            .setPositiveButton(\"Add\") { _, _ ->\n                val title = taskTitleInput.text.toString()\n                val description = taskDescriptionInput.text.toString()\n                val task = Task(title = title, description = description)\n                taskList.add(task)\n                taskAdapter.notifyItemInserted(taskList.size - 1)\n            }\n            .setNegativeButton(\"Cancel\", null)\n            .show()\n    }\n}<\/edittext><\/edittext><\/button><\/recyclerview><\/task><\/code><\/pre>\n<h3>5.1. Create Task Add Dialog Layout<\/h3>\n<p>Create the <code>dialog_add_task.xml<\/code> file with the following content:<\/p>\n<pre><code>&lt;LinearLayout xmlns:android=\"http:\/\/schemas.android.com\/apk\/res\/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"wrap_content\"\n    android:orientation=\"vertical\"&gt;\n\n    &lt;EditText\n        android:id=\"@+id\/task_title_input\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Task Title\"\/&gt;\n\n    &lt;EditText\n        android:id=\"@+id\/task_description_input\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Task Description\"\/&gt;\n\n&lt;\/LinearLayout&gt;<\/code><\/pre>\n<h2>6. Manage Data Storage<\/h2>\n<p>We will use the Room database to maintain the task list even after the app is restarted. Using Room allows us to easily store and manage objects in an SQLite database. We will proceed with the setup for this process:<\/p>\n<ul>\n<li>Add Room dependencies to the Gradle file:<\/li>\n<\/ul>\n<pre><code>dependencies {\n    implementation \"androidx.room:room-runtime:2.4.1\"\n    kapt \"androidx.room:room-compiler:2.4.1\"\n}<\/code><\/pre>\n<h3>6.1. Define Room Entity<\/h3>\n<p>We define an entity for the Room database using a new <code>TaskEntity<\/code> class:<\/p>\n<pre><code>@Entity(tableName = \"tasks\")\ndata class TaskEntity(\n    @PrimaryKey(autoGenerate = true) val id: Long = 0,\n    val title: String,\n    val description: String,\n    val isCompleted: Boolean = false\n)<\/code><\/pre>\n<h3>6.2. Define DAO Interface<\/h3>\n<p>We define a Data Access Object (DAO) interface to interact with the Room database:<\/p>\n<pre><code>@Dao\ninterface TaskDao {\n    @Insert\n    suspend fun insert(task: TaskEntity)\n\n    @Query(\"SELECT * FROM tasks\")\n    suspend fun getAllTasks(): List<taskentity>\n\n    @Delete\n    suspend fun delete(task: TaskEntity)\n}<\/taskentity><\/code><\/pre>\n<h3>6.3. Define Database Class<\/h3>\n<p>We define a database class that inherits from Room Database:<\/p>\n<pre><code>@Database(entities = [TaskEntity::class], version = 1)\nabstract class AppDatabase : RoomDatabase() {\n    abstract fun taskDao(): TaskDao\n}<\/code><\/pre>\n<h3>6.4. Initialize Database<\/h3>\n<p>Add logic to the main activity to initialize the database and load tasks:<\/p>\n<pre><code>private lateinit var db: AppDatabase\n\noverride fun onCreate(savedInstanceState: Bundle?) {\n    super.onCreate(savedInstanceState)\n    setContentView(R.layout.activity_main)\n\n    db = Room.databaseBuilder(applicationContext, AppDatabase::class.java, \"task-database\").build()\n\n    \/\/ Load tasks\n    loadTasks()\n}\n\nprivate fun loadTasks() {\n    CoroutineScope(Dispatchers.IO).launch {\n        val tasks = db.taskDao().getAllTasks()\n        taskList.clear()\n        taskList.addAll(tasks.map { Task(it.id, it.title, it.description, it.isCompleted) })\n        runOnUiThread { taskAdapter.notifyDataSetChanged() }\n    }\n}<\/code><\/pre>\n<h2>7. Implement Task Deletion Feature<\/h2>\n<p>We implement functionality that allows users to delete tasks. Add the following code:<\/p>\n<pre><code>override fun onBindViewHolder(holder: TaskViewHolder, position: Int) {\n    \/\/ Maintain existing code\n\n    holder.itemView.setOnLongClickListener {\n        deleteTask(task)\n        true\n    }\n}\n\nprivate fun deleteTask(task: Task) {\n    CoroutineScope(Dispatchers.IO).launch {\n        db.taskDao().delete(TaskEntity(task.id, task.title, task.description, task.isCompleted))\n        runOnUiThread {\n            taskList.remove(task)\n            taskAdapter.notifyDataSetChanged()\n        }\n    }\n}<\/code><\/pre>\n<h2>8. Conclusion and Additional Improvements<\/h2>\n<p>With this, the basic structure and functionality of your task management application are complete! This application provides users with the ability to add, edit, and delete tasks from their list. You might consider several additional improvements, including:<\/p>\n<ul>\n<li>Adding a feature to display the date when a task was completed<\/li>\n<li>Adding the ability to set task priorities<\/li>\n<li>Adding search and filter functionality for tasks<\/li>\n<li>Improving design for better UI\/UX<\/li>\n<\/ul>\n<p>Creating your own task management application using Kotlin and Android Studio will be a great learning experience. I hope this tutorial has been helpful. If you have any questions or need additional information, please leave a comment!<\/p>\n<\/article>\n<p><\/body><\/p>\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! This time, as part of a series of lectures on Android app development using Kotlin, we will create a task management application. This application will provide users with the ability to manage their to-do list and will help in learning basic CRUD (Create, Read, Update, Delete) operations. 1. Project Setup First, we need to &hellip; <a href=\"https:\/\/atmokpo.com\/w\/37057\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Kotlin Android app development course, task management&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[143],"tags":[],"class_list":["post-37057","post","type-post","status-publish","format-standard","hentry","category-kotlin-android-app-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kotlin Android app development course, task management - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/37057\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kotlin Android app development course, task management - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! This time, as part of a series of lectures on Android app development using Kotlin, we will create a task management application. This application will provide users with the ability to manage their to-do list and will help in learning basic CRUD (Create, Read, Update, Delete) operations. 1. Project Setup First, we need to &hellip; \ub354 \ubcf4\uae30 &quot;Kotlin Android app development course, task management&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/37057\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:54:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T12:59:16+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/37057\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37057\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Kotlin Android app development course, task management\",\"datePublished\":\"2024-11-01T09:54:28+00:00\",\"dateModified\":\"2024-11-01T12:59:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37057\/\"},\"wordCount\":487,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Kotlin Android app development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/37057\/\",\"url\":\"https:\/\/atmokpo.com\/w\/37057\/\",\"name\":\"Kotlin Android app development course, task management - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:54:28+00:00\",\"dateModified\":\"2024-11-01T12:59:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37057\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/37057\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/37057\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin Android app development course, task management\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kotlin Android app development course, task management - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/37057\/","og_locale":"ko_KR","og_type":"article","og_title":"Kotlin Android app development course, task management - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! This time, as part of a series of lectures on Android app development using Kotlin, we will create a task management application. This application will provide users with the ability to manage their to-do list and will help in learning basic CRUD (Create, Read, Update, Delete) operations. 1. Project Setup First, we need to &hellip; \ub354 \ubcf4\uae30 \"Kotlin Android app development course, task management\"","og_url":"https:\/\/atmokpo.com\/w\/37057\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:54:28+00:00","article_modified_time":"2024-11-01T12:59:16+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"6\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/37057\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/37057\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Kotlin Android app development course, task management","datePublished":"2024-11-01T09:54:28+00:00","dateModified":"2024-11-01T12:59:16+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/37057\/"},"wordCount":487,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Kotlin Android app development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/37057\/","url":"https:\/\/atmokpo.com\/w\/37057\/","name":"Kotlin Android app development course, task management - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:54:28+00:00","dateModified":"2024-11-01T12:59:16+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/37057\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/37057\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/37057\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Kotlin Android app development course, task management"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37057","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=37057"}],"version-history":[{"count":2,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37057\/revisions"}],"predecessor-version":[{"id":38127,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37057\/revisions\/38127"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=37057"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=37057"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=37057"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}