전체 글 235

Spring Boot Swagger 3.0 적용 1

Swagger 란 REST APIs를 문서화해주며, APIs를 호출해서 테스트할 수 있게 해주는 OpenAPI 표준이다. Swagger Tool Swagger Codegen: Swagger 에 정의된 형태로 Client/Server 코드를 생성하는 CLI 툴 Swagger UI: Swagger API 명세서를 웹에서 확인 및 테스트할 수 있는 툴 Swagger Editor: API 설계서/명세서를 작성하기 위한 툴 여기에서는 Swagger UI를 중심으로 작성할 예정이다. Spring boot 에서는 Swagger를 사용하기 위해 Springfox와 Springdoc-openapi 라이브러리를 사용한다. Springfox는 2020년 7월 이후로 거의 3년 동안 더이상 업데이트가 진행되지 않고 있고, S..

개발 등/SPRING 2023.04.07

MyBatis auto_increment 값 조회

MyBatis 를 이용해서 데이터를 생성할 때 자동생성 (auto_increment)을 사용할 때가 있다. 여러 이유로 (예를 들면 게시판 생성 후 게시판에 연관된 파일 테이블에 게시판 아이디를 사용해야 하는 경우 등) 생성할 때 사용한 auto_increment 값을 참조해야 할 경우 다음과 같이 처리하면 된다. Table Schema CREATE TABLE Member ( id bigint NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, email varchar(255) NOT NULL ); DTO class @Setter @Getter @ToString @Builder public class MemberDTO { private int id; privat..

개발 등/MyBatis 2023.04.05

javax.servlet.ServletException: Could not resolve view with name 'redirect:/swagger-ui/index.html' in servlet with name 'dispatcherServlet'

Spring boot Swagger 3.0을 적용했을 때 javax.servlet.ServletException: Could not resolve view with name 'redirect:/swagger-ui/index.html' in servlet with name 'dispatcherServlet' 리다이렉트 에러가 발생하는 경우 Swagger 설정 파일에 다음 코드를 추가하면 된다. @Bean public InternalResourceViewResolver defaultViewResolver() { return new InternalResourceViewResolver(); }

개발 등/SPRING 2023.04.03

타임리프(Thymeleaf) 선택 표현식 (입력 폼)

선택표현식은 th:object에 선언된 객체에 접근할 수 있는 기능으로 *{변수명} 을 사용할 수 있다. 사용법 • th:object : 서버에서 전달된 객체. • *{변수명} : th:object 객체에 선언된 객체 내부 변수를 탐색. • th:filed="*{변수명}" : 이렇게 선언하면 id, name, value 속성을 타임리프가 자동으로 렌더링한다. Controller model.addAttribute("user", user); View

타임리프(Thymeleaf) 템플릿 조각

headers, footers, menus 등 공통으로 사용할 다른 템플릿 파일의 코드 조각들을 재사용. 이를 사용하기 위해서는 th:fragment="NAME" 속성에 이름을 명시하면 템플릿 조각이 된다. 호출할 때는 크게 th:insert="~{경로 포함된 파일명 :: 파일명에 정의된 속성명[(파라미터 목록)]}" 으로 호출해서 사용 예) th:insert="~{teamplate/fragments/header :: common_header('PARAM1', 'PARAM2')} /template/base.html 위의 코드 조각을 사용할 템플릿 파일에서는 다음과 같이 하면 된다. 단순표현식 ~{...} 를 사용하는 것이 원칙이지만 코드 단순화를 위해 생략할 수 있음 위 두 코드는 동일하게 해석된다 th..

타임리프(Thymeleaf) 반복문

반복문 (th:each="변수[, 상태변수] : ${콜렉션객체}") 상태변수의 속성. 다른 속성은 직관적으로 알 수 있고, current 데이터가 조금 낯선데 이건 설명처럼 변수와 같은 속성이다. 그래서 변수와 비교하면 true가 나온다. The current iteration index, starting with 0. This is the index property. The current iteration index, starting with 1. This is the count property. The total amount of elements in the iterated variable. This is the size property. The iter variable for each iterati..

타임리프(Thymeleaf) 주석 처리

1. 타임리프 파서-레벨 주석 블록 - - 코드 블록 - 타임리프가 파싱될 때 제거되는 코드 블록을 의미 you can see me only before Thymeleaf processes me! 2. 타임리프 프로토타입 주석 - - 타임리프가 파싱시스템에 의해 파싱된 후의 정적 콘텐츠는 보여지지만, HTML 파일 자체의 소스에서는 주석처리된다. 이 부분을 HTML 화면에서는 볼 수 없지만, 페이지 호출 후 렌더링이 끝난 소스에서는 볼 수 있다.

타임리프(Thymeleaf) 문법

* URL 링크 표현식 (@{링크}) th:href="@{URL_LINK}" * 리터럴 대체 (|문자열|) - 문자와 표현식 등의 분리된 형태를 리터럴 대체 문법을 이용해 간단하게 처리 th:text="'Hello '" + ${user.name} + '!'" th:text="|Hello ${user.name}!|" * 변수 표현식 (${변수명}) - 모델객체에 포함된 변수나 타임리프 변수를 조회 th:text="${user.age}" * 외부 자원 표현식 (#{변수명}) - 메시지, 프라퍼티 등 외부 자원의 데이터 표시 th:text="#{msg.reg.success}" * 기본 객체들 #ctx: the context object. #vars: the context variables. #locale: t..