{"id":33123,"date":"2024-11-01T09:13:55","date_gmt":"2024-11-01T09:13:55","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33123"},"modified":"2024-11-01T11:28:52","modified_gmt":"2024-11-01T11:28:52","slug":"spring-boot-backend-development-course-blog-screen-composition-example-view-testing","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33123\/","title":{"rendered":"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing"},"content":{"rendered":"<p><body><\/p>\n<h2>Introduction<\/h2>\n<p>Spring Boot is a lightweight application framework based on the Spring Framework. With Spring Boot, you can quickly start and run applications without complex configuration. In this course, we will explore backend development using Spring Boot, covering how to create a real application through an example of blog screen composition and how to test views.<\/p>\n<h2>1. Setting Up a Development Environment<\/h2>\n<p>To start a Spring Boot project, the following tools are required:<\/p>\n<ul>\n<li><strong>Java Development Kit (JDK):<\/strong> You should use JDK 8 or higher.<\/li>\n<li><strong>IDE:<\/strong> An integrated development environment such as IntelliJ IDEA, Eclipse, or VSCode.<\/li>\n<li><strong>Build Tool:<\/strong> You can use Maven or Gradle.<\/li>\n<\/ul>\n<h3>1.1. Creating a Project with Spring Initializr<\/h3>\n<p>To save a lot of time and effort, you can use <a href=\"https:\/\/start.spring.io\/\">Spring Initializr<\/a> to create a project. Here are the basic steps for project creation:<\/p>\n<ol>\n<li>Visit the website.<\/li>\n<li>Enter project metadata (Group, Artifact, etc.).<\/li>\n<li>Select the required dependencies (Starters): Spring Web, Spring Data JPA, Spring Boot DevTools, etc. are recommended.<\/li>\n<li>Click the &#8220;Generate&#8221; button to download the ZIP file.<\/li>\n<li>Extract the downloaded file and import it into your IDE.<\/li>\n<\/ol>\n<h2>2. Understanding Project Structure<\/h2>\n<p>Let&#8217;s take a look at the basic structure of the generated project:<\/p>\n<pre>\n    \u2514\u2500\u2500 src\n        \u251c\u2500\u2500 main\n        \u2502   \u251c\u2500\u2500 java\n        \u2502   \u2502   \u2514\u2500\u2500 com\n        \u2502   \u2502       \u2514\u2500\u2500 example\n        \u2502   \u2502           \u2514\u2500\u2500 demo\n        \u2502   \u2502               \u251c\u2500\u2500 DemoApplication.java\n        \u2502   \u2502               \u251c\u2500\u2500 model\n        \u2502   \u2502               \u251c\u2500\u2500 repository\n        \u2502   \u2502               \u251c\u2500\u2500 service\n        \u2502   \u2502               \u2514\u2500\u2500 controller\n        \u2502   \u2514\u2500\u2500 resources\n        \u2502       \u251c\u2500\u2500 application.properties\n        \u2502       \u2514\u2500\u2500 static\n        \u2502       \u2514\u2500\u2500 templates\n        \u2514\u2500\u2500 test\n    <\/pre>\n<h3>2.1. Role of Each Directory<\/h3>\n<p>Each directory has a specific purpose:<\/p>\n<ul>\n<li><code>model:<\/code> Defines the data model of the application.<\/li>\n<li><code>repository:<\/code> Contains interfaces for interactions with the database.<\/li>\n<li><code>service:<\/code> Handles business logic.<\/li>\n<li><code>controller:<\/code> Processes HTTP requests and sends responses.<\/li>\n<\/ul>\n<h2>3. Example of Blog Screen Composition<\/h2>\n<p>Now, let&#8217;s compose the screen of a simple blog application. Below is an example of a controller and HTML view for displaying a list of blog posts.<\/p>\n<h3>3.1. Creating the Blog Post Model<\/h3>\n<pre>\n    package com.example.demo.model;\n\n    import javax.persistence.Entity;\n    import javax.persistence.GeneratedValue;\n    import javax.persistence.GenerationType;\n    import javax.persistence.Id;\n\n    @Entity\n    public class Post {\n        @Id\n        @GeneratedValue(strategy = GenerationType.IDENTITY)\n        private Long id;\n        private String title;\n        private String content;\n\n        \/\/ getters and setters\n    }\n    <\/pre>\n<h3>3.2. Creating the Blog Repository<\/h3>\n<pre>\n    package com.example.demo.repository;\n\n    import com.example.demo.model.Post;\n    import org.springframework.data.jpa.repository.JpaRepository;\n\n    public interface PostRepository extends JpaRepository<Post, Long> {}\n    <\/pre>\n<h3>3.3. Creating the Blog Service<\/h3>\n<pre>\n    package com.example.demo.service;\n\n    import com.example.demo.model.Post;\n    import com.example.demo.repository.PostRepository;\n    import org.springframework.beans.factory.annotation.Autowired;\n    import org.springframework.stereotype.Service;\n\n    import java.util.List;\n\n    @Service\n    public class PostService {\n        @Autowired\n        private PostRepository postRepository;\n\n        public List<Post> findAll() {\n            return postRepository.findAll();\n        }\n        \n        public Post save(Post post) {\n            return postRepository.save(post);\n        }\n    }\n    <\/pre>\n<h3>3.4. Creating the Blog Controller<\/h3>\n<pre>\n    package com.example.demo.controller;\n\n    import com.example.demo.model.Post;\n    import com.example.demo.service.PostService;\n    import org.springframework.beans.factory.annotation.Autowired;\n    import org.springframework.stereotype.Controller;\n    import org.springframework.ui.Model;\n    import org.springframework.web.bind.annotation.GetMapping;\n    import org.springframework.web.bind.annotation.PostMapping;\n    import org.springframework.web.bind.annotation.RequestMapping;\n\n    import java.util.List;\n\n    @Controller\n    @RequestMapping(\"\/posts\")\n    public class PostController {\n        @Autowired\n        private PostService postService;\n\n        @GetMapping\n        public String list(Model model) {\n            List<Post> posts = postService.findAll();\n            model.addAttribute(\"posts\", posts);\n            return \"posts\/list\";\n        }\n\n        @PostMapping\n        public String create(Post post) {\n            postService.save(post);\n            return \"redirect:\/posts\";\n        }\n    }\n    <\/pre>\n<h3>3.5. Creating the HTML View<\/h3>\n<p>Now, let&#8217;s create an HTML view. Below is an example of a blog post list view using Thymeleaf:<\/p>\n<pre>\n    <html xmlns:th=\"http:\/\/www.thymeleaf.org\">\n    <head>\n        <title>Blog Post List<\/title>\n    <\/head>\n    <body>\n        <h1>Blog Post List<\/h1>\n        <table>\n            <thead>\n                <tr>\n                    <th>Title<\/th>\n                    <th>Content<\/th>\n                <\/tr>\n            <\/thead>\n            <tbody>\n                <tr th:each=\"post : ${posts}\">\n                    <td th:text=\"${post.title}\"><\/td>\n                    <td th:text=\"${post.content}\"><\/td>\n                <\/tr>\n            <\/tbody>\n        <\/table>\n        <form action=\"#\" method=\"post\" th:action=\"@{\/posts}\">\n            <input name=\"title\" placeholder=\"Title\" required=\"\" type=\"text\"\/>\n            <input name=\"content\" placeholder=\"Content\" required=\"\" type=\"text\"\/>\n            <button type=\"submit\">Create<\/button>\n        <\/form>\n    <\/body>\n    <\/html>\n    <\/pre>\n<h2>4. Testing the View<\/h2>\n<p>To ensure the application is working correctly, view tests must be performed. Spring Boot provides various tools to easily conduct integration tests.<\/p>\n<h3>4.1. Setting Up the Test Environment<\/h3>\n<p>First, the <code>spring-boot-starter-test<\/code> dependency must be included. Add the following to your <code>pom.xml<\/code> file:<\/p>\n<pre>\n    <dependency>\n        <groupId>org.springframework.boot<\/groupId>\n        <artifactId>spring-boot-starter-test<\/artifactId>\n        <scope>test<\/scope>\n    <\/dependency>\n    <\/pre>\n<h3>4.2. Creating Integration Tests<\/h3>\n<p>Next, let&#8217;s create a test class for the controller:<\/p>\n<pre>\n    package com.example.demo;\n\n    import com.example.demo.model.Post;\n    import com.example.demo.repository.PostRepository;\n    import com.example.demo.service.PostService;\n    import org.junit.jupiter.api.BeforeEach;\n    import org.junit.jupiter.api.Test;\n    import org.springframework.beans.factory.annotation.Autowired;\n    import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;\n    import org.springframework.boot.test.mock.mockito.MockBean;\n    import org.springframework.test.web.servlet.MockMvc;\n\n    import java.util.Arrays;\n    import java.util.List;\n\n    import static org.mockito.ArgumentMatchers.any;\n    import static org.mockito.Mockito.when;\n    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;\n    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.model;\n    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;\n    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;\n\n    @WebMvcTest(PostController.class)\n    public class PostControllerTest {\n        @Autowired\n        private MockMvc mockMvc;\n\n        @MockBean\n        private PostService postService;\n\n        @BeforeEach\n        public void setup() {\n            List<Post> posts = Arrays.asList(\n                new Post(1L, \"First Post\", \"Content 1\"),\n                new Post(2L, \"Second Post\", \"Content 2\")\n            );\n\n            when(postService.findAll()).thenReturn(posts);\n        }\n\n        @Test\n        public void testList() throws Exception {\n            mockMvc.perform(get(\"\/posts\"))\n                .andExpect(status().isOk())\n                .andExpect(view().name(\"posts\/list\"))\n                .andExpect(model().attributeExists(\"posts\"));\n        }\n\n        @Test\n        public void testCreate() throws Exception {\n            mockMvc.perform(post(\"\/posts\")\n                .param(\"title\", \"New Post\")\n                .param(\"content\", \"Content\"))\n                .andExpect(status().is3xxRedirection())\n                .andExpect(redirectedUrl(\"\/posts\"));\n        }\n    }\n    <\/pre>\n<h3>4.3. Running the Tests<\/h3>\n<p>Running the above tests will confirm that the blog post listing and new post creation features are functioning correctly.<\/p>\n<h2>Conclusion<\/h2>\n<p>In this course, we explored backend development of a blog application using Spring Boot, covering how to set up the model, repository, service, controller, and HTML view necessary for building a real application. We also learned how to test the views we created. Through this course, I hope you will build a solid foundation to create powerful web applications using Spring Boot.<\/p>\n<h2>References<\/h2>\n<ul>\n<li><a href=\"https:\/\/spring.io\/projects\/spring-boot\">Official Spring Boot Documentation<\/a><\/li>\n<li><a href=\"https:\/\/thymeleaf.org\/\">Official Thymeleaf Documentation<\/a><\/li>\n<li><a href=\"https:\/\/start.spring.io\/\">Spring Initializr<\/a><\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Spring Boot is a lightweight application framework based on the Spring Framework. With Spring Boot, you can quickly start and run applications without complex configuration. In this course, we will explore backend development using Spring Boot, covering how to create a real application through an example of blog screen composition and how to test &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33123\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing&#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-33123","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, Blog Screen Composition Example, View Testing - \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\/33123\/\" \/>\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, Blog Screen Composition Example, View Testing - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Introduction Spring Boot is a lightweight application framework based on the Spring Framework. With Spring Boot, you can quickly start and run applications without complex configuration. In this course, we will explore backend development using Spring Boot, covering how to create a real application through an example of blog screen composition and how to test &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33123\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:13:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:28:52+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\/33123\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33123\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing\",\"datePublished\":\"2024-11-01T09:13:55+00:00\",\"dateModified\":\"2024-11-01T11:28:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33123\/\"},\"wordCount\":460,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33123\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33123\/\",\"name\":\"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:13:55+00:00\",\"dateModified\":\"2024-11-01T11:28:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33123\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33123\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33123\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing\"}]},{\"@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, Blog Screen Composition Example, View Testing - \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\/33123\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Introduction Spring Boot is a lightweight application framework based on the Spring Framework. With Spring Boot, you can quickly start and run applications without complex configuration. In this course, we will explore backend development using Spring Boot, covering how to create a real application through an example of blog screen composition and how to test &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing\"","og_url":"https:\/\/atmokpo.com\/w\/33123\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:13:55+00:00","article_modified_time":"2024-11-01T11:28:52+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\/33123\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33123\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing","datePublished":"2024-11-01T09:13:55+00:00","dateModified":"2024-11-01T11:28:52+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33123\/"},"wordCount":460,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33123\/","url":"https:\/\/atmokpo.com\/w\/33123\/","name":"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:13:55+00:00","dateModified":"2024-11-01T11:28:52+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33123\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33123\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33123\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Spring Boot Backend Development Course, Blog Screen Composition Example, View Testing"}]},{"@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\/33123","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=33123"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33123\/revisions"}],"predecessor-version":[{"id":33124,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33123\/revisions\/33124"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}