Spring/기타

Spring/기타

[인증/인가] 쿠키 VS 세션 VS 토큰 (JWT) 방식 중 무엇을 사용할까?

대표적으로 사용자의 인증/인가를 처리할 때 사용하는 방식이 다음과 같이 3가지가 있습니다. 1. 쿠키 방식 2. 세션 방식 3. JWT 토큰 방식 위의 3가지 방식들의 장단점을 살펴보고, 무엇을 사용해야 할지 알아보도록 합시다! 1. 쿠키 인증 방식 - 클라이언트가 인증 정보 관리 (stateless) 먼저, 쿠키 인증 방식입니다. 쿠키 인증 방식은 쿠키에 사용자의 인증 정보를 담아서 인증하는 방식입니다. 인증/인가 Flow는 다음과 같습니다. 1. 클라이언트가 서버에 첫 로그인 인증 요청을 보내면, 서버에서 응답으로 쿠키에 사용자 인증 정보를 담아서 보낸다. 2. 서버에서 응답한 쿠키를 클라이언트에서 저장하고, 인증/인가 요청 시마다 서버로 요청한다. Flow만 보더라도, 인증/인가 작업이 상당히 쉽고..

Spring/기타

[Spring] 환경별 구성 다르게 하기 : 환경별 프로필 설정하기 & 프로필 활성화 하기(@Profile, @ActiveProfiles, application-properties 설정)

0. 들어가기 전 프로덕션과 테스트 환경에서 다른 DB를 연동해야하는 기능 요구사항이 있었다. 그래서, 스프링에서 프로덕션과 테스트 환경에 따라 다른 구성을 어떻게 하면 할 수 있는지 여러 방법을 알아보고자 한다! 1. 테스트용 properties 만들기 아주 간단하게 분리하는 방법은, application.properties 파일을 test 패키지 아래에 만드는 것이다. main/resources 아래에 application.properties는 기본으로 생성되어 있다. 프로덕션 properties와 마찬가지로, test/resources 아래에 application.properties를 생성해주면 간단하게 프로덕션 환경과 테스트 환경을 분리할 수 있다. 실제로 미션에서 application.prope..

Spring/기타

[IntelliJ] 인텔리제이에서 .http로 HTTP 요청 보내기

🎯 0. 들어가기 전 흔히 API를 테스트하기 위해서, HTTP 요청을 보낼 때 Postman을 많이 이용했었다. 그래서 이전에 API를 테스트하기 위해서는 Postman을 작동시키고, API URI를 입력해서 요청을 보냈었다. API는 IntelliJ를 이용해서 작성하고 테스트는 외부 Postman을 사용하기 때문에, 불편한 점이 많았다. IntelliJ의 기능인 .http 파일을 사용해서 API를 테스트하게 되면 Postman 사용 시 보다 장점이 많다! IntelliJ에서 .http 파일로 어떻게 API를 테스트 할 수 있는지 알아보자! ※ .http 기능은 IntelliJ Ultimate 버전에서 지원된다. 무료 버전인 Community 버전에서는 지원이 되지 않는 점을 알고 가자! 🎯 1. .h..

Spring/기타

[Spring] @SpringBootTest에서 환경이 다른 여러 테스트 실행 시 DDL을 여러번 실행하는 오류 트러블 슈팅하기

❌ 문제 상황 테스트 시에 각각 개별 테스트는 통과했지만, 모든 테스트를 한 번에 돌리니 오류가 발생했다. 대충 요약하면, 이미 DB에 테이블이 초기화가 되어 있는데 DDL을 다시 재실행해서 테이블을 생성하려고 하니 오류가 발생한 것이다. 왜 이런 상황이 발생하는 것일까? 엄청 많이 파봤지만, 문제가 발생하는 정확한 원인을 찾지 못해서 깊게 파보면서 대충 예상해본 원인을 말해보겠다! (그래서 틀릴 수도 있다 ㅠㅠ) 🎯 @SpringBootTest의 ApplicationContext 생성 스프링에서는 @SpringBootTest을 실행하면 ApplicationContext를 생성해서 모든 스프링 빈들을 등록한다. 이때, 모든 테스트를 돌릴 때 @SpringBootTest를 실행할 때마다 Applicati..

Spring/기타

[Spring] @ResponseBody VS ResponseEntity<T> : 무엇을 사용할까?

🎯 1. Spring HTTP 응답 메시지 바디에 메시지를 설정하는 방법 HTTP 응답 메시지 바디에 메시지를 설정하는 방법은 다음과 같이 2가지가 존재한다. 반환 시 ResponseEntity 사용 @ResponseBody + 반환 객체 사용 1. ResponseEntity 예제 @PostMapping("/plays") public ResponseEntity registerRaceResult(@RequestBody final GameInfoRequest gameInfoRequest) { ... } 2. @ResponseBody + 반환 객체 사용 예제 @PostMapping("/plays") @ResponseBody public RaceResultResponse registerRaceResult(@Re..

Spring/기타

[Spring] JdbcTemplate 스프링 빈은 어떻게 자동으로 등록될까?(feat.DataSource)

❓ 해당 주제를 찾아본 이유 JdbcTemplate을 쓸 때 여러 구글링을 통해 사용 방법을 알아보게 되었다. 대부분의 사람들이 JdbcTemplate 을 주입받아서 사용하는 것이 아니라, DataSource 를 주입받아서 JdbcTemplate 객체를 생성해서 사용했다. private final JdbcTemplate jdbcTemplate; @Autowired public RaceResultDao(final DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } 처음 든 생각은 '왜?' 였다. JdbcTemplate 이 스프링 실행 시에 스프링 빈으로 자동으로 등록되어 있다면 DataSource 를 의존성 주입하는 것이..

Spring/기타

[Spring] @Valid 여러 검증 어노테이션 검증 순서 설정 방법

검증 관련한 컨트롤러 테스트 코드 작성 중, 검증 시 적절한 검증을 통해 에러 메시지까지 같아야 테스트가 통과하도록 코드를 짰었다. (ex - 빈 값 입력 시 @NotBlank에 설정한 message가 출력되도록) 하지만, 빈 값 입력 시 @NotBlank에 설정한 message가 아닌, @Pattern에서 설정한 message가 출력되어 테스트가 실패했었다. @Data @NoArgsConstructor @AllArgsConstructor public class UserSignUpRequestDto { @NotBlank(message = "이메일을 입력해주세요.") @Pattern(regexp = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\\\.[a-zA-Z]+$", message ..

Spring/기타

[Spring] MockMvc @RequestPart MultipartFile 파일 테스트 시 에러 트러블 슈팅

1. First Try - 403 에러 처음에는 파일 테스트를 할 때 이전에 MockMvc로 테스트할 때처럼 "/user/update"의 Http Method가 patch이므로 MockMvcRequestBuilders.patch()를 사용했었다. 하지만 @RequestPart의 MultipartFile를 테스트할 때는 MockMvcRequestBuilders.patch()가 아니라 MockMvcRequestBuilders.multipart()로 따로 multipart builder가 존재한다는 것을 구글링으로 깨닫고 해당 메소드를 사용하였다. mockMvc.perform( multipart("/user/update") .file(generateMultipartFileImage()) .file(genera..

Spring/기타

[Spring] Postman multipart/form-data 여러 개 파일 보내기

프로젝트를 진행하다가, multipart/form-data로 파일을 보낼 일이 생겼었다. 컨트롤러 코드를 다음과 같이 구현했다. 이미지, 영상 첨부하는 PostController @PostMapping("/save") public BaseResponse save( @RequestPart PostSaveDto postSaveDto, @RequestPart(required = false) List uploadImgs, @RequestPart(required = false) List uploadVideos) throws Exception { PostSaveResponseDto postSaveResponseDto = postService.save(postSaveDto, uploadImgs, uploadVideo..

Spring/기타

[Spring] SpringBoot 테스트 시 @WebMvcTest와 @SpringBootTest의 차이

Junit 테스트 시에 @WebMvcTest와 @SpringBootTest를 대표적으로 사용하는데, 두 가지 Test 어노테이션의 차이가 존재한다고 한다. SpringBoot 테스트 시에 두 가지 어노테이션의 차이를 살펴보자. 먼저 Mock과 MockMvc에 대해서 알아보자. ※ Mock이란? 실제 객체를 만들어서 테스트하기가 어려운 경우에, 가짜 객체를 만들어서 테스트하는 기술이다. ※ MockMvc란? MVC에 관련된 Mock 가짜 객체를 말한다. 웹 어플리케이션을 애플리케이션 서버에 배포하지 않고, 테스트용 MVC 환경을 만들어서 요청 및 전송, 응답 기능을 제공해주는 객체이다. 대부분의 어플리케이션 기능을 테스트하기 위해서는 MockMvc 객체를 만들어서 테스트하게 되는데, MockMvc를 @Au..

BE_성하
'Spring/기타' 카테고리의 글 목록