목록전체 글 (37)
블로그 이름 뭐하지

해당 작업을 시도하게 된 계기프로젝트에서 관리자 페이지를 맡았다.해당 페이지는 관리자가 유저에게 보낸 메세지의 히스토리를 관리하는 작업을 포함했는데,한 유저당 하나의 히스토리 데이터가 만들어지므로 유저가 많다면 하루에도 수천개의 데이터가 쌓이게 된다.그런 작업을 테스트하기 위해서는 대용량의 더미데이터가 필요하다고 생각했고,그와 동시에 발생하는 성능 문제를 해결하고자 했다. 1. 테스트 코드에서 더미데이터 만들기실제로 더미데이터를 DB에 저장해야하는 작업을 시행해야 하므로 Mockito가 아닌 SpringBootTest를 사용한다. 최종 목표는 10만개 이상의 데이터를 생성하는 것이지만 빠른 테스트를 위해 1만개부터 생성이 되는지 확인한다. measurePerformance()는 더미데이터 생성에 드는 시..

DB 테이블과 Entity의 차이▶ DB 테이블 두 개의 테이블이 있다고 했을 때, 주문 정보는 어디에 들어가야할까.고객 테이블의 경우한명의 고객이 여러 개의 음식을 주문할 수 있다 (1 : N)주문한 음식의 정보를 파악하기 위해 food_id 컬럼을 추가하면, 불필요하게 고객의 이름이 중복되는 문제가 발생한다.음식 테이블의 경우하나의 음식이 여러 명의 고객에게 주문될 수 있다(1 : N)주문한 고객의 정보를 파악하기 위해 user_id 컬럼을 추가하면 고객 테이블과 같은 문제가 발생한다.그렇다고 user_id 컬럼에 주문한 모든 고객의 정보를 넣으면 조회 시 많은 문제가 발생하므로 불가능하다.이럴 때는 주문 테이블을 따로 추가하면 된다.고객 한 명은 음식 N개를 주문 할 수 있고, 음식 하나는 고객 N..

RestTemplate보통은 Client와 Server의 입장에서 요청과 응답을 보내지만,가끔 Server와 Server가 요청을 주고받을 때가 있다.예를 들어 회원가입을 진행할 때, 사용자의 주소를 받아야한다면,주소를 검색하는 기능을 직접 구현해도 되지만, 이미 만들어진 API를 가져와 사용하는 것이 쉽다.이럴 때 우리(Server)는 Client의 입장이 되어 해당 주소 API 서버에 요청을 진행해야한다. RestTemplate는 HTTP Client를 쉽게 사용할 수 있도록 도와주는 라이브러리로,HTTP 요청과 응답을 쉽게 처리할 수 있으며 Restful API 서버와의 통신을 간편하게 구현할 수 있다. RestTemplate 사용RestTemplate를 사용해보기 위해 서버 2개를 만들어 예시코드..
데이터를 검증하는 것을 뜻한다.자바는 보통 NullPointException이 많이 발생하므로 이러한 검증과정이 중요하다.Spring에서는 다른 검증과정도 손쉽게 처리하기 위해 Bean Validation을 제공한다. Bean Validation 종류@NotNullnull 불가@NotEmptynull, "" 불가@NotBlanknull, "", " " 불가 (보통 이쪽을 많이 사용한다) @Size문자 길이 설정@Max최댓값 설정@Min최솟값 설정@Positive양수@Negative음수@Email이메일 형식 사용@Pattern정규 표현식 Validation 적용1) build.gradle에 validation의 의존성을 추가한다.implementation 'org.springframework.boot:sp..

Spring 서버에 필요한 인증, 인가를 위해 많은 기능을 제공하는 프레임 워크로,여러 개의 Filter를 체인 형식으로 사용해 요청을 처리한다.해당 필터들은 스프링이 기본제공하는 DelegatingFilterProxy 스프링 필터에서 시작해Security Filter Chain을 따라 순차적으로 작동한다.Security의 필터는 스프링 필터이므로 기본적으로 개발자의 커스텀 필터보다 앞에서 적용되며,필터의 위치를 바꾸고 싶은 경우 allFilterBefore(), allFilterAfter() 같은 설정으로 위치를 이동시킬 수 있다. Spring Security 주요 모듈 Authentication : 접근하는 주체의 정보와 권한을 담는 인터페이스+ principal : 사용자를 식별한다(UserDeta..

좌측 사진은 Spring 프레임워크에 대한 라이프 사이클 과정으로일반적으로 요청은 DispatcherServlet에 의해 Controller에 매핑된다.하지만 Filter는 요청이 DispatcherServlet에 의해 다뤄지기 전에 동작한다.그리고 모든 작업이 끝난 이후 Client에게 응답하기 전 마지막으로 동작한다.즉 Filter는 Client의 요청, 응답에 대해 최초, 최종 단계로 거치는 구간이다. 우측 사진은 Filter Chain을 나타내는 것으로 Filter가 하나만 존재하지 않고, 여러 개가 Chain 형식으로 묶여 처리되는 것을 보여준다.즉, 여러 작업을 Filter에서 진행할 수 있다는 뜻이다. 우리는 이런 Filter의 특징을 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추..