Blog

[Spring-LDW] 게시글 등록 화면 만들기

Category
Author
citeFred
citeFred
PinOnMain
1 more property
스프링 부트와 AWS로 혼자 구현하는 웹 서비스  : 인텔리제이, JPA, JUnit 테스트, 그레이들, 소셜 로그인, AWS 인프라로 무중단 배포까지 이동욱 저
오픈소스인 부트스트랩, jQuery을 이용하여 화면을 만들어 보자
Table of Content

부트스트랩이란?

부트스트랩은 웹사이트를 쉽게 만들 수 있게 도와주는 CSS, JS 프레임워크이다.
하나의 코드로 휴대폰, 태블릿, 데스크탑까지 다양한 기기에서 작동하게 만들 수 있으며, 다양한 기능을 제공하여 사용자가 쉽게 웹사이트를 제작, 유지, 보수할 수 있도록 도와준다.
부트스트랩을 통해서 보다 쉽게 웹페이지 디자인을 원하는 모습으로 구현하기 좋다.

jQuery란?

제이쿼리(jQuery)는 오픈 소스 기반의 자바스크립트 라이브러리
제이쿼리는 웹 사이트에 자바스크립트를 더욱 손쉽게 활용할 수 있게 해줌
제이쿼리를 사용하면 짧고 단순한 코드로도 웹 페이지에 다양한 효과나 연출을 적용할 수 있다.
가장 인기 있는 자바스크립트 라이브러리 중 하나
메소드 체이닝(Method chaining) 등 짧고 유지관리가 용이한 코드 작성을 지원
거의 모든 웹브라우저에 대응할 정도로 호환성이 매우 뛰어남
jQuery이용해서 Ajax를 사용하게 되면 많은 이점이 있다.
Ajax (Asynchronouse JavaScript XML)
jQuery ajax는 ajax를 쉽게 사용하기 위해 도입된 메소드
jQuery는 javascript를 좀 더 편리하게 사용하기 위한 라이브러리인데, 그 중 ajax를 편하게 해주는 것이 바로 $.ajax (jquery ajax) 이다

Ajax의 특징

페이지 새로고침 없이 특정 데이터만 reload 가능
서버로부터 데이터를 받고 작업을 수행
현재 XML을 사용하는 건 드물고 JSON을 사용

레이아웃 모듈화

공통 영역을 별도의 파일로 분리하여 필요한곳에서 가져다 사용하는 방식

header.mustache

<!DOCTYPE HTML> <html> <head> <title>스프링부트 웹서비스</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"> </head> <body>
Java
복사

footer.mustache

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> <!--index.js 추가--> <script src="/js/app/index.js"></script> </body> </html>
Java
복사
CSS인 bootstrap은 header에, js는 footer에 있다.
그 이유는 페이지 로딩 속도를 높이기 위해서이며, head가 다 실행되고 난 뒤에 body가 실행되도록 했기 때문에
jquery.js 이후에 bootstrap.js가 위치하고 있다.
bootstrap.js는 jquery에 의존되어 있기 때문

index.mustache

{{>layout/header}} <h1>스프링 부트로 시작하는 웹 서비스</h1> <div class="col-md-12"> <div class="row"> <div class="col-md-6"> <a href="/posts/save" role="button" class="btn btn-primary">글 등록</a> </div> </div> </div> {{>layout/footer}}
Java
복사
index.mustache에 기존 <html>, <head> 등 태그들은 모두 레이아웃에서 참조되도록 변경
따라서 본문만 (<body>태그 내부) 남도록 수정
{{> … }} 는 현재 머스테치 파일(index.mustache)를 기준으로 다른 파일을 가져옴(참조)
글등록 버튼 추가

IndexController.java

package com.citefred.ldwspring.web; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class IndexController { ... @GetMapping("/posts/save") public String postsSave(){ return "posts-save"; } }
Java
복사
글 등록 버튼을 통해 이동하는 글 등록 폼 페이지 컨트롤러 생성

posts-save.mustache

{{>layout/header}} <h1>게시글 등록</h1> <div class="col-md-12"> <div class="col-md-4"> <form> <div class="form-group"> <label for="title">제목</label> <input type="text" class="form-control" id="title" placeholder="제목을 입력하세요"> </div> <div class="form-group"> <label for="author"> 작성자 </label> <input type="text" class="form-control" id="author" placeholder="작성자를 입력하세요"> </div> <div class="form-group"> <label for="content"> 내용 </label> <textarea class="form-control" id="content" placeholder="내용을 입력하세요"></textarea> </div> </form> <a href="/" role="button" class="btn btn-secondary">취소</a> <button type="button" class="btn btn-primary" id="btn-save">등록</button> </div> </div> {{>layout/footer}}
Java
복사
글 등록 폼 생성

index.js

var main = { init : function () { var _this = this; $('#btn-save').on('click', function () { _this.save(); }); }, save : function () { var data = { title: $('#title').val(), author: $('#author').val(), content: $('#content').val() }; $.ajax({ type: 'POST', url: '/api/v1/posts', dataType: 'json', contentType:'application/json; charset=utf-8', data: JSON.stringify(data) }).done(function() { alert('글이 등록되었습니다.'); window.location.href = '/'; }).fail(function (error) { alert(JSON.stringify(error)); }); } }; main.init();
Java
복사

글 생성 뷰 페이지+API 작동 테스트

Search
 | Main Page | Category |  Tags | About Me | Contact | Portfolio