{"id":33021,"date":"2024-11-01T09:13:10","date_gmt":"2024-11-01T09:13:10","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33021"},"modified":"2024-11-01T11:29:18","modified_gmt":"2024-11-01T11:29:18","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-oauth2-adding-author-to-post","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33021\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post"},"content":{"rendered":"<p><body><\/p>\n<p>Hello! In this article, we will take a detailed look at how to perform <strong>backend development<\/strong> using <strong>Spring Boot<\/strong>. In particular, we will cover how to implement user authentication using <strong>OAuth2<\/strong> and how to add author information to posts created by users.<\/p>\n<h2>1. What is Spring Boot?<\/h2>\n<p>Spring Boot is a <strong>framework<\/strong> that minimizes complex setup and enables rapid application development. It is based on the Spring framework and includes commonly used libraries and configurations, allowing for very efficient development of web applications.<\/p>\n<h3>1.1. Advantages of Spring Boot<\/h3>\n<ul>\n<li>It allows you to get started quickly and easily with the provided starter dependencies.<\/li>\n<li>The auto-configuration feature reduces complex setups.<\/li>\n<li>It can be run without separate server configurations through its embedded server.<\/li>\n<li>Development is possible even without a deep understanding of Spring.<\/li>\n<\/ul>\n<h2>2. What is OAuth2?<\/h2>\n<p><strong>OAuth2<\/strong> is an <strong>authentication and authorization protocol<\/strong> that helps resource owners grant third-party applications access to their resources. It makes it easy to implement user authentication in various environments, such as web applications and mobile applications.<\/p>\n<h3>2.1. Key Components of OAuth2<\/h3>\n<ul>\n<li><strong>Resource Owner<\/strong>: The user who grants access to a protected resource.<\/li>\n<li><strong>Client<\/strong>: The application that accesses the resource on behalf of the resource owner.<\/li>\n<li><strong>Authorization Server<\/strong>: The server that handles authentication and issues tokens.<\/li>\n<li><strong>Resource Server<\/strong>: The server that stores the protected resources.<\/li>\n<\/ul>\n<h2>3. Project Setup<\/h2>\n<p>To start developing a project using Spring Boot, we will use <strong>Spring Initializr<\/strong>. Please select the following dependencies:<\/p>\n<ul>\n<li>Spring Web<\/li>\n<li>Spring Security<\/li>\n<li>Spring Data JPA<\/li>\n<li>H2 Database (for testing purposes)<\/li>\n<li>OAuth2 Client<\/li>\n<\/ul>\n<p>After creating the project, add the necessary libraries through Maven or Gradle.<\/p>\n<h3>3.1. Adding Key Dependencies (Example of pom.xml)<\/h3>\n<pre><code>\n&lt;dependencies&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-boot-starter-security&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-boot-starter-data-jpa&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;com.h2database&lt;\/groupId&gt;\n        &lt;artifactId&gt;h2&lt;\/artifactId&gt;\n        &lt;scope&gt;runtime&lt;\/scope&gt;\n    &lt;\/dependency&gt;\n    &lt;dependency&gt;\n        &lt;groupId&gt;org.springframework.security.oauth.boot&lt;\/groupId&gt;\n        &lt;artifactId&gt;spring-security-oauth2-autoconfigure&lt;\/artifactId&gt;\n    &lt;\/dependency&gt;\n&lt;\/dependencies&gt;\n<\/code><\/pre>\n<h2>4. OAuth2 Configuration for User Authentication<\/h2>\n<h3>4.1. application.yml Configuration<\/h3>\n<p>Configure the client information for the external service (e.g., Google, GitHub, etc.) that will use OAuth2 in the <code>application.yml<\/code> file.<\/p>\n<pre><code>\nspring:\n  security:\n    oauth2:\n      client:\n        registration:\n          google:\n            client-id: YOUR_CLIENT_ID\n            client-secret: YOUR_CLIENT_SECRET\n            scope: profile, email\n        provider:\n          google:\n            authorization-uri: https:\/\/accounts.google.com\/o\/oauth2\/auth\n            token-uri: https:\/\/oauth2.googleapis.com\/token\n            user-info-uri: https:\/\/www.googleapis.com\/userinfo\/v2\/me\n<\/code><\/pre>\n<h3>4.2. Setting Up Security Configuration<\/h3>\n<p>Configure Spring Security to implement the OAuth2 login feature.<\/p>\n<pre><code>\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.security.config.annotation.web.builders.HttpSecurity;\nimport org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\nimport org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\n\n@Configuration\n@EnableWebSecurity\npublic class SecurityConfig extends WebSecurityConfigurerAdapter {\n    @Override\n    protected void configure(HttpSecurity http) throws Exception {\n        http\n            .authorizeRequests(authorizeRequests -&gt;\n                authorizeRequests\n                    .antMatchers(\"\/\", \"\/login\", \"\/perform_login\").permitAll()\n                    .anyRequest().authenticated()\n            )\n            .oauth2Login(oauth2 -&gt; oauth2\n                .loginPage(\"\/login\")\n            );\n    }\n}\n<\/code><\/pre>\n<h2>5. Implementing Login and Logout Features<\/h2>\n<h3>5.1. Creating a Custom Login Page<\/h3>\n<p>Create a custom login page using HTML and CSS. Here is an example:<\/p>\n<pre><code>\n&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n    &lt;meta charset=\"UTF-8\"&gt;\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n    &lt;title&gt;Login Page&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Login Page&lt;\/h1&gt;\n    &lt;a href=\"\/oauth2\/authorization\/google\"&gt;Login with Google&lt;\/a&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/code><\/pre>\n<h3>5.2. Handling Logout<\/h3>\n<p>To configure the logout functionality, modify the <code>SecurityConfig<\/code> as follows.<\/p>\n<pre><code>\n@Override\nprotected void configure(HttpSecurity http) throws Exception {\n    http\n        .authorizeRequests(authorizeRequests -&gt;\n            authorizeRequests\n                .antMatchers(\"\/\", \"\/login\", \"\/perform_login\").permitAll()\n                .anyRequest().authenticated()\n        )\n        .oauth2Login(oauth2 -&gt; oauth2\n            .loginPage(\"\/login\")\n        )\n        .logout(logout -&gt; logout\n            .logoutUrl(\"\/logout\")\n            .logoutSuccessUrl(\"\/login?logout\")\n        );\n}\n<\/code><\/pre>\n<h2>6. Implementing the Writing Feature<\/h2>\n<p>Now, we will implement the functionality to save posts created by users in the database.<\/p>\n<h3>6.1. Creating the Entity Class<\/h3>\n<p>Create an Entity class for the post (including the author).<\/p>\n<pre><code>\nimport javax.persistence.*;\n\n@Entity\npublic class Post {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    private String title;\n    private String content;\n\n    @ManyToOne\n    @JoinColumn(name = \"author_id\")\n    private User author;\n\n    \/\/ Getters and Setters\n}\n<\/code><\/pre>\n<h3>6.2. Creating the User Entity<\/h3>\n<pre><code>\nimport javax.persistence.*;\n\n@Entity\npublic class User {\n    @Id\n    @GeneratedValue(strategy = GenerationType.IDENTITY)\n    private Long id;\n\n    private String username;\n    private String email;\n\n    \/\/ Getters and Setters\n}\n<\/code><\/pre>\n<h3>6.3. Creating Repository and Service<\/h3>\n<p>Create Repository and Service classes for writing posts.<\/p>\n<pre><code>\n\/\/ PostRepository.java\nimport org.springframework.data.jpa.repository.JpaRepository;\n\npublic interface PostRepository extends JpaRepository&lt;Post, Long&gt; {\n}\n\n\/\/ PostService.java\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport java.util.List;\n\n@Service\npublic class PostService {\n    @Autowired\n    private PostRepository postRepository;\n\n    public List&lt;Post&gt; findAll() {\n        return postRepository.findAll();\n    }\n\n    public Post save(Post post) {\n        return postRepository.save(post);\n    }\n}\n<\/code><\/pre>\n<h3>6.4. Creating the Controller<\/h3>\n<p>Create a Controller so that users can write and view posts.<\/p>\n<pre><code>\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.web.bind.annotation.*;\n\nimport java.util.List;\n\n@RestController\n@RequestMapping(\"\/posts\")\npublic class PostController {\n    @Autowired\n    private PostService postService;\n\n    @GetMapping\n    public List&lt;Post&gt; getAllPosts() {\n        return postService.findAll();\n    }\n\n    @PostMapping\n    public Post createPost(@RequestBody Post post) {\n        return postService.save(post);\n    }\n}\n<\/code><\/pre>\n<h2>7. Conclusion<\/h2>\n<p>In this article, we discussed the basics of backend development using Spring Boot and how to implement user authentication and writing functionality using OAuth2. OAuth2 allows for easy implementation of various social media login features, which will be a great help in developing user-friendly web applications. In the next course, we will cover integration with the front end and, further, deployment. I hope this article has been helpful, and if you have any questions, please feel free to leave a comment!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this article, we will take a detailed look at how to perform backend development using Spring Boot. In particular, we will cover how to implement user authentication using OAuth2 and how to add author information to posts created by users. 1. What is Spring Boot? Spring Boot is a framework that minimizes complex &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33021\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post&#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":[131],"tags":[],"class_list":["post-33021","post","type-post","status-publish","format-standard","hentry","category-spring-boot-backend-development"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post - \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\/33021\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this article, we will take a detailed look at how to perform backend development using Spring Boot. In particular, we will cover how to implement user authentication using OAuth2 and how to add author information to posts created by users. 1. What is Spring Boot? Spring Boot is a framework that minimizes complex &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33021\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:13:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:29:18+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=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33021\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33021\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post\",\"datePublished\":\"2024-11-01T09:13:10+00:00\",\"dateModified\":\"2024-11-01T11:29:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33021\/\"},\"wordCount\":502,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33021\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33021\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:13:10+00:00\",\"dateModified\":\"2024-11-01T11:29:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33021\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33021\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33021\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post\"}]},{\"@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":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post - \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\/33021\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this article, we will take a detailed look at how to perform backend development using Spring Boot. In particular, we will cover how to implement user authentication using OAuth2 and how to add author information to posts created by users. 1. What is Spring Boot? Spring Boot is a framework that minimizes complex &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post\"","og_url":"https:\/\/atmokpo.com\/w\/33021\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:13:10+00:00","article_modified_time":"2024-11-01T11:29:18+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":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33021\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33021\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post","datePublished":"2024-11-01T09:13:10+00:00","dateModified":"2024-11-01T11:29:18+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33021\/"},"wordCount":502,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33021\/","url":"https:\/\/atmokpo.com\/w\/33021\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:13:10+00:00","dateModified":"2024-11-01T11:29:18+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33021\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33021\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33021\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Spring Boot Backend Development Course, Implementing Login and Logout with OAuth2, Adding Author to Post"}]},{"@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\/33021","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=33021"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33021\/revisions"}],"predecessor-version":[{"id":33022,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33021\/revisions\/33022"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}