묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결
타임리프 설정 질문드립니다.
spring: thymeleaf: prefix: classpath:/templates/ suffix: .html datasource: url: jdbc:h2:tcp://localhost/~/jpashop username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create properties: hibernate: # show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug org.hibernate.orm.jdbc.bind: trace # org.hibernate.type: trace 스프링 부트 타임리프 기본 설정spring: thymeleaf: prefix: classpath:/templates/ suffix: .html 강의 교재에 위와 같이 적혀져있는데 위 코드가 타임리프 설정 맞게 한 것인가요?
-
해결됨
스프링 용어 질문드립니다.
김영한 강사님의 스프링 강의 듣다가 궁금한 것이 생겼습니다.타임리프와 템플릿엔진을 인터넷에 검색해봐도 제대로 된 정의 설명이 없는데, 이 2개의 단어는 정확히 무슨 뜻인가요?
-
해결됨포트폴리오 초간단 배포하기
타임리프 + html + RestController를 쓰는 경우 질문 드립니다!
안녕하세요 강사님.강사님 프론트엔드 강의도 보았고 현재 이 강의를 보며 진행중인 프로젝트 배포 단계에 있습니다! 여기서 몇가지 고민이 있는데,타임리프 등을 사용해서 서버에서 페이지를 만들어서 주는게 SSR 렌더링 방식으로 알고 있습니다! 그 반대인 CSR은 빈 페이지를 넘겨주고 클라이언트의 요청에 따라 값이 바뀌는 것이라고 학습했습니다. 현재 제 프로젝트는 스프링부트 + HTML + Ajax + RestController 를 이용해서 CSR 렌더링을 목표로 진행을 했는데요.(리액트나 뷰등은 학습 리소스등의 이유로 바닐라JS 를 사요했습니다.)그 과정에서 사용자가 접속하는 URL과 html을 어떻게 매핑해주지 고민하다, SSR 방식에서 많이 쓰는 타임리프를 사용하여 주소 경로와 html 페이지를 매핑 시켜주는 걸 이용해서 진행했습니다.@Controller public class ViewController { @GetMapping("/") public String home() { return "home"; } @GetMapping("/kakao") public String login() { return "kakao"; } @GetMapping("/join") public String join() { return "member/joinForm"; } @GetMapping("/add") public String addArticle(@RequestParam(name = "type") String articleType, Model model) { model.addAttribute("articleType", articleType); return "article/addArticle"; } }이런식으로 Controller를 만들어 타임리프 기본 경로(templates 패키지)를 이용하여 그 곳에 html 파일을 넣어주고 html 파일과 경로를 매핑 시켜주는 용도로만 사용을 했습니다. 이러고 강사님의 배포 강의를 보니 약간 제가 짠 방식은 SSR과 CSR이 짬뽕(?)된 느낌을 받았습니다. 아무래도 타임리프를 경로와 html을 매핑해주는 용도로만 사용하더라도 타임리프를 사용하고 있어서 그런 느낌을 받고 있는 것 같습니다. 강의에 나온 방식으로 바꿔서 프론트,백을 따로 배포 해보려고 하니 강의 내용에서 웹상 URL이 저희가 일반적으로 사용하는 경로가 아닌 .html 파일로 주소가 설정이 되는것으로 확인했습니다.만약 제 코드에서 타임리프를 사용하는 ViewController를 없애고 진행을 한다면 사용자가 실제 사용하는 URL을 html 파일명이 아닌 일반적인 URL로 사용할 수 있을까요? (쿼리 스트링, 패스 파라미터등도 고려하여..) nginx를 사용하면 힌트가 될 것 같다는 느낌을 받았습니다.아니면 현재 제가 진행한 방식처럼 타임리프를 유지한 채 프론트,백엔드를 따로 배포해도 문제가 없을지..결국 제가 원하는 방식은 깔끔하게 백/프론트를 분리하여 배포 하는 것인데 강의에서 .html 파일명으로 주소 경로가 지정되는 것을 보고 고민이 되어서 강사님 의견도 궁금하여 질문 남깁니다!
-
해결됨
스프링 입문(view 환경설정) 에서 Thymeleaf 적용안됨
안녕하십니까 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 듣고 있는 수강생입니다. IntelliJ IDEA에서 Thymeleaf 문법이 정상적으로 적용되면 Thymeleaf 표현식은 주황색으로 강조 표시되는것으로 알고 있는데 이렇게 표시되는 이유가 뭔가요?? build.gradlecontroller
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프 삼항 연산자 질문입니다
영한 님의 강의를 따라하며 타임리프를 계속 활용해보면서 페이지네이션을 추가하고 싶습니다.search 쿼리 파라미터가 값이 없을 때는 page만 전달되고, 있으면 search와 page 모두 전달되도록 하고 싶은데 혹시 방법이 있을까요?일단은 아래와 같이 th:if로 작성했으나, 삼항 연산자를 활용해 한 줄로 표현할 수 있는 방법이 없는지 질문드립니다li 태그처럼 true일 때와 false일 때 값이 단순 텍스트면 삼항 연산자에 문제 없는데, a 태그처럼 타임리프 변수가 true와 false일 때 쓰이면 문제가 있는 것 같습니다..<li th:class="${page} - 1 <= 0 ? 'page-item disabled' : 'page-item'"> <a class="page-link" th:if="${param.search} == null" th:href="@{/?page={prev}(prev=${page} - 1)}" tabindex="-1" aria-disabled="true">Prev</a> <a class="page-link" th:if="${param.search} != null" th:href="@{/?search={search}&page={prev}(search=${param.search}, prev=${page} - 1)}" tabindex="-1" aria-disabled="true">Prev</a> </li>
-
해결됨스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프 링크 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오) 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예[질문 내용]여기에 질문 내용을 남겨주세요.영한 님의 강의 내용을 복습해보기 위해 혼자서 간단한 게시판 프로젝트를 만들어보고 있습니다.동적 페이지 처리도 타임리프로 하고 있는데, 문득 타임리프의 링크에 대해서 궁금한 점이 생겨 문의드립니다.타임리프에서는 링크 표현식이 th:href="@{/css/bootstrap.min.css}"와 같이 @{}를 활용해야 한다고 하셨습니다. 그러나 실험을 하면서, th:href="'/css/bootstrap.min.css'" 처럼 @{}를 활용하지 않고 작은 따옴표로 표현했을 때도 문제가 없이 동작함을 알게 되었습니다. 혹시 static 폴더에서도 css 파일이 있기 때문에 문제 없는건가? 라고 생각해서 static 폴더에 있던 css 파일을 지워봤는데, 그래도 templates에 css 파일이 있기 때문에 정상적으로 css 파일이 불러옴을 알게 되었습니다.@{}를 활용한 방법과, ''를 활용한 방법은 어떤 차이가 있는지 궁금합니다.(마찬가지로 <button th:onclick="|location.href='board'|">와 같이 작성해도 문제 없이 동작하였습니다. 왜 이런 상황에서도 제대로 작동하는지, 하지만 이런 상황일 때는 ||로 감싸야만 문제가 없는데 왜 그런지도 궁금합니다..!)
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
th:if관련해서 궁금한 것이 있습니다.
안녕하세요 강의 잘 보고 있습니다.다름이 아니라 강의 도중 궁금한 점이 생겨 이렇게 질문 드립니다.addForm.html파일을 수정하실때 <div class="field-error" th:if="${errors?.containsKey('price')}" th:text="${errors['price']}">다음과 같이 코드를 작성해주셨는데 만약 th:if에서 조건이 부정이면 같은 태그(div)안에 존재하는 모든 태그들이 렌더링이 되지 않는 건가요? 아니면 타임리프 문법만 렌더링이 되지 않는건가요?
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
레이아웃에 있는 태그 값에 대해서 질문이 있습니다.
안녕하세요 항상 강의 잘보고 있습니다. 다름이 아니라 궁금한점이 있습니다. 영한님의 base.html 예제 코드에서 <title th:replace="${title}">레이아웃 타이틀</title> 다음과 같은 코드가 있는데 해당 "레이아웃 타이틀은"은 언제 사용되는건가요? 다른 html파일에서 해당 base.html을 부르고 title 태그를 건네주면 변경되는것이 아닌가요? 아니면 내부에서 렌더링을 할때 오류가 생기면 base.html의 값이 렌더링이 되나요? 감사합니다.
-
해결됨스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
MVC2 타임 리프 입력 폼 처리에서 질문이 있습니다!
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요 강사님 타임리프 부분이 가물가물해서 복습하고 있는 수강생입니다. 다름이 아니라 '타임리프 - 스프링 통합과 폼' 챕터 '입력 폼 처리' 강의에 질문이 있어서 글을 남깁니다. 지금 저는 JPA를 사용하면서 MVC 2 강의를 복습하고 있고, 기본 생성자의 접근 제한자를 모두 protected로 두고 사용하고 있습니다. 강의 내용 중, addForm을 Get으로 불러올 때, 빈 객체를 넘기셔서 일단 강의대로 적용하기 위해 public으로 접근 레벨을 변경하였으나, 여기서 문제가 발생하였습니다. 질문이 몇개 있어서 번호를 붙여서 질문하겠습니다!! 1. 기본 생성자를 사용하여 진행 시, save 및 update가 정상 작동하지 않습니다 (id를 제외한 모든 값이 null로 들어갑니다) 이 경우, 제가 생각하기에 flush가 동작하지 않아 그런 것 같은데, 정확한 버그 발생 이유와 해결 방안이 너무 궁금합니다!!ㅠㅠ 2. 결국 엔티티에서 빈 객체 생성자를 public으로 두고 싶지 않아, ItemDTO를 따로 만들어서 빈 객체를 생성하여 넘겨줬는데, 이렇게 해도 기능 자체는 정상 작동했습니다. 혹시 이 경우, 문제가 되는 점이 있을까요? (DTO => 엔티티 변환 과정 하나도 없이 그냥 ItemDTO만 전달했습니다) 바쁘실텐데 질문 읽어주셔서 감사합니다!! 또 항상 좋은 강의 제공해주셔서 강사님과 인프런 모든 분들에게 너무 감사드립니다!
-
미해결스프링 MVC 2편 - 백엔드 웹 개발 활용 기술
리터럴 대체 문의
안녕하세요 영한님! 강의 자료를 보면 위와 같이 코드를 작성하셨는데, 위 코드를 아래처럼 리터럴 대체로 사용하면 더 좋을 것 같은데 실무에서는 리터럴 대체 문법 말고 위와 같이 코드 작성을 더 많이 하는 편인가요?
-
미해결실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발
intellij 의 thymeleaf 인식오류 인가요?
일단 상품등록하는데 문제는 없습니다. 위와 연결된 Controller에 매핑과 BookForm 설정 똑같이 했는데 강의에 영한님이 한것처럼 html에서 th:object="${form}" 나 th:field="*{name}" 을 command+click 으로 연결된곳으로 갈수도 없고 Cannot resolve 'form' 오류 뜨면서 빨간줄 그어지는데 해결할수 있는 방법있을까요? 저도 그 편한 기능 쓰고 싶습니다 진짜루 ..ㅠㅠ 인텔리제이는 IntelliJ IDEA 2022.1.2 (Ultimate Edition) 쓰고 있습니다.
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
인텔리제이 타임리프 글자 색 설정 방법
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] 인텔리제이 얼티메이트 버전 사용중입니다. 선생님 강의대로 진행중인데 타임리프 문법 작성시 글자 색이 바뀌지 않습니다. 전부 초록색으로 나오다보니 괄호 구분이 너무 힘드네요 혹시 설정할 수 있는 방법이 있을까요?
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
타임리프 관련 질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)[질문 내용]여기에 질문 내용을 남겨주세요. 안녕하세요. 이번에 스프링을 이용한 앱개발 예정이고 스프링으로 백엔드(서버개발) 파트를 맡았는데 이런 경우에도 타임리프를 학습해야 하나요? 저는 백엔드라 안드로이드에 일절 관여하지 않는데 이럴경우에는 어떤식의 프로세스로 진행되는지 궁금합니다. 백엔드는 뷰에는 일절 관여하지 않고 그냥 데이터만 넘겨주고 프론트쪽에 api만 짜서 주면 되는 걸까요?? 제가 개발은 처음이라 타임리프 파트를 학습해야하는 지 여부가 궁금합니다!
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프 자동완성
수고하십니다 , 타임리프로 template 개발하는 부분을 따라 공부중에 있는데, ultimate버젼을 사용함에도 불구하고 model로 넘어온 객체 프로퍼티는 자동완성이 따로 안됩니다.. (item 객체 부분이 Can not resolve로 뜨고.. 인식이 안되는 듯 합니다) 크게 중요한 부분은 아니지만 해결되면 더욱 편하게 코딩이 가능할 거 같아 질문드립니다!
-
미해결
타임리프 적용 안되는데 이유를 알수있을까요
타임리프 적용이 안되어 여쭤보게 되었습니다. 그래들방식이구 https://start.spring.io/ 여기서 타임리프 추가하여서 인텔리제이에서 열었습니다. 아래의 코드에서 적용이 안돼고 아래와 같이 컨트롤러 설정했는데 안됩니다. 제가 스프링을 지금시작하는거라 아는게 많이없습니다 타임리프 적용이 왜 안되는지 모르겠습니다 ㅠㅠ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프 관련 질문 ( onclick , href )
안녕하세요? 타임리프 수업중에 이해가 안가는 부분이 있어서 질문드립니다. 강의 내용 중에 item.html을 보면 상품명 부분에 th:href="@{|/basic/items/${item.id}|}" 이 부분을 th:onclick="|location.href='@{/basic/items/{itemId}(itemId=${item.id})}'|" 이렇게 바꿨을 때 왜 동작을 안할까요?? 상품목록 페이지에서 상품명 부분을 클릭했을 시 해당 item의 정보를 보여주니까 문제가 없다고 생각했는데 안되는게 궁금하네요 ㅜㅜ
-
미해결스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술
타임리프 HTML 관련 질문
안녕하세요 영한님. 강의 너무 잘 듣고 있는데 질문이 하나 있습니다. 타임리프를 사용하면 기존 정적인 HTML을 렌더링하여 보여주는데 그럼에도 기존의 정적인 HTML의 내용을 남겨두어야 하는 이유가 있을까요? 강의에서는 지우지 않고 남겨두시길래 특별한 이유가 있나 하여 질문 드립니다! <td><a href="item.html" th:href="@{/basic/items/{itemId}(itemId=${item.id}}" th:text="${item.id}">회원id</a></td> 위 코드에서 회원id를 남겨두어야 하는 이유가 있는 건가요?