{"id":37019,"date":"2024-11-01T09:54:07","date_gmt":"2024-11-01T09:54:07","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=37019"},"modified":"2024-11-01T11:42:35","modified_gmt":"2024-11-01T11:42:35","slug":"%d0%baotlin-android-app-development-course-using-authentication-features","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/37019\/","title":{"rendered":"\u041aotlin Android App Development Course, Using Authentication Features"},"content":{"rendered":"<p>Authentication is one of the essential elements in modern mobile applications. User-driven authentication is crucial for security and privacy. In this course, we will explain in detail how to implement authentication features in Android applications using Kotlin.<\/p>\n<h2>1. What is Authentication Functionality?<\/h2>\n<p>The authentication functionality refers to the process of verifying a user\u2019s identity and allowing only legitimate users to access specific features of the application. For example, a system that enables users to create accounts and log in falls under this category. The authentication process typically involves the following steps:<\/p>\n<ul>\n<li>Sign Up<\/li>\n<li>Login<\/li>\n<li>Logout<\/li>\n<li>Password Reset<\/li>\n<\/ul>\n<h2>2. Project Setup<\/h2>\n<p>Create a new project using Android Studio. Here, we will cover only the basic settings:<\/p>\n<ol>\n<li>Open Android Studio.<\/li>\n<li>Click &#8216;Start a new Android Studio project&#8217;.<\/li>\n<li>Select &#8216;Empty Activity&#8217; and click &#8216;Next&#8217;.<\/li>\n<li>Enter the project name and select &#8216;Kotlin&#8217; as the language.<\/li>\n<li>Finally, click Finish to create the project.<\/li>\n<\/ol>\n<h2>3. Adding Dependencies<\/h2>\n<p>We will use Firebase Authentication to implement the authentication functionality. Using Firebase makes it easy to implement authentication with email and password.<\/p>\n<p>Add the following dependency to the project&#8217;s <code>build.gradle(:app)<\/code> file:<\/p>\n<pre><code>implementation 'com.google.firebase:firebase-auth-ktx:21.0.1'<\/code><\/pre>\n<p>Then, set up Firebase in your project.<\/p>\n<ul>\n<li>Log in to the Firebase console and create a new project.<\/li>\n<li>Enable the Firebase Authentication service.<\/li>\n<li>Activate the email\/password authentication method.<\/li>\n<li>Download the google-services.json file and add it to the app directory.<\/li>\n<\/ul>\n<h2>4. Creating Layouts<\/h2>\n<p>Create the layouts for the login and signup screens in XML. Create <code>activity_login.xml<\/code> and <code>activity_signup.xml<\/code> files.<\/p>\n<h3>activity_login.xml<\/h3>\n<pre><code>&lt;LinearLayout\n    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\"\n    android:padding=\"16dp\"&gt;\n\n    &lt;EditText\n        android:id=\"@+id\/emailEditText\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Email\"\/&gt;\n\n    &lt;EditText\n        android:id=\"@+id\/passwordEditText\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Password\"\n        android:inputType=\"textPassword\"\/&gt;\n\n    &lt;Button\n        android:id=\"@+id\/loginButton\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Login\"\/&gt;\n\n&lt;\/LinearLayout&gt;<\/code><\/pre>\n<h3>activity_signup.xml<\/h3>\n<pre><code>&lt;LinearLayout\n    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\"\n    android:padding=\"16dp\"&gt;\n\n    &lt;EditText\n        android:id=\"@+id\/signupEmailEditText\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Email\"\/&gt;\n\n    &lt;EditText\n        android:id=\"@+id\/signupPasswordEditText\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:hint=\"Password\"\n        android:inputType=\"textPassword\"\/&gt;\n\n    &lt;Button\n        android:id=\"@+id\/signupButton\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:text=\"Sign Up\"\/&gt;\n\n&lt;\/LinearLayout&gt;<\/code><\/pre>\n<h2>5. Code Implementation<\/h2>\n<p>Now, we will implement login and signup functionality in the Android application.<\/p>\n<h3>LoginActivity.kt<\/h3>\n<pre><code>package com.example.authentication\n\nimport android.content.Intent\nimport android.os.Bundle\nimport android.widget.Button\nimport android.widget.EditText\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport com.google.firebase.auth.FirebaseAuth\n\nclass LoginActivity : AppCompatActivity() {\n\n    private lateinit var auth: FirebaseAuth\n    private lateinit var emailEditText: EditText\n    private lateinit var passwordEditText: EditText\n    private lateinit var loginButton: Button\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_login)\n\n        auth = FirebaseAuth.getInstance()\n        emailEditText = findViewById(R.id.emailEditText)\n        passwordEditText = findViewById(R.id.passwordEditText)\n        loginButton = findViewById(R.id.loginButton)\n\n        loginButton.setOnClickListener {\n            login()\n        }\n    }\n\n    private fun login() {\n        val email = emailEditText.text.toString()\n        val password = passwordEditText.text.toString()\n\n        if (email.isEmpty() || password.isEmpty()) {\n            Toast.makeText(this, \"Please enter email and password.\", Toast.LENGTH_SHORT).show()\n            return\n        }\n\n        auth.signInWithEmailAndPassword(email, password)\n            .addOnCompleteListener(this) { task -&gt;\n                if (task.isSuccessful) {\n                    Toast.makeText(this, \"Login Successful\", Toast.LENGTH_SHORT).show()\n                    startActivity(Intent(this, MainActivity::class.java))\n                } else {\n                    Toast.makeText(this, \"Login Failed: ${task.exception?.message}\", Toast.LENGTH_SHORT).show()\n                }\n            }\n    }\n}\n<\/code><\/pre>\n<h3>SignupActivity.kt<\/h3>\n<pre><code>package com.example.authentication\n\nimport android.content.Intent\nimport android.os.Bundle\nimport android.widget.Button\nimport android.widget.EditText\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport com.google.firebase.auth.FirebaseAuth\n\nclass SignupActivity : AppCompatActivity() {\n\n    private lateinit var auth: FirebaseAuth\n    private lateinit var signupEmailEditText: EditText\n    private lateinit var signupPasswordEditText: EditText\n    private lateinit var signupButton: Button\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_signup)\n\n        auth = FirebaseAuth.getInstance()\n        signupEmailEditText = findViewById(R.id.signupEmailEditText)\n        signupPasswordEditText = findViewById(R.id.signupPasswordEditText)\n        signupButton = findViewById(R.id.signupButton)\n\n        signupButton.setOnClickListener {\n            signup()\n        }\n    }\n\n    private fun signup() {\n        val email = signupEmailEditText.text.toString()\n        val password = signupPasswordEditText.text.toString()\n\n        if (email.isEmpty() || password.isEmpty()) {\n            Toast.makeText(this, \"Please enter email and password.\", Toast.LENGTH_SHORT).show()\n            return\n        }\n\n        auth.createUserWithEmailAndPassword(email, password)\n            .addOnCompleteListener(this) { task -&gt;\n                if (task.isSuccessful) {\n                    Toast.makeText(this, \"Signup Successful\", Toast.LENGTH_SHORT).show()\n                    startActivity(Intent(this, LoginActivity::class.java))\n                } else {\n                    Toast.makeText(this, \"Signup Failed: ${task.exception?.message}\", Toast.LENGTH_SHORT).show()\n                }\n            }\n    }\n}\n<\/code><\/pre>\n<h2>6. Implementing Password Reset Functionality<\/h2>\n<p>You can add functionality that allows users to reset their passwords in case they forget them. This functionality is done by sending a password reset link to the registered email.<\/p>\n<h3>PasswordResetActivity.kt<\/h3>\n<pre><code>package com.example.authentication\n\nimport android.os.Bundle\nimport android.widget.Button\nimport android.widget.EditText\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport com.google.firebase.auth.FirebaseAuth\n\nclass PasswordResetActivity : AppCompatActivity() {\n\n    private lateinit var auth: FirebaseAuth\n    private lateinit var emailEditText: EditText\n    private lateinit var resetButton: Button\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setContentView(R.layout.activity_password_reset)\n\n        auth = FirebaseAuth.getInstance()\n        emailEditText = findViewById(R.id.emailEditText)\n        resetButton = findViewById(R.id.resetButton)\n\n        resetButton.setOnClickListener {\n            resetPassword()\n        }\n    }\n\n    private fun resetPassword() {\n        val email = emailEditText.text.toString()\n\n        if (email.isEmpty()) {\n            Toast.makeText(this, \"Please enter your email.\", Toast.LENGTH_SHORT).show()\n            return\n        }\n\n        auth.sendPasswordResetEmail(email)\n            .addOnCompleteListener(this) { task -&gt;\n                if (task.isSuccessful) {\n                    Toast.makeText(this, \"Password reset link has been sent.\", Toast.LENGTH_SHORT).show()\n                } else {\n                    Toast.makeText(this, \"Failed to send: ${task.exception?.message}\", Toast.LENGTH_SHORT).show()\n                }\n            }\n    }\n}\n<\/code><\/pre>\n<h2>7. Optimization and Security<\/h2>\n<p>It is advisable to follow certain recommendations to protect data in authentication functionality:<\/p>\n<ul>\n<li>Always store passwords securely. Firebase encrypts passwords for storage.<\/li>\n<li>Use HTTPS to protect data transmission.<\/li>\n<li>Maintain user login status securely through session management.<\/li>\n<li>Identify and resolve vulnerabilities through security audits and reviews.<\/li>\n<\/ul>\n<h2>8. Conclusion<\/h2>\n<p>In this course, we explored how to implement authentication features using Firebase Authentication with Kotlin. Through this, we were able to implement user registration, login, and password reset functionalities. This example is useful for structuring a basic authentication process when developing real applications. You can add more features to build a more robust user authentication system.<\/p>\n<p>Now you have learned how to integrate authentication functionality into Android applications using Kotlin. The next step could be to integrate other authentication methods, such as Google OAuth or Facebook login.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Authentication is one of the essential elements in modern mobile applications. User-driven authentication is crucial for security and privacy. In this course, we will explain in detail how to implement authentication features in Android applications using Kotlin. 1. What is Authentication Functionality? The authentication functionality refers to the process of verifying a user\u2019s identity and &hellip; <a href=\"https:\/\/atmokpo.com\/w\/37019\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;\u041aotlin Android App Development Course, Using Authentication Features&#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-37019","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>\u041aotlin Android App Development Course, Using Authentication Features - \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\/37019\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u041aotlin Android App Development Course, Using Authentication Features - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Authentication is one of the essential elements in modern mobile applications. User-driven authentication is crucial for security and privacy. In this course, we will explain in detail how to implement authentication features in Android applications using Kotlin. 1. What is Authentication Functionality? The authentication functionality refers to the process of verifying a user\u2019s identity and &hellip; \ub354 \ubcf4\uae30 &quot;\u041aotlin Android App Development Course, Using Authentication Features&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/37019\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:54:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:42:35+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\/37019\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37019\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"\u041aotlin Android App Development Course, Using Authentication Features\",\"datePublished\":\"2024-11-01T09:54:07+00:00\",\"dateModified\":\"2024-11-01T11:42:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37019\/\"},\"wordCount\":441,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Kotlin Android app development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/37019\/\",\"url\":\"https:\/\/atmokpo.com\/w\/37019\/\",\"name\":\"\u041aotlin Android App Development Course, Using Authentication Features - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:54:07+00:00\",\"dateModified\":\"2024-11-01T11:42:35+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/37019\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/37019\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/37019\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u041aotlin Android App Development Course, Using Authentication Features\"}]},{\"@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":"\u041aotlin Android App Development Course, Using Authentication Features - \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\/37019\/","og_locale":"ko_KR","og_type":"article","og_title":"\u041aotlin Android App Development Course, Using Authentication Features - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Authentication is one of the essential elements in modern mobile applications. User-driven authentication is crucial for security and privacy. In this course, we will explain in detail how to implement authentication features in Android applications using Kotlin. 1. What is Authentication Functionality? The authentication functionality refers to the process of verifying a user\u2019s identity and &hellip; \ub354 \ubcf4\uae30 \"\u041aotlin Android App Development Course, Using Authentication Features\"","og_url":"https:\/\/atmokpo.com\/w\/37019\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:54:07+00:00","article_modified_time":"2024-11-01T11:42:35+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\/37019\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/37019\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"\u041aotlin Android App Development Course, Using Authentication Features","datePublished":"2024-11-01T09:54:07+00:00","dateModified":"2024-11-01T11:42:35+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/37019\/"},"wordCount":441,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Kotlin Android app development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/37019\/","url":"https:\/\/atmokpo.com\/w\/37019\/","name":"\u041aotlin Android App Development Course, Using Authentication Features - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:54:07+00:00","dateModified":"2024-11-01T11:42:35+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/37019\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/37019\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/37019\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"\u041aotlin Android App Development Course, Using Authentication Features"}]},{"@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\/37019","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=37019"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37019\/revisions"}],"predecessor-version":[{"id":37020,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/37019\/revisions\/37020"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=37019"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=37019"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=37019"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}