{"id":33205,"date":"2024-11-01T09:14:32","date_gmt":"2024-11-01T09:14:32","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33205"},"modified":"2024-11-01T11:28:29","modified_gmt":"2024-11-01T11:28:29","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-spring-security-user-registration-running-tests","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33205\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests"},"content":{"rendered":"<p><body><\/p>\n<p>Hello! In this course, we will learn how to develop a backend application using Spring Boot and implement user authentication functionality through Spring Security. This course is suitable for beginners to intermediate learners, and each step will be explained in detail.<\/p>\n<h2>1. What is Spring Boot?<\/h2>\n<p>Spring Boot is a Java-based framework that simplifies the complex configurations of the existing Spring framework, making it easier to develop applications. It features auto-configuration and allows for quick project starts through various starter dependencies.<\/p>\n<h3>1.1 Features of Spring Boot<\/h3>\n<ul>\n<li>Auto-configuration: Automatically configures settings as needed, reducing the need for developers to manually set them up.<\/li>\n<li>Starter dependencies: Provides pre-configured dependencies to easily use multiple libraries.<\/li>\n<li>Production-ready: Facilitates deployment and operation through an embedded server, monitoring tools, etc.<\/li>\n<\/ul>\n<h2>2. Setting Up a Project<\/h2>\n<p>To set up a Spring Boot project, you can use an IDE like IntelliJ IDEA or set it up directly using Spring Initializr. Here, we will create a project using Spring Initializr.<\/p>\n<h3>2.1 Using Spring Initializr<\/h3>\n<ol>\n<li>Visit <a href=\"https:\/\/start.spring.io\/\" target=\"_blank\" rel=\"noopener\">Spring Initializr<\/a>.<\/li>\n<li>Configure as follows:<\/li>\n<ul>\n<li>Project: Gradle Project<\/li>\n<li>Language: Java<\/li>\n<li>Spring Boot: 2.5.4 (select an appropriate version)<\/li>\n<li>Group: com.example<\/li>\n<li>Artifact: demo<\/li>\n<li>Dependencies: Spring Web, Spring Data JPA, Spring Security, H2 Database, Lombok<\/li>\n<\/ul>\n<li>Click the Generate button to download the project.<\/li>\n<\/ol>\n<h2>3. Introduction to Key Libraries and Technologies<\/h2>\n<p>Now that the project is created, let\u2019s briefly introduce each library and technology.<\/p>\n<h3>3.1 Spring Web<\/h3>\n<p>Spring Web is a module for developing web applications. It supports RESTful web services and the MVC pattern.<\/p>\n<h3>3.2 Spring Data JPA<\/h3>\n<p>Spring Data JPA is a module designed to simplify interactions with databases, based on JPA (Java Persistence API). It allows for processing databases in an object-oriented manner using ORM (Object Relational Mapping).<\/p>\n<h3>3.3 Spring Security<\/h3>\n<p>Spring Security is a powerful security framework that supports authentication and authorization in applications. It provides access control for specific URLs, user authentication, and session management features.<\/p>\n<h3>3.4 H2 Database<\/h3>\n<p>H2 Database is a lightweight in-memory database written in Java. It can be very useful in development and testing stages.<\/p>\n<h2>4. Implementing User Registration Feature<\/h2>\n<p>The user registration feature is one of the basic functionalities of the application, responsible for storing user information in the database.<\/p>\n<h3>4.1 Creating Entity Class<\/h3>\n<p>Create a <code>User<\/code> entity class to store user information.<\/p>\n<pre>\n        <code>\n        package com.example.demo.model;\n\n        import javax.persistence.*;\n\n        @Entity\n        @Table(name = \"users\")\n        public class User {\n            @Id\n            @GeneratedValue(strategy = GenerationType.IDENTITY)\n            private Long id;\n\n            @Column(nullable = false, unique = true)\n            private String username;\n\n            @Column(nullable = false)\n            private String password;\n\n            @Column(nullable = false)\n            private String email;\n\n            \/\/ Getters and Setters\n        }\n        <\/code>\n        <\/pre>\n<h3>4.2 Creating Repository Interface<\/h3>\n<p>Create a <code>UserRepository<\/code> interface that can interact with the database.<\/p>\n<pre>\n        <code>\n        package com.example.demo.repository;\n\n        import com.example.demo.model.User;\n        import org.springframework.data.jpa.repository.JpaRepository;\n\n        public interface UserRepository extends JpaRepository<User, Long> {\n            User findByUsername(String username);\n        }\n        <\/code>\n        <\/pre>\n<h3>4.3 Creating Registration Service<\/h3>\n<p>Create a <code>UserService<\/code> class to handle the registration logic.<\/p>\n<pre>\n        <code>\n        package com.example.demo.service;\n\n        import com.example.demo.model.User;\n        import com.example.demo.repository.UserRepository;\n        import org.springframework.beans.factory.annotation.Autowired;\n        import org.springframework.security.crypto.password.PasswordEncoder;\n        import org.springframework.stereotype.Service;\n\n        @Service\n        public class UserService {\n            @Autowired\n            private UserRepository userRepository;\n\n            @Autowired\n            private PasswordEncoder passwordEncoder;\n\n            public void registerUser(User user) {\n                user.setPassword(passwordEncoder.encode(user.getPassword()));\n                userRepository.save(user);\n            }\n        }\n        <\/code>\n        <\/pre>\n<h3>4.4 Creating Registration Controller<\/h3>\n<p>Create a <code>UserController<\/code> to handle HTTP requests.<\/p>\n<pre>\n        <code>\n        package com.example.demo.controller;\n\n        import com.example.demo.model.User;\n        import com.example.demo.service.UserService;\n        import org.springframework.beans.factory.annotation.Autowired;\n        import org.springframework.web.bind.annotation.*;\n\n        @RestController\n        @RequestMapping(\"\/api\/users\")\n        public class UserController {\n            @Autowired\n            private UserService userService;\n\n            @PostMapping(\"\/register\")\n            public String register(@RequestBody User user) {\n                userService.registerUser(user);\n                return \"Registration successful\";\n            }\n        }\n        <\/code>\n        <\/pre>\n<h2>5. Configuring Spring Security<\/h2>\n<p>Now we will configure Spring Security to implement login and logout features.<\/p>\n<h3>5.1 Implementing WebSecurityConfigurerAdapter<\/h3>\n<p>Create a class for Spring Security configuration. Inherit from <code>WebSecurityConfigurerAdapter<\/code> to implement security settings.<\/p>\n<pre>\n        <code>\n        package com.example.demo.config;\n\n        import com.example.demo.service.CustomUserDetailsService;\n        import org.springframework.beans.factory.annotation.Autowired;\n        import org.springframework.context.annotation.Bean;\n        import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;\n        import org.springframework.security.config.annotation.web.builders.HttpSecurity;\n        import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;\n        import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;\n        import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;\n        import org.springframework.security.crypto.password.PasswordEncoder;\n\n        @EnableWebSecurity\n        public class SecurityConfig extends WebSecurityConfigurerAdapter {\n            @Autowired\n            private CustomUserDetailsService userDetailsService;\n\n            @Override\n            protected void configure(AuthenticationManagerBuilder auth) throws Exception {\n                auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());\n            }\n\n            @Override\n            protected void configure(HttpSecurity http) throws Exception {\n                http.csrf().disable()\n                    .authorizeRequests()\n                    .antMatchers(\"\/api\/users\/register\").permitAll()\n                    .anyRequest().authenticated()\n                    .and()\n                    .formLogin()\n                    .loginPage(\"\/login\")\n                    .permitAll()\n                    .and()\n                    .logout()\n                    .permitAll();\n            }\n\n            @Bean\n            public PasswordEncoder passwordEncoder() {\n                return new BCryptPasswordEncoder();\n            }\n        }\n        <\/code>\n        <\/pre>\n<h3>5.2 Creating Class for User Details<\/h3>\n<p>Create a <code>CustomUserDetailsService<\/code> class to handle user authentication information in Spring Security.<\/p>\n<pre>\n        <code>\n        package com.example.demo.service;\n\n        import com.example.demo.model.User;\n        import com.example.demo.repository.UserRepository;\n        import org.springframework.beans.factory.annotation.Autowired;\n        import org.springframework.security.core.userdetails.UserDetails;\n        import org.springframework.security.core.userdetails.UserDetailsService;\n        import org.springframework.security.core.userdetails.UsernameNotFoundException;\n        import org.springframework.stereotype.Service;\n\n        @Service\n        public class CustomUserDetailsService implements UserDetailsService {\n            @Autowired\n            private UserRepository userRepository;\n\n            @Override\n            public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {\n                User user = userRepository.findByUsername(username);\n                if (user == null) {\n                    throw new UsernameNotFoundException(\"User not found.\");\n                }\n                return new org.springframework.security.core.userdetails.User(user.getUsername(),\n                        user.getPassword(), new ArrayList<>());\n            }\n        }\n        <\/code>\n        <\/pre>\n<h3>5.3 Creating Login Page HTML<\/h3>\n<p>Create an HTML file for the login page. Write the following code in <code>src\/main\/resources\/templates\/login.html<\/code>.<\/p>\n<pre>\n        <code>\n        &lt;!DOCTYPE html&gt;\n        &lt;html&gt;\n        &lt;head&gt;\n            &lt;title&gt;Login&lt;\/title&gt;\n        &lt;\/head&gt;\n        &lt;body&gt;\n            &lt;h1&gt;Login&lt;\/h1&gt;\n            &lt;form action=\"\/login\" method=\"post\"&gt;\n                &lt;label for=\"username\"&gt;Username:&lt;\/label&gt;\n                &lt;input type=\"text\" id=\"username\" name=\"username\"&gt;&lt;br&gt;\n                &lt;label for=\"password\"&gt;Password:&lt;\/label&gt;\n                &lt;input type=\"password\" id=\"password\" name=\"password\"&gt;&lt;br&gt;\n                &lt;input type=\"submit\" value=\"Login\"&gt;\n            &lt;\/form&gt;\n            &lt;div&gt;\n                &lt;a href=\"\/api\/users\/register\"&gt;Register&lt;\/a&gt;\n            &lt;\/div&gt;\n        &lt;\/body&gt;\n        &lt;\/html&gt;        \n        <\/code>\n        <\/pre>\n<h2>6. Running and Testing<\/h2>\n<p>Now that all settings are complete, let&#8217;s run the Spring Boot application.<\/p>\n<h3>6.1 Running the Application<\/h3>\n<p>Run the <code>DemoApplication<\/code> class from the IDE or start the application via command.<\/p>\n<pre>\n        <code>\n        mvn spring-boot:run\n        <\/code>\n        <\/pre>\n<h3>6.2 Testing User Registration<\/h3>\n<p>You can use API testing tools like Postman to test user registration. Let&#8217;s send a POST request like the following:<\/p>\n<pre>\n        <code>\n        POST \/api\/users\/register\n        Content-Type: application\/json\n\n        {\n            \"username\": \"testuser\",\n            \"password\": \"password123\",\n            \"email\": \"testuser@example.com\"\n        }\n        <\/code>\n        <\/pre>\n<h3>6.3 Testing Login<\/h3>\n<p>After registering, access the login page and enter the created user information to log in.<\/p>\n<h2>Conclusion<\/h2>\n<p>In this course, we have looked into how to develop a backend application using Spring Boot and implement login and user registration features utilizing Spring Security. You can apply these in real projects to add more advanced features or integrate with external APIs.<\/p>\n<p>If you have any questions or need further assistance, please leave a comment. Thank you!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello! In this course, we will learn how to develop a backend application using Spring Boot and implement user authentication functionality through Spring Security. This course is suitable for beginners to intermediate learners, and each step will be explained in detail. 1. What is Spring Boot? Spring Boot is a Java-based framework that simplifies the &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33205\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests&#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-33205","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 Spring Security, User Registration, Running Tests - \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\/33205\/\" \/>\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 Spring Security, User Registration, Running Tests - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Hello! In this course, we will learn how to develop a backend application using Spring Boot and implement user authentication functionality through Spring Security. This course is suitable for beginners to intermediate learners, and each step will be explained in detail. 1. What is Spring Boot? Spring Boot is a Java-based framework that simplifies the &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33205\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:14:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:28:29+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\/33205\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33205\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests\",\"datePublished\":\"2024-11-01T09:14:32+00:00\",\"dateModified\":\"2024-11-01T11:28:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33205\/\"},\"wordCount\":606,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33205\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33205\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:14:32+00:00\",\"dateModified\":\"2024-11-01T11:28:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33205\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33205\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33205\/#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 Spring Security, User Registration, Running Tests\"}]},{\"@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 Spring Security, User Registration, Running Tests - \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\/33205\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Hello! In this course, we will learn how to develop a backend application using Spring Boot and implement user authentication functionality through Spring Security. This course is suitable for beginners to intermediate learners, and each step will be explained in detail. 1. What is Spring Boot? Spring Boot is a Java-based framework that simplifies the &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests\"","og_url":"https:\/\/atmokpo.com\/w\/33205\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:14:32+00:00","article_modified_time":"2024-11-01T11:28:29+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\/33205\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33205\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests","datePublished":"2024-11-01T09:14:32+00:00","dateModified":"2024-11-01T11:28:29+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33205\/"},"wordCount":606,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33205\/","url":"https:\/\/atmokpo.com\/w\/33205\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Running Tests - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:14:32+00:00","dateModified":"2024-11-01T11:28:29+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33205\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33205\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33205\/#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 Spring Security, User Registration, Running Tests"}]},{"@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\/33205","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=33205"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33205\/revisions"}],"predecessor-version":[{"id":33206,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33205\/revisions\/33206"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33205"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33205"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33205"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}