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..
Lombok @Builder
2022. 8. 29. 20:50
Spring/Annotation
Builder 패턴이란? Effective Java 규칙 2 - 조슈아 블로크 생성자에 인자가 많을 때는 빌더 패턴을 고려하라 빌더 패턴(Builder pattern) 이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. (출처: 위키백과) 빌더 패턴의 장점 1. 객체들마다 들어가야할 인자가 각각 다를 때 유연하게 사용할 수 있다. 2. 무조건 setter 생성을 방지하고 불변객체로 만들 수 있다. 3. 필수 argument를 지정할 수 있다.(보통의 경우, PK 역할을 할 Id 값이 될 것이다.) Builder 패턴은 어떻게 작성하나? 이 페이지를 들어가면 명확하게 빌더 패턴을 어떻게 작성해야하는지 알 수 있다. 빌더 패턴 예제코..
Listner, 이벤트 리스너
2022. 8. 29. 14:09
Spring/개념
리스너는 특정 이벤트가 발생하기를 '귀 기울여' 기다리다가 실행되는 컴포넌트(메서드나 함수)를 말한다. 리스너는 이벤트가 발생함과 동시에 특정 행동을(메서드나 함수를 실행)하는데, 이것을 이벤트 핸들링이라고 합니다. 따라서 리스너를 이벤트 핸들러라고 부르기도 합니다. 여기서 이벤트라는 말이 등장하는데, 이벤트는 발생한 특정 사건이나 일을 말하는데, 예를 들어보자면 마우스 클릭, 키보드 키 입력, 버튼 클릭, 텍스트 입력 등이 있습니다. 꼭 입출력과 관련된것만이 이벤트는 아니며, 이 글에서 설명하려는 Servlet/JSP의 리스너와 같이 웹어플리케이션의 시작이나, 종료, 특정 객체의 생성, 소멸과 같은것도 이벤트라고 할 수 있습니다. 추가적으로 이벤트 소스가 있는데 이벤트 소스는 이벤트가 발생한 대상(이벤..
@Sl4fj 테스트에서 적용
2022. 8. 27. 17:51
Spring/Annotation
build.gradle에 lombok build option을 설정해줘야한다. testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok'
텍스트 - text, utext
2022. 8. 24. 01:21
Spring/Thymeleaf
타임리프의 가장 기본 기능인 텍스트를 출력하는 기능 먼저 알아보자. 타임리프는 기본적으로 HTML 테그의 속성에 기능을 정의해서 동작한다. HTML의 콘텐츠(content)에 데이터를 출력할 때는 다음과 같이 th:text 를 사용하면 된다. HTML 테그의 속성이 아니라 HTML 콘텐츠 영역안에서 직접 데이터를 출력하고 싶으면 다음과 같이 [[...]] 를 사용하면 된다. 컨텐츠 안에서 직접 출력하기 = [[${data}]] BasicController package hello.thymeleaf.basic; import org.springframework.stereotype.Controller; import org.springframework.ui.Model;import org.springframewo..
타임리프 소개
2022. 8. 23. 22:51
Spring/Thymeleaf
● 공식 사이트: https://www.thymeleaf.org/ ● 공식 메뉴얼 - 기본 기능: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html ● 공식 메뉴얼 - 스프링 통합: https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html 타임리프 특징 ● 서버 사이드 HTML 렌더링 (SSR) ● 네츄럴 템플릿 ● 스프링 통합 지원 서버 사이드 HTML 렌더링 (SSR) 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용된다. 네츄럴 템플릿 타임리프는 순수 HTML을 최대한 유지하는 특징이 있다. 타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에..
@SpringBootTest
2022. 8. 23. 13:45
Spring/Annotation
[ 통합테스트를 위한 @SpringBootTest 어노테이션 ] @SpringBootTest @SpringBootTest를 사용하면 손쉽게 통합 테스트를 위한 환경을 준비해준다. @SpringBootTest는 모든 빈들을 스캔하고 애플리케이션 컨텍스트를 생성하여 테스트를 실행한다. @SpringBootTest의 어노테이션에는 다양한 값을 줄 수 있는데, 이를 살펴보면 다음과 같다. value와 properties: 애플리케이션 실행에 필요한 프로퍼티를 key=value 형태로 추가할 수 있음 args: 애플리케이션의 arguments로 값을 전달할 수 있음 classes: 애플리케이션을 로딩할 때 사용되는 컴포넌트 클래스들을 정의할 수 있음 webEnvironment: 웹 테스트 환경을 설정할 수 있음 ..
스프링, 스프링 부트 비교
2022. 8. 23. 09:26
Spring/개념
목차 1. 스프링이란? 2. 스프링 부트란? 3. 이들의 목적 4. 비교 1. 스프링이란? 스프링 프레임워크는 자바 생태계에서 가장 대중적인 응용프로그램 개발 프레임워크입니다. 의존성 주입(DI, Dependency Injection)과 제어의 역전(IOC, Inversion Of Control)은 스프링에서 가장 중요한 특징중 하나입니다. 이들로 인해서 좀더 결합도를 낮추는 방식으로 어플리케이션을 개발할 수 있습니다. 이러한 개발방식으로 개발한 응용프로그램은 단위테스트가용이하기 때문에 보다 퀄리티 높은 프로그램을 개발할 수 있습니다. DI 없는 예제 @RestController public class MyController { private MyService service = new MyService(..
스프링 빈 생애주기(Life Cycle)
2022. 7. 15. 01:49
Spring/개념
@Transactional
2022. 6. 24. 23:09
Spring/Annotation
1. 정의 @Transactional 어노테이션은 트랜잭션 처리를 위해서 Spring이 제공하는 어노테이션이다. 메서드, 클래스, 인터페이스의 트랜잭션 처리가 가능한데 이러한 방식을 선언적 트랜잭션이라 부른다. 트랜잭션 기능이 들어가 있는 프록시 객체가 생성되어 자동적으로 커밋이나 롤백을 해준다고 생각하면 된다.
조건문, 반복문, 주석
2022. 6. 4. 01:42
Spring/Thymeleaf
1. 조건문 th:if th:unless 조건문을 사용할 때 else 대신 unless를 사용한다. 합격입니다!!! 불합격.. 좀 더 노력하세요! 2. 반복문 th:each 상태변수 사용(index, count등) 리스트 객체를 반복할 때 사용한다. @RequestMapping("selectStudentInfo") ModelAndView selectStudentInfo() { ModelAndView mav = new ModelAndView("/selectStudentInfo"); Student student = new Student("210000001", "Anne Marie", 29); List studentList = new ArrayList(); studentList.add(student); stu..
기본 문법 - 데이터 바인딩
2022. 6. 4. 01:33
Spring/Thymeleaf
1. 데이터 바인딩 th:text th:value th:placeholder p, span, div 등의 태그에서 데이터를 텍스트로 바인딩할 때 사용한다. @RequestMapping("selectStudentInfo") ModelAndView selectStudentInfo() { ModelAndView mav = new ModelAndView("/selectStudentInfo"); Student student = new Student(); student.setId("210000001"); student.setName("Anne Marie"); student.setAge(29); /** thymeleaf에서 사용할 object명, object를 ModelAndview에 넣어준다. */ mav.addO..
Thymeleaf 기본 표현식(*{}, ${}...)
2022. 6. 4. 01:28
Spring/Thymeleaf
1. Thymeleaf 기본 표현식 변수 : ${...} - ${student.id} 선택자 : *{...} - *{id} 메시지 : #{...} - #{id} 링크URL : @{...} - @{https://www.naver.com} 부분적 표현 : ~{...} - 조건 연산자 : and, or, not, ! ${student.age} > 20 and ${student.age} 20 or student.age < 10} 처럼 한 번에 묶어서 사용하는 것도 가능 텍스트 결합 : ${student.id}+${student.name} 문장 결합 : |학생 아이디 : ${student.id}, 학생 이름 : ${student.name} | ..
@EqualsAndHashCode
2022. 6. 3. 11:30
Spring/Annotation
1. @EqualsAndHashCode 롬복(Lombok) 라이브러리에서 제공하는 @EqualsAndHashCode 어노테이션을 사용하면, Lombok이 equals 메서드와 hashCode 메서드를 생성해준다. equals : 두 객체의 내용이 같은지, 동등성(equality)을 비교하는 연산자이다. hashCode : 두 객체가 같은 객체인지, 동일성(identity)을 비교하는 연산자이다. Java bean에서 동등성 비교를 위해 equals와 hashCode 메서드를 오버라이딩 해서 사용하는데, @EqualsAndHashCode 어노테이션을 사용하면 자동으로 이 메서드를 생성할 수 있다. @EqualsAndHashCode(callSuper = true)로 설정시 부모 클래스 필드 값들도 동일한지 ..
@Component
2022. 6. 1. 17:59
Spring/Annotation
1. @Component @Component 어노테이션을 이용하면 Bean Configuration 파일에 Bean을 따로 등록하지 않아도사용할 수 있다. 빈 등록 자체를 빈 클래스 자체에다가 할 수 있다는 의미이다. @Component 어노테이션은 기본적으로 타입 기반의 자동 주입 어노테이션이다. @Autowired, @Resource와 비슷한 기능을 수행한다고 할 수 있다. 2. Java configuration 파일에서 @Component 설정하기 @Configuration 어노테이션 아래에 @ComponentScan(basePackages="패키지 경로")이라는 어노테이션을 써줌으로서 해당 패키지 안에 있는 bean 클래스의 어노테이션을 분석할 수 있도록 설정해줄 수 있다. javacb1이라는 빈..
@Configuration
2022. 6. 1. 17:48
Spring/Annotation
1. @Configuration 설정파일을 만들기 위한 애노테이션 or Bean을 등록하기 위한 애노테이션이다. @Configuration 애노테이션을 사용하면 가시적으로 '설정파일이야', 'Bean 등록할꺼야' 라는 것을 알 수 있다. 하지만 단순히 Bean을 등록하기 위한 애노테이션이 아니다. 2. 역할 Baen을 등록할 때 싱글톤(Singleton이 되도록 보장해 준다. 스프링 컨테이너에서 Bean을 관리할 수 있게 된다. package Test.sample; import Test.sample.calculate.Calculate; import Test.sample.calculate.Calculator; import Test.sample.calculate.Minus; import org.springf..
@RequestParam
2022. 5. 30. 16:44
Spring/Annotation
@RequestParam 어노테이션은 HttpServletRequest 객체와 같은 역할을 한다. HttpServletRequest에서는 getParameter() 메소드를 이용했지만 @RequestParam을 이용해서 메서드의 파라미터 값을 받는다. @Controller public class HomeController{ @RequestMapping("/add") public String add(@RequestParam("id") String id, @RequestParam("pwd") String pwd, Model model){ model.addAttribute("id", id); model.addAttribute("pwd", pwd); return "/add"; } } @RequestParam("..
@Controller, @RestController 비교
2022. 5. 30. 16:25
Spring/Annotation
-둘의 주요한 차이점은 HTTP Resopnse Body가 생성되는 방식이다. 1. @Controller 전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용한다. 아래와 같은 과정을 통해 Spring MVC Container는 Client의 요청으로부터 View를 반환한다. Client는 URI 형식으로 웹 서비스에 요청을 보낸다. DispatcherServlet이 요청을 위임할 HandlerMapping을 찾는다. HandlerMapping을 통해 요청을 Controller로 위임한다. Controller는 요청을 처리한 후에 ViewName을 반환한다. DispatcherServlet은 ViewResolver를 통해 ViewName에 해당하는 View를..
URI, URL 비교
2022. 5. 30. 14:30
Spring/개념
1. URI URI 특정 리소스를 식별하는 통합 자원 식별자(Uniform Resource Idenrifier)를 의미한다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다. 2. URL URL은 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다. 3. 예시 URI는 식별하고, URL은 위치를 가리킨다. https://www.jcy8206.com/index.html : URI=O, URL=O https://www.jcy8206.com/index : URI=O, URL=X : 두 주소는 모두 index.html을 가리킨다. 첫 번째 주소는 웹서버의 실제 파일 위치를 나타내는 주소이므로 URI이면서 URL이다..