본문 바로가기

Spring

(26)
Spring JPA Querydsl 설정과 간단한 사용 JPA를 처음 사용하면서 아직 많이 써보진 않았지만 JPA의 장점과 한계에 느끼고있다. 개인적으로 느끼는 JPA의 가장 큰 장점은 영속성이다. 예시로, Mybatis를 사용할때는 insert 후 바로 컬럼을 업데이트 해줘야 하는일이 있으면 다시 update로직을 불러서 해결했지만 JPA는 쉽게 save(insert, update)후 리턴받은 객체에 다시 set필드만 해줘도 영속성 때문에 적용이 된다는 것이다. 정말 좋은 장점이지만 반대로 단점도 조금 큰 것 같다. spring-data-jpa에서 제공하는 메서드와 JPQL같은 정적쿼리에는 동적인 쿼리를 만들기에 한계가 있다. 이를 극복하기 위한 방안으로 Querydsl이라는 프레임워크가 있다. Querydsl SQL, JPQL을 자바 소스코드로 만들어주는..
Spring 메일 보내기 Mail 보내기 스프링의 mailx 라이브러리로 편하게 메일을 보낼 수 있다. 개발한 코드는 당연히 내 기준에 간단하면서 맘에 드는 형식이다. 메일을 보내기 위해선 당연히 메일서버가 필요하다. 우리가 스프링에서 해야할 것은 메일서버(smtp)로 요청을 보내는 것이다. 나는 네이버 메일을 사용했다. 구글x 먼저 네이버에서 SMTP사용 설정을 해야한다. 네이버 SMTP 사용 네이버 메일 > 환경설정(아래에 조그맣게 있음) > POP3/SMTP 설정 > 사용함 설정 밑의 환경 설정 값은 context에서 빈 설정때 쓰인다. pom.xml dependency 추가 com.sun.mail javax.mail 1.6.2 org.springframework spring-context-support ${org.springframewo..
Spring JPA @Query 사용하기 JPQL Spring legacy 프로젝트를 개발하면서 JPA를 처음 사용해봤다. Mybatis에 익숙해진 나는 쿼리를 직접 쓰고 db에 만들어놓은 프로시저나 함수를 이용하는 쿼리를 작성하는게 익숙했는데 jpa는 인터페이스에서 제공하는 메서드만 사용하기 때문에 사용할 방법이 없었다. 하지만 찾아보니 JPA에서도 @Query 어노테이션을 사용해 직접 쿼리를 작성해 새로운 커스텀 메서드를 생성하는게 가능했다. => 이를 JPQL이라고 한다. 추가로 콘솔에 쿼리를 로깅하기 위한 설정을 했다. Repository에서 @Query 사용 package com.poozim.jobcall.repository; import org.springframework.data.jpa.repository.JpaRepository; impo..
Spring Interceptor 적용하기 스프링에서는 요청에 공통적으로 처리할 수 있는 3가지 개념이 있다. Filter Interceptor AOP 이 세가지는 어떤 타이밍에 처리하는지에 따라 나뉘는데 그 중 Interceptor에 대한 간단한 개념과 설정에 대해 말하려고한다. Dispatcher Servlet 인터셉터 전에 먼저 Dispatcher Servlet에 대해 조금 알아야 이해하기 쉽다. 그림이 눈에 안들어올 수 있는데 자세히 집중을 해봐야한다. 태초에는 컨트롤러의 개념x 스프링 개념x 웹 애플리케이션을 만들기 위해선 요청 서블릿을 직접 생성해서 응답을 해야했고, 서블릿에 url을 매핑하려면 서블릿이 많이 늘어날 수 밖에 없었다. dispatcher servlet은 요청마다 이 서블릿들을 매핑해주는 서블릿 관리자같은 개념이다. 지금..
Spring MVC JPA 적용하기 (spirng-data-jpa) 이전 글중 eclipse 스프링 레거시 프로젝트 생성과 이어지는 내용이다. https://riverblue.tistory.com/35 eclipse 스프링 레거시 프로젝트 생성 및 나의 기본 세팅 스프링 레거시로 만들고 싶은게 생겨서 새로 프로젝트를 만든다. ide는 eclipse 2020-09 버전 당연히 market으로 스프링이 설치되어있고 perspective는 spring으로 선택되어있어야 한다. 프로젝트 생성 File > riverblue.tistory.com 초기 프로젝트 구성으로 나에게 익숙한 Mybatis를 쓰려고 했지만 JPA를 써보기로 했다. 이유는 궁금해서 나는 기존에 ORM에 대해서 잘못알고 있었다. jdbc나 mybatis, jpa처럼 애플리케이션에서 디비에 접근할수 있게 하는 라..
Spring XSS Filter 개발 및 적용 개발자들이 항상 고민하는 XSS를 막기위한 XSS Filter를 간단하게 개발하고 적용해봤다. 처음엔 XSS 필터링을 인터셉터에서 리퀘스트에서 데이터 뽑아서 replace 하고 다시 넣어주면 되지않나? 라고 생각했다. 인터셉터에서 한다는게 안일한 생각이지만, 전부 틀린말은 아니다. 1. 요청에서 데이터를 가져온다. 2. XSS를 escape한 문자로 replace해서 다시 넣어준다. 1번 경우 inputStream을 사용해야하는데 이때 already called 에러를 뱉기 때문에 HttpServletWrapper를 따로 정의해서 새 스트림을 리턴하는 형식으로 해야한다. 2번 경우 인터셉터에서 단순 setparameter같은 메서드가 없기 때문에 HttpServletWrapper를 따로 정의해서 데이터를..
Spring Bean Scope 빈 스코프 Bean Scope란? Bean Scope는 빈 객체를 정의할 때 지정 하는 범위를 말한다. 개인적으로 정의하자면 빈 객체가 어디 부분에서 쓰이고 얼마나 쓰일지에 대한 내용을 말하는것으로 생각한다. scope 값을 설정 하지 않으면 singleton(싱글톤)이 디폴트 값이다. 참고 문서 : https://docs.spring.io/spring-framework/docs/current/reference/html/core.html#beans-factory-scopes Core Technologies In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly wh..
Spring AOP (Aspect Oriented Programming) AOP란? AOP는 관심 지향 프로그래밍이라는 뜻으로 실제 서비스 기능을 나타내는 비즈니스 로직 전, 후로 로깅이나 성능 검사, 권한 체크 등의 부가적인 기능, 즉 인프라 로직을 추가할 때 사용하는 나타나는 개념으로 인프라 로직이 기능별로 횡단적으로 공통적으로 나타나기 때문에 이를 횡단 관심사라고 한다. AOP는 쉽게 생각하면 이런 횡단 관심사에 따라 프로그래밍 하는 것이라고 생각할 수 있다. 개인적으로는 기능마다 공통적으로 비즈니스 로직 전, 후에 인프라 로직을 추가하는 프로그래밍 이라고 생각한다. AOP는 객체 지향 프로그래밍을 의미하는 OOP와 대비되는것으로 오해할 수 있는데, 실제로 AOP는 OOP를 보완하는 역할로 Spring Document에 나와있다고 한다. (참고 : https://docs..