백엔드/Spring
-
[Spring] Mybatis, JPA, ORM에 대해서 간단하게 알아보자백엔드/Spring 2022. 5. 21. 00:07
[Spring] Mybatis, JPA, ORM에 대해서 간단하게 알아보자 API 개발을 하기 위해서는, 데이터베이스를 기동하여 질의문을 동작시켜야 합니다. 이를 위해서는 반드시 질의문을 돌릴 수 있는 “Mybatis”와 “JPA”를 학습해야 합니다. Mybatis와 JPA, ORM을 모르는 분들을 위해서 정리하였습니다. 1. Mybatis Mybatis 템플릿 - https://github.com/rojae/mybatis-demo Mybatis JSP 게시판 예제 : https://github.com/rojae/SpringBoot-BBS-demo XML 파일에서 Query를 직접 작성하여, 추출되는 결과를 XML 문법을 통해서 자바 Class 파일로 변환합니다. 마이바티스는 아래와 같은 모습을 가집니다..
-
[Spring] AOP 기능을 사용해서, 어노테이션으로 로그를 남기자 (annotation logging)백엔드/Spring 2022. 4. 30. 23:55
공통된 기능을 개발할 수 있도록, 설계된 Spring의 AOP를 활용하면 메소드에 공통 기능을 삽입할 수 있다. 이를 적절하게 사용해서, 메소드에 logging 기능을 넣어보자 Annotation 생성 AOP 설정파일을 추가하자 로깅 기능을 직접 사용하자 후기 소스코드 이미지를 클릭하면, 소스코드 연결이 가능합니다. 1. Annotation 생성 (로그 유발, 로그 제외) 2. AOP 설정파일을 추가하자 @Around를 사용하여, kr.imcf.mybatis.** 패키지에 존재하는 소스에 AOP 설정이 가능하다. // kr.imcf.mybatis 패키지 내부 && @LogExclusion이 없고 && @LogInclusion이 있는 경우 @Around("within(kr.imcf.mybatis..*) &..
-
[Spring] Servlet 응답, 요청 객체를 얻는 방법 (HttpServletRequest, HttpServletResponse)백엔드/Spring 2021. 11. 4. 13:24
보통 스프링에서, controller의 파리미터로 선언을 하면 서블릿 요청, 응답 객체를 가져올 수 있다. 하지만, controller의 파리미터가 아니라면 어떻게 할까? 1. 메소드 내부에서 사용 (>= Spring 2.0 required) HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()) .getRequest(); 2. 메소드 외부에서 사용 (supported by >= 2.5, Spring 3.0 for singelton beans required!) @Autowired private HttpServletRequest request; 3. 나아가 아래와 같이 사용할 수도..
-
Spring Security에서 Ajax 권한 검사하는 법백엔드/Spring 2021. 10. 30. 04:44
Spring Security에서 프론트에서 비동기 통신으로 JQuery Ajax 사용하는 경우 권한 체크 시에, 약간 애매하다. 예를 들면 비동기 요청을 하였는데, 세션이 만료된 경우 알림창을 보여주고, 로그인 페이지로 이동해야지 무턱대고 로그인 페이지로 이동할 수는 없다. 결론적으로는 아래의 순서도 대로 되어야한다. Spring Security - Ajax 인증검사 이를 추가 개발하기 위해서는 몇 가지 추가로 개발이 필요하다. Spring Security 추가 설정. AjaxAuthenticationEntryPoint 클래스 작성 Ajax 서버 응답 오류 시, 세션 오류 (만료) 알림창 세션 오류 만료 알림창 기능 (옵션) Spring Security 설정 아래 설정을 추가하여, 인증되지 않은 요청은 ..
-
[Spring Security} Spring 3.x에서 mockMvc 테스트 하는 법백엔드/Spring 2021. 1. 15. 09:04
🚀 들어가며... MockMVC를 사용하면 테스트 케이스를 보다 다양하게 구성할 수 있는데, 사내의 자바와 서블릿은 spring 3.x에 가능했다. 하지만 Spring security Test는 spring 4.x에서 동작하기 때문에 생기는 문제점... 📑 내용 stack over flow의 일부 내용 Update: 4.0.0.RC2 works for spring-security 3.x. For spring-security 4 spring-security-test become part of spring-security (http://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#test, version is the same). ..
-
[Spring JPA] 객체의 상태에 대해서 알아보자 (Transient, Persistent, Detached)백엔드/Spring 2021. 1. 12. 23:47
🚀 들어가며... 과거 JPA를 통해서 블로그를 개발해보겠다며, 열심히 카카오톡 oAuth2.0 로그인 기능을 붙이며 개발했던 기억이 있다. 그러면서 저장한 객체를 재사용하였는데, 재사용과 동시에 update가 되는 경우가 있었다. 당시 JPA에 대한 이해가 부족했기에, 이제라도 남기는 글 (현재 아직 많이 부족하지만, 이제는 많이 달라진 것 같다) 📑 내용 우선 설명부터 해야겠다. JPA의 객체 상태(Object status)의 경우 세가지가 존재한다. 1. Transient (과도기) 말 그대로 투명한 상태를 뜻한다. 알기 쉽게 설명하자면, 객체 저장 이전의 상태를 뜻하여, 데이터베이스나 EM(entityManager)가 관리하지 않는 상태이다. ID 값이 존재하지 않으며, 하이버네이트가 save()..
-
[Spring JPA] 검색 쿼리 개발백엔드/Spring 2021. 1. 2. 03:43
🚀 들어가며... 검색의 경우 총 네가지를 구상했습니다. 단순 키워드 검색 (좋아요 내림차순) 단순 키워드 검색 (좋아요 오름차순) 페이지 반환, 키워드 검색 (좋아요 내림차순) 페이지 반환, 키워드 검색 (좋아요 오름차순) 좋아요 컬럼의 변수 이름은 likeCount로 하였습니다 like는 데이터베이스 예약어이기 때문에 안됩니다. 테스트 케이스는 assertThat()을 사용하여 진행하였습니다. 💌 소스코드 도메인 클래스 (Comment) package org.rojae.examples; import org.springframework.lang.NonNull; import javax.persistence.*; @Entity public class Comment { @Id @GeneratedValue p..
-
[Spring JPA] 검색 쿼리 - 대소문자 무시하기백엔드/Spring 2021. 1. 2. 02:48
🚀 들어가며... 커뮤니티 게시판에서 검색 기능을 개발할때, 대소문자에 구분 없이 사용하도록 해야한다. 💌 소스코드 package org.rojae.examples; import java.util.List; public interface CommentRepository extends MyRepository{ // IgnoreCase를 추가 ~> keyword의 문자를 대문자로 바꾸어 준다 List findByCommentContainsIgnoreCase(String keyword); } 위의 코드를 사용하여 (IgnoreCase를 추가한) 하이버네이트가 생성한 쿼리를 확인해보면 upper()를 통해서 무조건 대문자로 검색하는 것을 알 수 있다. (사용한 데이터베이스는 postgres) 이를 통해서 대소문..