어제부터 진짜 미치고 팔짝 뛰는 에러가 진짜 평화롭던 날에 갑자기 튀어 나가서 마우스를 내리친게 몇 번인지 모르겠다. 에러는 [com.intellij.javaee.oss.admin.jmx.JmxAdminException: com.intellij.execution.ExecutionException] 인데, 그냥 gralde프로젝트 빌드 시 아래 빨간 줄의 exploded war이 생성되는 경로를 톰캣이 못 찾아서 생기는 에러이다. 여기까지는 오케이, 그럼 생성을 하자! 하고 빌드를 다시 때렸는데 무슨 짓을 해도 그냥 war은 생성이 되는데 exploded 가 생성이 되질 않는다. gradle clean만 수십번, 프로젝트 재생성만 10번은 한 것 같다. 찾아보니, 인텔리제이 settings - Build,..
Spring 토이 프로젝트에 log4j2와 slf4j를 적용해봤는데, 그 과정에서 꽤나 헤매서 정리를 좀 하려고 한다. 기본적으로 log4j.xml 에서 spring 구동 정보는 모두 DEBUG로 띄우도록 하고, AspectJ의 Before, After를 사용하여 프로젝트의 모든 메서드 시작 전, 후에 로그를 찍도록 설정했다. 1. dependency 추가 log4j-core와 이를 구현하기 위한 slf4j, 그리고 이 둘을 바인딩하기 위한 slf4j-simple까지 gradle에 추가해준다. ◎build.gradle implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.17.1' implementation gro..
Intellij를 사용하여 gradle 기반의 Spring MVC 구조를 생성하려고 한다. - JDK: 1.8.0_261 - Spring framework: 5.2.3 RELEASE - tomcat: tomcat 8.0 1. new project 생성 Gradle - java를 체크하고 JDK 버전을 확인한 후, 새 프로젝트를 생성한다. 2. build.gradle 작성 Spring MVC를 구성하기 위해 필요한 라이브러리를 직접 build.gradle에 작성하여 빌드한다. 또한 war 생성을 위한 플러그인 설정도 추가한다. ○build.gradle plugins { id 'java' id 'war' //get added } group 'org.example' version '1.0-SNAPSHOT' r..
Spring Security는 직전 포스팅에서도 언급했듯, Config 클래스를 생성하여 내부 설정을 개발 목적에 맞춰 커스터마이징할 수 있다. 1. Resource 설정 Config 클래스가 상속받는 WebSecurityConfigurerAdapter 클래스의 내부 추상 메서드 configure를 재정의하여 사용할 수 있는데, 아래 코드와 같이 HttpSecurity 객체를 인자로 받아 사용자 인증, 인가를 제어할 수 있으며 로그인 페이지, 로그아웃 페이지, 로그인 성공 페이지 등 각 요청에 맞게 리다이렉트 요청 또한 설정할 수 있다. ◎SecurityConfig.java package com.choonham.security.config; import lombok.extern.log4j.Log4j2; ..
Spring Security는 사용자 인증과 인가 등의 보안 관련 기능을 개발자가 구현하기 쉽게 Spring이 제공해주는 라이브러리이다. 즉, 로그인이나 권한 설정 같은 기능을 직접 구현하지 않고도 사용할 수 있다는 것인데, 아ㅡ주 편리할 거 같으니 바로 들어가보자. 우선 Spring Project를 생성하는데, dependency를 추가할 때 필요한 라이브러리와 함께 반드시 Spring Security도 추가해야 한다. 프로젝트 생성 이후 gradle dependency는 다음과 같다. ◎build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.sp..
Querydsl 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크다. 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있다. 단순 문자열과 비교해서 Fluent API를 사용할 때의 장점은 다음과 같다. IDE의 코드 자동 완성 기능 사용 문법적으로 잘못된 쿼리를 허용하지 않음 도메인 타입과 프로퍼티를 안전하게 참조할 수 있음 도메인 타입의 리팩토링을 더 잘 할 수 있음 Querydsl의 최초 쿼리 언어 대상은 Hibernate의 HQL이었으나, 현재는 JPA, JDO, JDBC, Lucene, Hibernate Search, MongoDB, 콜렉션 그리고 RDFBean을 지원한다..
Thymeleaf에서는 크게 두가지 방법으로 다른 페이지를 삽입하는 기능을 구현할 수 있다. 크게 어려운 것은 없으니 바로 확인해보자. - th:fragment 우선 th:fragment 속성을 사용하여 다른 페이지에 삽입될 페이지나, 페이지 내부의 특정 부분을 다른 페이지에서 불러올 수 있도록 선언해줘야 한다. th:fragment를 특정 부분에 선언하여 그 부분만 따로 가져올 수 있으며, 2번과 같이 아예 선언하지 않고 body 부분만 작성하여 HTML 파일 자체를 fragment로 사용할 수 있다. ◎fragment1.html(특정 부분만 선언) part1 part2 part3 ◎fragment2.html Fragment2 File Fragment2 File Fragment2 File 이제 th:r..
직전 포스팅에서 Thymeleaf의 일반적인 구조를 간단하게 확인했다. 이번 포스팅은 Thymeleaf가 사용하는 조건문, 반복문 등과 같은 문법들과 사용할 수 있는 표현식에 대하여 정리하려고 한다. Thymeleaf-Reference: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#introducing-thymeleaf Tutorial: Using Thymeleaf 1 Introducing Thymeleaf 1.1 What is Thymeleaf? Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable o..
Spring-Boot에서는 JSP를 활용하여 View를 구성하는 것이 아닌, Thymeleaf를 사용한 view 구성을 권장하고 있다. 우선 Thymeleaf는 Web을 구성하기 위한 템플릿 엔진 중 하나이다. 템플릿 엔진이란 html(Markup)과 데이터를 결한한 결과물을 만들어 주는 도구이며, JSP 개발에서 이전에 사용했던 el 태그와 비슷하게 생각하면 편하다. Thymeleaf를 Spring-Boot 환경에서 사용하기 위해서는 다음과 같이 dependency를 추가해야 한다. 이후에 thymeleaf에서 숫자, 날짜 관련 포맷을 자동으로 바꿀 수 있도록, build.gradle에 다음 dependency를 추가한다. testImplementation('org.springframework.boot..
@Query 어노테이션은 쿼리 메서드처럼 메서드 명으로 어떤 기능을 지정하는 것이 아닌, SQL 구문을 직접 작성하여 원하는 작업을 처리할 수 있도록 해주는 어노테이션이다. @Query를 이용하여 할 수 있는 작업 1. 필요한 데이터만 선별적으로 추출할 수 있는 기능 2. 데이터베이스와 맞는 순수한 SQL을 사용 가능 3. insert, update, delete와 같은 DML 등을 처리 가능(단, @Modifying 과 함께 사용) @Query 는 JPQL로 객체 지향 쿼리이다. 즉, 테이블 대신 엔티티 클래스 & 속성명 대신 엔티티 클래스의 맴버 변수를 이용하여 쿼리를 작성해야 한다. 크게 어렵지는 않다. 바로 확인해보자. ◎Repository.java(interface) package com.exa..
- redux-thunk
- 이탈리안 레스토랑
- react
- 인천 구월동 이탈리안 맛집
- react-native
- 인천 구월동 맛집
- await
- 맛집
- Async
- redux
- 파니노구스토
- Promise
- javascript
- AsyncStorage
- 정보보안기사 #실기 #정리
- Total
- Today
- Yesterday