<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>에러 탈출 일지</title>
    <link>https://error-out.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 8 Jul 2026 16:10:17 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>뉴NEW</managingEditor>
    <image>
      <title>에러 탈출 일지</title>
      <url>https://tistory1.daumcdn.net/tistory/5486858/attach/6ee8d76fedda4b54a0bb1209b9f418c1</url>
      <link>https://error-out.tistory.com</link>
    </image>
    <item>
      <title>[Spring] 아이디 찾기, 비밀번호 찾기</title>
      <link>https://error-out.tistory.com/260</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OiVwR/btrUQbzxB5h/SVMuVwydIHTV9TkfFBWoXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OiVwR/btrUQbzxB5h/SVMuVwydIHTV9TkfFBWoXK/img.png&quot; data-alt=&quot;아이디 찾기 폼&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OiVwR/btrUQbzxB5h/SVMuVwydIHTV9TkfFBWoXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOiVwR%2FbtrUQbzxB5h%2FSVMuVwydIHTV9TkfFBWoXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;339&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;463&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아이디 찾기 폼&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672240844762&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;main&amp;gt;
&amp;lt;div class=&quot;form-wrapper&quot;&amp;gt;
    &amp;lt;form id=&quot;searchIdForm&quot;&amp;gt;
        &amp;lt;h3&amp;gt;아이디 찾기&amp;lt;/h3&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; style=&quot;display:block; margin:20px auto;&quot;&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userName&quot; name=&quot;userName&quot; placeholder=&quot; 이름&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; style=&quot;display:block; margin:20px auto;&quot;&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userBirth&quot; name=&quot;userBirth&quot; placeholder=&quot; 생년월일 8자리(ex.19001201)&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div id=&quot;resultIdDiv&quot; style=&quot;display: none; font-weight: bold; font-style: italic; &quot;&amp;gt;
            &amp;lt;p id=&quot;searchIdResult&quot;&amp;gt;&amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div style=&quot;display:block; margin:20px auto; padding-top:15px;&quot;&amp;gt;
            &amp;lt;button type=&quot;button&quot; id=&quot;btnFindId&quot;&amp;gt;확 인&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;login_append&quot;&amp;gt;
        &amp;lt;span class=&quot;txt_find&quot;&amp;gt;
           &amp;lt;a href=&quot;/user/login.do&quot; class=&quot;link_find&quot;&amp;gt;로그인&amp;lt;/a&amp;gt;
            |
           &amp;lt;a href=&quot;/user/searchPw.do&quot; class=&quot;link_find&quot;&amp;gt;비밀번호 찾기&amp;lt;/a&amp;gt;
            |
           &amp;lt;a href=&quot;/user/join.do&quot; class=&quot;link_find&quot;&amp;gt;회원가입&amp;lt;/a&amp;gt;
         &amp;lt;/span&amp;gt;
       &amp;lt;/div&amp;gt;	
    &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/main&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt; controller &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이디 찾기&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672241048119&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Controller
@RequestMapping(&quot;/user&quot;)
public class UserController {
	@Autowired
	private UserService userService;

	// 아이디 찾기 화면으로 이동
	@RequestMapping(value = &quot;/searchId.do&quot;, method = RequestMethod.GET)
	public String searchIdView(HttpServletRequest request, Model model,
	        UserVO searchVO) {
	    
	    return &quot;/user/searchId&quot;;
	}
	// 아이디 찾기 결과
	@PostMapping(&quot;/searchId.do&quot;)
	@ResponseBody
	public String searchId(UserVO userVO) throws JsonProcessingException {
		String userId = userService.searchId(userVO);
		
		ObjectMapper mapper = new ObjectMapper();
		Map&amp;lt;String, String&amp;gt; resultMap = new HashMap&amp;lt;String, String&amp;gt;();
		
		if(userId != null) {
			resultMap.put(&quot;msg&quot;, &quot;ok&quot;);
			resultMap.put(&quot;searchId&quot;, userId);
		} else {
			resultMap.put(&quot;msg&quot;, &quot;fail&quot;);
		}
		
		String jsonStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(resultMap);
		
		return jsonStr;
	}
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt; service &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672241170394&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public interface UserService {
	// 아이디 찾기
	String searchId(UserVO searchVO);
		
	// 비밀번호 찾기
	String searchPw(UserVO searchVO);	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt; serviceimpl &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672241195738&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
public class UserServiceImpl implements UserService {
	@Autowired
	private UserDAO userDAO;

	// 아이디 찾기
	@Override
	public String searchId(UserVO searchVO) {
		return userDAO.searchId(searchVO);
	}
	// 비밀번호 찾기
	@Override
	public String searchPw(UserVO searchVO) {
		return userDAO.searchPw(searchVO);
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt; DAO &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672241226783&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Repository
public class UserDAO {
	@Autowired
	private SqlSessionTemplate mybatis;

	// 아이디 찾기
	public String searchId(UserVO searchVO) {
		return mybatis.selectOne(&quot;UserDAO.searchId&quot;,searchVO);
	}
	
	// 비밀번호 찾기
	public String searchPw(UserVO searchVO) {
		return mybatis.selectOne(&quot;UserDAO.searchPw&quot;,searchVO);
	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;mapper.xml&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672241291269&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&amp;gt;

&amp;lt;mapper namespace=&quot;UserDAO&quot;&amp;gt;
	&amp;lt;!-- 쿼리 작성 영역 --&amp;gt;
	&amp;lt;select id=&quot;searchId&quot; parameterType=&quot;user&quot; resultType=&quot;string&quot;&amp;gt;
	&amp;lt;![CDATA[
		SELECT USER_ID FROM AL_USER
			WHERE USER_NAME = #{userName}
			  AND USER_BIRTH = #{userBirth}
			  AND USER_USE_YN = 'Y'
	
	]]&amp;gt;    
	&amp;lt;/select&amp;gt;
	
	&amp;lt;select id=&quot;searchPw&quot; parameterType=&quot;user&quot; resultType=&quot;string&quot;&amp;gt;
	&amp;lt;![CDATA[
		SELECT USER_PW FROM AL_USER
			WHERE USER_ID = #{userId}
			  AND USER_NAME = #{userName}
			  AND USER_BIRTH = #{userBirth}
	
	]]&amp;gt;    
	&amp;lt;/select&amp;gt;
&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt; script &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아이디 찾기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672240966319&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    $(function() {
        $(&quot;#btnFindId&quot;).on(&quot;click&quot;, function() {
            console.log($(&quot;#searchIdForm&quot;).serialize());

            $.ajax({
                url: &quot;/user/searchId.do&quot;,
                type: &quot;post&quot;,
                data: $(&quot;#searchIdForm&quot;).serialize(),
                success: function(obj) {
                    const data = JSON.parse(obj);

                    console.log(data);

                    $(&quot;#resultIdDiv&quot;).show();

                    if(data.msg == &quot;ok&quot;) {
                        $(&quot;#searchIdResult&quot;).text(&quot;아이디는 &quot; + data.searchId +&quot; 입니다.&quot;);
                    } else{
                        $(&quot;#searchIdResult&quot;).text(&quot;존재하지 않는 사용자입니다.&quot;);
                    }
                },
                error: function(e) {
                    console.log(e);
                }
            });
        });
    });

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AutAn/btrUNVYfSk1/mOsAN8bHQxFKh2sb90ft91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AutAn/btrUNVYfSk1/mOsAN8bHQxFKh2sb90ft91/img.png&quot; data-alt=&quot;아이디 찾기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AutAn/btrUNVYfSk1/mOsAN8bHQxFKh2sb90ft91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAutAn%2FbtrUNVYfSk1%2FmOsAN8bHQxFKh2sb90ft91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;663&quot; height=&quot;366&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아이디 찾기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3vDKo/btrUP0LvZiK/4woaeo36KEeOJkLbfT19KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3vDKo/btrUP0LvZiK/4woaeo36KEeOJkLbfT19KK/img.png&quot; data-alt=&quot;비밀번호 찾기 폼&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3vDKo/btrUP0LvZiK/4woaeo36KEeOJkLbfT19KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3vDKo%2FbtrUP0LvZiK%2F4woaeo36KEeOJkLbfT19KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;388&quot; height=&quot;428&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;비밀번호 찾기 폼&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672240886876&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;main&amp;gt;
&amp;lt;div class=&quot;form-wrapper&quot;&amp;gt;
    &amp;lt;form id=&quot;searchPwForm&quot;&amp;gt;
        &amp;lt;h3&amp;gt;비밀번호 찾기&amp;lt;/h3&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; style=&quot;display:block; margin:20px auto;&quot;&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userId&quot; name=&quot;userId&quot; placeholder=&quot; 아이디&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; style=&quot;display:block; margin:20px auto;&quot;&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userName&quot; name=&quot;userName&quot; placeholder=&quot; 이름&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; style=&quot;display:block; margin:20px auto;&quot;&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userBirth&quot; name=&quot;userBirth&quot; placeholder=&quot; 생년월일 8자리(ex.19001201)&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div id=&quot;resultPwDiv&quot; style=&quot;display: none; font-weight: bold; font-style: italic;&quot;&amp;gt;
            &amp;lt;p id=&quot;searchPwResult&quot;&amp;gt;&amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div style=&quot;display:block; margin:20px auto; padding-top:15px;&quot;&amp;gt;
            &amp;lt;button type=&quot;button&quot; id=&quot;btnFindPw&quot;&amp;gt;확 인&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;div class=&quot;login_append&quot;&amp;gt;
        &amp;lt;span class=&quot;txt_find&quot;&amp;gt;
           &amp;lt;a href=&quot;/user/login.do&quot; class=&quot;link_find&quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;로그인&amp;lt;/a&amp;gt;
            |
           &amp;lt;a href=&quot;/user/searchId.do&quot; class=&quot;link_find&quot;&amp;gt;아이디 찾기&amp;lt;/a&amp;gt;
            |
           &amp;lt;a href=&quot;/user/join.do&quot; class=&quot;link_find&quot;&amp;gt;회원가입&amp;lt;/a&amp;gt;
         &amp;lt;/span&amp;gt;
       &amp;lt;/div&amp;gt;	
    &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/main&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt; controller &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비밀번호 찾기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672241094517&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Controller
@RequestMapping(&quot;/user&quot;)
public class UserController {
	@Autowired
	private UserService userService;
	
	// 비밀번호 찾기 화면으로 이동
	@RequestMapping(value = &quot;/searchPw.do&quot;, method = RequestMethod.GET)
	public String searchPwView(HttpServletRequest request, Model model,
	        UserVO searchVO) {
	    
	    return &quot;/user/searchPw&quot;;
	}
	
	// 비밀번호 찾기 결과
	@PostMapping(&quot;/searchPw.do&quot;)
	@ResponseBody
	public String searchPw(UserVO userVO) throws JsonProcessingException {
		String userPw = userService.searchPw(userVO);
		
		ObjectMapper mapper = new ObjectMapper();
		Map&amp;lt;String, String&amp;gt; resultMap = new HashMap&amp;lt;String, String&amp;gt;();
		
		if(userPw != null) {
			resultMap.put(&quot;msg&quot;, &quot;ok&quot;);
			resultMap.put(&quot;searchPw&quot;, userPw);
		} else {
			resultMap.put(&quot;msg&quot;, &quot;fail&quot;);
		}
		
		String jsonStr = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(resultMap);
		
		return jsonStr;
	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt; script &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비밀번호 찾기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672240929681&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    $(function() {
        $(&quot;#btnFindPw&quot;).on(&quot;click&quot;, function() {
            console.log($(&quot;#searchPwForm&quot;).serialize());

            $.ajax({
                url: &quot;/user/searchPw.do&quot;,
                type: &quot;post&quot;,
                data: $(&quot;#searchPwForm&quot;).serialize(),
                success: function(obj) {
                    const data = JSON.parse(obj);

                    console.log(data);

                    $(&quot;#resultPwDiv&quot;).show();

                    if(data.msg == &quot;ok&quot;) {
                        $(&quot;#searchPwResult&quot;).text(&quot;비밀번호는 &quot; + data.searchPw +&quot; 입니다.&quot;);
                    } else{
                        $(&quot;#searchPwResult&quot;).text(&quot;아이디가 존재하지 않습니다.&quot;);
                    }
                },
                error: function(e) {
                    console.log(e);
                }
            });
        });
    });

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bamgTd/btrULOZOGDJ/lwqsFF1VXENFmElyCH3JB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bamgTd/btrULOZOGDJ/lwqsFF1VXENFmElyCH3JB1/img.png&quot; data-alt=&quot;비밀번호 찾기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bamgTd/btrULOZOGDJ/lwqsFF1VXENFmElyCH3JB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbamgTd%2FbtrULOZOGDJ%2FlwqsFF1VXENFmElyCH3JB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;624&quot; height=&quot;402&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;비밀번호 찾기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/Mini Project</category>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/260</guid>
      <comments>https://error-out.tistory.com/260#entry260comment</comments>
      <pubDate>Thu, 29 Dec 2022 00:30:40 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 로그인 페이지 만들기</title>
      <link>https://error-out.tistory.com/259</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tEDPr/btrURpqI5hF/8bRSLipXBthvsxaoTfvGek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tEDPr/btrURpqI5hF/8bRSLipXBthvsxaoTfvGek/img.png&quot; data-alt=&quot;로그인 폼&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tEDPr/btrURpqI5hF/8bRSLipXBthvsxaoTfvGek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtEDPr%2FbtrURpqI5hF%2F8bRSLipXBthvsxaoTfvGek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;445&quot; height=&quot;362&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 폼&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672240492072&quot; class=&quot;xml&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;main&amp;gt;
&amp;lt;div class=&quot;form-wrapper&quot;&amp;gt;
    &amp;lt;form id=&quot;loginForm&quot;&amp;gt;
        &amp;lt;h3&amp;gt;AC LEARN&amp;lt;/h3&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; style=&quot;display:block; margin:20px auto;&quot;&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userId&quot; name=&quot;userId&quot; placeholder=&quot; ID&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; style=&quot;display:block; margin:20px auto;&quot;&amp;gt;
            &amp;lt;input type=&quot;password&quot; id=&quot;userPw&quot; name=&quot;userPw&quot; placeholder=&quot; Password&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div style=&quot;display:block; margin:20px auto;&quot;&amp;gt;
            &amp;lt;button type=&quot;button&quot; id=&quot;btnLogin&quot;&amp;gt;LOGIN&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;

        &amp;lt;div class=&quot;login_append&quot;&amp;gt;
        &amp;lt;span class=&quot;txt_find&quot;&amp;gt;
           &amp;lt;a href=&quot;/user/searchId.do&quot; class=&quot;link_find&quot;&amp;gt;아이디 찾기&amp;lt;/a&amp;gt;
            |
           &amp;lt;a href=&quot;/user/searchPw.do&quot; class=&quot;link_find&quot;&amp;gt;비밀번호 찾기&amp;lt;/a&amp;gt;
            |
           &amp;lt;a href=&quot;/user/join.do&quot; class=&quot;link_find&quot;&amp;gt;회원가입&amp;lt;/a&amp;gt;
         &amp;lt;/span&amp;gt;
       &amp;lt;/div&amp;gt;

    &amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/main&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 화면에 아이디 찾기, 비밀번호 찾기, 회원가입 페이지로 넘어갈 수 있게 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; Controller &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672240492077&quot; class=&quot;kotlin&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Controller
@RequestMapping(&quot;/user&quot;)
public class UserController {
	@Autowired
	private UserService userService;
    
	// 로그인 화면으로 이동
	@GetMapping(&quot;/login.do&quot;)
	public String loginView() {
		return &quot;user/login&quot;;
	}
	// 로그인 처리
	@PostMapping(&quot;/login.do&quot;)
	@ResponseBody
	public String login(UserVO userVO, HttpSession session) {
		
		// 1. 아이디 체크
		int idCheck = userService.idCheck(userVO.getUserId());
		System.out.println(idCheck);
	   	 if(idCheck &amp;lt; 1) {
		   return &quot;idFail&quot;;
	   	 } else {
		   UserVO loginUser = userService.login(userVO);
		   
		   // 2. 비밀번호 체크
		   if(loginUser == null) {
			   return &quot;pwFail&quot;;
		   }
		   // 3. 로그인 성공
		   session.setAttribute(&quot;loginUser&quot;, loginUser);
		   return &quot;loginSuccess&quot;;
	    }
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아이디가 1개 보다 적을 때(즉, 존재 하지 않을 때) 로그인 실패&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; service &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672240492080&quot; class=&quot;angelscript&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public interface UserService {
	// 로그인
	UserVO login(UserVO userVO);	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; serviceimpl &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672240492081&quot; class=&quot;aspectj&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
public class UserServiceImpl implements UserService {
	@Autowired
	private UserDAO userDAO;

	// 로그인
	@Override
	public UserVO login(UserVO userVO) {
		return userDAO.login(userVO);
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; DAO &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672240492082&quot; class=&quot;aspectj&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Repository
public class UserDAO {
	@Autowired
	private SqlSessionTemplate mybatis;
	

	// 로그인 
	public UserVO login(UserVO userVO) {
		return mybatis.selectOne(&quot;UserDAO.login&quot;,userVO);
	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;mapper.xml 파일에 쿼리문 작성&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672240492082&quot; class=&quot;dust&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&amp;gt;

&amp;lt;mapper namespace=&quot;UserDAO&quot;&amp;gt;
	&amp;lt;!-- 쿼리 작성 영역 --&amp;gt;
	&amp;lt;select id=&quot;login&quot; parameterType=&quot;user&quot; resultType=&quot;user&quot;&amp;gt;
	&amp;lt;![CDATA[
		SELECT USER_ID
			,USER_PW
			,USER_NAME
			,USER_NICKNAME
			,USER_BIRTH
			FROM AL_USER
			WHERE USER_ID = #{userId}
			  AND USER_PW = #{userPw}
			  AND USER_USE_YN = 'Y'
	]]&amp;gt;
	&amp;lt;/select&amp;gt;
&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; script &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672240492083&quot; class=&quot;xml&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;  
  $(function() {
     //로그인 시 아이디나 비밀번호가 틀렸을 경우에 대비하여 폼 서브밋 대신 ajax로 처리
     $(&quot;#btnLogin&quot;).on(&quot;click&quot;, function() {
        $.ajax({
           url: &quot;/user/login.do&quot;,
           type: &quot;post&quot;,
           data: $(&quot;#loginForm&quot;).serialize(),
           success: function(obj) {
              console.log(obj);
              if(obj ==&quot;idFail&quot;) {
                 alert(&quot;존재하지 않는 아이디입니다.&quot;);
                 $(&quot;#userId&quot;).focus();
                 return;
              }

              if(obj == &quot;pwFail&quot;) {
                 alert(&quot;비밀번호가 틀렸습니다. 비밀번호를 확인해주세요&quot;);
                 $(&quot;#userPw&quot;).focus();
                 return;
              }
              // 로그인 성공시 홈화면으로 처리
              location.href=&quot;/index.jsp&quot;;
           },
           error: function(e) {
              console.log(e);
           }
        });
     });
  });
 &amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;766&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ee9tqe/btrURPv1g8w/tX7WyJvdQLGDhkDCQGD6r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ee9tqe/btrURPv1g8w/tX7WyJvdQLGDhkDCQGD6r0/img.png&quot; data-alt=&quot;아이디가 존재하지 않을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ee9tqe/btrURPv1g8w/tX7WyJvdQLGDhkDCQGD6r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fee9tqe%2FbtrURPv1g8w%2FtX7WyJvdQLGDhkDCQGD6r0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;369&quot; height=&quot;423&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;766&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아이디가 존재하지 않을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;797&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqzjFR/btrUMPK152X/hG7X0idldI39uHPTuJ2Sqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqzjFR/btrUMPK152X/hG7X0idldI39uHPTuJ2Sqk/img.png&quot; data-alt=&quot;비밀번호가 틀렸을 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqzjFR/btrUMPK152X/hG7X0idldI39uHPTuJ2Sqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqzjFR%2FbtrUMPK152X%2FhG7X0idldI39uHPTuJ2Sqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;486&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;797&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;비밀번호가 틀렸을 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/Mini Project</category>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/259</guid>
      <comments>https://error-out.tistory.com/259#entry259comment</comments>
      <pubDate>Thu, 29 Dec 2022 00:15:27 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 회원가입 페이지 만들기 (중복체크, 유효성 검사)</title>
      <link>https://error-out.tistory.com/255</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;1103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oEjAi/btrURqC9dz1/Qmnk7fSbQqe47kuR333fD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oEjAi/btrURqC9dz1/Qmnk7fSbQqe47kuR333fD1/img.png&quot; data-alt=&quot;회원가입 폼&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oEjAi/btrURqC9dz1/Qmnk7fSbQqe47kuR333fD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoEjAi%2FbtrURqC9dz1%2FQmnk7fSbQqe47kuR333fD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;383&quot; height=&quot;672&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;1103&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;회원가입 폼&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;join.jsp 파일에&amp;nbsp; 회원가입 폼을 만들어주고 스크립트에 중복체크 및 유효성 체크를 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672227529124&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;main&amp;gt;
&amp;lt;div class=&quot;form-wrapper&quot;&amp;gt;
    &amp;lt;form id=&quot;joinForm&quot; action=&quot;/user/join.do&quot; method=&quot;post&quot;&amp;gt;
    &amp;lt;h2&amp;gt;회원가입&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;ACLearn에서 새로운 성장의 기회를 얻으세요.&amp;lt;/p&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;div class=&quot;input-area&quot;&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; &amp;gt;
            &amp;lt;label for=&quot;userId&quot; &amp;gt;아이디&amp;lt;/label&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userId&quot; name=&quot;userId&quot; size=&quot;38&quot;
                    placeholder=&quot;영문, 숫자 조합으로 8~16자리&quot; required &amp;gt;
            &amp;lt;button type=&quot;button&quot; id=&quot;btnIdCheck&quot; style=&quot;width: 70px; height: 40px;&quot;&amp;gt;중복체크&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;p id=&quot;idValidation&quot; style=&quot;color:red; font-size:0.5rem;&quot;&amp;gt;
            아이디는 영문, 숫자 조합의 8~16자리로 설정해주세요.
        &amp;lt;/p&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; &amp;gt;
            &amp;lt;label for=&quot;userPw&quot;&amp;gt;비밀번호&amp;lt;/label&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;input type=&quot;password&quot; id=&quot;userPw&quot; name=&quot;userPw&quot; size=&quot;50&quot;
                    placeholder=&quot;영문, 숫자, 특수문자 조합으로 8~16자리&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;p id=&quot;pwValidation&quot; style=&quot;color:red; font-size:0.5rem;&quot;&amp;gt;
            비밀번호는 영문, 숫자, 특수문자 조합의 8~16자리로 설정해주세요.
        &amp;lt;/p&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; &amp;gt;
            &amp;lt;label for=&quot;userPwCheck&quot;&amp;gt;비밀번호 확인&amp;lt;/label&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;input type=&quot;password&quot; id=&quot;userPwCheck&quot; name=&quot;userPwCheck&quot; size=&quot;50&quot;
                    placeholder=&quot;영문, 숫자, 특수문자 조합으로 8~16자리&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;
        &amp;lt;p id=&quot;pwCheckResult&quot; style=&quot;font-size:0.8rem;&quot;&amp;gt;

        &amp;lt;/p&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; &amp;gt;
            &amp;lt;label for=&quot;userName&quot;&amp;gt;이름&amp;lt;/label&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userName&quot; name=&quot;userName&quot; size=&quot;50&quot; 
                    placeholder=&quot;이름&quot; required&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; &amp;gt;
            &amp;lt;label for=&quot;userNickname&quot;&amp;gt;닉네임&amp;lt;/label&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div&amp;gt;		
            &amp;lt;input type=&quot;text&quot; id=&quot;userNickname&quot; name=&quot;userNickname&quot; size=&quot;38&quot;
                    placeholder=&quot;영문, 한글, 숫자 조합으로 2~10자리&quot;required&amp;gt;
            &amp;lt;button type=&quot;button&quot; id=&quot;btnNickCheck&quot; style=&quot;width: 70px; height: 40px;&quot;&amp;gt;중복체크&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;p id=&quot;nickValidation&quot; style=&quot;color:red; font-size:0.5rem;&quot;&amp;gt;
            닉네임은 영문, 한글, 숫자 조합의 2~10자리로 설정해주세요.
        &amp;lt;/p&amp;gt;
        &amp;lt;div class=&quot;input-wrapper&quot; &amp;gt;
            &amp;lt;label for=&quot;userBirth&quot;&amp;gt;생년월일&amp;lt;/label&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;div&amp;gt;
            &amp;lt;input type=&quot;text&quot; id=&quot;userBirth&quot; name=&quot;userBirth&quot; size=&quot;50&quot; 
                    placeholder=&quot;생년월일 8자리(ex.19001201)&quot; &amp;gt;
        &amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;
        &amp;lt;div style=&quot;display: block; margin: 20px auto;&quot;&amp;gt;
            &amp;lt;button type=&quot;submit&quot; id=&quot;btnJoin&quot;&amp;gt;확 인&amp;lt;/button&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/main&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&amp;nbsp;Controller &amp;rarr; Service &lt;b&gt;&amp;rarr; Serviceimpl &lt;b&gt;&amp;rarr; DAO &lt;b&gt;&amp;rarr; mapper&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&amp;lt; Controller &amp;gt; &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아이디 - 중복체크 및 유효성 검사&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672237669703&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Controller
@RequestMapping(&quot;/user&quot;)
public class UserController {
	@Autowired
	private UserService userService;
	
	// 회원가입 화면으로 이동
	@GetMapping(&quot;/join.do&quot;)
	public String joinView() {
		return &quot;user/join&quot;;
	}
	
	// 회원가입 진행
	@PostMapping(value=&quot;/join.do&quot;, produces=&quot;application/text; charset=UTF-8&quot;)
    	public String join(UserVO userVO, Model model) {
		int joinResult = userService.join(userVO);
      
		if(joinResult == 0) {
			model.addAttribute(&quot;joinMsg&quot;, &quot;회원가입에 실패하셨습니다. 관리자에게 문의해주세요.&quot;);
			return &quot;/user/join&quot;;
		} 
		model.addAttribute(&quot;joinMsg&quot;, &quot;회원가입에 성공했습니다. 로그인해주세요.&quot;);
		return &quot;user/login&quot;;
	}


	// 아이디 중복체크
	@PostMapping(&quot;/idCheck.do&quot;)
	@ResponseBody
	public String idCheck(UserVO userVO) throws JsonProcessingException {
		
		String returnStr =&quot;&quot;;
		int idCnt=userService.idCheck(userVO.getUserId());
		
		// 아이디가 중복일 때 
		if(idCnt &amp;gt; 0) { 
			returnStr =&quot;duplicatedId&quot;;

		}else {
			returnStr = &quot;idOk&quot;;
		}
		return returnStr;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; Service &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672237990624&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public interface UserService {
	// 회원가입
	int join(UserVO userVO);
    
    	// 아이디 중복체크
	int idCheck(String userId);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&amp;lt; Serviceimpl &amp;gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672238037439&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Service
public class UserServiceImpl implements UserService {
	@Autowired
	private UserDAO userDAO;
	
	// 회원가입
	@Override
	public int join(UserVO userVO) {
		return userDAO.join(userVO); 
	}
    
	// 아이디 중복체크
	@Override
	public int idCheck(String userId) {
		return userDAO.idCheck(userId);
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&amp;lt; DAO &amp;gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672238223428&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Repository
public class UserDAO {
	@Autowired
	private SqlSessionTemplate mybatis;
	
	// 회원가입	
	public int join(UserVO userVO) {
		 return mybatis.insert(&quot;UserDAO.join&quot;,userVO);
	}

	// 아이디 중복체크
	public int idCheck(String userId) {
		return mybatis.selectOne(&quot;UserDAO.idCheck&quot;,userId);
	}

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;mapper.xml 파일에 쿼리문 작성&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672238378723&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&amp;gt;

&amp;lt;mapper namespace=&quot;UserDAO&quot;&amp;gt;
	&amp;lt;!-- 쿼리 작성 영역 --&amp;gt;
	&amp;lt;insert id=&quot;join&quot; parameterType=&quot;user&quot;&amp;gt;
	&amp;lt;![CDATA[
		INSERT INTO AL_USER(
			USER_ID,
			USER_PW,
			USER_NAME,
			USER_NICKNAME,
			USER_BIRTH,
			USER_REGDATE,
			USER_MODFDATE,
			USER_USE_YN
		) VALUES (
			#{userId},
			#{userPw},
			#{userName},
			#{userNickname},
			#{userBirth},
			NOW(),
			NOW(),
			'Y'
		)
	]]&amp;gt;
	&amp;lt;/insert&amp;gt;
&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;lt; script &amp;gt;&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;아이디 - 중복체크 및 유효성 검사&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672227730425&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    $(function(){
        // 아이디 중복체크 했는지 확인
        var checkId = false;
        // 아이디가 형식에 맞는지
        var idValidation = false;
        // 닉네임 중복체크
        var nicknameCheck = false;
        // 닉네임이 형식에 맞는지
        var nickValidation = false;

        $(&quot;#idValidation&quot;).hide();
        $(&quot;#nickValidation&quot;).hide();

        // 아이디 중복체크
        $(&quot;#btnIdCheck&quot;).on(&quot;click&quot;,function(){
            console.log($(&quot;#joinForm&quot;).serialize());
            console.log($(&quot;#joinForm&quot;));
            $.ajax({
                url: '/user/idCheck.do',
                type: 'post',
                data: $(&quot;#joinForm&quot;).serialize(),
                success: function(obj){
                    console.log(obj);

                    if(obj == 'duplicatedId'){
                        alert(&quot;중복된 아이디입니다.&quot;);
                        $(&quot;#userId&quot;).focus();
                    } else {
                        if(confirm(&quot;사용 가능한 아이디 입니다. '&quot; + $(&quot;#userId&quot;).val() + 
                                &quot;'를(을) 사용하시겠습니까?&quot;)) {
                            checkId = true;
                            $(&quot;#btnIdCheck&quot;).attr(&quot;disabled&quot;, true);
                        }
                    }
                },
                error: function(e){
                    console.log(e);
                }
            })				
        });

        // 아이디 중복체크 후 다시 아이디를 변경했을 때
        $(&quot;#userId&quot;).on(&quot;change&quot;,function(){
            checkId = false;
            $(&quot;#btnIdCheck&quot;).attr(&quot;disabled&quot;, false);
        });

        // 아이디 유효성 - 영문, 숫자 조합으로 8~16자리
        $(&quot;#userId&quot;).on(&quot;change&quot;, function(){
            var regexId = /^(?=.*[a-zA-Z])(?=.*[0-9]).{8,16}$/;
            var resultId = regexId.exec($(&quot;#userId&quot;).val());

              if(resultId != null){
                  $(&quot;#idValidation&quot;).hide(); 
               }else{
                   $(&quot;#idValidation&quot;).show();
                   $(&quot;#userId&quot;).focus();
                   $(&quot;#btnIdCheck&quot;).attr(&quot;disabled&quot;, true);
               }
        });
    });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ajax 이용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아이디 중복체크 했는데 또 다시 아이디 변경하면 중복체크한 버튼 다시 눌리도록 설정해줌.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;169&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFrSEN/btrURPJoRd1/OMCkKOa7dBGZpLwkJk1cSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFrSEN/btrURPJoRd1/OMCkKOa7dBGZpLwkJk1cSk/img.png&quot; data-alt=&quot;아이디 유효성 검사&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFrSEN/btrURPJoRd1/OMCkKOa7dBGZpLwkJk1cSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFrSEN%2FbtrURPJoRd1%2FOMCkKOa7dBGZpLwkJk1cSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;419&quot; height=&quot;128&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아이디 유효성 검사&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lRfV3/btrUNqKTyqL/Lp6KwESzREkLDcvS8ZyERK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lRfV3/btrUNqKTyqL/Lp6KwESzREkLDcvS8ZyERK/img.png&quot; data-alt=&quot;alert 창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lRfV3/btrUNqKTyqL/Lp6KwESzREkLDcvS8ZyERK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlRfV3%2FbtrUNqKTyqL%2FLp6KwESzREkLDcvS8ZyERK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;414&quot; height=&quot;133&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;alert 창&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AI8ks/btrUN148FiA/cWmfJOaXQyi0bn7pcinbrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AI8ks/btrUN148FiA/cWmfJOaXQyi0bn7pcinbrK/img.png&quot; data-alt=&quot;중복된 아이디일 때&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AI8ks/btrUN148FiA/cWmfJOaXQyi0bn7pcinbrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAI8ks%2FbtrUN148FiA%2FcWmfJOaXQyi0bn7pcinbrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;427&quot; height=&quot;281&quot; data-origin-width=&quot;673&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;중복된 아이디일 때&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;lt; script &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비밀번호 - 일치 및 유효성 검사&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1672227940893&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    $(function(){
        // 비밀번호가 형식에 맞는지
        var pwValidation = false;
        // 비밀번호 확인란과 일치하는지
        var pwCheck = false;

        $(&quot;#pwValidation&quot;).hide();
        $(&quot;#pwCheckResult&quot;).hide();
 
        // 비밀번호 유효성 검사 - 영문, 숫자, 특수문자 조합으로 8~16자리
        function validatePassword(character){
            return /^(?=.*[a-zA-Z])(?=.*[!@#$%^&amp;amp;*+=-])(?=.*[0-9]).{8,16}$/.test(character);
        }
        
        // 비밀번호 입력될때마다 유효성 검사
        $(&quot;#userPw&quot;).on(&quot;change&quot;,function(){
            // 비밀번호 유효성 처리
            if(!validatePassword($(&quot;#userPw&quot;).val())){
                pwValidation = false;
                $(&quot;#pwValidation&quot;).show();
                $(&quot;#userPw&quot;).focus();
            } else {
                pwValidation = true;
                $(&quot;#pwValidation&quot;).hide();
            }

            // 비밀번호 확인까지 입력한 후 다시 비밀번호 재설정할 경우
            if($(&quot;#userPw&quot;).val() == $(&quot;#userPwCheck&quot;).val()){
                pwCheck = true;
                $(&quot;#pwCheckResult&quot;).css(&quot;color&quot;, &quot;green&quot;);
                $(&quot;#pwCheckResult&quot;).text(&quot;비밀번호가 일치합니다.&quot;);
            } else {
                pwCheck = false;
                $(&quot;#pwCheckResult&quot;).css(&quot;color&quot;, &quot;red&quot;);
                $(&quot;#pwCheckResult&quot;).text(&quot;비밀번호가 일치하지 않습니다.&quot;);
            }
        });

        // 비밀번호 확인란 입력할 때 일치하는지
        $(&quot;#userPwCheck&quot;).on(&quot;change&quot;, function(){
            $(&quot;#pwCheckResult&quot;).show();

            if($(&quot;#userPw&quot;).val() == $(&quot;#userPwCheck&quot;).val()){
                pwCheck = true;
                $(&quot;#pwCheckResult&quot;).css(&quot;color&quot;, &quot;green&quot;);
                $(&quot;#pwCheckResult&quot;).text(&quot;비밀번호가 일치합니다.&quot;);
            } else {
                pwCheck = false;
                $(&quot;#pwCheckResult&quot;).css(&quot;color&quot;, &quot;red&quot;);
                $(&quot;#pwCheckResult&quot;).text(&quot;비밀번호가 일치하지 않습니다.&quot;);
            }
        });
    });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비밀번호는 입력할때마다 유효성 검사하게 설정&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlXMoF/btrURPCEKAf/W9MykalXyxcIeWJ1Jjwi5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlXMoF/btrURPCEKAf/W9MykalXyxcIeWJ1Jjwi5K/img.png&quot; data-alt=&quot;유효성에 맞지 않을 시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlXMoF/btrURPCEKAf/W9MykalXyxcIeWJ1Jjwi5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlXMoF%2FbtrURPCEKAf%2FW9MykalXyxcIeWJ1Jjwi5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;122&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;128&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유효성에 맞지 않을 시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FW5Hk/btrURlhwQAO/9zBwktYPmcKng4hhElKyKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FW5Hk/btrURlhwQAO/9zBwktYPmcKng4hhElKyKk/img.png&quot; data-alt=&quot;올바른 유효성일때 빨간 문구가 사라진다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FW5Hk/btrURlhwQAO/9zBwktYPmcKng4hhElKyKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFW5Hk%2FbtrURlhwQAO%2F9zBwktYPmcKng4hhElKyKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;109&quot; data-origin-width=&quot;486&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;올바른 유효성일때 빨간 문구가 사라진다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AFQnv/btrUN2bVMkU/GGUWKBu6MISGHgAZwkmPik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AFQnv/btrUN2bVMkU/GGUWKBu6MISGHgAZwkmPik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AFQnv/btrUN2bVMkU/GGUWKBu6MISGHgAZwkmPik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAFQnv%2FbtrUN2bVMkU%2FGGUWKBu6MISGHgAZwkmPik%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;807&quot; height=&quot;244&quot; data-origin-width=&quot;1612&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; Controller &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;닉네임 - 중복체크 및 유효성 검사&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672238702021&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Controller
@RequestMapping(&quot;/user&quot;)
public class UserController {
	@Autowired
	private UserService userService;
	
	// 닉네임 중복체크
	@PostMapping(&quot;/nicknameCheck.do&quot;)
	@ResponseBody
	public String nicknameCheck(UserVO userVO) throws JsonProcessingException {
		System.out.println(userVO.getUserNickname());

		String returnStr =&quot;&quot;;
		int nickCnt=userService.nicknameCheck(userVO.getUserNickname());
		
		if(nickCnt &amp;gt; 0) {
			returnStr =&quot;duplicatedNickname&quot;;
			
		}else {
			returnStr = &quot;nicknameOk&quot;;
		}
		return returnStr;	
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;service , serviceimpl, DAO 파일&amp;nbsp;모두 위에 아이디 중복체크와 같은 방식으로 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;mappte.xml&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672239191817&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&amp;gt;

&amp;lt;mapper namespace=&quot;UserDAO&quot;&amp;gt;
	&amp;lt;!-- 쿼리 작성 영역 --&amp;gt;
	&amp;lt;select id=&quot;nicknameCheck&quot; parameterType=&quot;String&quot; resultType=&quot;int&quot;&amp;gt;
		SELECT COUNT(USER_NICKNAME)
			FROM AL_USER
			WHERE USER_NICKNAME = #{userNickname}	
	&amp;lt;/select&amp;gt;
&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;lt; script &amp;gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;닉네임 - 중복체크 및 유효성 검사&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672228631856&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    $(function(){
        // 닉네임 중복체크
        var nicknameCheck = false;
        // 닉에임이 형식에 맞는지
        var nickValidation = false;

        $(&quot;#nickValidation&quot;).hide();

        // 닉네임 중복체크
        $(&quot;#btnNickCheck&quot;).on(&quot;click&quot;,function(){
            $.ajax({
                url: '/user/nicknameCheck.do',
                type: 'post',
                data: $(&quot;#joinForm&quot;).serialize(),
                success: function(obj){
                    console.log(obj);

                    if(obj == 'duplicatedNickname'){
                        alert(&quot;중복된 닉네임 입니다.&quot;);
                        $(&quot;#userNickname&quot;).focus();
                    } else {
                        if(confirm(&quot;사용 가능한 닉네임 입니다. '&quot; + $(&quot;#userNickname&quot;).val() + 
                                &quot;'를(을) 사용하시겠습니까?&quot;)) {
                            nicknameCheck = true;
                            $(&quot;#btnNickCheck&quot;).attr(&quot;disabled&quot;, true);
                        }
                    }
                },
                error: function(e){
                    console.log(e);
                }
            })

        });

        // 닉네임 중복체크 후 다시 변경
        $(&quot;#userNickname&quot;).on(&quot;change&quot;,function(){
            nicknameCheck = false;
            $(&quot;#btnNickCheck&quot;).attr(&quot;disabled&quot;, false);
        });

        // 닉넴 유효성 - 영문, 한글, 숫자 조합으로 2~10자리
        $(&quot;#userNickname&quot;).on(&quot;change&quot;, function(){
            var regexNick = /^(?=.*[a-z0-9가-힣])[a-z0-9가-힣]{2,10}$/;
            var resultNick = regexNick.exec($(&quot;#userNickname&quot;).val());

              if(resultNick != null){
                  $(&quot;#nickValidation&quot;).hide(); 
               }else{
                   $(&quot;#nickValidation&quot;).show();
                   $(&quot;#userNickname&quot;).focus();
                   $(&quot;#btnNickCheck&quot;).attr(&quot;disabled&quot;, true);
               }
        });
    });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tbs70/btrURmgp6UC/090KjVSh6geIdKYTeTMPW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tbs70/btrURmgp6UC/090KjVSh6geIdKYTeTMPW1/img.png&quot; data-alt=&quot;올바른 유호성일 때 빨간 문구가 사라진다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tbs70/btrURmgp6UC/090KjVSh6geIdKYTeTMPW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftbs70%2FbtrURmgp6UC%2F090KjVSh6geIdKYTeTMPW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;416&quot; height=&quot;229&quot; data-origin-width=&quot;490&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;올바른 유호성일 때 빨간 문구가 사라진다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJ1Gl8/btrUQcd1lbN/U7PP4f3YAKYvHkI82SrkK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJ1Gl8/btrUQcd1lbN/U7PP4f3YAKYvHkI82SrkK1/img.png&quot; data-alt=&quot;alert 창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJ1Gl8/btrUQcd1lbN/U7PP4f3YAKYvHkI82SrkK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ1Gl8%2FbtrUQcd1lbN%2FU7PP4f3YAKYvHkI82SrkK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;479&quot; height=&quot;154&quot; data-origin-width=&quot;665&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;alert 창&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;중복체크 하지 않고 회원가입 버튼 클릭시&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672228374258&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    $(function(){
        // 회원가입 제출했을 때
        $(&quot;#joinForm&quot;).on(&quot;submit&quot;, function(e){
            // 아이디 중복체크가 안됐거나, 중복된 아이디 사용했을 때
            if(!checkId) {
                alert(&quot;아이디 중복체크를 진행하세요.&quot;);
                $(&quot;#userId&quot;).focus();
                e.preventDefault();
                return false;
            } 

            // 비밀번호 유효성 검사가 틀렸을 때
            if(!pwValidation){
                alert(&quot;영문, 숫자, 특수문자 조합의 8~16자리로 설정하세요.&quot;);
                $(&quot;#userPw&quot;).focus();
                e.preventDefault();
                return;
            }
            // 비밀번호와 비밀번호 확인이 일치하지 않을 때
            if(!pwCheck) {
                alert(&quot;비밀번호가 일치하지 않습니다.&quot;);
                $(&quot;#userPwCheck&quot;).focus();
                e.preventDefault();
                return;
            }

            // 닉네임 중복체크
            if(!nicknameCheck) {
                alert(&quot;닉네임 중복체크를 진행하세요.&quot;);
                $(&quot;#userNickname&quot;).focus();
                e.preventDefault();
                return false;
            } 
            // 모두 true일 경우 아무것도 작성하지 X
            alert(&quot;회원가입이 완료되었습니다!&quot;);
        });
    });
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;1043&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgdAiq/btrUN1KQfQQ/yxFsOjl79CgL8GM93U8OM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgdAiq/btrUN1KQfQQ/yxFsOjl79CgL8GM93U8OM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgdAiq/btrUN1KQfQQ/yxFsOjl79CgL8GM93U8OM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgdAiq%2FbtrUN1KQfQQ%2FyxFsOjl79CgL8GM93U8OM0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;771&quot; height=&quot;643&quot; data-origin-width=&quot;1251&quot; data-origin-height=&quot;1043&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;회원가입 성공&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1672239966199&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;  
  $(function() {
     //회원가입 성공 시 메시지 출력
     if($(&quot;#joinMsg&quot;).val() != &quot;&quot; &amp;amp;&amp;amp; $(&quot;#joinMsg&quot;).val() != null) {
        alert($(&quot;#joinMsg&quot;).val());
     }
 &amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pjcTM/btrULNT35cx/vEnbBKoWCv0gOjCaAj9lWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pjcTM/btrULNT35cx/vEnbBKoWCv0gOjCaAj9lWK/img.png&quot; data-alt=&quot;alert창&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pjcTM/btrULNT35cx/vEnbBKoWCv0gOjCaAj9lWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpjcTM%2FbtrULNT35cx%2FvEnbBKoWCv0gOjCaAj9lWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;426&quot; height=&quot;117&quot; data-origin-width=&quot;670&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;alert창&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/Mini Project</category>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/255</guid>
      <comments>https://error-out.tistory.com/255#entry255comment</comments>
      <pubDate>Wed, 28 Dec 2022 20:27:43 +0900</pubDate>
    </item>
    <item>
      <title>FileZilla 설치하기</title>
      <link>https://error-out.tistory.com/247</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://filezilla-project.org/download.php?platform=win64#close&quot;&gt;https://filezilla-project.org/download.php?platform=win64#close&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;1053&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHbB8W/btrTLKJFg6Q/Kqe2OAFW5wOnsAiXOqnLWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHbB8W/btrTLKJFg6Q/Kqe2OAFW5wOnsAiXOqnLWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHbB8W/btrTLKJFg6Q/Kqe2OAFW5wOnsAiXOqnLWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHbB8W%2FbtrTLKJFg6Q%2FKqe2OAFW5wOnsAiXOqnLWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;429&quot; height=&quot;336&quot; data-origin-width=&quot;1343&quot; data-origin-height=&quot;1053&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1177&quot; data-origin-height=&quot;849&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF5NBE/btrTJwshKGS/2uKPYh2e93F3Cnek0rekL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF5NBE/btrTJwshKGS/2uKPYh2e93F3Cnek0rekL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF5NBE/btrTJwshKGS/2uKPYh2e93F3Cnek0rekL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF5NBE%2FbtrTJwshKGS%2F2uKPYh2e93F3Cnek0rekL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;409&quot; data-origin-width=&quot;1177&quot; data-origin-height=&quot;849&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnD72D/btrTOfhN9GL/fW9xhcfG8MZYUpzMvR4B2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnD72D/btrTOfhN9GL/fW9xhcfG8MZYUpzMvR4B2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnD72D/btrTOfhN9GL/fW9xhcfG8MZYUpzMvR4B2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnD72D%2FbtrTOfhN9GL%2FfW9xhcfG8MZYUpzMvR4B2k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;409&quot; height=&quot;333&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/247</guid>
      <comments>https://error-out.tistory.com/247#entry247comment</comments>
      <pubDate>Fri, 16 Dec 2022 10:56:13 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] SpringBoot 배포</title>
      <link>https://error-out.tistory.com/245</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 환경설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://error-out.tistory.com/243&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://error-out.tistory.com/243&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;970&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7TNTV/btrTKJpUvE9/6TRU6iguabULOOEkE3Zxfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7TNTV/btrTKJpUvE9/6TRU6iguabULOOEkE3Zxfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7TNTV/btrTKJpUvE9/6TRU6iguabULOOEkE3Zxfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7TNTV%2FbtrTKJpUvE9%2F6TRU6iguabULOOEkE3Zxfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1153&quot; height=&quot;970&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;970&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmvEkr/btrTKb8iYQH/zwd5OH5eMIcZqZv1oXMhCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmvEkr/btrTKb8iYQH/zwd5OH5eMIcZqZv1oXMhCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmvEkr/btrTKb8iYQH/zwd5OH5eMIcZqZv1oXMhCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmvEkr%2FbtrTKb8iYQH%2Fzwd5OH5eMIcZqZv1oXMhCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1516&quot; height=&quot;1020&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;1020&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1936&quot; data-origin-height=&quot;1371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3gLn6/btrTGZ1TFHk/jMSbVkEEqMth2R493KKkWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3gLn6/btrTGZ1TFHk/jMSbVkEEqMth2R493KKkWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3gLn6/btrTGZ1TFHk/jMSbVkEEqMth2R493KKkWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3gLn6%2FbtrTGZ1TFHk%2FjMSbVkEEqMth2R493KKkWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1936&quot; height=&quot;1371&quot; data-origin-width=&quot;1936&quot; data-origin-height=&quot;1371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Jar 실행&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1805&quot; data-origin-height=&quot;120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIjUSR/btrTGk6rAAf/hJiS6txJwOkck0uDJDSNSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIjUSR/btrTGk6rAAf/hJiS6txJwOkck0uDJDSNSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIjUSR/btrTGk6rAAf/hJiS6txJwOkck0uDJDSNSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIjUSR%2FbtrTGk6rAAf%2FhJiS6txJwOkck0uDJDSNSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1805&quot; height=&quot;120&quot; data-origin-width=&quot;1805&quot; data-origin-height=&quot;120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;root@ip-172-31-11-244:/home/ubuntu#&amp;nbsp;java&amp;nbsp;-jar&amp;nbsp;_07_SpringBoot_SpringSecurity-0.0.1-SNAPSHOT.jar&amp;nbsp;java&amp;nbsp;-jar&amp;nbsp;_07_SpringBoot_SpringSecurity-0.0.1-SNAPSHOT.jar&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;731&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNsq3b/btrTKbOburH/4MWo43GmxuVbNOskycvRZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNsq3b/btrTKbOburH/4MWo43GmxuVbNOskycvRZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNsq3b/btrTKbOburH/4MWo43GmxuVbNOskycvRZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNsq3b%2FbtrTKbOburH%2F4MWo43GmxuVbNOskycvRZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1394&quot; height=&quot;731&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;731&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글 2개 있으니까&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;771&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj4hDa/btrTLIKYwDN/GormSW7LJH4uMAEkTK3ddK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj4hDa/btrTLIKYwDN/GormSW7LJH4uMAEkTK3ddK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj4hDa/btrTLIKYwDN/GormSW7LJH4uMAEkTK3ddK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj4hDa%2FbtrTLIKYwDN%2FGormSW7LJH4uMAEkTK3ddK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1198&quot; height=&quot;771&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;771&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;board 3번부터 시작하니까 NEXT_VAL= 3으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1397&quot; data-origin-height=&quot;1136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mahGv/btrTJvF8fuG/EZtTIKjE0eXyxuDDFYiGm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mahGv/btrTJvF8fuG/EZtTIKjE0eXyxuDDFYiGm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mahGv/btrTJvF8fuG/EZtTIKjE0eXyxuDDFYiGm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmahGv%2FbtrTJvF8fuG%2FEZtTIKjE0eXyxuDDFYiGm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1397&quot; height=&quot;1136&quot; data-origin-width=&quot;1397&quot; data-origin-height=&quot;1136&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X4E9M/btrTIsXdvPw/15gU4bUgU5Z1ECT0i1wff0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X4E9M/btrTIsXdvPw/15gU4bUgU5Z1ECT0i1wff0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X4E9M/btrTIsXdvPw/15gU4bUgU5Z1ECT0i1wff0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX4E9M%2FbtrTIsXdvPw%2F15gU4bUgU5Z1ECT0i1wff0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1392&quot; height=&quot;786&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;786&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 글 번호가 순서대로 되지 않는다면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;789&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu02XO/btrTHPEPKbp/gcxfzd4cODjXTADMH81gY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu02XO/btrTHPEPKbp/gcxfzd4cODjXTADMH81gY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu02XO/btrTHPEPKbp/gcxfzd4cODjXTADMH81gY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu02XO%2FbtrTHPEPKbp%2Fgcxfzd4cODjXTADMH81gY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1266&quot; height=&quot;789&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;789&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서대로 진행하기. (ex. 3번부터 시작한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/AWS</category>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/245</guid>
      <comments>https://error-out.tistory.com/245#entry245comment</comments>
      <pubDate>Thu, 15 Dec 2022 16:52:16 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] Linux Utuntu EC2 환경설정</title>
      <link>https://error-out.tistory.com/243</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1671153186770&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;company&quot; data-og-title=&quot;무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어&quot; data-og-description=&quot;Q: AWS 프리 티어란 무엇입니까? AWS 프리 티어는 고객에게 서비스별로 지정된 한도 내에서 무료로 AWS 서비스를 살펴보고 사용해 볼 수 있는 기능을 제공합니다. 프리 티어는 12개월 프리 티어, 상&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/free/?trk=fa2d6ba3-df80-4d24-a453-bf30ad163af9&amp;amp;sc_channel=ps&amp;amp;s_kwcid=AL!4422!3!563761819834!e!!g!!aws&amp;amp;ef_id=Cj0KCQiAqOucBhDrARIsAPCQL1Z0cFu-e-45ydhMGvrjLXcO7i3mHMF-olYXRzrVBuUqdEYthYnO_88aAhTCEALw_wcB:G:s&amp;amp;s_kwcid=AL!4422!3!563761819834!e!!g!!aws&amp;amp;all-free-tier.sort-by=item.additionalFields.SortRank&amp;amp;all-free-tier.sort-order=asc&amp;amp;awsf.Free%20Tier%20Types=*all&amp;amp;awsf.Free%20Tier%20Categories=*all&quot; data-og-url=&quot;https://aws.amazon.com/ko/free/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/L8Xci/hyQU1TAmgI/wKcWAE7JvABUmkIDvjSLVk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bbfeZu/hyQU3KDJb6/A75mL2tXPC2yq40UkbTbU1/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/free/?trk=fa2d6ba3-df80-4d24-a453-bf30ad163af9&amp;amp;sc_channel=ps&amp;amp;s_kwcid=AL!4422!3!563761819834!e!!g!!aws&amp;amp;ef_id=Cj0KCQiAqOucBhDrARIsAPCQL1Z0cFu-e-45ydhMGvrjLXcO7i3mHMF-olYXRzrVBuUqdEYthYnO_88aAhTCEALw_wcB:G:s&amp;amp;s_kwcid=AL!4422!3!563761819834!e!!g!!aws&amp;amp;all-free-tier.sort-by=item.additionalFields.SortRank&amp;amp;all-free-tier.sort-order=asc&amp;amp;awsf.Free%20Tier%20Types=*all&amp;amp;awsf.Free%20Tier%20Categories=*all&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/free/?trk=fa2d6ba3-df80-4d24-a453-bf30ad163af9&amp;amp;sc_channel=ps&amp;amp;s_kwcid=AL!4422!3!563761819834!e!!g!!aws&amp;amp;ef_id=Cj0KCQiAqOucBhDrARIsAPCQL1Z0cFu-e-45ydhMGvrjLXcO7i3mHMF-olYXRzrVBuUqdEYthYnO_88aAhTCEALw_wcB:G:s&amp;amp;s_kwcid=AL!4422!3!563761819834!e!!g!!aws&amp;amp;all-free-tier.sort-by=item.additionalFields.SortRank&amp;amp;all-free-tier.sort-order=asc&amp;amp;awsf.Free%20Tier%20Types=*all&amp;amp;awsf.Free%20Tier%20Categories=*all&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/L8Xci/hyQU1TAmgI/wKcWAE7JvABUmkIDvjSLVk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/bbfeZu/hyQU3KDJb6/A75mL2tXPC2yq40UkbTbU1/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;무료 클라우드 컴퓨팅 서비스 - AWS 프리 티어&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Q: AWS 프리 티어란 무엇입니까? AWS 프리 티어는 고객에게 서비스별로 지정된 한도 내에서 무료로 AWS 서비스를 살펴보고 사용해 볼 수 있는 기능을 제공합니다. 프리 티어는 12개월 프리 티어, 상&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/plIwE/btrTIs9nWEU/k5qZKyIpFyPmdUZps2m0R1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/plIwE/btrTIs9nWEU/k5qZKyIpFyPmdUZps2m0R1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/plIwE/btrTIs9nWEU/k5qZKyIpFyPmdUZps2m0R1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FplIwE%2FbtrTIs9nWEU%2Fk5qZKyIpFyPmdUZps2m0R1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;215&quot; height=&quot;270&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;aws 무료 가입&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 1년 무료 (이후 사용은 자동 결제 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;nbsp; 인스턴스 중지 = 클라우드 OFF&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;-&amp;nbsp; 인스턴스 종료 = 인스턴스 삭제 ( 종료해야 결제 안 됨)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvXhsz/btrTHQiat1N/q4jukJxpRTfLgQqNYkrjUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvXhsz/btrTHQiat1N/q4jukJxpRTfLgQqNYkrjUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvXhsz/btrTHQiat1N/q4jukJxpRTfLgQqNYkrjUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvXhsz%2FbtrTHQiat1N%2Fq4jukJxpRTfLgQqNYkrjUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;792&quot; height=&quot;175&quot; data-origin-width=&quot;1554&quot; data-origin-height=&quot;344&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;EC2 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1779&quot; data-origin-height=&quot;673&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqSUSa/btrTEXJyzGe/trGS00VmmRKUhcb9lvOEF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqSUSa/btrTEXJyzGe/trGS00VmmRKUhcb9lvOEF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqSUSa/btrTEXJyzGe/trGS00VmmRKUhcb9lvOEF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqSUSa%2FbtrTEXJyzGe%2FtrGS00VmmRKUhcb9lvOEF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;799&quot; height=&quot;302&quot; data-origin-width=&quot;1779&quot; data-origin-height=&quot;673&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2195&quot; data-origin-height=&quot;622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg22mp/btrTDlRUQnr/D4tZyWIiuY3CfpWu9WHkj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg22mp/btrTDlRUQnr/D4tZyWIiuY3CfpWu9WHkj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg22mp/btrTDlRUQnr/D4tZyWIiuY3CfpWu9WHkj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg22mp%2FbtrTDlRUQnr%2FD4tZyWIiuY3CfpWu9WHkj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;227&quot; data-origin-width=&quot;2195&quot; data-origin-height=&quot;622&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;서버 사용할수록 여기에 추가됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인스턴스 시작 눌러서 설정해주기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;1159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddkWaG/btrTHPQ4JO3/FiiiqXUvDF3CZFIpscFj91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddkWaG/btrTHPQ4JO3/FiiiqXUvDF3CZFIpscFj91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddkWaG/btrTHPQ4JO3/FiiiqXUvDF3CZFIpscFj91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddkWaG%2FbtrTHPQ4JO3%2FFiiiqXUvDF3CZFIpscFj91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;508&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;1159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p id=&quot;2-%EC%9A%B0%EB%B6%84%ED%88%AC-%EB%A6%AC%EB%88%85%EC%8A%A4ubuntu-linux&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Ubuntu Linux&amp;nbsp;18.04 설정&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;832&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mjEr7/btrTFgoAS29/kWasMBoCbOCXKskeWnsvP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mjEr7/btrTFgoAS29/kWasMBoCbOCXKskeWnsvP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mjEr7/btrTFgoAS29/kWasMBoCbOCXKskeWnsvP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmjEr7%2FbtrTFgoAS29%2FkWasMBoCbOCXKskeWnsvP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;605&quot; height=&quot;636&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;832&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우는.ppk / 맥북은 .pem 으로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;키페어 생성 누르면 .ppk 파일이 다운 받아진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;&lt;i&gt;키페어 털리면 요금 폭탄&lt;/i&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;&lt;i&gt;깃(git)에 올리지 말 것!&lt;/i&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;네트워크 설정 &amp;gt; 편집 &amp;gt; 보안 그룹 규칙 추가 4개&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSMm6K/btrTEX3QxGW/TrmTUxAOfgK4kECAkPkiyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSMm6K/btrTEX3QxGW/TrmTUxAOfgK4kECAkPkiyk/img.png&quot; data-alt=&quot;소스 유형 - 위치 무관&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSMm6K/btrTEX3QxGW/TrmTUxAOfgK4kECAkPkiyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSMm6K%2FbtrTEX3QxGW%2FTrmTUxAOfgK4kECAkPkiyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;652&quot; height=&quot;226&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;316&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;소스 유형 - 위치 무관&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;1336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqbuDU/btrTFJRCkQM/Bp0mknBBsPClV0gtHWICD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqbuDU/btrTFJRCkQM/Bp0mknBBsPClV0gtHWICD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqbuDU/btrTFJRCkQM/Bp0mknBBsPClV0gtHWICD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqbuDU%2FbtrTFJRCkQM%2FBp0mknBBsPClV0gtHWICD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;712&quot; height=&quot;1028&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;1336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;보안 그룹 규칙1)&amp;nbsp;웹 서버에 포트 열어주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;보안 그룹 규칙2) MYSQL 3306 포트로 열어주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;보안 그룹 규칙3) tomcat, was에 8080 포트로 열어주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;보안 그룹 규칙4) springboot에 9090 포트로 열어주기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;0.0.0.0/0 어떤 아이피에 :/0 어떤 포트를 접속해서 열어주는&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #16191f;&quot;&gt;(소스가 0.0.0.0/0인 규칙은 모든 IP 주소에서 인스턴스에 액세스하도록 허용합니다. 알려진 IP 주소의 액세스만 허용하도록 보안 그룹을 설정하는 것이 좋습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w00ud/btrTFmbckik/Ndg7dBQ99ciw2nJB4lBq3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w00ud/btrTFmbckik/Ndg7dBQ99ciw2nJB4lBq3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w00ud/btrTFmbckik/Ndg7dBQ99ciw2nJB4lBq3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw00ud%2FbtrTFmbckik%2FNdg7dBQ99ciw2nJB4lBq3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;719&quot; height=&quot;342&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기까지 설정하고 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;인스턴스 시작&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pyObg/btrTLEJki62/O35Hwjw45u9gMpaXGGnYsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pyObg/btrTLEJki62/O35Hwjw45u9gMpaXGGnYsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pyObg/btrTLEJki62/O35Hwjw45u9gMpaXGGnYsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpyObg%2FbtrTLEJki62%2FO35Hwjw45u9gMpaXGGnYsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;775&quot; height=&quot;537&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;882&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #0593d3; color: #ffffff;&quot;&gt;&lt;b&gt;윈도우&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;맥북&lt;/span&gt;- &lt;span style=&quot;background-color: #ffffff;&quot;&gt;복사&lt;/span&gt;에서 터미널에 복붙&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;PuTTY&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBQt4t/btrTYCjAL1f/LxuuVn3c6ZfEyk2xmyKZ8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBQt4t/btrTYCjAL1f/LxuuVn3c6ZfEyk2xmyKZ8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBQt4t/btrTYCjAL1f/LxuuVn3c6ZfEyk2xmyKZ8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBQt4t%2FbtrTYCjAL1f%2FLxuuVn3c6ZfEyk2xmyKZ8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;577&quot; height=&quot;580&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;670&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Session에서 host name에 &lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #0593d3;&quot;&gt;퍼블릭 DNS&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; 쓰기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjp2VK/btrTR932BBL/vpAAXGbNOkmGCl8aSLfGi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjp2VK/btrTR932BBL/vpAAXGbNOkmGCl8aSLfGi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjp2VK/btrTR932BBL/vpAAXGbNOkmGCl8aSLfGi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcjp2VK%2FbtrTR932BBL%2FvpAAXGbNOkmGCl8aSLfGi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;592&quot; height=&quot;598&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;668&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;SSH &amp;gt; Auth &amp;gt; Credentials &amp;gt; 브라우저 누르고 .ppk 파일 가지고 오기 &amp;gt; open&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q4Wg6/btrTJvSn3Cs/2W7oSLRq0c5uuVOU5xnoR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q4Wg6/btrTJvSn3Cs/2W7oSLRq0c5uuVOU5xnoR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q4Wg6/btrTJvSn3Cs/2W7oSLRq0c5uuVOU5xnoR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq4Wg6%2FbtrTJvSn3Cs%2F2W7oSLRq0c5uuVOU5xnoR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;502&quot; height=&quot;296&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/31P1e/btrTEzh9tAe/JhnGLccvk1YVQNFTZHpg0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/31P1e/btrTEzh9tAe/JhnGLccvk1YVQNFTZHpg0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/31P1e/btrTEzh9tAe/JhnGLccvk1YVQNFTZHpg0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F31P1e%2FbtrTEzh9tAe%2FJhnGLccvk1YVQNFTZHpg0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;491&quot; height=&quot;261&quot; data-origin-width=&quot;839&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;인스터스에서 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;사용자이름&lt;/span&gt;&lt;/b&gt; 확인 &amp;gt; 입력하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8YocD/btrTDYPN9qO/Pbn2X3dwN686AZFLVUVqpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8YocD/btrTDYPN9qO/Pbn2X3dwN686AZFLVUVqpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8YocD/btrTDYPN9qO/Pbn2X3dwN686AZFLVUVqpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8YocD%2FbtrTDYPN9qO%2FPbn2X3dwN686AZFLVUVqpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;614&quot; height=&quot;155&quot; data-origin-width=&quot;897&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;사용자 이름&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;cd .. 상위폴더 가기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;cd / 폴더이름 - 폴더 이름로 가기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ls 지금 현재 잇는 폴더에 파일이나 디렉토리 확인하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ls -i&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ls -a 숨긴 파일까지 볼 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ls -s 파일 크기 순으로 보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;sudo su - 관리자 권한으로 바뀜 &amp;gt; root ~ #으로 표시됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgtpKU/btrTGmaLTxL/XPnKI3R7Qum1cyIoKJPXq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgtpKU/btrTGmaLTxL/XPnKI3R7Qum1cyIoKJPXq1/img.png&quot; data-alt=&quot;안돼면,&amp;amp;amp;nbsp; # cd .home/사용자이름&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgtpKU/btrTGmaLTxL/XPnKI3R7Qum1cyIoKJPXq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgtpKU%2FbtrTGmaLTxL%2FXPnKI3R7Qum1cyIoKJPXq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;779&quot; height=&quot;67&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;안돼면,&amp;amp;nbsp; # cd .home/사용자이름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;JAVA 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;apt-get install openjdk-11-jdk 입력 &amp;gt; y 입력 &amp;gt; 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;which java 경로 찾기 &amp;gt; 경로: /user/bin/java&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실제 경로 찾기 &amp;gt; readlink -f /user/bin/java&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1537&quot; data-origin-height=&quot;125&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sMobB/btrTJu62RlS/i3kTPUys9WHdnAthYzTz8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sMobB/btrTJu62RlS/i3kTPUys9WHdnAthYzTz8k/img.png&quot; data-alt=&quot;ubuntu = 사용자 이름&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sMobB/btrTJu62RlS/i3kTPUys9WHdnAthYzTz8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsMobB%2FbtrTJu62RlS%2Fi3kTPUys9WHdnAthYzTz8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1537&quot; height=&quot;125&quot; data-origin-width=&quot;1537&quot; data-origin-height=&quot;125&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ubuntu = 사용자 이름&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실제경로 &amp;gt; /usr/lib/jvm/java-11-openjdk-amd64/bin&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(여기서 bin을 지우고 /usr/lib/jvm/java-11-openjdk-amd64만 기억해둘 것)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1689&quot; data-origin-height=&quot;1119&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwdyAQ/btrTGRhoVJn/dkgPC7rxoBS7xwZtzLQK70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwdyAQ/btrTGRhoVJn/dkgPC7rxoBS7xwZtzLQK70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwdyAQ/btrTGRhoVJn/dkgPC7rxoBS7xwZtzLQK70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwdyAQ%2FbtrTGRhoVJn%2FdkgPC7rxoBS7xwZtzLQK70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1689&quot; height=&quot;1119&quot; data-origin-width=&quot;1689&quot; data-origin-height=&quot;1119&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;i 누르면 인설트 편집모드&amp;gt; esc누르면 나감&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pDFjo/btrTGZNbCE2/ktMhliqrcXKQuBGQGj1ZP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pDFjo/btrTGZNbCE2/ktMhliqrcXKQuBGQGj1ZP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pDFjo/btrTGZNbCE2/ktMhliqrcXKQuBGQGj1ZP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpDFjo%2FbtrTGZNbCE2%2FktMhliqrcXKQuBGQGj1ZP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1248&quot; height=&quot;141&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;export 경로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;esc 누르고&amp;nbsp; (ESC가 안먹힐 경우 -&amp;gt; 키보드 Fn키 풀기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;:wq 저장하고 나오기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;:q! 저장하지 않고 나오기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ctrl + c 저장하지 않고 나오기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HRPqC/btrTELJz1rc/xBxuY7kzAd3Ibhlnrhm6BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HRPqC/btrTELJz1rc/xBxuY7kzAd3Ibhlnrhm6BK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HRPqC/btrTELJz1rc/xBxuY7kzAd3Ibhlnrhm6BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHRPqC%2FbtrTELJz1rc%2FxBxuY7kzAd3Ibhlnrhm6BK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1342&quot; height=&quot;124&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;환경변수 적용 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;지정 경로 비교해보고 똑같으면 설치 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;MYSQL 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;apt-get install mysql-server 입력&amp;nbsp; &lt;span&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;y 입력 &amp;gt; 완료&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;dpkg -l | grep mysql-server&amp;nbsp; &amp;gt; 잘 설치 되었는지 확인하는 명령어&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1682&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/S9BS4/btrTHQbsJWZ/6yiq4K34caiGGJOsyJljn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/S9BS4/btrTHQbsJWZ/6yiq4K34caiGGJOsyJljn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/S9BS4/btrTHQbsJWZ/6yiq4K34caiGGJOsyJljn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FS9BS4%2FbtrTHQbsJWZ%2F6yiq4K34caiGGJOsyJljn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1682&quot; height=&quot;378&quot; data-origin-width=&quot;1682&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;5.7 버전으로 잘 설치 됨&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4RYyF/btrTHPp54pb/aFFpAa02h3dvE4YkycnAr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4RYyF/btrTHPp54pb/aFFpAa02h3dvE4YkycnAr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4RYyF/btrTHPp54pb/aFFpAa02h3dvE4YkycnAr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4RYyF%2FbtrTHPp54pb%2FaFFpAa02h3dvE4YkycnAr1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1662&quot; height=&quot;223&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;cd /etc/mysql/mysql.conf.d &amp;gt;엔터치고 &amp;gt; vi mysqld.cnf&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&amp;gt;편집기 열기&lt;br /&gt;키보드&amp;nbsp;&amp;darr;&amp;nbsp;눌러서,&amp;nbsp;bind-address에서&lt;br /&gt;로컬 호스트만 들어올 수 있게 설정(127.0.0.1)이 되어있는 것을 i를 눌러서 0.0.0.0로 편집 하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;esc 누르고 :wq 입력 (저장하고 나오기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;mysql utf-8로 변경&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;[client] &lt;br /&gt;default-character-set=utf8 &lt;br /&gt;&lt;br /&gt;[mysql] &lt;br /&gt;default-character-set=utf8 &lt;br /&gt;&lt;br /&gt;[mysqld] &lt;br /&gt;collation-server=utf8_unicode_ci &lt;br /&gt;init-connect='SET&amp;nbsp;NAMES&amp;nbsp;utf8' &lt;br /&gt;character-set-server=utf8 &lt;br /&gt;lower_case_table_names=1&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;esc 누르고 :wq 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;service mysql restart 재부팅하고 &amp;gt; mysql로 접속&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1891&quot; data-origin-height=&quot;689&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbGAMG/btrTFlKjdgM/c4Ltw7A5cbu0pTezkz3w0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbGAMG/btrTFlKjdgM/c4Ltw7A5cbu0pTezkz3w0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbGAMG/btrTFlKjdgM/c4Ltw7A5cbu0pTezkz3w0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbGAMG%2FbtrTFlKjdgM%2Fc4Ltw7A5cbu0pTezkz3w0k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1891&quot; height=&quot;689&quot; data-origin-width=&quot;1891&quot; data-origin-height=&quot;689&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;create database studydb; 스키마 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;grant&amp;nbsp;all&amp;nbsp;privileges&amp;nbsp;on&amp;nbsp;studydb.*&amp;nbsp;to&amp;nbsp;'study'@'%';&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스터디디비에 모든 권한을 스터디한테 준다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;flush privileges;&amp;nbsp; 변환준 거 저장하고&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;813&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Waamf/btrTJNFx357/LNuzqTcNAxVvpz66tnakQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Waamf/btrTJNFx357/LNuzqTcNAxVvpz66tnakQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Waamf/btrTJNFx357/LNuzqTcNAxVvpz66tnakQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWaamf%2FbtrTJNFx357%2FLNuzqTcNAxVvpz66tnakQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;748&quot; height=&quot;658&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;813&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;퍼블릭 ipv4주소&lt;/span&gt; 복사해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;hostname에 복붙&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wJbS1/btrTFYad90m/qBZMvDgyIOvV6jtH4p4AC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wJbS1/btrTFYad90m/qBZMvDgyIOvV6jtH4p4AC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wJbS1/btrTFYad90m/qBZMvDgyIOvV6jtH4p4AC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwJbS1%2FbtrTFYad90m%2FqBZMvDgyIOvV6jtH4p4AC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;465&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스키마 이름&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;886&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cslkp1/btrTGXWdbNI/pk9ki14k8k9MgGtkwVaDxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cslkp1/btrTGXWdbNI/pk9ki14k8k9MgGtkwVaDxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cslkp1/btrTGXWdbNI/pk9ki14k8k9MgGtkwVaDxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcslkp1%2FbtrTGXWdbNI%2Fpk9ki14k8k9MgGtkwVaDxK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;774&quot; height=&quot;611&quot; data-origin-width=&quot;1123&quot; data-origin-height=&quot;886&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;DDL 누르고 내용 복사해서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca3dPL/btrTF9P88AZ/ZVCaHK4QnVjzDO9S4GVL40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca3dPL/btrTF9P88AZ/ZVCaHK4QnVjzDO9S4GVL40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca3dPL/btrTF9P88AZ/ZVCaHK4QnVjzDO9S4GVL40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca3dPL%2FbtrTF9P88AZ%2FZVCaHK4QnVjzDO9S4GVL40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;743&quot; height=&quot;375&quot; data-origin-width=&quot;1676&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;붙여넣기 ENGINE-InnoDB; 까지 입력하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왼쪽 스키마 눌러서&amp;nbsp; 테이블 생성 확인할 수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;1339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/st6I3/btrTFWXOBKr/wp6E8JDMzDtY7SNj5Wneu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/st6I3/btrTFWXOBKr/wp6E8JDMzDtY7SNj5Wneu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/st6I3/btrTFWXOBKr/wp6E8JDMzDtY7SNj5Wneu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fst6I3%2FbtrTFWXOBKr%2Fwp6E8JDMzDtY7SNj5Wneu0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;779&quot; height=&quot;869&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;1339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;링크 복사해서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MDnBo/btrTFKiRCHy/yzzjWQD2brDDVpGZcdKMFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MDnBo/btrTFKiRCHy/yzzjWQD2brDDVpGZcdKMFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MDnBo/btrTFKiRCHy/yzzjWQD2brDDVpGZcdKMFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMDnBo%2FbtrTFKiRCHy%2FyzzjWQD2brDDVpGZcdKMFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2260&quot; height=&quot;754&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다운받기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;tar -zvxf a 하고 tab키 누르면 &amp;gt; 압축 풀기&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;cd apache-tomcat-9.0.70 &amp;gt;아파치 파일로 들어가서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;sh startup.sh &amp;gt;톰캣 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;http://&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;퍼블릭 ipv4주소&lt;/span&gt;:8080&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/AWS</category>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/243</guid>
      <comments>https://error-out.tistory.com/243#entry243comment</comments>
      <pubDate>Thu, 15 Dec 2022 11:06:09 +0900</pubDate>
    </item>
    <item>
      <title>[SpringBoot] OAuth 라이브러리 개념</title>
      <link>https://error-out.tistory.com/241</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. OAuth&amp;nbsp; 라이브러리란?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- Security와 함께 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- Open Authorization의 약자로 사용자들이 비밀번호는 제공하지 않고 다른 웹사이트나 어플리케이션에 존재하는 자신의 정보에 대한 접근 권한을 부여할 수 있는 개방형 접근 위임 라이브러리&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ex) 카카로 로그인시 제공 정보를 선택한 후 동의 버튼을 누르면 그 사이트에서 카카오에 저장되어 있는 내 정보에 대한 접근 권한을 받아서 사용할 수 있게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. OAuth 용어 정리&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 자원 소유자(Resource Owner): 정보를 가지고 있는 주체. 즉 사용자를 말한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 자원 서버(REsource Server): 자원 소유자에 대한 정보를 가지고 있는 서버나 어플리케이션(카카오, 네이버, 구글 등)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 인가 서버(Authorization Server): 자원 소유자를 인증하는 인증 서버. 다른 서버나 어플리케이션에서 자원 서버에 저장되어 있는 사용자 정보에 접근할 수 있는 권한을 AccesssToken을 발행해주는 서버&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 클라이언트(Client): 현재 자원 소유자가 사용하고 있는 웹사이트나 웹 어플리케이션. 자원 소유자의 동의를 통해 자원 서버에 있는 자원 소유주에 대한 정보를 취득할 수 있다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용자 &amp;rarr; 간편 로그인 &lt;span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 웹 사이트에서 자원 서버로 요청 &lt;span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 자원 서버에서 사용자가 동의했으면 AccessToken발행 &lt;span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 발행 받은 AccessToken을 통해 자원 서버에 있는 사용자 정보를 취득 &lt;span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 웹 사이트에서 취득한 사용자 정보를 활용&lt;/span&gt;&lt;/p&gt;</description>
      <category>개발/SpringBoot</category>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/241</guid>
      <comments>https://error-out.tistory.com/241#entry241comment</comments>
      <pubDate>Wed, 14 Dec 2022 12:16:10 +0900</pubDate>
    </item>
    <item>
      <title>JPA (Java Persistence API) 개념</title>
      <link>https://error-out.tistory.com/234</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JPA(Java Persistence API)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. JPA란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Java에서 사용하는 ORM(Object Relational Mapping) 기술 표준으로 인터페이스의 모음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Java Class로 RDB(Relational DataBase) 테이블간의 관계를 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인터페이스를 Hibernate, OpenJPA를 사용하여 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 영속성(Persistence)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 웹 어플리케이션이 종료되도 영원히 저장되어 있는 데이터(RDB)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 영속성 켄텍스트(Persistence Context)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 웹 어플리케이션과 DB사이에서 엔터티와 데이터의 괴리를 해소시켜주는 기능과 엔터티를 보관하는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 엔티티(Entity)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하나의 테이블에 대해 정의된 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엔티티의 모양대로 테이블이 제작되며 엔티티매니저에 의해 Select, Insert, Delete, Update 기능을 사용할 수 있게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 엔티티 매니저(Entity Manager)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엔티티를 가져가서 쿼리를 직접 수행하는 객체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엔티티 매니저를 상속받은 JpaRepository를 구현하여 DB에 접근하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. JPA (Java Persitence API)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(1) Persistence(영속성): 우리가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(2) Entity(엔티티): 실제 DB에 생성될 테이블 클래스. 테이블의 이름, 키, 컬럼들을 정의&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(3) 엔티티 클래스 선언 방식&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 1) 클래스 선언문 위에 @Entity를 붙여준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 2) 시퀀스를 만들려면 @Entity밑에 @SequenceGnerdator로 시퀀스를 만든다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 3) 테이블 컬럼들을 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 4) 키 값으로 지정될 컬럼 위에 @Id를 불여준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 5) 키 값의 전략은 @GeneratedValue를 사용하여 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;- GenerationType.IDNTITY&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;- GenerationType.SEQUENCE &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;- GenerationType.AUTO &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp;- GenerationType.TABLE&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 6) 특정 컬럼에 특정 속성(nullable, unique key 등)을 지정하고 싶으면 해당 컬럼 위에 @Column을 붙여준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 7) 테이블에 컬럼으로 생성되지 않을 변수들에는 @Transient를 붙여준다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 8) 엔티티 클래스 작성 완료 후 서버를 부팅하면 JPA가 자동으로 테이블을 생성 함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(4) 엔티티 매니저 (Entity Manager)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - 실제 쿼리를 구현하고 사용해주는 객체, JPA 초창기에는 직접 Entity Manager를 구현하여 사용함. 현재는 Entity Manager를 내부에 가지고 있는 JpaRepository를 사용하여 간편하게 구현&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(5) JpaRepository&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - save, findBy, deleteBy 등과 같은 Entity Manager의 메소드들을 정의 해놓은 인터페이스&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; - JpaRepository를 상속받은 인터페이스를 구현함으로써 Entity Manager의 메소드들을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(6) 인터페이스로 만들어도 사용할 수 있는 이유는 스프링 내부에서 해당 Repository에 대한 Proxy 객체를 만들어서 컨테이너에 등록해준다. 따라서 결국 Jpa를 동작하게 하는 클래스는 스프링에 의해 생성된 Proxy(프록시)객체이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(7) Repository 작성 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; 1) &lt;span&gt;Repository&lt;span&gt;&amp;nbsp; 인터페이스 선언&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 2) extends Jpa&lt;span&gt;Repository&lt;span&gt; &amp;lt; 해당 엔티티 클래스, 해당 엔티티 클래스의 키의 형태(Integer, String, IdClass 등) &amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 3) &lt;span&gt;Repository&lt;span&gt;&amp;nbsp; 등록 후 ServiceImpl에서 해당 &lt;span&gt;Repository&lt;span&gt; Proxy객체를 호출하여 Entity Manager의 메소드들을 사용한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ex. boardTest&lt;span&gt;Repository&lt;span&gt;.save(), &lt;span&gt;boardTest&lt;/span&gt;&lt;span&gt;Repository&lt;span&gt;.fingById() 등&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;(8) 복합키(Composite Key): 키가되는 컬럼이 두 개 이상 존재하는 엔티티에는 복합키를 설정해야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;(9) 복합키 설정 방식&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 1) 키가될 변수에 @Id를 붙여준다&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 1) 엔티티 클래스 위에 @IdClass(복합키를 가지고 있는 클래스)를 선언&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 3) 복합키를 가지고 있는 클래스를 만들어 준다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 4) 클래스의 이름은 엔티티명 + Id&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 5) 복합키를 가지고 있는 클래스에는 엔티티 클래스에 @Id로 지정된 변수들을 선언. 엔티티에 선언한 변수명과 동일하게 선언.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 6) PK면서 FK인 컬럼은 FK를 가져올 해당 엔티티 객체를 만들어서 Id로 지정 &amp;rarr; private BoardTest boardTest;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;단순 PK인 컬럼들은 객체가 아닌 값의 형태로 만들어 준다 &lt;span&gt;&amp;rarr; private int boardNo&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;(10) ORM(Object Relation Mapping) : RDB의 테이블 관계들을 객체로 매핑해주는 프레임워크&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;(11) 관계생성(Foreign key)이 ORM 프레임워크의 핵심 기능&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;(12) 관계생성&lt;span&gt;Foreign key)&lt;/span&gt; 방식&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 1) FK로 가져올 컬럼이 PK일 때&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - FK로 가져올 컬럼을 소유하고 있는 엔티티 객체를 멤버 ㅕㄴ수로 선언&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - 생성한 객체 멤버변수 위에 @Id를 붙여서 PK 지정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - @ManyToOne or @OneToOne or @OneToMany 매핑 관계를 지정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - @JoinColumn(&quot;테이블의 컬럼명&quot;) FK로 가져올 컬럼을 지정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - IdClass에 조인된 컬럼 정의&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - 컬럼의 형태로 변수 생성, 변수명은 FK가 등록된 엔티티의 객체 이름을 동일하게 써줘야 한다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ex. BoardFileTest &lt;span&gt;&amp;rarr; private BoardTest boardTest;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BoardFileTestId &lt;span&gt;&amp;rarr; private int boardTest;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 2) FK로 가져온 컬럼이 FK 역할만 할 때&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - FK로 가져올 컬럼을 소유하고 있는 엔티티 객체를 멤버 변수로 선언&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - @ManyToOne or @OneToOne or @OneToMany 매핑 관계를 지정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - @JoinColumn(&quot;테이블의 컬럼명&quot;) FK로 가져올 컬럼을 지정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; 3) FK가 여러 개일 때 (PK)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - @JoinColums(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@JoinColumn(name=&quot;테이블의 컬럼명&quot;, referenceColumnName=&quot;FK로 참조할 테이블 컬럼명&quot;),&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@JoinColumn(name=&quot;테이블의 컬럼명&quot;, referenceColumnName=&quot;FK로 참조할 테이블 컬럼명&quot;),&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@JoinColumn(name=&quot;테이블의 컬럼명&quot;, referenceColumnName=&quot;FK로 참조할 테이블 컬럼명&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; - FK 여러 개가 PK로 올 경우 : 이미 원본 테이블에도 IdClass가 지정되어 있다. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 해당 엔티티의 IdClass를 만들 경우 멤버 변수로 원본 테이블의 IdClass를 객체로 선언한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1670462080370&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;EX)

@Id
@ManyToOne
// BoardFileTest
@JoinColumns(
	@JoinColumn(name=&quot;BOARD_NO&quot;, referenceColumnName=&quot;BOARD_NO&quot;),
	@JoinColumn(name=&quot;BOARD_TITLE&quot;, referenceColumnName=&quot;BOARD_TITLE&quot;),
	@JoinColumn(name=&quot;테이블의 컬럼명&quot;, referenceColumnName=&quot;FK로 참조할 테이블 컬럼명&quot;)
) 
private BoardTest boardTest;

@Id
private int boardFileNo;

// BoardFileTestId
private int boardFileNo;
private BoardTestId boardTest;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Url 파라미터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) Url 파라미터는 주소/전달할 파라미터&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 유동적인 값을 넣는 형태의 파라미터 전달방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(3) @Mapping(&quot;/주소/{받아올 인자값}&quot;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public void 메소드명(@PathVariable int 받아올 인자값(boardNo))&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(4) th:href=&quot;@{/board/board/{boardNo}} (변수명에 어떤 값이 들어가는 지: boardNo=${board.boardNo})&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(5) 한 개의 파라미터만 전송할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 93.7209%; height: 296px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2809%; text-align: center; height: 17px;&quot;&gt;화면단&lt;/td&gt;
&lt;td style=&quot;width: 28.081%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;SpringFramwork&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.638%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;SpringBoot&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2809%; height: 17px;&quot;&gt;Framework&lt;/td&gt;
&lt;td style=&quot;width: 28.081%; height: 17px;&quot;&gt;JSP&lt;/td&gt;
&lt;td style=&quot;width: 46.638%; height: 17px;&quot;&gt;html&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2809%; height: 17px;&quot;&gt;Framework Template&lt;/td&gt;
&lt;td style=&quot;width: 28.081%; height: 17px;&quot;&gt;jstl&lt;/td&gt;
&lt;td style=&quot;width: 46.638%; height: 17px;&quot;&gt;thymeleaf&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2809%; height: 17px;&quot;&gt;Framework Controller&lt;/td&gt;
&lt;td style=&quot;width: 28.081%; height: 17px;&quot;&gt;@Controller(return String)&lt;/td&gt;
&lt;td style=&quot;width: 46.638%; height: 17px;&quot;&gt;@RestController&lt;br /&gt;(return ModekAndVies, feturn RepositoryEntity)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25.2809%; height: 20px;&quot;&gt;Service, ServiceImpl&lt;/td&gt;
&lt;td style=&quot;width: 74.719%; height: 20px; text-align: left;&quot; colspan=&quot;2&quot;&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25.2809%; height: 20px;&quot;&gt;DB 접극 객체&lt;/td&gt;
&lt;td style=&quot;width: 28.081%; height: 20px;&quot;&gt;DAO&lt;/td&gt;
&lt;td style=&quot;width: 46.638%; height: 20px;&quot;&gt;Mapper Interface, Repository Interface (혼용 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25.2809%; height: 20px;&quot;&gt;SQL Mapper&lt;/td&gt;
&lt;td style=&quot;width: 74.719%; height: 20px;&quot; colspan=&quot;2&quot;&gt;동일&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- html과 thymeleaf를 사용하기 때문에 API 구현 x&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/SpringBoot</category>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/234</guid>
      <comments>https://error-out.tistory.com/234#entry234comment</comments>
      <pubDate>Thu, 8 Dec 2022 10:17:47 +0900</pubDate>
    </item>
    <item>
      <title>Spring Tools</title>
      <link>https://error-out.tistory.com/230</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;구글 sts &amp;gt; Tools Spring &amp;gt; 4.16.1 - Window X86_64 다운&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;1259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUtgYL/btrSUp1eL0v/qruwa88Wx6jxLwCGbz6x31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUtgYL/btrSUp1eL0v/qruwa88Wx6jxLwCGbz6x31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUtgYL/btrSUp1eL0v/qruwa88Wx6jxLwCGbz6x31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUtgYL%2FbtrSUp1eL0v%2Fqruwa88Wx6jxLwCGbz6x31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;1259&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;1259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNpDBn/btrSQUU4dxH/0FetFljNfsJkPsNeJukX8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNpDBn/btrSQUU4dxH/0FetFljNfsJkPsNeJukX8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNpDBn/btrSQUU4dxH/0FetFljNfsJkPsNeJukX8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNpDBn%2FbtrSQUU4dxH%2F0FetFljNfsJkPsNeJukX8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1171&quot; height=&quot;967&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;967&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;1149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMsnc2/btrSSLKkeBQ/jmiycb1VOntjhg8gKn2Nn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMsnc2/btrSSLKkeBQ/jmiycb1VOntjhg8gKn2Nn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMsnc2/btrSSLKkeBQ/jmiycb1VOntjhg8gKn2Nn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMsnc2%2FbtrSSLKkeBQ%2Fjmiycb1VOntjhg8gKn2Nn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;647&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;1149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/230</guid>
      <comments>https://error-out.tistory.com/230#entry230comment</comments>
      <pubDate>Tue, 6 Dec 2022 09:24:13 +0900</pubDate>
    </item>
    <item>
      <title>Spring Tools 설치 환경</title>
      <link>https://error-out.tistory.com/229</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;구글 sts &amp;gt; Tools Spring &amp;gt; 4.16.1 - Window X86_64 다운&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;1259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bClFqh/btrSN0NXU1D/KXdRQOgx4CJi2oeOecLdu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bClFqh/btrSN0NXU1D/KXdRQOgx4CJi2oeOecLdu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bClFqh/btrSN0NXU1D/KXdRQOgx4CJi2oeOecLdu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbClFqh%2FbtrSN0NXU1D%2FKXdRQOgx4CJi2oeOecLdu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;535&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;1259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cG77UH/btrSOycNKTb/wTO3k34rGsKsTfWGPz0kl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cG77UH/btrSOycNKTb/wTO3k34rGsKsTfWGPz0kl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cG77UH/btrSOycNKTb/wTO3k34rGsKsTfWGPz0kl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcG77UH%2FbtrSOycNKTb%2FwTO3k34rGsKsTfWGPz0kl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1171&quot; height=&quot;967&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;967&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;1149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxI6lA/btrSM5aRpSO/kc8iohzdOwEQb7p0BVoQPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxI6lA/btrSM5aRpSO/kc8iohzdOwEQb7p0BVoQPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxI6lA/btrSM5aRpSO/kc8iohzdOwEQb7p0BVoQPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxI6lA%2FbtrSM5aRpSO%2Fkc8iohzdOwEQb7p0BVoQPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;1149&quot; data-origin-width=&quot;805&quot; data-origin-height=&quot;1149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/85zn4/btrSPQqUsy4/uPwKSatCpJJVkQr257Zick/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/85zn4/btrSPQqUsy4/uPwKSatCpJJVkQr257Zick/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/85zn4/btrSPQqUsy4/uPwKSatCpJJVkQr257Zick/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F85zn4%2FbtrSPQqUsy4%2FuPwKSatCpJJVkQr257Zick%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;630&quot; height=&quot;214&quot; data-origin-width=&quot;868&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lombok.jar 파일 있는 위치 설정한 뒤 실행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I1T6y/btrSN1fdEjw/g44KDs62oaIFoa5VGOmS20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I1T6y/btrSN1fdEjw/g44KDs62oaIFoa5VGOmS20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I1T6y/btrSN1fdEjw/g44KDs62oaIFoa5VGOmS20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI1T6y%2FbtrSN1fdEjw%2Fg44KDs62oaIFoa5VGOmS20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1428&quot; height=&quot;730&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;730&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;install/update 눌러주고&amp;nbsp; &amp;gt; 스프링 부트 재부팅&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/SpringBoot</category>
      <author>뉴NEW</author>
      <guid isPermaLink="true">https://error-out.tistory.com/229</guid>
      <comments>https://error-out.tistory.com/229#entry229comment</comments>
      <pubDate>Mon, 5 Dec 2022 14:53:32 +0900</pubDate>
    </item>
  </channel>
</rss>