일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- softeer
- enumSet
- 공룡책
- 일상
- Junit 5
- proxyFactory
- Coputer Science
- FCM
- Test Doulbe
- ExceptionResolver
- Service 계층 테스트
- Server
- backend
- Test code
- RequestBody
- ObjectMapper
- MySQL
- 자바
- OS
- JPA
- 테크쇼
- 소프티어
- Spring
- mapstruct
- Java
- Test
- JPQL
- modelmapper
- 인프콘2023
- db
- Today
- Total
목록Spring (16)
공부내용공유
서론@CreateDate와 @LastModifiedDate는 Spring Data JPA를 사용했다면 한번쯤은 사용해봤거나 들어봤을 것이다. 나도 현재 진행중인 프로젝트에서 Spring Data Mongo와 함께 사용중인데 @LastModifiedDate 가 붙은 필드가 업데이트가 안되는 경우가 발생하여서 정확히 언제 어떻게 업데이트를 쳐주는지 알아야 할 것 같아서 슥 조사하고 정리해봤다. 본론 이 글의 목차는@CreateDatet와 @LastModifiedDate업데이트가 왜 안되었는가언제 어떻게 업데이트 되는건가로 구성될 예정이다. 시간이 없으면 결론만 확인하면 된다. @CreateDate와 @LastModifiedDate 어플리케이션에서 기능을 수행하든 어플리케이션에서 다루고 있는 데이터에 대한..
서론현재 진행중인 프로젝트에서 대규모 데이터 처리를 하기위해 Spring Batch를 사용하게 되었다. 다른 팀원이 맡고 있는 프로젝트에서도 Spring Batch를 사용하고 있지만 MySql을 사용하고 있는 프로젝트이고 MongoDB를 대상으로 사용하는 프로젝트는 없는 상태이다, 그래서 Spring Batch를 공부한 내용과 MongoDB와 사용할 때 알면 좋은 점을 간단히 정리하고자 이 글을 작성하였다. 본론 이 글의 목차는Spring Batch를 왜쓸까?Spring Batch 간단한 소개Mongo와 사용할 때 알면 좋은 것들로 구성될 예정이다. Spring Batch를 왜 쓸까? 어플리케이션을 개발하다 보면 대규모의 데이터를 처리해야하는 기능이 생기기 마련이다. 예를 들자면 전체 상품 거래 통..
서론 현재 프로젝트에서 record를 dto로 열심히 사용중인데 처음에는 별 생각없이 아래 계층 dto로만 사용하다가 requestBody로는 왜 사용을 안하고 있었지라는 생각이 들어 코드를 바로 작성하였다. 그런데 JsonParsingError가 발생했다. requestBody 맵핑 과정 를 공부한 후라 맵핑이 안될이유가 없는데? 라고 생각을 하면서 열심히 삽질을 하여서 왜 안되는지 알게되었다. 이 글에서는 삽질 과정을 기록하기 위해 글을 작성하였다. 본론 내가 예외를 만나고 의심한 포인트들을 나열하고 간단하게 설명할 예정이다. build 처음에 jsonParsingException이 발생한 것을 보고 build tool이 intellij인지를 확인했는데 gradle이었고 그렇다면 문제없이 mappin..
서론 프로젝트를 진행하다 보면 항상 검증에 대해 많이 고민을 하게된다. Request로 들어올 때 부터 철저히 검사해야할지, entity를 만들고 검증을 해야할지 등등... 이처럼 검증에 관해서는 굉장히 다양한 상황들이 있고 은총알은 없다고 생각한다. 해당 글에서는 내가 고민하면서 찾은 내용들, 받았던 조언들을 정리할 것이다. 본론 먼저 해당 글에서는 흔하게 사용되는 Presentation, Service, Repository 계층으로 나누어진다는 가정하에 글을 작성할 것이다. (entity 패키지, business 계층 같은 부가적인 부분은 생략한다.) 간단한 객체 생성에 대한 API를 예시로 어떤 계층에서 검증을 했을 때 어떤 장,단점이 있는지 알아보자. Presentation 계층 여기서 prese..
서론 spring secutiry에서 mvc에 설정되어 있는 cors config를 어떻게 가져오는 알아보기 위해 코드를 뒤집어 까다가 mvc에 핵심적인 코드를 만났다. spring으로 프로젝트를 진행하면 흔하게 접하는 EnableWebMvc, WebMvcConfigurer 등등을 보았고, 이번 mvc config에 있어서 핵심적인 클래스들, 작동 방식에 대해 이 글에서 정리할 예정이다. 본론 1. @EnableWebMvc @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import(DelegatingWebMvcConfiguration.class) public @interface EnableWebMvc { } 위처럼 작..
서론 cors 에 관한 설정은 security를 사용한다면 bean 이름을 security에서 제공하는 bean 이름으로 만들면 filter에 자동으로 주입이 된다. 그리고 spring mvc 차원에서도 WebMvcConfiguer와 같은 클래스를 상속하고 메서드를 오버라이딩 하면 해당 메서드에서 커스터마이징 한대로 설정이 적용된다. 만약 2가지 설정이 있으면 어떤 것이 작동하는지 궁금해져서 security 내부 코드를 간단하게 살펴보고 정리하였다. 본론 CorsConfigurer class public CorsConfigurer() {} public CorsConfigurer configurationSource(CorsConfigurationSource configurationSource) { this..
서론 지금 진행중인 프로젝트에서 어떤 기능이 실패했을 때 로그성 정보를 DB에 저장하는 기능을 추가해야했다. 처음에 아무 생각없이 다른 service 계층에서 저장 로직을 가지고와 사용했는데 이러한 리뷰를 받았다. 로그 저장은 해당 기능의 주 관심사는 아닌거 같아요! event,aop,interceptor와 같은 기능을 사용해서 주 관심사와 부 관심사를 분리하는게 어떨까요? 완전 맞는 말이었고 해당 기능을 event를 통해 분리하였다. 사실 event라는 개념을 처음 사용해봐서 검색을 하고 비슷한 방식으로 적용하였는데 그렇게 사용하는 것은 event의 본질을 살리지 못했다 라는 리뷰를 받았고 event에 대해 제대로 공부하게 되었다. 이 글에서는 코드의 변화 과정을 기반으로 spring event의 올바..
서론 REST API 서버를 만들면 controller의 request DTO를 한 개쯤은 만들게 되고 편한 사용을 위해 여러 어노테이션을 사용하게된다. 지금까지 “RequestBody가 DTO로 맵핑될 때 그냥 대충 기본 생성자랑 리플렉션 사용해서 만들어진다“ 정도로만 알고 있었다.. 코드 리뷰를 받다가 해당 부분 관련해서 질문을 받았는데 대답을 하지 못했고 굉장히 부끄러웠다.. 수치심을 지식으로 바꿔보자. 본론 리뷰를 받았던 코드를 임의의 예시로 구현하였다. @Getter @Builder public class request { private final String name; private final int age; private final List options; } 리뷰어님 : 어 @NoArgsC..
서론 FCM 기능을 완성하고 로컬에서 프론트 담담 팀원과 함께 테스트까지 완료하여 deploy 브랜치에 올렸다. 그런데 도커 컨테이너가 꺼져버렸다……. 컨테이너의 상태를 보니 exited(1) 이 떠있었고 log를 통해 확인해 보니 FCM을 사용하기 위한 key를 읽을 수 없다는 log가 찍혀있었다. 어떤 것이 문제였고 어떻게 해결했는지를 정리하고 공유하기 위해 이 글을 작성하였다. 본론 문제가 발생한 부분 FCM 기능을 사용하기 위해서 FCM Service Key가 resources 파일에 있고 @Value 를 통해 resource로 가져와 FirebaseMessaging Bean을 만드는 구조였다. @PostConstruct를 사용한 Bean 생성 코드 일부 로컬에서 돌릴 때는 아무런 문제가 없어서 ..
서론 지금 진행중인 프로젝트에서 강의가 등록되었을때, 매니저가 공지사항을 등록했을때, 강의에 선정되었을때 등등 메인 비즈니스 로직에 알람기능은 필수이다. 원래 알람 기능을 맡았던 팀원과 프론트분과 기능을 구현하면서 어려움을 겪고 조금 진행이 늦어지고 있었는데 알람을 담당하던 팀원이 개인 사정으로 인해 프로젝트에서 하차하게 되었고 나와 다른 팀원 1명이서 임시방편으로 기능이 작동하게 고치고 베타 테스팅을 진행하였다. 그 후 FCM 도메인 공부 및 레퍼런스를 찾아보고 기능 수정, 추가 및 리팩토링이 필요하다고 판단을 내렸고 해당 issue 를 내가 담당하게 되었다. 도메인 공부 및 리팩토링을 하면서 고민했던것들, 작성한 코드등을 정리하기 위해 이 글을 작성하였다. 본론 일단 기능 수정 및 리팩토링에 앞서 현..