Template Engine(템플릿 엔진)

  • 템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어
  • web template engine은 웹 문서가 출력되는 템플릿 엔진
  • view code(html)와 data logic code(DB connection)를 분리해줌

[출처] https://gmlwjd9405.github.io/2018/12/21/template-engine.html

종류

Layout Template Engine vs Text Template Engine

  • Layout Template Engine : 중복되는 include 코드를 사용하지 않고도 지정된 페이지 레이아웃에 따라 페이지 타일을 조합하여 완전한 페이지로 만들어줌
  • Text Template Engine : 템플릿 양식에 적절한 특정 데이터를 넣어 결과 문서를 출력(Thymeleaf, JSP)

ServerSide Template Engine vs ClientSide Template Engine

  • ServerSide Template Engine : 서버에서 DB 혹은 API에서 가져온 데이터를 미리 정의된 Template에 넣어 html을 그려 클라이언트에 전달
  • ClientSide Template Engine : html 형태로 코드를 작성할 수 있으며, 동적으로 DOM을 그리게 해주는 역할

 

필요성

  • 많은 코드를 줄일 수 있다.
  • 재사용성이 높다
  • 유지보수에 용이하다

'Web > Spring' 카테고리의 다른 글

[배경] JPA  (0) 2021.07.27
[배경] Maven  (0) 2021.07.27
[배경] Spring Security  (0) 2021.07.27
[배경] Spring 실행 순서  (0) 2021.07.27
[배경] MVC Pattern  (0) 2021.07.27

Thymeleaf

  • "웹(Servlet)환경과 웹이 아닌 환경 모두애서 작동할 수 있는 Java XML/XHTML/HTML5 template engine"
  • spring MVC구조에서 View 담당
  • src/main/resources/templates 경로를 기본 경로로 인식(의존성 추가하면)

 

간단한 사용법

 

Maven Dependencies 추가(pom.xml)

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

 

application.yml에 추가

<!--application.yml-->
thymeleaf:
    prefix: classpath:templates/
    suffix: .html
    cache: true
    
<!--application-local.yml-->
  thymeleaf:
    cache: false

 

.html에 추가해서 사용

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Thymeleaf Test</title>
</head>
<body>
<p th:text="'타임리프 테스트 '" />
</body>
</html>

 

'Web > Front' 카테고리의 다른 글

[ERROR] 500에러 관련  (0) 2021.07.30
[ERROR] static파일 적용 관련  (0) 2021.07.30
[HTML, Javascript] jQuery  (0) 2021.07.28
[Thymeleaf] 기본 문법  (0) 2021.07.27
[HTML] 기본 태그  (0) 2021.07.27

<a>: 하나의 페이지에서 다른 페이지를 연결할 때 사용하는 하이퍼링크를 정의

href= “javascript:void(0)” 는 링크기능을 무효화

 

<body>: 해당 html문서의 텍스트, 하이퍼링크, 이미지, 리스트 등과 같은 모든 콘텐츠를 포함하는 영역(문서 안에 하나만 가능)

 

<div>: html문서에서 특정 영역이나 구획을 정의, css와 함께 자주 쓰임

 

<form>: 사용자로부터 입력을 받을 수 있는 html 입력 폼을 정의

 

<input>: 사용자로부터 입력을 받을 수 있는 입력필드를 정의

 

<nav>: 다른 페이지 또는 현재 페이지의 다른 부분과 연결되는 네비게이션 링크들의 집합

 

<ul>: 순서가 없는 html 리스트를 정의

 

<li>: html리스트에 포함되는 아이템을 정의

 

<span>: html문서에서 인라인 요소들을 하나로 묶을 때

 

<script>: client-side scripts를 정의

 

&nbsp; 공백(진짜 공백과 기호를 번갈아가면서 써라)

&it; 부등호(<)

&gt; 부등호(>)

&amp; 앰퍼샌드

&quot; 쌍따옴표(“)

 

'Web > Front' 카테고리의 다른 글

[ERROR] 500에러 관련  (0) 2021.07.30
[ERROR] static파일 적용 관련  (0) 2021.07.30
[HTML, Javascript] jQuery  (0) 2021.07.28
[Thymeleaf] 기본 문법  (0) 2021.07.27
[HTML] Thymeleaf  (0) 2021.07.27

TDD(Test-Driven Development, 테스트 주도 개발)

[출처] https://daseuul.tistory.com/30

  • fail → test pass → refactoring의 사이클을 반복
  • 기능별로 구현이 이루어지기 때문에 유지보수/디버깅이 쉽고, 기능별 모듈화에 좋다.

fail : 지금 구현하고자 하는 기능에 실패하는 테스트 코드를 작성

pass : 실패하는 테스트 코드가 통과하는 제대로 된 코드를 작성

 

Unit Test

  • 기능(method)을 테스트하는 method(TDD의 fail단계)
  • 프로그램 전체를 실행시킬 필요가 없이 테스트 코드로 확인이 가능!
  • 버그를 줄이고, 코드의 퀄리티를 높인다.

 

❗ 이 테스트에 익숙해지면 디버깅을 큰 틀(기능 단위)로 잡아서 하는 것처럼 쉽게 할 수 있을 것 같다...

(아직 디버깅이나 이런 테스트에 취약하다.. 열심히 공부해보자!) ❗

'Web' 카테고리의 다른 글

Web Development  (0) 2021.07.27

Spring Security

Spring기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임 워크

'인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리

 

Authorization(인증)과 Authentication(인가)

인증: 해당 사용자가 본인이 맞는지를 확인하는 절차

인가: 인증된 사용자가 요청한 자원에 접근 가능한지를 결정하는 절차

" 인증 성공 후 인가"

Principal(접근주체, 아이디): 보호받는 Resource에 접근하는 대상

Credential(비밀번호): Resource에 접근하는 대상의 비밀번호

" Credential 기반의 인증방식"

 

 

주요 모듈

 

[출처] https://mangkyu.tistory.com/76

[SecurityContextHolder] : 보안 주체의 세부 정보를 포함하여 응용프로그램의 현재 보안 컨텍스트에 대한 세부 정보가 저장된다.

[SecurityContext] : Authentication을 보관하는 역할

[Authentication] : 현재 접근하는 주체의 정보와 권한을 담는 인터페이스

[UsernamePasswordAuthenticationToken] : Authentication을 implements한 AbstractAuthenticationToken의 하위 클래스(user의 id = principal, password = credential)

[AuthenticationProvider] : 실제 인증에 대한 부분을 처리

[Authentication Manager] : 인증에 대한 부분을 처리

[UserDetails] : 인증에 성공하여 생성된 객체, UsernamePasswordAuthenticationToken을 생성하기위해 사용

[UserDetailsService] : UserDetails 객체를 반환(DB와 연결해 처리)

[Password Encoding] : 패스워드 암호화에 사용될 PasswordEncoder 정의

[GrantedAuthority] : 현재 사용자(principal)가 가지고 있는 권한(ROLE_ADMIN)

참고) https://mangkyu.tistory.com/76

 

[SpringBoot] Spring Security란?

대부분의 시스템에서는 회원의 관리를 하고 있고, 그에 따른 인증(Authentication)과 인가(Authorization)에 대한 처리를 해주어야 한다. Spring에서는 Spring Security라는 별도의 프레임워크에서 관련된 기능

mangkyu.tistory.com

 

'Web > Spring' 카테고리의 다른 글

[배경] Maven  (0) 2021.07.27
[배경] Template Engine  (0) 2021.07.27
[배경] Spring 실행 순서  (0) 2021.07.27
[배경] MVC Pattern  (0) 2021.07.27
[배경] Servlet  (0) 2021.07.27

Spring 실행 순서

[출처] https://velog.io/@gokoy/Spring-%EB%8F%99%EC%9E%91-%EC%88%9C%EC%84%9C

  1. web.xml을 로드하여 Servlet Container를 실행
  2. Servlet Container는 web.xml을 읽어 등록된 ContextLoaderListener을 실행
  3. ContextLoaderListener는 default 값으로 applicationContext.xml(root-context.xml) 파일을 읽어 Spring Container를 생성. 이를, Root Container라고도 부름.
  4. Root Container에는 모든 Servlet과 Filter들이 공유하는 자원을 메모리에 생성(Service, DB connection, DAO 등)
    5-6. Client로부터 요청이 들어오면 Servlet Container는 Dispatcher Servlet을 생성
  5. Dispatcher Servlet는 presentation-layer.xml(servlet-context.xml) 파일을 읽어 새로운 Spring Container를 생성. 여기서 생성된 컨테이너는 Controller 객체를 메모리에 생성
더보기
  • Dispathcer Servlet = FrontController + Request Dispatcher
  • FrontController : 모든 요청을 한 곳으로 집중시켜 일괄적으로 처리하게끔
  • Request Dispatcher : Client로부터 받은 Request 정보를 서버의 다른 자원(HTMl, JSP또는 Servlet등의 자원) 에 보내는 역할을 하는 인터페이스
  • DAO(Data Access Object): DB를 사용해 데이터를 조회하거나 조작하는 기능(Repository)
  • VO(Value Object): 계층간 데이터 교환을 위한 자바 빈즈(read only, Domain)

 

Client 접근 동작 순서

[출처] https://velog.io/@gokoy/Spring-%EB%8F%99%EC%9E%91-%EC%88%9C%EC%84%9C

1-2. Client가 WAS에 접근하면 FrontController 역할을 하는 DispatcherServlet이 요청을 가로챔
3. HandlerMapping 설정에서 해당 요청을 처리할 Controller를 탐색
4. Controller에서 RequestResponseBodyMethodProcessor presentation-layer.xml(servlet-context.xml)에 선언해놓은 MessageConverter을 이용하여 요청 본문(파라미터) 읽음

5-10. 데이터 저장 및 응답 가공
11. 요청을 처리한 뒤, HTML로 응답할 경우 결과를 출력할 View의 이름, Data로 응답할 경우 MessageConverter을 이용하여 Json 데이터를 반환
12. HTML로 응답한 경우 ViewResolver에서 받은 view 이름(string)으로부터 해당 view를 탐색
13. 탐색한 view 객체를 반환
14. 처리 결과가 포함된 View를 DispatcherServlet에 전달
15. Client에게 최종 결과 출력

'Web > Spring' 카테고리의 다른 글

[배경] Maven  (0) 2021.07.27
[배경] Template Engine  (0) 2021.07.27
[배경] Spring Security  (0) 2021.07.27
[배경] MVC Pattern  (0) 2021.07.27
[배경] Servlet  (0) 2021.07.27

+ Recent posts