Thymeleaf - 속성 값 설정
2022. 9. 4. 09:17
Spring/Thymeleaf
타임리프 태그 속성(Attribute) 타임리프는 주로 HTML 태그에 th:* 속성을 지정하는 방식으로 동작한다. th:* 로 속성을 적용하면 기존 속성을 대체한다. 기존 속성이 없으면 새로 만든다. BasicController 추가 @GetMapping("/attribute") public String attribute() { return "basic/attribute"; } /resources/templates/basic/attribute.html 속성 설정 속성 추가 - th:attrappend = - th:attrprepend = - th:classappend = checked 처리 - checked o - checked x - checked=false 속성 설정 th:* 속성을 지정하면 타임리..
Thymeleaf - 연산
2022. 9. 3. 11:52
Spring/Thymeleaf
타임리프 연산은 자바와 크게 다르지 않다. HTML안에서 사용하기 때문에 HTML 엔티티를 사용하는 부분만 주의하자. BasicController 추가 @GetMapping("/operation") public String operation(Model model) { model.addAttribute("nullData", null); model.addAttribute("data", "Spring!"); return "basic/operation"; } /resources/templates/basic/operation.html 산술 연산 10 + 2 = 10 % 2 == 0 = 비교 연산 1 > 10 = 1 gt 10 = 1 >= 10 = 1 ge 10 = 1 == 10 = 1 != 10 = 조건식 (10..
Thymeleaf - 리터럴
2022. 9. 3. 09:28
Spring/Thymeleaf
리터럴은 소스 코드상에 고정된 값을 말하는 용어이다. 예를 들어서 다음 코드에서 "Hello" 는 문자 리터럴, 10 , 20 는 숫자 리터럴이다. String a = "Hello" int a = 10 * 20 ● 문자: 'hello' ● 숫자: 10 ● 불린: true , false ● null: null 타임리프에서 문자 리터럴은 항상 ' (작은 따옴표)로 감싸야 한다. 그런데 문자를 항상 ' 로 감싸는 것은 너무 귀찮은 일이다. 공백 없이 쭉 이어진다면 하나의 의미있는 토큰으로 인지해서 다음과 같이 작은 따옴표를 생략할 수 있다. 룰: A-Z , a-z , 0-9 , [] , . , - , _ 오류 문자 리터럴은 원칙상 ' 로 감싸야 한다. 중간에 공백이 있어서 하나의 의미있는 토큰으로도 인식되지 ..
Thymeleaf - URL 링크
2022. 9. 3. 09:06
Spring/Thymeleaf
타임리프에서 URL을 생성할 때는 @{...} 문법을 사용하면 된다. BasicController 추가 @GetMapping("/link") public String link(Model model) { model.addAttribute("param1", "data1"); model.addAttribute("param2", "data2"); return "basic/link"; } /resources/templates/basic/link.html URL 링크 basic url hello query param path variable path variable + query parameter 단순한 URL ● @{/hello} /hello 쿼리 파라미터 ● @{/hello(param1=${param1}, pa..
V1 - 등록, 상세, 리스트 페이지 구현하기
2022. 9. 3. 07:28
프로젝트/게시판
Controller package com.board.study.web; import com.board.study.dto.board.BoardRequestDto; import com.board.study.service.BoardService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springf..
Bootstrap - Spring Boot에 적용하기
2022. 9. 2. 16:37
Bootstrap
※ static 아래 index.html(파일명 동일) 을 두는 경우 , spring boot 에서는 자동으로 welcomePage 로 인식해서 localhost:8080 을 띄우는 경우 , 첫 화면으로 생성된다. static 하위에 정적 리소스들인 css , js 폴더를 생성하고 , templates 하위에는 동적 리소스들(HTML 에서 Thymeleaf 를 쓴다거나.. 로직이 들어가서 화면이 렌더링 되는 부분) 을 넣는다. https://getbootstrap.com/docs/5.1/getting-started/download/ (부트스트랩 링크) 압축을 푸시면 css, js 파일이 나오는데 해당 파일을 전부 복사 -> resources / static 에 복사 해주면 됩니다. (최상단 디렉토리 경로..
JPA - Pageable
2022. 9. 2. 15:09
JPA
PageRequest of of() 설명 PageRequest.of(int page, int size) 페이지 번호(0부터 시작), 페이지당 데이터의수 PageRequest.of (int page, int size, Sort.Direction direction, String ...props) 페이지 번호, 페이지당 데이터의 수, 정렬 방향, 속성(칼럼)들 PageRequest.of(int page, int size, Sort sort) 페이지 번호, 페이지당 데이터의 수, 정렬방향 Page 객체 구성 메소드 설명 int getNumber() 현재 페이지의 정보 int getSize() 한 페이지의 크기 int getTotalPages 전체 페이지의 수 int getNumberOfElements() 결과 ..
HTML - 목록태그 리스트 <ul>, <ol>, <li>, <dl>, <dt>, <dd>
2022. 9. 2. 14:23
HTML
목록 리스트(list) 관련 태그 이번 포스팅에서는 html 목록 리스트(list) 관련 태그에 대해서 알아보려고 한다. 리스트와 관련된 태그들은 텍스트나 이미지 등을 목록화하여 정리하며 카테고리 등을 표현하기 위해서도 자주 사용되는 중요한 태그 중 하나이다. , tag 태그는 순서가 없는 목록(unorder list)을 만들 때 사용되며, 내부에 요소(list item)를 포함하여 각 항목을 표시한다. 대부분의 브라우저에서 리스트에는 원과 같은 불릿(bullet)이 표현된다. HTML CSS JAVASCRIPT JAVA JSP ORACLE , tag 태그는 순서 있는 목록을 만들기 위해서 사용되며 과 같이 내부에 를 포함한다. 대부분의 브라우저에는 리스트가 숫자(기본값)로 표현되며 속성을 지정하여 변경..
Thymleaf - 반복문, index 사용하기
2022. 9. 2. 14:18
Spring/Thymeleaf
타임리프(Thymeleaf) 템플릿에서는 for문 while 등과 유사한 반복(iteration) 처리를 위해 th:each 를 사용 합니다. 루프 처리 중 상태를 추적하는 데 유용한 메커니즘인 status 변수가 제공되어 index, count 등을 쉽게 얻을 수도 있습니다. 다만 loop를 원천적으로 break를 하거나 반복처리를 하면서 어떤 값을 더해 다른 곳에서 사용하는 것이 불가하는 등 제약사항들이 있지만 우리는 Thymeleaf가 view Template engine이라는걸 명심해야 합니다! JSTL등 에서 처리하듯이 Business logic을 view에 녹이는 것은 지양 해야하며 이런 비즈니스로직이 들어가는 부분은 서버에서 처리한 뒤 view Template 에서는 완성된 데이터를 "보여주..
Thumeleaf - 유틸리티 객체와 날짜
2022. 9. 2. 01:36
Spring/Thymeleaf
타임리프는 문자, 숫자, 날짜, URI등을 편리하게 다루는 다양한 유틸리티 객체들을 제공한다. 타임리프 유틸리티 객체들 ● #message : 메시지, 국제화 처리 ● #uris : URI 이스케이프 지원 ● #dates : java.util.Date 서식 지원 ● #calendars : java.util.Calendar 서식 지원 ● #temporals : 자바8 날짜 서식 지원 ● #numbers : 숫자 서식 지원 ● #strings : 문자 관련 편의 기능 ● #objects : 객체 관련 기능 제공 ● #bools : boolean 관련 기능 제공 ● #arrays : 배열 관련 기능 제공 ● #lists , #sets , #maps : 컬렉션 관련 기능 제공 ● #ids : 아이디 처리 관련 ..
Thymeleaf - 기본 객체들
2022. 9. 2. 01:30
Spring/Thymeleaf
타임리프는 기본 객체들을 제공한다. ● ${#request} ● ${#response} ● ${#session} ● ${#servletContext} ● ${#locale} ● HTTP 요청 파라미터 접근: param ● 예) ${param.paramData} ● HTTP 세션 접근: session ● 예) ${session.sessionData} ● 스프링 빈 접근: @ ● 예) ${@helloBean.hello('Spring!')} BasicController 추가 @GetMapping("/basic-objects") public String basicObjects(HttpSession session) { session.setAttribute("sessionData", "Hello Session");..
Thymeleaf - 변수 : SpringEL
2022. 9. 2. 01:18
Spring/Thymeleaf
타임리프에서 변수를 사용할 때는 변수 표현식을 사용한다. 변수 표현식 : ${...} 그리고 이 변수 표현식에는 스프링 EL이라는 스프링이 제공하는 표현식을 사용할 수 있다. BasicController 추가 @GetMapping("/variable") public String variable(Model model) { User userA = new User("userA", 10); User userB = new User("userB", 20); List list = new ArrayList(); list.add(userA); list.add(userB); Map map = new HashMap(); map.put("userA", userA); map.put("userB", userB); model.ad..
JPA - Paging
2022. 9. 1. 20:13
JPA
JPA Paging 이란? DB에 저장된 Entity들을 페이지로 나누는 것이다. 예를들어, DB에 책이 20권 저장되어있다. 프론트에서 "DB에 있는 책을 5권씩 분류해서, 두 번째 파트를 줘!" 라고 요청한다. 그러면 백엔드에서는 5권씩 분류하고, 분류된 책들의 두 번째 파트를 프론트에게 넘겨준다. 위 상황과 같이, 일정 갯수만큼 분류하고, 분류된 부분들 중 어떤 부분을 보내주는 것이 JPA Paging이다. 사용법 사용법은 매우 간단하다. repository의 findAll 메서드의 parameter에 Pageable 또는 Pageable의 구현체인 PageRequest를 넣어주면 된다. 인터넷을 찾아보면 Controller에서 Pageable을 받아서 사용하는 코드들이 있는데 따라서 해보니 안된다..
Java - 람다식에서 메서드 참조/생성자 참조 사용법
2022. 9. 1. 19:40
JAVA/Chapter14
String collect = memberList.stream().map(Member::getName).collect(Collectors.joining()); Java 8 이상에서 람다식을 사용할 때 클론 2개를 사용하는 경우가 있습니다. 이를 메서드 참조(Method Referentce) 혹은 이중 클론 연산자(::)라고 표현한다. 메서드 참조는 언제, 어떻게 사용할까 메서드 참조는 람다식에서 파라미터의 중복을 피하기 위해 사용한다. 파라미터가 중복되지 않았다면 메서드 참조 표현식은 사용 불가능하다. 인스턴스의 메서드를 참조하는 경우 package com.board.study.repository; import java.lang.reflect.Member; import java.util.Arrays; i..
Java - ObjectMapper
2022. 8. 30. 11:11
JAVA
ObjectMapper란? JSON 형식을 사용할 때, 응답들을 직렬화하고 요청들을 역직렬화 할 때 사용하는 기술이다. (*여기서 다소 생소한 JSON 형식, 직렬화, 역직렬화를 잠깐 살펴본다.) JSON(Javascript Object Notation) "키 :값" 쌍으로 이루어진 데이터 객체를 전달하기 위해 사람이 읽을 수 있는 텍스트를 사용하는 포맷이다. 본래는 자바스크립트 언어로부터 파생되어 자바스크립트 구문 형식을 따르지만 플랫폼과 언어 독립형 데이터 형식이다. 따라서 프로그래밍언어나 플랫폼에 독립적이므로 C, 자바, 파이썬 등에서 JSON 데이터 생성을 위한 코드를 각자 가지고 있다. JS를 제외한 언어는 라이브러리를 사용해야하는 경우가 많다 직렬화 (Serialize) 데이터를 전송하거나 저..
Java - ::(더블콜론)
2022. 8. 30. 09:51
JAVA/Chapter14
콜론 두개 (::) 이중 콜론 연산자)의 정식 명칭은 메소드 참조 표현식(method reference expression)이며, 결론부터 말하자면 람다식에서 파라미터를 중복해서 쓰기 싫을 때 사용합니다. 말 그대로 람다 표현식(expression)에서만 사용 가능하고, 사용 방법은 [인스턴스]::[메소드명(또는 new)]으로 사용하는데, 예제를 통해 보는 것이 이해가 빠릅니다. 스태틱 메소드인 경우 인스턴스 대신 클래스 이름으로 사용할 수 있습니다. Method Reference Lambda의 마지막 입니다. 기존 람다식을 더 줄일 수 있는 Method reference에 대해서 설명합니다. 기본 형식은 아래와 같습니다. ClassName::Method ex) Person::getAge person c..
Lombok @Builder
2022. 8. 29. 20:50
Spring/Annotation
Builder 패턴이란? Effective Java 규칙 2 - 조슈아 블로크 생성자에 인자가 많을 때는 빌더 패턴을 고려하라 빌더 패턴(Builder pattern) 이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. (출처: 위키백과) 빌더 패턴의 장점 1. 객체들마다 들어가야할 인자가 각각 다를 때 유연하게 사용할 수 있다. 2. 무조건 setter 생성을 방지하고 불변객체로 만들 수 있다. 3. 필수 argument를 지정할 수 있다.(보통의 경우, PK 역할을 할 Id 값이 될 것이다.) Builder 패턴은 어떻게 작성하나? 이 페이지를 들어가면 명확하게 빌더 패턴을 어떻게 작성해야하는지 알 수 있다. 빌더 패턴 예제코..
SQL 문자 합치기 - | | (쌍파이프), CONCAT
2022. 8. 29. 16:40
SQL
|| (쌍파이프) 문자(데이터)와 문자(데이터) 사이에 || 를 넣어주면 된다. 아래와 같은 테이블이 있을 때 NAME CLASS POINT 철수 A 95 SELECT NAME || CLASS || POINT AS 'ALL IN ONE' ALL IN ONE 철수A95 CONCAT 함수 CONCAT(문자(데이터), 문자(데이터), ...) AS '칼럼명' CONCAT 함수는 함수 안에 연결할 문자들을 넣어주면 연결해서 출력이 된다. SELECT CONCAT(NAME, '는', CLASS, '반이고', POINT, '점이다) ALL IN ONE ALL IN ONE 철수는 A반이고 95점이다.
TypedQuery, Query
2022. 8. 29. 15:16
JPA/JPQL
TypedQuery, Query 작성한 JPQL을 실행시키기 위해 만드는 쿼리 객체이다. JPQL이 반환할 타입을 명확하게 지정할 수 있으면 TypedQuery를 사용하고, 명확하게 지정할 수 없으면 Query를 사용하면 된다. // 조회대상이 정확히 Member 엔티티이므로 TypedQuery 사용 가능 TypedQuery query = em.createQuery("SELECT m FROM Member m", Member.class); // 조회대상이 String, Integer로 명확하지 않으므로 Query 사용 Query query = em.createQuery("SELECT m.username, m.age FROM Member m"); TypedQuery로 실행된 쿼리는 두번쨰 인자로 주어진 클래..
Listner, 이벤트 리스너
2022. 8. 29. 14:09
Spring/개념
리스너는 특정 이벤트가 발생하기를 '귀 기울여' 기다리다가 실행되는 컴포넌트(메서드나 함수)를 말한다. 리스너는 이벤트가 발생함과 동시에 특정 행동을(메서드나 함수를 실행)하는데, 이것을 이벤트 핸들링이라고 합니다. 따라서 리스너를 이벤트 핸들러라고 부르기도 합니다. 여기서 이벤트라는 말이 등장하는데, 이벤트는 발생한 특정 사건이나 일을 말하는데, 예를 들어보자면 마우스 클릭, 키보드 키 입력, 버튼 클릭, 텍스트 입력 등이 있습니다. 꼭 입출력과 관련된것만이 이벤트는 아니며, 이 글에서 설명하려는 Servlet/JSP의 리스너와 같이 웹어플리케이션의 시작이나, 종료, 특정 객체의 생성, 소멸과 같은것도 이벤트라고 할 수 있습니다. 추가적으로 이벤트 소스가 있는데 이벤트 소스는 이벤트가 발생한 대상(이벤..