Spring Boot
[Spring] @ScriptAssert 오류내용 및 해결방법
[Spring] @ScriptAssert 오류내용 및 해결방법
2021.12.281. 오류 내용 및 원인 @ScriptAssert(lang="javascript" script="내용")을 적을 때 밑에와 같은 오류가 발생할 수 있습니다. org.hibernate.validator.spi.scripting.ScriptEvaluatorNotFoundException: HV000232: No JSR 223 script engine found for language "javascript". 이 오류가 발생하는 이유는 JDK 버전이 11버전이 아니기 때문입니다. 2. 해결방법 해결방법은 JDK버전을 변경해주면 됩니다. 인텔리제이에서 JDK 버전을 변경하는 방법은 [파일] -> [프로젝트 구조] -> 프로젝트 -> version 11를 하면 해결이 됩니다.
[Spring] 메시지, 국제화 개념 및 사용 방법
[Spring] 메시지, 국제화 개념 및 사용 방법
2021.12.26메시지와 국제화의 개념과 사용방법을 설명하기 전에 먼저 예시를 먼저 들어보겠습니다. 여기서 이름, 나이, 아이디, 비밀번호가 적힌 페이지수가 20개라고 예시를 들어보겠습니다. 근데 여기서 아이디와 비밀번호를 ID, Password로 변경을 하고 싶으면 20개의 페이지를 다 들어가서 하나씩 하나씩 변경을 해줘야 되는 됩니다. 이런 번거로운 일을 줄이기 위해 사용하는 것이 메시지 기능입니다. 1. 메시지란? 위에 예시처럼 여러 페이지에 있는 다양한 메시지를 한 곳에서 관리하는 기능입니다. 2. 국제화란? 메시지랑 비슷한 기능을 하는데 Accept-Lange에서 나라언어 우선순위에 따라 메시지를 해당하는 나라 언어로 변경해주는 기능입니다. 예를 들어보면 구글에서 영어로 된 부분을 한국어로 번역 이런 것을 본 ..
Thymeleaf 사용 방법 및 특징
Thymeleaf 사용 방법 및 특징
2021.12.241. 스프링 부트에서 Thymeleaf 사용법 2. Thymeleaf의 특징 1. Thymeleaf 사용법(인텔리제이) 프로젝트 생성할 때 패키지, 경로 등 다 설정을 하고 next(다음)을 누른다. 누르면 밑에 사진과 같이 나올 것이다. 그러면 검색 부분에 thymeleaf를 검색한다. 검색을 하면 아래와 같은 사진처럼 나오는데 체크박스를 체크를 해준다. 그 후 완료 버튼을 누르고 build.gradle를 확인하고 설정이 다 될 때까지 기다린다. *build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' } 이와 같이 되어있을 것이다. 만약 프로젝트 생성할 때 까먹고 thymelea..
[Spring]@RestController, @Controller 개념 및 예시
[Spring]@RestController, @Controller 개념 및 예시
2021.12.191.@RestController 2.@Controller 3.@RestController과 @Controller예시 1. @RestController @RestController을 확인해보면 @ResponseBody와 @Controller이 들어있다. @ResponseBody : 응답할 내용을 HTTP 메시지 바디에 담아서 응답한다. @ResponseBody로 인해서 return 되는 것들은 view 이름을 탐색하는 게 아니라 HTTP 메시지 바디에 담겨서 응답이 된다. 2. @Controller @RestControlle와 달리 @ResponseBody가 없다. @RestController과 @ResponseBody가 없고 그냥 @Controller인 상태에서 return을 하게 되면 view 이름을 ..
[Spring]프론트 컨트롤 개념 및 예제(단순하고 실용적인 컨트롤러)
[Spring]프론트 컨트롤 개념 및 예제(단순하고 실용적인 컨트롤러)
2021.12.18프론트 컨트롤 개념 및 예제(Model 추가) 이 부분은 잘 설계된 것이다. 그런데 조금 더 고치자면 ModelView를 항상 생성하고 반환해야 하는 것을 고칠 것이다. 프론트 컨트롤 실행 순서(단순하고 실용적인 컨트롤러) 클라이언트가 FrontController에 Http 요청을 한다. 요청을 받은 FrontController은 요청을 확인하고 컨트롤러를 조회를 한다 조회한 컨트롤러를 호출하고 viewName을 반환받는다 반환받은 viewName을 viewResolver를 호출하고 MyView를 반환받는다. 반환받고 render를 호출하고 응답을 해준다. public interface Controller{ String process(Map paramMap, Map model); } public clas..
[Spring]프론트 컨트롤 개념 및 예제(Model 추가)
[Spring]프론트 컨트롤 개념 및 예제(Model 추가)
2021.12.02프론트 컨트롤 개념 및 예제(view 분리) 여기에서 MemberInputController, MemberSaveController, MemberListController 컨트롤들이 HttpServletRequest, HttpServletResponse를 꼭 필요로 하지 않습니다. HttpServletRequest로 요청을 받던 정보들을 Map으로 받으면 컨트롤러가 서블릿 기술을 몰라도 동작합니다. 그리고 request 객체를 Model로 사용하는 대신에 별도의 Model 객체를 만들어서 반환을 해주면 됩니다. 그리고 뷰 이름이 중복되어 컨트롤러는 뷰의 논리 이름만 반환하고 프론트 컨트롤에서 물리적 위치를 처리하면 됩니다. 프론트 컨트롤 실행 순서(Model 추가) 클라이언트가 프론트 컨트롤에 요청을 합..
[Spring]프론트 컨트롤 개념 및 예제(View 분리)
[Spring]프론트 컨트롤 개념 및 예제(View 분리)
2021.11.28https://hoestory.tistory.com/12 이곳에서 보면 String path = "경로"; RequestDispatcher dispatcher = request.getRequestDispatecher(path); dispatcher.forward(request, response); 이 코드들이 controller마다 중복되어 나타나고 깔끔하지 않다. 그래서 깜끔하게 분리하기 위해 view를 분리한다. 프론트 컨트롤 실행 순서(view 분리) 클라이언트가 FrontController에게 HTTP 요청을 한다. 요청을 받은 FrontController은 매핑 정보를 조회하여 컨트롤러를 조회한다. 조회한 컨트롤을 호출하고 호출한 컨트롤러에서 뷰를 반환 받는다. 반환받은 뷰를 호출한다. jsp ..
[Spring]프론트 컨트롤 개념 및 예제(프론트 컨트롤러 도입)
[Spring]프론트 컨트롤 개념 및 예제(프론트 컨트롤러 도입)
2021.11.28프론트 컨트롤이란 프론트 컨트롤러 서블릿 하나로 클라이언트의 요청을 받는다. 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출한다. 프론트 컨트롤이 실행되는 순서 클라이언트가 FrontController로 요청 FrontController는 요청된 매핑정보 확인 매핑 정보 확인 후 controller 호출 해당 controller에 맞는 jsp로 이동 jsp로 이동후 클라이언트에게 응답 공통 코드 @Getter @Setter @ToString public class Member { private Long id; private String username; private int age; public Member(String username, int age) { this.username = usernam..
[Spring]Servlet(HttpServletRequest,HttpServletResponse)개념 및 예제
[Spring]Servlet(HttpServletRequest,HttpServletResponse)개념 및 예제
2021.11.25Servlet객체 생성 방법 Servlet객체를 생성하려면 클래스를 만들고 만든 클래스에 HttpServlet를 상속을 받는다. 그 후 @WebServlet를 등록한다. @WebServlet(name="servletTest", urlPatterns="/test") // name = 서블릿 이름 // urlPatterns = URI주소 public ServletTest extends HttpServlet{ } * HttpServlet 상속을 받으면 HttpServletRequest와 HttpServletResponse를 사용할 수 있다. HttpServletRequest의 역할 Http 요청 메시지를 개발자가 편하게 파싱 할 수 있도록 도와주고 결과를 HttpServletRequest객체에 담아서 제공한다..
[Spring]싱글톤 패턴의 개념 및 예제
[Spring]싱글톤 패턴의 개념 및 예제
2021.11.19싱글톤 패턴이란? 싱글톤 패턴이란 객체의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴입니다. -> 객체 인스턴스를 2개 이상 생성하지 못하도록 막아야 하고 private를 사용해서 외부에서 new 키워드를 사용해서 객체를 인스턴스 생성하는 것을 못하도록 막아야 합니다. 싱글톤 패턴 만드는 방법 public class Singleton { private static final Sigleton instance = new Singleton(); public static Singleton getInstance() { return instance; } 위에 있는 코드처럼 하면 객체의 인스턴스는 1개만 생성할 수 있습니다. 그런데 이렇게 작성할 경우 문제점이 있습니다. 문제점은 아래에서 확인해 보겠습니다...
[Spring]스프링 부트 중복으로 빈을 등록했을때 해결 방법(@Autowired, @Qualifier, @Primary)
[Spring]스프링 부트 중복으로 빈을 등록했을때 해결 방법(@Autowired, @Qualifier, @Primary)
2021.11.01코드 예 public interface DiscountPolicy { //코드 } @Component public class FixDiscountPolicy implements DiscountPolicy { //코드 } @Component public class RateDiscountPolicy implements DiscountPolicy { //코드 } @ComponentScan public class Config { 코드 } @ComponentScan을 사용하면 @Component 어노테이션이 붙은 클래스들을 스프링 빈으로 등록하게 됩니다. 등록하게 되면 스프링 컨테이너의 스프링 빈에 등록되는 것은 클래스들의 타입이 스프링 컨테이너에 빈으로 등록됩니다. 여기서 사용된 DI는 생성자 주입 방식입니다...
[Spring]스프링부트 H2 데이터베이스 연동 오류
[Spring]스프링부트 H2 데이터베이스 연동 오류
2021.11.01발생한 오류 org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibern..