본문 바로가기

분류 전체보기144

[Spring] @Retention에 대하여.. 얼마 전 Mapstruct를 사이드 프로젝트를 적용 하면서 삽질을 한 경험이 있다. 삽질을 하면서 코드도 까보고 하다보니 @Retention에 대해서 검색하게 되었고, 지금 까지 @Retention에 대해서 무지했던 나를 반성하면서 이번기회에 정리해보고자 한다. 일단 Retention이라는 영어단어의 뜻은 '보유' 라는 뜻이다. 동의어로는 holding, hold, tenure, supplement, enjoyment 등이 있다. 지금까지 살펴본 바로는 @Retention이라는 어노테이션은 우리가 DI해서 사용하는 어노테이션 안에 설정되어 있다. 설정 값을 보면 RetentionPolicy.SOURCE 라고 적혀 있다. 이 말인 즉슨 이 getter 어노테이션이 소스 단 까지 유지된다는 것이다. 즉, 컴.. 2023. 2. 25.
[Spring] JAVA Reflection API가 궁금하다! 얼마 전에 MapStruct, ModelMapper, ObjectMapper에 대하여 chatGPT에게 질문하였다. ObjectMapper는 런타임 환경에서 JAVA의 Reflection API를 이용해서 작동한다는 것을 알게 되었고, Reflection API가 무엇인지 찾아보기 시작하였다. Reflection에 대해서 chatGPT에게 질문하였고, 답변을 받을 수 있었다. 스프링의 Reflection API는 자바의 리플렉션 기술을 이용하여 객체를 동적으로 생성하거나 객체의 속성 값을 조회하거나 수정 할 수 있도록 하며, 메서드를 호출할 수 있도록 지원한다고 한다. 또한, 스프링에서는 bean생성, 조회, 수정에 Reflection 기술을 이용한다는 것을 알 수 있었다. 즉, BeanFactory에서.. 2023. 2. 25.
[JPA] MapStruct를 써야 하는 이유 MapStruct를 써야 하는 이유 MapStruct는 Java 객체 간의 매핑을 자동화하기 위한 코드 생성 도구입니다. 일반적으로 객체 간의 매핑을 수동으로 구현하는 것은 번거롭고 실수를 할 수 있으므로 개발자들은 MapStruct와 같은 도구를 사용하여 이러한 문제를 해결할 수 있습니다. MapStruct는 매핑 코드를 자동으로 생성하기 때문에 개발자는 수동으로 작성해야 하는 매핑 코드를 작성할 필요가 없으므로 시간과 노력을 절약할 수 있습니다. 또한, MapStruct는 코드 생성기를 사용하여 코드를 생성하기 때문에 컴파일 타임에 매핑 오류를 발견할 수 있으며, 이를 수정하기 위해 빠르게 대응할 수 있습니다. MapStruct는 애노테이션을 사용하여 매핑 규칙을 지정할 수 있습니다. 이러한 규칙은 .. 2023. 2. 19.
[Mapstruct] Can't generate mapping method for a generic type variable source. 오류 mapstruct를 이용해서 사이드 프로젝트를 하면서 구조를 짜던 중 이런 오류가 발생했다. 직역하자면 mapping 할때 generic 타입을 사용할 수 없다는 건데, 어디서 잘못된건지 알 수가 없었다........ 일단 프로젝트 mapstruct의 구조는 이렇게 설계했다. genericMapper | productMapper | productMapperImpl(이건 mapstruct가 자동으로 생성해준다.) 그런데 아무리 build clean하고 다시 build 해봐도 똑같은 오류가 발생했다. 이유는 간단했다. generic을 사용한 mapper에서 @Mapper(componentModel = "spring") 어노테이션을 사용했기 때문에 발생한 오류였다. @Mapper(componentModel =.. 2023. 2. 19.
[Flutter] Android Studio (version 2022.1) / Unable to find bundled Java version. 오류 1. 플러터를 설치하는 도중 Android Studio쪽에 아래와 같은 오류가 발생하였다.  flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.7.0, on macOS 12.6.3 21G419 darwin-arm64, locale ko-KR) [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1) [✓] Xcode - develop for iOS and macOS (Xcode 14.2) [✓] Chrome - develop for the web [!] Android Studio.. 2023. 2. 1.
[Flutter] Flutter Doctor / Xcode CocoaPods not installed. / sudo gem install cocoapods 설치 안되는 오류 1. Flutter로 앱을 만들기 위해 Flutter를 설치하던 중 오류가 발생했다.  flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, 3.7.0, on macOS 12.6.3 21G419 darwin-arm64, locale ko-KR) [✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1) [!] Xcode - develop for iOS and macOS (Xcode 14.2) ✗ CocoaPods not installed. CocoaPods is used to retrie.. 2023. 2. 1.
[기타] Spring batch를 이용해서 슬랙으로 알림 보내기. 오늘은 스프링 배치를 이용해 원하는 슬랙 대화방에 메시지가 자동으로 출력되게끔 만들려고 합니다. 1. 슬랙을 접속 후 왼쪽 탭에 아래쪽에 있는 앱 추가 버튼을 누르고 web hook을 검색 후 추가버튼을 누른다. 2. Slack에 추가 버튼 클릭! 3. 메시지를 포스트할 채널을 선택 후 수신 웹후크 통합 앱 추가 버튼 클릭! 4. 웹 후크 URL (= 완전 중요!!!) 과 그 아래에는 각 상황에 맞는 페이로드를 어떻게 구성해야 할지 예시 데이터가 나옵니다. 각 예시에 맞게 payload를 구성해서 웹후크 URL로 전송하게 되면 채팅방에서 메시지가 나오게 됩니다. 5. 예시 코드 입니다. Java SpringBoot에서 RestTemplate을 이용하였고, Restemplate Configuration에서.. 2023. 1. 10.
[error]source release 17 requires target release 17 인텔리제이 in mac 맥에 java 11버전과 17버전을 둘다 깔아놓고 인텔리제이를 사용하다보니 이상하게도 build.gradle에 17버전이라고 명시되어 있는 프로젝트라고 하더라도 코드를 실행할 때 default로는 sdk가 11버전으로 잡혀서 실행되는 경우가 생겼다. (언제부터인가 새로 build.gradle로 프로젝트를 열면 이렇게 됨.) 프로젝트를 진행하다가 테스트코드를 돌려야하는 상황이 생겨 돌려보니.. source release 17 requires target release 17 라는 오류가 나오면서 돌아가지 않는다. (test 빌드를 인텔리제이로 하지 않고, gradle로 다시 바꾸어 주었을 경우에는 돌아감.) 그래서 이것은 인텔리제이의 설정문제다 하고 삽질을 한 결과... 간단한 해결방법을 찾아내었다. Fil.. 2022. 11. 29.
스프링 배치 오류 EL1008E: Property or field 'jobParameters' cannot be found on object of type EL1008E: Property or field 'jobParameters' cannot be found on object of type el을 사용하려고 한다면 해당 메소드위에 @StepScope를 추가해야함. 해당 스텝에 어노테이션을 추가 해줄것. 2022. 11. 7.