Spring 91

[IntelliJ] 인텔리제이 단축키 모음 - Mac, Window 조금..ㅎ

💥 내가 자주 사용하는 인텔리제이 단축키 !! 💥 계속 추가할 예정 [코드 단축키] soutv : 작성시, print 객체 나옴 Command + Option(alt) + V : 변수 추출 Command + Option(alt) + m : 메소드 추출 F6 : 클래스 추출 (클래스 이름 드래그 후 f6 ➡️ 상위 클래스 추출 혹은 클래스 패키지 이동) Command + Option(alt) + n : 인라인 = 중복된 코드 추합 Command + shift + u : 전부 대소문자 변환 - upper case / downer case Ctrl + Command + u : translation 번역 모듈 실행 Ctrl + Command + O (ctrl + shift + x) : 한글 문자에 맞는 변수명 ..

Spring/기타 2022.07.06

[Spring Controller test Error] - Invalid use of argument matchers! - "Mock argument matcher 에러"

@Test @DisplayName("Member 정상 수정") void updateMemberTest() throws Exception { String content = objectMapper.writeValueAsString( new MemberDto.Request(NAME, EMAIL, PHONE_NUMBER)); doNothing().when(memberService).update(MEMBER_ID,any(MemberDto.Request.class)); final ResultActions resultActions = mockmvc.perform(delete("/member") .param("memberId",Long.toString(MEMBER_ID)) .content(content) .conten..

Spring/Spring err 2022.05.26

[Spring 기본편] (2) Spring 컨테이너의 필요성 - 스프링 컨테이너란, Bean의 관리

이번에는 스프링 컨테이너의 역할과 아래의 키워드에 대해서 공부한다..! 기능과 구현의 분리 사용과 구성의 분리 JAVA DIP, OCP를 위해서 객체지향의 다형성을 지키기위해, 기능(Interface)와 구현(구현체 class)를 분리해서 설계하여 클라이언트가 기능에 의존하고 있다고 생각해도 순수 자바코드로는, 기능이 변경될 떄 클라이언트 코드도 변경이 되고 만다. (사실상, 클라이언트는 기능과 구현 둘 다에 의존) (예시) public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy..

[Spring 기본편] (1) 스프링이란 / 스프링과 객체 지향에 대하여

Spring(스프링) - 스프링이란, 자바 언어 기반의 프레임워크 - 자바 언어의 가장 큰 특징 = 객체 지향 언어 - 스프링은 객체 지향 언어가 가진 강력한 특징(객체지향)을 살려내는 프레임워크 -> 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 Spring Framwork(스프링 프레임워크) - 스프링의 핵심기술 Spring boot(스프링 부트) - 스프링 부트란, 스프링을 편리하게 사용할 수 있도록 지원 - 단독으로 실행할 수 있는 스프링 어플리케이션을 쉽게 생성 - Tomcat 같은 웹서버를 내장해서 별도의 웹서버를 설치하지 않아도 됨 - 손쉬운 빌드 구성을 위한 starter 종속성 제공 (Dependency 라이브러리 간편 관리) - 스프링과 3rd parth(외..

[Spring] 스프링 순환 참조, 무한 재귀 해결하기 (DTO, JsonIgnore)

jpa 엔티티 일대다 : 다대일 관계 생성시 흔하게 일어나는 순환 참조문제, 이전 프로젝트에서는 뭣도 모르고 @jsonignore로 처리했었는데, 이게 왜 일어나는지 공부해보니, 좋지 않은 방법이였다는 걸 깨달았다,.. JPA에서 순환참조 문제는 이제 알고보니까는, 엔티티를 조회할 떄 발생하는 게 아니라 entity를 json으로 변환할 떄, 즉, Entity To Json serialize할 때 (보통 controller 단)에서 일어나는 문제였다. Entity를 Json으로 변환하면서, 연관된 객체를 다시 Json으로 변환하고, 이 변환 과정에서, 다시 연관된 객체의 연관된 객체를 참조... 참조 지옥,,, 무한 참조,,, 크기가 펑펑펑,, 스프링 무한 순환 참조 문제 해결 방법 @jsonignore..

Spring/Spring Boot 2022.04.20

[Spring] 스프링 엔티티 삭제 시점 히스토리 기록하기 (Soft Delete)

생성시간과, 삭제시간은 jpaAuditing으로 기록이 가능했는데, 삭제시점을 자동을 체크해주고 싶어서 찾아보니 jpaAuditing에는 없었다 흨,,ㅠ 그러다 하이버네이트에서, delete 시점을 체크할 수 있는 @SqlDelete 와 default 조건절을 붙히는 @where 를 발견했다..! Soft Delete ex) `UPDATE table SET delete = 1 WHERE id = 2` 형태로 ROW가 삭제 되지 않고 flag를 통한 제어 하는 방식 delete가 되더라도, 데이터를 지우는게 아닌, column 값을 변경하여, 데이터를 제어하는 방법이다, @SQLDelete Annotation @SQLDelete 어노테이션을 통해, 실제 삭제가 이루어질때 수행 할 쿼리를 적으면 된다. ex..

Spring/Spring Boot 2022.04.20

[Spring err] 스프링 시큐리티 - Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' in your configuration.

Parameter 1 of constructor in com.example.zaritalk.service.UserService required a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' that could not be found. package com.example.zaritalk.service; import com.example.zaritalk.domain.user.User; import com.example.zaritalk.domain.user.UserRole; import com.example.zaritalk.dto.SignupRequestDto; import com.example.zaritalk.rep..

Spring/Spring err 2022.04.20

[JPA] Fetch join 과 Join 차이점

fetch join은 불러온 데이터까지 영속성 컨텍스트에 저장하지만 join은 불러온 데이터를 영속성 컨텍스트에 저장하지 않는다...! Fetch Join 조회 주체가 되는 엔티티와 연관 관계의 엔티티(JOIN) 까지 모두 조회하여 영속화한다. 즉, 2개의 엔티티 모두 영속성 컨텍스트로 관리되어진다. 일반 Join 조회 주체가 되는 엔티티만 조회하고 영속화한다. 만약 연관 관계의 엔티티 데이터를 사용해야 할 경우 별도의 조회 쿼리문을 실행 해야 함. FetchType.EAGER 일 경우, 연관 관계의 엔티티를 영속화하기 위해 N번의 쿼리를 발생시킴. FetchType.LAZY 일 경우, 최초 조회시 획득한 id 로 조회를 N번해야함. [참고] https://velog.io/@heoseungyeon/Fet..

Spring/Spring Boot 2022.04.20

[Spring] 스프링 부트 JPA 페이징 성능 개선 - querydsl 페이지네이션(오프셋 페이징, 커서 페이징, querydsl 정렬)

JPA N+1 문제를 해결했으니, 이제 페이지네이션 성능개선을 해볼려고 한다. https://thalals.tistory.com/246 [Spring] 스프링 부트 페이지네이션 (Query, JPA, offset / cursor 페이지네이션) 페이지네이션을 구현해보자!! spring boot 의 JPA를 이용해서 구현을 할 예정이다 페이지네이션을 구하기 위해서는 요롷게 3가지를 생각해 주어야한다. view size : 한페이지에 보여줄 개수 total page : thalals.tistory.com 이전에, 페이지네이션에 대해 공부해 보았을 떄 offset 과 cursor 2가지 방식의 페이지네이션 구현 방법이 존재하고 JPA 페이징 API는 오프셋 기반 방식이라는 것을 확인한 적이 있다. 오늘은, JP..

Spring/Spring Boot 2022.04.10

[Spring/스프링] springboot gradle - XSS 스크립트 오류 해결하기 (with @RequestBody)

프로젝트 댓글에, 누군가 XSS 공격을 해놓았다.. 껄껄껄 이론으로만 알던걸 직접 당해보니 기분이 새롭고 상쾌하다 해결하자!! 1.XSS 란 2. Spring에서 Xss 해결하기 1. XSS 란 Crooss-site Scripting으로, 클라이언트가 입력값으로 악의적인 스크립트 문을 삽입하여, 개발자의 의도대로 동작하지 않게하는 공격을 말합니다. 바로 아래처럼,,..!! ㅠㅠ 2. Spring에서 Xss 해결하기 XSS 공격을 예방하는 방법으로는, 특정문자 치환하기 특정문자 입력시 검사 후, 입력받지 않게하기 모든 body태그에 C:out 입력하기.. 등등 하지만! 네이버에서 이 기능등을, lucy xss servlet filter라는 정의해둔 라이브러리가 존재한다, 이걸 프로젝트에 적용해서 사용해보자..

Spring/Spring Boot 2022.04.05
반응형