Spring

Spring

[Spring] Spring에서 Session 저장소로 Redis 사용하기(feat. Redis Session Clustering)

0. 들어가기 전 이전 포스팅에서 간략하게 Redis를 살펴봤었습니다. 이전 포스팅에서는 Redis의 장점으로 인메모리 저장소의 특성으로 인한 빠른 성능을 중점적으로 소개했습니다. 이번에는 Spring을 사용한 개인 프로젝트에서 Redis Session Clustering을 사용한 과정을 포스팅해보도록 하겠습니다! https://ksh-coding.tistory.com/127 [DB] Redis란? 여러 프로젝트를 살펴보니, 인메모리 저장소로 Redis를 사용하는 것을 많이 볼 수 있었습니다. Redis가 무엇이고, 어떤 장점이 있길래 많이 사용하는 걸까요? 프로젝트에 적용하기 전에 간략하게 Re ksh-coding.tistory.com 1. Session Clustering 앞에서 Session Clu..

Spring

[Spring] 스프링 동시성 처리 방법(feat. 비관적 락, 낙관적 락, 네임드 락)

0. 들어가기 전 이전에는 DB 단의 동시성 처리 방법인 Lock에 대해서 알아봤습니다. https://ksh-coding.tistory.com/121 [DB] DB Lock이란? (feat. Lock 종류, 블로킹, 데드락) 0. 락(Lock)이란? 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 하나의 커넥션만 변경할 수 있게 해주는 기능 동시성을 제어하기 위한 기능 저는 처음에 DB 락을 접했을 때, 락을 이 ksh-coding.tistory.com https://ksh-coding.tistory.com/124 [DB] MySQL 및 InnoDB의 DB Lock 알아보기 MySQL에서 사용되는 락은 다음과 같은 2가지 종류로 나뉩니다. MySQL 엔진의 락 스토리지 엔진(InnoDB)의 ..

우아한테크코스 5기 팀바팀 Project/Trouble Shooting

[Spring] LocalDateTime 원하는 Format으로 바인딩하기 (feat.@DateTimeFormat, @JsonFormat)

이 글은 팀바팀 기술 블로그에 작성된 글입니다. https://team-by-team.github.io/local-date-time-binding/ LocalDateTime 원하는 Format으로 바인딩하기 (feat.@DateTimeFormat, @JsonFormat) 해당 글은 우아한테크코스 5기 팀바팀 크루 성하가 작성했습니다! 📘 0. 일정 등록 API Request Body API 명세를 정할 당시에는 LocalDateTime이 요청으로 들어왔을 때 어떻게 Request Dto의 필드로 바인딩되 team-by-team.github.io 📘 0. 일정 등록 API Request Body API 명세를 정할 당시에는 LocalDateTime이 요청으로 들어왔을 때 어떻게 Request Dto의 필..

Spring

[Spring] 테스트 시 DB 데이터 초기화 Trouble Shooting

0. 들어가기 전 이번에 테스트를 만들다가, @Sql문으로 초기 스키마와 데이터를 넣게 되었다. 그런데 테스트를 실행해보니 중복 데이터가 있다는 오류가 발생하게 됐다. 결론적으로, main 디렉토리 아래에 있는 초기화 sql을 실행하고 나서, @Sql의 초기 스키마와 데이터 sql을 실행해서 발생한 문제였다. Trouble Shooting 과정을 기록하고자 한다! 1. 문제 상황 기존의 sql 파일 구조는 위와 같았다. src/main/resources 아래에 프로덕션용 schema.sql, data.sql이 존재했고, src/test/resources 아래에 테스트용 test-schema.sql, test-data.sql이 존재했다. 이 상황에서 아래와 같은 테스트를 실행하니 오류가 발생했다. @Jd..

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/기타

[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..

BE_성하
'Spring' 태그의 글 목록