{"id":33215,"date":"2024-11-01T09:14:36","date_gmt":"2024-11-01T09:14:36","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=33215"},"modified":"2024-11-01T11:28:25","modified_gmt":"2024-11-01T11:28:25","slug":"spring-boot-backend-development-course-implementing-login-and-logout-with-spring-security-user-registration-creating-user-registration-and-login-views","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/33215\/","title":{"rendered":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Creating User Registration and Login Views"},"content":{"rendered":"<p><body><\/p>\n<h2>\uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub85c \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \ubc0f \ud68c\uc6d0 \uac00\uc785 \uad6c\ud604<\/h2>\n<p>\uc548\ub155\ud558\uc138\uc694! \uc774\ubc88 \uac15\uc88c\uc5d0\uc11c\ub294 <strong>\uc2a4\ud504\ub9c1 \ubd80\ud2b8<\/strong>\uc640 <strong>\uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0<\/strong>\ub97c \ud65c\uc6a9\ud558\uc5ec \uae30\ubcf8\uc801\uc778 \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \uae30\ub2a5\uacfc \ud68c\uc6d0 \uac00\uc785 \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \uac15\uc88c\ub294 Java\uc640 \uc6f9 \uac1c\ubc1c\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc9c0\uc2dd\uc774 \uc788\ub294 \ubd84\ub4e4\uc744 \ub300\uc0c1\uc73c\ub85c \ud558\uba70, \uc2e4\uc6a9\uc801\uc778 \uc608\uc81c\ub97c \ud1b5\ud574 \ubc30\uc6b0\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>1. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub780?<\/h2>\n<p><strong>\uc2a4\ud504\ub9c1 \ubd80\ud2b8<\/strong>\ub294 \uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uae30\ubc18\uc73c\ub85c \ud55c \uc11c\ubc84\uce21 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uac04\ud3b8\ud558\uac8c \ud574\uc8fc\ub294 \uc194\ub8e8\uc158\uc785\ub2c8\ub2e4. \ubcf5\uc7a1\ud55c XML \uc124\uc815\uc744 \uc904\uc774\uace0, &#8216;Convention over Configuration&#8217; \uc6d0\uce59\uc744 \ud1b5\ud574 \uac1c\ubc1c\uc790\uac00 \ube44\uc988\ub2c8\uc2a4 \ub85c\uc9c1\uc5d0 \uc9d1\uc911\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640\uc90d\ub2c8\ub2e4. \ud2b9\ud788, RESTful API \uad6c\ucd95\uacfc \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc544\ud0a4\ud14d\ucc98\uc5d0 \uc801\ud569\ud558\uc5ec \ube60\ub978 \uac1c\ubc1c \ud658\uacbd\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<h2>2. \uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub780?<\/h2>\n<p><strong>\uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0<\/strong>\ub294 \uc2a4\ud504\ub9c1 \uae30\ubc18 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uc704\ud55c \uc778\uc99d \ubc0f \uc778\uac00 \uae30\ub2a5\uc744 \uc81c\uacf5\ud558\ub294 \ud504\ub808\uc784\uc6cc\ud06c\uc785\ub2c8\ub2e4. \uc720\uc5f0\ud55c \ubcf4\uc548 \uc124\uc815\uacfc \ub2e4\uc591\ud55c \uc778\uc99d \ubc29\uc2dd\uc744 \uc9c0\uc6d0\ud558\uc5ec, \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc758 \ubcf4\uc548\uc744 \uac15\ud654\ud558\ub294 \ub370 \ub3c4\uc6c0\uc744 \uc90d\ub2c8\ub2e4. \ube44\ubc00\ubc88\ud638 \uc554\ud638\ud654, URL \uae30\ubc18 \uc811\uadfc \uc81c\uc5b4, \uc0ac\uc6a9\uc790 \uc5ed\ud560 \ubc0f \uad8c\ud55c \uad00\ub9ac \ub4f1\uc758 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<h2>3. \ud504\ub85c\uc81d\ud2b8 \uc138\ud305<\/h2>\n<h3>3.1. \uc2a4\ud504\ub9c1 \ubd80\ud2b8 \ucd08\uae30\ud654<\/h3>\n<p>\uc2a4\ud504\ub9c1 \ubd80\ud2b8 \ud504\ub85c\uc81d\ud2b8\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud574, <a href=\"https:\/\/start.spring.io\/\">Spring Initializr<\/a>\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \ud544\uc694\ud55c \uc758\uc874\uc131(Dependencies)\uc73c\ub85c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uac83\ub4e4\uc774 \uc788\uc2b5\ub2c8\ub2e4:<\/p>\n<ul>\n<li>Spring Web<\/li>\n<li>Spring Security<\/li>\n<li>Spring Data JPA<\/li>\n<li>H2 Database (\ub610\ub294 MySQL, PostgreSQL \ub4f1)<\/li>\n<li>Spring Boot DevTools (\uac1c\ubc1c \ud3b8\uc758\uc131 \ud5a5\uc0c1)<\/li>\n<\/ul>\n<p>\ubaa8\ub4e0 \uc758\uc874\uc131\uc744 \ucd94\uac00\ud55c \ud6c4, ZIP \ud30c\uc77c\ub85c \ud504\ub85c\uc81d\ud2b8\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud558\uace0 IDE(\uc608: IntelliJ IDEA, Eclipse)\uc5d0 \uc784\ud3ec\ud2b8\ud569\ub2c8\ub2e4.<\/p>\n<h3>3.2. \ub514\ub809\ud1a0\ub9ac \uad6c\uc870 \uc124\uc815<\/h3>\n<p>\uae30\ubcf8 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<pre>\n    src\/\n      \u2514\u2500\u2500 main\/\n          \u251c\u2500\u2500 java\/\n          \u2502   \u2514\u2500\u2500 com\/\n          \u2502       \u2514\u2500\u2500 example\/\n          \u2502           \u2514\u2500\u2500 demo\/\n          \u2502               \u251c\u2500\u2500 controller\/\n          \u2502               \u251c\u2500\u2500 model\/\n          \u2502               \u251c\u2500\u2500 repository\/\n          \u2502               \u251c\u2500\u2500 security\/\n          \u2502               \u2514\u2500\u2500 service\/\n          \u2514\u2500\u2500 resources\/\n              \u251c\u2500\u2500 application.properties\n              \u2514\u2500\u2500 static\/\n              \u2514\u2500\u2500 templates\/\n    <\/pre>\n<h2>4. \ud68c\uc6d0 \uac00\uc785 \uae30\ub2a5 \uad6c\ud604<\/h2>\n<h3>4.1. \uc0ac\uc6a9\uc790 \ubaa8\ub378 \uc0dd\uc131<\/h3>\n<p>\ud68c\uc6d0 \uac00\uc785\uc744 \uc704\ud574 \uc0ac\uc6a9\uc790 \uc815\ubcf4\ub97c \uc800\uc7a5\ud560 <strong>User<\/strong> \uc5d4\ud2f0\ud2f0 \ud074\ub798\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre>\n    package com.example.demo.model;\n\n    import javax.persistence.*;\n    import java.util.Collection;\n\n    @Entity\n    public class User {\n        @Id\n        @GeneratedValue(strategy = GenerationType.IDENTITY)\n        private Long id;\n\n        private String username;\n        private String password;\n        \n        @ElementCollection(fetch = FetchType.EAGER)\n        private Collection<string> roles;\n\n        \/\/ Getters and Setters\n    }\n    <\/string><\/pre>\n<h3>4.2. \ub808\ud3ec\uc9c0\ud1a0\ub9ac \uc778\ud130\ud398\uc774\uc2a4 \uc791\uc131<\/h3>\n<p>\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc640\uc758 \uc0c1\ud638\uc791\uc6a9\uc744 \uc704\ud574 \ub808\ud3ec\uc9c0\ud1a0\ub9ac \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4.<\/p>\n<pre>\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    <\/user,><\/pre>\n<h3>4.3. \uc11c\ube44\uc2a4 \ud074\ub798\uc2a4 \uc791\uc131<\/h3>\n<p>\uc720\uc800 \uc815\ubcf4\ub97c \ucc98\ub9ac\ud558\ub294 \uc11c\ube44\uc2a4 \ud074\ub798\uc2a4\ub97c \uad6c\ud604\ud569\ub2c8\ub2e4.<\/p>\n<pre>\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.bcrypt.BCryptPasswordEncoder;\n    import org.springframework.stereotype.Service;\n\n    @Service\n    public class UserService {\n\n        @Autowired\n        private UserRepository userRepository;\n\n        @Autowired\n        private BCryptPasswordEncoder passwordEncoder;\n\n        public void registerUser(User user) {\n            user.setPassword(passwordEncoder.encode(user.getPassword()));\n            userRepository.save(user);\n        }\n\n        public User findUserByUsername(String username) {\n            return userRepository.findByUsername(username);\n        }\n    }\n    <\/pre>\n<h3>4.4. \ud68c\uc6d0 \uac00\uc785 \ucee8\ud2b8\ub864\ub7ec \uad6c\ud604<\/h3>\n<p>\ud68c\uc6d0 \uac00\uc785 \uc694\uccad\uc744 \ucc98\ub9ac\ud560 \ucee8\ud2b8\ub864\ub7ec\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre>\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.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    @Controller\n    @RequestMapping(\"\/auth\")\n    public class AuthController {\n\n        @Autowired\n        private UserService userService;\n\n        @GetMapping(\"\/register\")\n        public String showRegistrationForm(Model model) {\n            model.addAttribute(\"user\", new User());\n            return \"register\";\n        }\n\n        @PostMapping(\"\/register\")\n        public String registerUser(User user) {\n            userService.registerUser(user);\n            return \"redirect:\/auth\/login\";\n        }\n    }\n    <\/pre>\n<h3>4.5. \ubdf0 \ud15c\ud50c\ub9bf \uc791\uc131<\/h3>\n<p>\ud68c\uc6d0 \uac00\uc785\uc744 \uc704\ud55c Thymeleaf \ud15c\ud50c\ub9bf\uc744 \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre>\n    &lt;!-- src\/main\/resources\/templates\/register.html --&gt;\n    &lt;!DOCTYPE html&gt;\n    &lt;html xmlns:th=\"http:\/\/www.thymeleaf.org\"&gt;\n    &lt;head&gt;\n        &lt;title&gt;\ud68c\uc6d0 \uac00\uc785&lt;\/title&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;h1&gt;\ud68c\uc6d0 \uac00\uc785&lt;\/h1&gt;\n        &lt;form action=\"@{\/auth\/register}\" method=\"post\"&gt;\n            &lt;label for=\"username\"&gt;\uc0ac\uc6a9\uc790 \uc774\ub984:&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"username\" name=\"username\" required&gt;&lt;br&gt;\n            &lt;label for=\"password\"&gt;\ube44\ubc00\ubc88\ud638:&lt;\/label&gt;\n            &lt;input type=\"password\" id=\"password\" name=\"password\" required&gt;&lt;br&gt;\n            &lt;button type=\"submit\"&gt;\uac00\uc785&lt;\/button&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n    &lt;\/html&gt;\n    <\/pre>\n<h2>5. \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \uae30\ub2a5 \uad6c\ud604<\/h2>\n<h3>5.1. \uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0 \uc124\uc815<\/h3>\n<p>\uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub97c \uc124\uc815\ud558\uae30 \uc704\ud574 \ub2e4\uc74c \ud074\ub798\uc2a4\ub97c \uc0dd\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre>\n    package com.example.demo.security;\n\n    import org.springframework.context.annotation.Bean;\n    import org.springframework.context.annotation.Configuration;\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    @Configuration\n    @EnableWebSecurity\n    public class SecurityConfig extends WebSecurityConfigurerAdapter {\n\n        @Bean\n        public PasswordEncoder passwordEncoder() {\n            return new BCryptPasswordEncoder();\n        }\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(\"\/auth\/register\", \"\/auth\/login\").permitAll()\n                .anyRequest().authenticated()\n                .and()\n                .formLogin()\n                .loginPage(\"\/auth\/login\")\n                .permitAll()\n                .and()\n                .logout()\n                .permitAll();\n        }\n    }\n    <\/pre>\n<h3>5.2. \ub85c\uadf8\uc778 \ubdf0 \uc791\uc131<\/h3>\n<p>\ub85c\uadf8\uc778 \ud398\uc774\uc9c0\ub97c \uc704\ud55c Thymeleaf \ud15c\ud50c\ub9bf\uc744 \uc791\uc131\ud569\ub2c8\ub2e4.<\/p>\n<pre>\n    &lt;!-- src\/main\/resources\/templates\/login.html --&gt;\n    &lt;!DOCTYPE html&gt;\n    &lt;html xmlns:th=\"http:\/\/www.thymeleaf.org\"&gt;\n    &lt;head&gt;\n        &lt;title&gt;\ub85c\uadf8\uc778&lt;\/title&gt;\n    &lt;\/head&gt;\n    &lt;body&gt;\n        &lt;h1&gt;\ub85c\uadf8\uc778&lt;\/h1&gt;\n        &lt;form action=\"#\" th:action=\"@{\/login}\" method=\"post\"&gt;\n            &lt;label for=\"username\"&gt;\uc0ac\uc6a9\uc790 \uc774\ub984:&lt;\/label&gt;\n            &lt;input type=\"text\" id=\"username\" name=\"username\" required&gt;&lt;br&gt;\n            &lt;label for=\"password\"&gt;\ube44\ubc00\ubc88\ud638:&lt;\/label&gt;\n            &lt;input type=\"password\" id=\"password\" name=\"password\" required&gt;&lt;br&gt;\n            &lt;button type=\"submit\"&gt;\ub85c\uadf8\uc778&lt;\/button&gt;\n        &lt;\/form&gt;\n    &lt;\/body&gt;\n    &lt;\/html&gt;\n    <\/pre>\n<h2>6. \uacb0\ub860<\/h2>\n<p>\uc774\ubc88 \uac15\uc88c\uc5d0\uc11c\ub294 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 \uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub97c \uc0ac\uc6a9\ud558\uc5ec \ud68c\uc6d0 \uac00\uc785 \ubc0f \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \uae30\ub2a5\uc744 \uad6c\ud604\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uae30\ubcf8\uc801\uc778 CRUD \uae30\ub2a5\uacfc RESTful API\ub97c \uc774\ud574\ud558\uace0, \ubcf4\uc548 \uae30\ub2a5\uc744 \ucd94\uac00\ud558\ub294 \ud655\uc7a5\uc131 \uc88b\uc740 \uc6f9 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4e4 \uc218 \uc788\ub294 \uae30\ucd08\ub97c \uc313\uc73c\uc168\uae38 \ubc14\ub78d\ub2c8\ub2e4.<\/p>\n<p>\ubb3c\ub860, \uc2e4\uc804\uc5d0\uc11c\ub294 \ucd94\uac00\uc801\uc778 \ubcf4\uc548 \uac15\ud654\uc640 \uc0ac\uc6a9\uc790 \uacbd\ud5d8 \ud5a5\uc0c1\uc744 \uc704\ud55c \ub2e4\uc591\ud55c \uae30\ub2a5\uc774 \ud544\uc694\ud560 \uac83\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uae30\ub2a5\ub4e4\uc744 \ucd94\uac00\ud558\uba74\uc11c \ub354 \uc2ec\ud654\ub41c \ub0b4\uc6a9\uc744 \ud0d0\uad6c\ud574 \ub098\uac00\uc2dc\uae38 \ubc14\ub78d\ub2c8\ub2e4. \uac10\uc0ac\ud569\ub2c8\ub2e4!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub85c \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \ubc0f \ud68c\uc6d0 \uac00\uc785 \uad6c\ud604 \uc548\ub155\ud558\uc138\uc694! \uc774\ubc88 \uac15\uc88c\uc5d0\uc11c\ub294 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 \uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub97c \ud65c\uc6a9\ud558\uc5ec \uae30\ubcf8\uc801\uc778 \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \uae30\ub2a5\uacfc \ud68c\uc6d0 \uac00\uc785 \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \uac15\uc88c\ub294 Java\uc640 \uc6f9 \uac1c\ubc1c\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc9c0\uc2dd\uc774 \uc788\ub294 \ubd84\ub4e4\uc744 \ub300\uc0c1\uc73c\ub85c \ud558\uba70, \uc2e4\uc6a9\uc801\uc778 \uc608\uc81c\ub97c \ud1b5\ud574 \ubc30\uc6b0\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. 1. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub780? \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub294 \uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uae30\ubc18\uc73c\ub85c \ud55c \uc11c\ubc84\uce21 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uac04\ud3b8\ud558\uac8c &hellip; <a href=\"https:\/\/atmokpo.com\/w\/33215\/\" 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, Creating User Registration and Login Views&#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-33215","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, Creating User Registration and Login Views - \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\/33215\/\" \/>\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, Creating User Registration and Login Views - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"\uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub85c \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \ubc0f \ud68c\uc6d0 \uac00\uc785 \uad6c\ud604 \uc548\ub155\ud558\uc138\uc694! \uc774\ubc88 \uac15\uc88c\uc5d0\uc11c\ub294 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 \uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub97c \ud65c\uc6a9\ud558\uc5ec \uae30\ubcf8\uc801\uc778 \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \uae30\ub2a5\uacfc \ud68c\uc6d0 \uac00\uc785 \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \uac15\uc88c\ub294 Java\uc640 \uc6f9 \uac1c\ubc1c\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc9c0\uc2dd\uc774 \uc788\ub294 \ubd84\ub4e4\uc744 \ub300\uc0c1\uc73c\ub85c \ud558\uba70, \uc2e4\uc6a9\uc801\uc778 \uc608\uc81c\ub97c \ud1b5\ud574 \ubc30\uc6b0\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. 1. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub780? \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub294 \uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uae30\ubc18\uc73c\ub85c \ud55c \uc11c\ubc84\uce21 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uac04\ud3b8\ud558\uac8c &hellip; \ub354 \ubcf4\uae30 &quot;Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Creating User Registration and Login Views&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/33215\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:14:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:28:25+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=\"3\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/33215\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33215\/\"},\"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, Creating User Registration and Login Views\",\"datePublished\":\"2024-11-01T09:14:36+00:00\",\"dateModified\":\"2024-11-01T11:28:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33215\/\"},\"wordCount\":56,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"Spring Boot backend development\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/33215\/\",\"url\":\"https:\/\/atmokpo.com\/w\/33215\/\",\"name\":\"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Creating User Registration and Login Views - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:14:36+00:00\",\"dateModified\":\"2024-11-01T11:28:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/33215\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/33215\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/33215\/#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, Creating User Registration and Login Views\"}]},{\"@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, Creating User Registration and Login Views - \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\/33215\/","og_locale":"ko_KR","og_type":"article","og_title":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Creating User Registration and Login Views - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"\uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub85c \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \ubc0f \ud68c\uc6d0 \uac00\uc785 \uad6c\ud604 \uc548\ub155\ud558\uc138\uc694! \uc774\ubc88 \uac15\uc88c\uc5d0\uc11c\ub294 \uc2a4\ud504\ub9c1 \ubd80\ud2b8\uc640 \uc2a4\ud504\ub9c1 \uc2dc\ud050\ub9ac\ud2f0\ub97c \ud65c\uc6a9\ud558\uc5ec \uae30\ubcf8\uc801\uc778 \ub85c\uadf8\uc778\/\ub85c\uadf8\uc544\uc6c3 \uae30\ub2a5\uacfc \ud68c\uc6d0 \uac00\uc785 \uc2dc\uc2a4\ud15c\uc744 \uad6c\ud604\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \uac15\uc88c\ub294 Java\uc640 \uc6f9 \uac1c\ubc1c\uc5d0 \ub300\ud55c \uae30\ubcf8 \uc9c0\uc2dd\uc774 \uc788\ub294 \ubd84\ub4e4\uc744 \ub300\uc0c1\uc73c\ub85c \ud558\uba70, \uc2e4\uc6a9\uc801\uc778 \uc608\uc81c\ub97c \ud1b5\ud574 \ubc30\uc6b0\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. 1. \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub780? \uc2a4\ud504\ub9c1 \ubd80\ud2b8\ub294 \uc2a4\ud504\ub9c1 \ud504\ub808\uc784\uc6cc\ud06c\ub97c \uae30\ubc18\uc73c\ub85c \ud55c \uc11c\ubc84\uce21 \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uac1c\ubc1c\uc744 \ubcf4\ub2e4 \uac04\ud3b8\ud558\uac8c &hellip; \ub354 \ubcf4\uae30 \"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Creating User Registration and Login Views\"","og_url":"https:\/\/atmokpo.com\/w\/33215\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:14:36+00:00","article_modified_time":"2024-11-01T11:28:25+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":"3\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/33215\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/33215\/"},"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, Creating User Registration and Login Views","datePublished":"2024-11-01T09:14:36+00:00","dateModified":"2024-11-01T11:28:25+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/33215\/"},"wordCount":56,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["Spring Boot backend development"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/33215\/","url":"https:\/\/atmokpo.com\/w\/33215\/","name":"Spring Boot Backend Development Course, Implementing Login and Logout with Spring Security, User Registration, Creating User Registration and Login Views - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:14:36+00:00","dateModified":"2024-11-01T11:28:25+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/33215\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/33215\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/33215\/#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, Creating User Registration and Login Views"}]},{"@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\/33215","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=33215"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33215\/revisions"}],"predecessor-version":[{"id":33216,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/33215\/revisions\/33216"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=33215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=33215"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=33215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}