반응형
잘못된 분석은 무엇으로부터 시작될까
Spring 2023. 10. 24. 18:13

이슈가 생겼을 때, 보통은 잘못된 분석이 원인인 경우가 많다. 그렇다면 이 잘못된 분석은 어떤 원인으로 발생할까? 이 의문을 조금이나마 풀어준 경험을 공유해볼까 한다. 최초 발견 내가 겪은 이슈는 아래와 같다. 로컬 환경에서 테스트 중 특정 화면의 조회 기능 문제를 발견 승인여부에 Y를 입력하여 조회시 결과가 조회되지 않음 (아래 이미지 참고) 전체 혹은 N을 입력했을 때에는 정상 조회가 됨 개발서버에서 테스트 시 문제가 없음 // 에러 메세지 Caused by: java.lang.IllegalArgumentException: org.hibernate.query.SemanticException: Could not interpret path expression 'user.businessVerifiedAt'..

application.yml에서 AWS 환경변수를 지워도 동작하는 이유
Spring 2023. 8. 24. 10:43

들어가기 앞서 개발 환경을 간단하게 나열해본다. Spring boot 3 + Kotlin Gradle 사용하는 AWS 서비스 정보는 아래 내용을 참고할 것 아래와 같은 질문을 받은 적이 있다. 이 정보가 있다가 사라졌는데... 없어도 잘 동작하는 이유(?)가 뭘까요? S3부터 SQS까지 여러 AWS 서비스를 사용하고 있음에도 위 정보가 없이 잘 동작했다. 불필요한 정보를 노출시키는 것보다 제거하는 것이 나을 것으로 판단해서 삭제를 했지만 삭제하면서도 어떻게 이게 동작하는지 궁금했다. 아래는 사용하고 있는 패키지 목록이다. Spring Cloud AWS를 사용하고 있는 것을 알 수 있다. // build.gradle.kts dependencyManagement { imports { mavenBom("io...

내가 만든 라이브러리/모듈을 로컬에서 사용하기
Spring 2023. 8. 7. 18:39

앞에서 엑셀 모듈을 사용하여 암호화하는 방법을 공유했다. 이 과정에서 해당 모듈을 빌드하여 로컬에서 테스트하고 싶다는 생각이 든다. 그 방법은 아래와 같이 공유해본다. 모듈을 빌드하기 Java + Gradle Nexus Repository를 사용 - 본 내용에서는 Nexus에 반영 전 로컬에서 테스트하는 방법을 공유할 예정 기타 gradle 정보는 아래를 참고할 것 // build.gradle plugins { id 'java-library' id 'maven-publish' id 'nebula.release' version '15.2.0' } group = 'devvkkid' java.sourceCompatibility = JavaVersion.VERSION_11 java.targetCompatibil..

엑셀 다운로드시 암호화를 하고 싶다면?
Spring 2023. 8. 7. 18:12

엑셀 파일을 만들고 업로드/다운로드 기능을 만들었다고 가정하자. 다운로드 된 엑셀에 보안 강화를 위해 암호화를 하고 싶을 수 있다. 암호화하는 방법을 간단하게 공유해본다. 환경은 아래와 같다. 엑셀 모듈 엑셀 기능이 커스터마이징된 모듈을 별도로 개발하는 것을 가정함 Java + Gradle org.apache.poi (자세한 사항은 아래 dependencies 참고 // build.gradle dependencies { implementation 'org.jsoup:jsoup:1.15.3' implementation group: "org.apache.poi", name: "poi", version: "4.1.2" implementation group: "org.apache.poi", name: "poi-..

AWS SQS와 EventBridge를 활용한 스케줄러 만들기
Spring 2023. 6. 27. 15:12

매일 특정 시간마다 알림톡을 발신하는 기능을 만들려고 한다. 스케줄러 역할에는 AWS의 EventBridge를 사용했고 이벤트 메세지 발신용도로 SQS를 사용했다. 개발 환경은 아래와 같다. Kotlin 플러그인 버전 1.7.22 스프링부트 3.0.5 id("org.springframework.boot") version 3.0.5 JDK 17 java.sourceCompatibility = JavaVersion.VERSION_17 MySQL, JPA, QueryDSL 기타 id("io.spring.dependency-management") version 1.1.0 지금부터 소개할 내용들은 아래 자료를 참고하였다. 소개할 내용들이 이해가 가지 않는다면 아래 자료를 읽어볼 것을 권장한다. AWS SQS + ..

Mockito에서 only과 time(1)은 어떤 차이일까?
Spring 2023. 5. 7. 18:53

스프링에서 Mock을 활용한 테스트를 할 때, Mockito를 가장 많이 사용할 것이다. 그리고 검증 로직을 만들 때 호출 횟수 기준으로 테스트 코드를 짜는 경우가 있다. // when userService.create(userSignUpRequest) // then verify(userRepository, times(1)).save(any()) verify(emailSender, only()).send(any(), any()) 처음에는 2가지 모두 1회만 사용한다는 점에서 동일한 용도가 아닐까 했다. 즉 아래와 같다. // userRepository라는 Mock bean은 save를 1회만 호출한다 verify(userRepository, times(1)).save(any()) // emailSende..

스프링 JPA 환경 변수 중 몰랐던 것들
Spring 2022. 11. 1. 15:22

⚠️ 경고 ⚠️ 본 카테고리, Dev Memo는 필자가 깊게 다루기는 귀찮지만 궁금한 것들을 체험해보고 간단하게 기록을 남기는 공간입니다. 디버깅 노트, 써드파티 라이브러리 사용기, 버전 업데이트, 어이없는 실수, 오탈자 발견 등. 각종 시덥지 않은 내용이 들어 갈 수 있다는 점 참고바랍니다. (우헤헿) open-in-view (Open-Session-In-View) // application.yml spring: jpa: open-in-view: false (출처 : 공부기록) 관례상 OSIV 라고 한다. true일 경우 영속성 컨텍스트가 트랜잭션 범위를 넘어선 레이어까지 살아있다. Api라면 클라이언트에게 응답될 때까지, View라면 View가 렌더링될 때까지 영속성컨텍스트가 살아있다. false일 ..

카프카 컨슈머 그룹을 추가한 시점 이후의 메시지만 받기
Spring 2022. 10. 7. 18:23

. 2022.10.12, 13:56 잘못 작성된 내용이 있어서 수정했습니다. 개발환경과 요구사항 본 내용은 스프링부트 + 카프카 환경에서 아래의 의존성과 카프카 세팅을 참고하여 읽기를 권한다. 개발 도구는 맥북 + 인텔리제이이다. // build.gradle plugins { id 'org.springframework.boot' version '2.7.2' id 'io.spring.dependency-management' version '1.0.12.RELEASE' id 'java' } dependencies { // 일부 생략 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springfr..

테스트할 때 필요한 객체를 일일이 만들기 귀찮을 때
Spring 2022. 9. 29. 13:14

. 시작하기 앞서 여기에서 진행되는 환경은 스프링부트 + 코틀린이며 아래와 같은 의존성이 추가가 되어 있다. kotlinVersion=1.7.10 springBootVersion=2.5.13 // build.gradle testImplementation("org.mockito.kotlin:mockito-kotlin:4.0.0") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.springframework.kafka:spring-kafka-test") testImplementation("io.mockk:mockk:1.13.1") 테스트를 만들었는데 when-then 형태로 아래와 같은..

비밀번호 검증용 Custom validation 어노테이션을 만들고 테스트까지
Spring 2022. 9. 28. 15:37

스프링부트로 만든 서비스에서 다음과 같은 조건을 만족하려고 한다. 전제 : 스프링부트 + 코틀린(Kotlin) API에 받는 RequestBody의 모델에 비밀번호 필드를 포함한다. 비밀번호 필드는 Custom validation 어노테이션을 통해 검증을 한다. 정상적으로 동작하는지 단위테스트를 만든다. 해당 테스트에는 @BeforeAll, @AfterAll을 사용한다. 먼저 테스트를 작성해보자 Custom validation 어노테이션을 검증하기 위한 유닛테스트를 만들어야 하기에 Validator를 사용해서 검증해야 한다. internal class UserPasswordModelTest { lateinit var validatorFactory: ValidatorFactory lateinit var v..

728x90
반응형