2022_04_09 - oneso123456789/2022 GitHub Wiki

other

๋กœ๊ทธ ์ฒ˜๋ฆฌ ๋ฌธ์ œ ๋ฐœ์ƒ

registerํŽ˜์ด์ง€ ์ž‘์„ฑ์ค‘ ๋กœ๊ทธ๊ฐ€ ์•ˆ์ฐํžˆ๋Š” ๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋ƒ„
๋กœ๊ทธ๊ฐ€ ์•ˆ์ฐํžˆ๋Š” ๋ฌธ์ œ๋Š” ์‹œ์Šคํ…œ ๊ตฌ๋™์ƒ์—” ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹˜
ํ•˜์ง€๋งŒ ์œ ์ง€ ๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ๋ณด๋ฉด ํฐ ๋ฌธ์ œ๊ฐ€ ๋จ
์›น์ด ์–ด๋А ๋ถ€๋ถ„๊นŒ์ง€ ์ž‘๋™ํ•˜๋Š”์ง€ ์–ด๋А ๋ถ€๋ถ„์—์„œ ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธด๊ฑด์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์„œ ๊ผญ ๊ณ ์ณ์•ผํ•จ

๋กœ๊ทธ ์ฒ˜๋ฆฌ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๊ทธ๋ ‡๊ฒŒ ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ๊ณ  ๊ทธ๋ƒฅ ๋‚ด๊ฐ€ ์ฒ˜์Œ์— ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ• ๋•Œ testํŒจํ‚ค์ง€ ์ชฝ resources/log4j.xml์—๋Š” jdbc๋“œ๋ผ์ด๋ฒ„ ๋กœ๊ทธ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•ด์คŒ
๊ทธ๋ ‡์ง€๋งŒ mainํŒจํ‚ค์ง€ ์ชฝ resources/log4j.xml์—๋Š” jdbc ๋“œ๋ผ์ด๋ฒ„ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •์€ ๋ˆ„๋ฝํ•จ

<!-- 2022-01-8 log level์„ค์ •๋ถ€๋ถ„ -->
    <!-- 2022-02-11 ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•˜๋ ค๋ฉด mybatis๋ฒ„์ „์„ 3.4.6์—์„œ 3.5.4๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•จ -->
    <logger name="jdbc.audit">
        <level value="warn" />
    </logger>

    <logger name="jdbc.resultset">
        <level value="warn" />
    </logger>

    <logger name="jdbc.connection">
        <level value="warn" />
    </logger>

์ฐธ๊ณ ํ•œ ๊ณณ๊ณผ ํ”ผ๋“œ๋ฐฑ

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ๊ทธ๋ƒฅ ๋‘๊ฐœ์˜ log4j.xml์„ ๋น„๊ตํ•ด๋ณธ๊ฒฐ๊ณผ ์‰ฝ๊ฒŒ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•ด์„œ ๋”ฑํžˆ ์ฐธ๊ณ ํ•œ
์‚ฌ์ดํŠธ๋Š” ์—†์Œ
ํ”ผ๋“œ๋ฐฑ์€ ์–ธ์ œ๋‚˜ ์„ค์ •์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ ์ต์ˆ™ํ•ด ์ง€๋„๋ก ๋…ธ๋ ฅํ•˜๊ณ 
๋˜ ์š”์ฆ˜ ํŠธ๋ Œ๋“œ๋ฅผ ๋”ฐ๋ผ์„œ ์„ค์ •์„ java๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์Œ๋ถ€ํ„ด xml๋Œ€์‹ 
์ตœ๋Œ€ํ•œ ์ž๋ฐ” ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋…ธ๋ ฅํ•ด์•ผํ•จ

11.3.1 ํ•œ๊ธ€ ๋ฌธ์ œ์™€ UTF-8 ํ•„ํ„ฐ ์ฒ˜๋ฆฌ

์ƒˆ๋กœ์šด ๊ฒŒ์‹œ๋ฌผ์„ ๋“ฑ๋กํ–ˆ์„ ๋•Œ ๋งŒ์ผ ํ•œ๊ธ€ ์ž…๋ ฅ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๋ฉด

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•œ๊ธ€์ด ๊นจ์ ธ์„œ ์ „์†ก์ด๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๊ณ 
  2. ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ์Šคํ”„๋ง MVC์ชฝ์—์„œ ํ•œ๊ธ€์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•„ํ„ฐ๋ฅผ ๋“ฑ๋กํ•ด์•ผํ•จ

๋ธŒ๋ผ์šฐ์ €์—์„œ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ
๊ฐœ๋ฐœ์ž ๋„๊ตฌ์—์„œ Network ํƒญ์„ ์—ด์–ด๋‘” ์ƒํƒœ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋ฉด ํ•ด๋‹น ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
์ด๋•Œ POST ๋ฐฉ์‹์œผ๋กœ ์ œ๋Œ€๋กœ ์ „์†ก๋˜์—ˆ๋Š”์ง€, ํ•œ๊ธ€์ด ๊นจ์ง„ ์ƒํƒœ๋กœ ์ „์†ก๋œ ๊ฒƒ์ธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

์œ„์˜ ํ™”๋ฉด(p242 or ๋ธŒ๋ผ์šฐ์ €์—์„œ Networkํƒญ์œผ๋กœ ๋ณธ ๋‚ด๊ฐ€ ์ „์†กํ•œ ๋ฐ์ดํ„ฐ)์„ ๋ณด๋ฉด
๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•œ๊ธ€์„ ๋ฌธ์ œ์—†์ด ๋ณด๋ƒˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ,
๋ฌธ์ œ๋Š” Controllerํ˜น์€ DataBase์ชฝ์ด๋ผ๋Š”๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Œ

BoardController์™€ BoardServiceImpl์„ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ์ด๋ฏธ Lombok์˜ ๋กœ๊ณ ๋ฅผ ์ด์šฉํ•ด์„œ
ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ธฐ๋กํ•ด ๋‘์—ˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ํ™•์ธํ•ด์•ผํ•จ

์œ„์˜ ๋กœ๊ทธ(p242~243์ฐธ๊ณ )๋ฅผ ์‚ดํŽด๋ณด๋ฉด BoardController์— ์ „๋‹ฌ๋  ๋•Œ ์ด๋ฏธ ํ•œ๊ธ€์ด ๊นจ์ง„ ์ƒํƒœ๋กœ
์ฒ˜๋ฆฌ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œweb.xml์— ๋ผ์• ์™€ ๊ฐ™์ด ํ•„ํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•จ

web.xml์„ ์ด์šฉํ•  ๋•Œ์˜ UTF-8 ํ•„ํ„ฐ

<!-- 37~50๊นŒ์ง€ WEB Encoding์— ํ•„ํ„ฐ ์ฒ˜๋ฆฌ -->
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>encoding</filter-name>
        <servlet-name>appServlet</servlet-name>
    </filter-mapping>

Java ์„ค์ •์˜ ๊ฒฝ์šฐ web.xml์„ ๋Œ€์‹ ํ•˜๋Š” WebConfig ํด๋ž˜์Šค์—์„œ๋Š” ํ•„ํ„ฐ๋ฅผ getSerlvetFilters()๋ฅผ
์žฌ์ •์˜ํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

com.crow.config๋‚ด์˜ WebConfig ํด๋ž˜์Šค์˜ ์ผ๋ถ€

	@Override
	  protected Filter[] getServletFilters() {
	    CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
	      characterEncodingFilter.setEncoding("UTF-8");
	      characterEncodingFilter.setForceEncoding(true);

	      return new Filter[] { characterEncodingFilter };
	  }

ํ•œ๊ธ€์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚œ ํ›„ ๋‹ค์‹œ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•ด ๋ณด๋ฉด ํ•œ๊ธ€์— ๋ฌธ์ œ๊ฐ€ ์—†์ด ์ž…๋ ฅ๋˜๋Š” ๊ฒƒ์„
ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

11.3.2 ์žฌ์ „์†ก(redirect)์ฒ˜๋ฆฌ

๋“ฑ๋ก ๊ณผ์ •์—์„œ POST ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Œ
(P245)์ฐธ๊ณ 

BoardController์—์„œ register() ๋ฉ”์„œ๋“œ๋Š” redirect:/board/list๋ฅผ ์ „์†กํ•˜๋Š”๋ฐ
๋ธŒ๋ผ์šฐ์ €๋Š” ์ด๋ฅผ ํ†ต๋ณด ๋ฐ›์€ ํ›„ /board/list๋กœ ์ด๋™ํ•˜๊ฒŒ ๋จ
๋งŒ์ผ ์œ„์™€ ๊ฐ™์ด ์žฌ์ „์†ก์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์‚ฌ์šฉ์ž๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ†ตํ•ด์„œ
๋™์ผํ•œ ๋‚ด์šฉ์„ ๊ณ„์† ์„œ๋ฒ„์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—(ํ”ํžˆ ๋„๋ฐฐ๋ผ๊ณ  ํ‘œํ˜„) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•จ
๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ์ด๋Ÿฐ ๊ฒฝ์šฐ ๊ฒฝ๊ณ ์ฐฝ์„ ๋ณด์—ฌ์ฃผ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๊ทผ๋ณธ์ ์œผ๋กœ ์ฐจ๋‹จ ํ•˜์ง€๋Š” ์•Š์Œ

๋”ฐ๋ผ์„œ ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ ์ž‘์—…์€ ์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ๋‹ค์‹œ ๋™์ผํ•œ ๋‚ด์šฉ์„ ์ „์†กํ•  ์ˆ˜ ์—†๋„๋ก
์•„์˜ˆ ๋ธŒ๋ผ์šฐ์ €์˜ URL์„ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•จ
์ด๋Ÿฌํ•œ ๊ณผ์ •์—์„œ ํ•˜๋‚˜ ๋” ์‹ ๊ฒฝ ์จ์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋ธŒ๋ผ์šฐ์ €์— ๋“ฑ๋ก, ์ˆ˜์ •, ์‚ญ์ œ์˜ ๊ฒฐ๊ณผ๋ฅผ
๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ํ”ผ๋“œ๋ฐฑ์„ ์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ ์ž„
๊ฒฝ๊ณ ์ฐฝ์ด๋‚˜ <div>๋ฅผ ์ด์šฉํ•˜๋Š” ๋ชจ๋‹ฌ์ฐฝ์„ ์ด์šฉํ•ด์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•จ

BoardController์—์„œ redirect ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ RedirectAttributes๋ผ๋Š” ํŠน๋ณ„ํ•œ ํƒ€์ž…์˜
๊ฐ์ฒด๋ฅผ ์ด์šฉํ–ˆ์Œ
addFlashAttribute()์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•œ๋ฐ,
๊ทธ ์ด์œ ๋Š” ์ผํšŒ์„ฑ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„
addFlashAttribute()๋กœ ๋ณด๊ด€๋œ ๋ฐ์ดํ„ฐ๋Š” ๋‹จ ํ•œ๋ฒˆ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณด๊ด€๋จ
(๋‚ด๋ถ€์ ์œผ๋กœ๋Š” HttpSession์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•จ)

list.jsp ํŽ˜์ด์ง€์˜ ์•„๋ž˜์ชฝ์— <script> ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒํ™ฉ์— ๋”ฐ๋ฅธ ๋ฉ”์‹œ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

views/board/list.jsp์˜ ์ผ๋ถ€

<script type="text/javascript">
$(document).ready(function(){
	var result = '<c:out value="${result}"/>';
});
</script>

๋งŒ์ผ ์ƒˆ๋กœ์šด ๊ฒŒ์‹œ๋ฌผ์ด ๋“ฑ๋ก๋œ ์งํ›„์— ์œ„์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋จ
(p246๊ทธ๋ฆผ์˜ ๋ฒˆํ˜ธ๋Š” ์ƒ์„ฑ๋œ ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฒˆํ˜ธ์ž„)

์ƒˆ๋กœ์šด ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฒˆํ˜ธ๋Š” addFlashAttribute()๋กœ ์ €์žฅ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ๋„ ์‚ฌ์šฉ๋œ ์ ์ด ์—†๋‹ค๋ฉด
์œ„์™€ ๊ฐ™์ด ๊ฐ’์„ ๋งŒ๋“ค์–ด ๋‚ด์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ /board/list๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, ์ƒˆ๋กœ๊ณ ์นจ์„ ํ†ตํ•ด์„œ
ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์•„๋ฌด๋Ÿฐ ๋‚ด์šฉ์ด ์—†๊ฒŒ ๋จ

addflashAttribute()๋ฅผ ์ด์šฉํ•ด์„œ ์ผํšŒ์„ฑ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ์ด์šฉํ•ด์„œ
๊ฒฝ๊ณ ์ฐฝ์ด๋‚˜ ๋ชจ๋‹ฌ์ฐฝ ๋“ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

11.3.3๋ชจ๋‹ฌ(Modal)์ฐฝ ๋ณด์—ฌ์ฃผ๊ธฐ

์ตœ๊ทผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฒฝ๊ณ ์ฐฝ(alert)์„ ๋„์šฐ๋Š” ๋ฐฉ์‹๋ณด๋‹ค ๋ชจ๋‹ฌ์ฐฝ(Modal)์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„
๋งŽ์ด ์‚ฌ์šฉํ•จ
BootStrap์€ ๋ชจ๋‹ฌ์ฐฝ์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ชฉ๋ก ํ™”๋ฉด์—์„œ ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ
๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Œ
์ตœ์ข…์ ์ธ ํ˜•ํƒœ๋Š” p247์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ๋ชจ์Šต์ด๋จ

๋ชจ๋‹ฌ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ<div>๋ฅผ ํ™”๋ฉด์— ํŠน์ •์œ„์น˜์— ๋ณด์—ฌ์ฃผ๊ณ , ๋ฐฐ๊ฒฝ์ด ๋˜๋Š” <div>์— ๋ฐฐ๊ฒฝ์ƒ‰์„ ์ž…ํ˜€์„œ ์ฒ˜๋ฆฌํ•จ
๋ชจ๋‹ฌ์ฐฝ์€ ํ™œ์„ฑํ™”๋œ <div>๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ณ ๋Š” ๋‹ค์‹œ ์›๋ž˜์˜ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์—†๋„๋ก ๋ง‰๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š”๋ฐ
ํšจ๊ณผ์ ์ธ ๋ฐฉ์‹์ž„

๋ชจ๋‹ฌ์ฐฝ์— ๋Œ€ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์šด๋กœ๋“œํ•œ SBAdmin2์˜ pages ํด๋” ๋‚ด notifications.html ํŒŒ์ผ์„ ์ฐธ๊ณ ํ•˜๋ฉด ๋จ

๋ชจ๋‹ฌ์ฐฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  <div>๋ฅผ ์ด์šฉํ•ด์„œ ํŽ˜์ด์ง€์˜ ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•ด์•ผํ•จ
list.jsp ๋‚ด์— <table> ํƒœ๊ทธ์˜ ์•„๋ž˜์ชฝ์— ๋ชจ๋‹ฌ์ฐฝ์˜ <div>๋ฅผ ์ถ”๊ฐ€ํ•จ

list.jsp ํŽ˜์ด์ง€์˜ ์ˆ˜์ •

</table><!-- tableํƒœ๊ทธ์˜ ๋-->
				
				<!-- Modal ์ถ”๊ฐ€ -->
				<div class="modal fade" id="mymodal" tabindex="-1" role="dialog"
				    aria-labelledby="myModalLabel" aria-hidden="true">
				    <div class="modal-dialog">
				        <div class="modal-content">
				            <div class="modal-header">
				                <button type="button" class="close" data-dismiss="modal"
				                aria-hidden="true">&times;</button>
				                <h4 class="modal-title" id="myModalLabel">Modal title</h4>
				            </div>
				            <div class="modal-body">์ฒ˜๋ฆฌ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.</div>
				            <div class="modal-footer">
				                <button type="button" class="btn btn-default"
				                data-dismiss="modal">Close</button>
				                <button type="button" class="btn btn-primary">Save changes</button>
				            </div>
				        </div>
				        <!-- /.modal-content -->
				    </div>
				    <!-- /.modal-dialog -->
				</div>
				<!-- /.modal -->

<-- 2022_04_09 Modal๊ด€๋ จ div๋ฅผ ๋งŒ๋“ค๊ธด ํ–ˆ์ง€๋งŒ ์•„์ง ๋ชจ๋‹ฌ์ฐฝ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ž‘์—…๋„ ์•ˆํ•˜๊ณ  ์†Œ์Šค์— ๋Œ€ํ•œ ๋””๋ฒ„๊น…๋„ ์•ˆํ•ด์„œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„์ˆ˜ ์žˆ์œผ๋‹ˆ 10์ผ์— ๊ณ ์น˜๋„๋ก ํ•˜๊ฒ ์Œ -->

โš ๏ธ **GitHub.com Fallback** โš ๏ธ