전체 글

JPA

JPA: 페이징이 필요한 이유와 페이징 성능 개선하기 - No Offset 사용

0. 배경JPA로 개발을 하면서, 페이징을 사용하지 않았을 때 성능 저하, 서비스 장애로 이어질 수 있는 부분을 깨닫고 정리하였습니다. 1. Paging을 사용하지 않고 모든 게시글을 불러왔을 때 문제 발생데이터가 많으면 장애 발생프로젝트에서 사용한 코드@Query(value = "select p.*, COUNT(pl.post_like_id) as LikeCount " + "from post p " + "inner join post_like pl on p.post_id = pl.post_id " + "group by p.post_id " + "order by LikeCount Desc, p.post_id Desc", nativeQuery = true)Li..

Spring

좌표값(객체) 테스트에 대한 고민

배경 현재 제가 작성한 회원가입 ReuqestDto 값입니다. @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter public class UserCreateRequestDto { @NotBlank(message = "아이디는 필수로 입력해야 됩니다.") private String username; @NotBlank(message = "비밀번호는 필수로 입력해야 됩니다.") private String password; private String phoneNumber; private String email; private String nickname; private Address address; private String userImage; @NotNul..

Spring

테스트 코드 - Presentation Layer

배경 현재 제가 진행 중인 프로젝트 Test 상황입니다. Persistence Layer와 Business Layer에서 스프링을 통으로 띄워서 통합테스트를 진행했습니다. 그리고 기존 Presentation Layer 테스트를 작성할 때 같은 환경에서 테스트를 진행했습니다. 이러한 방식은 서버를 띄우는 시간과 사용 중인 Bean을 모두 불러오고 중복된 테스트 작성이 발생하기 때문에 시간이 오래 걸리고 비효율적인 테스트 작성입니다. Presentation Layer 테스트 범위에 대한 생각과 리팩토링 과정을 작성하겠습니다. Presentation Layer에서 무엇을 테스트할까? 진행 방식 Presentation Layer를 테스트 할 땐, Persistence Layer와 Business Layer를 M..

Spring

CSRF(Cross-Site Request Forgery)란?

배경 토큰을 어디에 저장하는 것이 좋은지 찾다가 관련된 보안 내용이 많아서 정리하게 되었습니다. Cookie를 이용하여 XSS 공격을 막는 방법은 작성하였고, CSRF 공격에 대한 방어가 필요하기 때문에 추가 학습 후 작성하였습니다. CSRF 공격에 대해 알아본 후, 어떤 방법으로 토큰을 효율적으로 관리하고 CSRF 공격을 방어하는지에 대해 알아보겠습니다. http.csrf(AbstractHttpConfigurer::disable) CSRF란? 사이트 간 요청 위조(Cross-site request forgery, CSRF)는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다. - 위키백과 일반 ..

Spring

LocalStorage, Cookie JWT토큰은 어디에 보관할까?

배경 JWT토큰을 어디에 보관해야 되는지 제대로 알아보고 싶었습니다. 구글에 검색을 했을 때 대부분 LocalStorage에 보관하여 사용하는 글들이 정말 많습니다. 저도 생각없이 똑같이 구현했었습니다. 이러한 방식이 잘못되었다는 것을 깨닫고, 다른 사람들에게 공유하고 싶어서 글을 작성했습니다. 간단한게 LocalStoage가 뭔지 설명하고, 왜 LocalStoarge를 사용하면 안 되는지 설명하겠습니다. LocalStoarge 로컬스토리지 객체는 웹 스토리지(WebStorage) 중 하나입니다. 로컬스토리지 객체를 통해 브라우저 내에 키-값(key-value) 데이터 쌍을 저장할 수 있습니다. 데이터 공유 여부 데이터를 브라우저에 반영구적으로 저장하며, 브라우저를 종료 후 재시작해도 데이터가 남아있습니..

Spring

XSS(Cross Site Scripting) 공격

XSS(Cross Site Scripting) 공격이란 XSS(Cross Site Scripting) 공격 사이트 간 스크립팅(또는 크로스 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다. 주로 여러 사용자가 보게 되는 전자 게시판에 악성 스크립트가 담긴 글을 올리는 형태로 이루어진다. 이 취약점은 웹 애플리케이션이 사용자로부터 입력 받은 값을 제대로 검사하지 않고 사용할 경우 나타난다. 이 취약점으로 해커가 사용자의 정보(쿠키, 세션 등)를 탈취하거나, 자동으로 비정상적인 기능을 수행하게 할 수 있다. 주로 다른 웹사이트와 정보를..

초보병일이
초보 성장기