반응형
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: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..

카프카 컨슈머 그룹을 추가한 시점 이후의 메시지만 받기
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..

Event 처리는 비동기가 아니다?
Spring 2022. 8. 17. 13:25

비동기 처리를 위해서 이벤트를 발행하는 방식을 선택하는 경우가 있다. 나 역시도 그랬는데 사용하다가 궁금증이 생겼다. 그냥 Async 어노테이션을 달아 놓은 것과 EventListener를 적용한 것은 어떤 차이가 있을까? 결과부터 얘기하자면 모든 Event 처리 방식은 비동기가 아니다. 그것을 확인할 수 있는 테스트를 해보았다. 해당 테스트는 정아마추어님 블로그를 상당히 많이 참고했다. 테스트 전 준비 먼저 Event 모델을 만들었다. EventListener를 그냥 사용했을 때와 Asnyc 어노테이션과 함께 사용했을 때를 구분하기 위한 모델을 각각 만들었다. data class SampleEvent( val name: String, val email: String ) // 비동기용 data class..

data.sql이 동작하지 않을 때, 의심해봐야 할 것
Spring 2022. 7. 13. 10:39

스프링에서 test 패키지 내부에 data.sql을 넣은 것만으로도 data.sql 내부의 쿼리를 실행시킬 수 있다. 이런 방법으로 테스트용 더미 데이터를 생성하고 테스트를 동작시킬 수 있다. 비슷한 방법으로 DDL 동작이 필요한 경우에는 schema.sql을 만들어 내부에 create 등을 넣어두기만 하면 된다. 그런데 만약 schema.sql은 잘 동작하는데, data.sql이 제대로 동작하지 않는다면? 테스트에서 테이블이 생성되었지만 원하는 데이터가 나오지 않아 에러를 출력하는 경우가 있다. data.sql은 파일을 추가만 하면 되는 것이어서 별도의 세팅이 없기에 더욱 원인을 찾기 힘들다. 스프링 버전 및 sql.init.mode 이슈 내 경우에는 크게 두가지 원인이 있었다. 하나는 스프링 버전. ..

미해결사건. @Valid가 작동하지 않는다??
Spring 2021. 12. 15. 11:37

서두 본 글은 코틀린 + 스프링부트 환경에서 @Valid가 동작하지 않는 케이스를 다루었고 해당 이슈를 완전히 해결하지 못했음. 해결을 하기는 했는데 해결이 된 이유를 알 수 없음. 완벽한 해결책을 찾고자 했다면 "뒤로가기" 버튼을 누르기 바람 설명에 앞서 개발환경을 간단히 소개하고자 한다. 혹시나 나와 비슷한 상황을 겪고 이를 해결한 분이 계시다면 댓글로 안내를 부탁드...립니다. (제발) 아래는 gradle 스크립트 중 일부이다. plugins { id("org.springframework.boot") version "2.5.0" id("io.spring.dependency-management") version "1.0.11.RELEASE" kotlin("jvm") version "1.5.10" ko..

스프링에서 local.yml 또는 dev.yml 환경으로 전환하고 싶을 때
Dev Memo 2021. 11. 29. 18:15

⚠️ 경고 ⚠️ 본 카테고리, Dev Memo는 필자가 깊게 다루기는 귀찮지만 궁금한 것들을 체험해보고 간단하게 기록을 남기는 공간입니다. 디버깅 노트, 써드파티 라이브러리 사용기, 버전 업데이트, 어이없는 실수, 오탈자 발견 등. 각종 시덥지 않은 내용이 들어 갈 수 있다는 점 참고바랍니다. (우헤헿) 스프링에서 여러 개발환경을 세팅하고 있을 수 있다. 예를 들면 아래처럼 기본 yml 파일이 있고 여건에 따라 다른 환경으로 테스트를 할 수 있도록. resources ㄴ application.yml ㄴ application-dev.yml ㄴ application-local.yml 기본적으로는 application.yml 상 환경으로 진행될텐데, dev나 local은 어떻게 하면 바라볼 수 있을까? 간단하..

스프링 게이트웨이에서 dev, prod 등 여러 환경 적용하기
Spring 2021. 10. 7. 18:12

많은 곳에서 API 게이트웨이를 사용하고 있다. 그런데 이 용어의 뜻을 찾아보면 난해한 설명만 나와 있다. 그래서 나름대로 설명을 좀 쉽게 풀어보았다. 게이트웨이는 무엇인가. 위키피디아에서는 다른 네트워크로 들어가는 입구 역할을 하는 네트워크 포인트라고 나와 있다. 매우 적절한 설명이 아닐 수 없다. 그렇다면 이걸 바탕으로 API 게이트웨이를 설명할 수 있지 않을까. 이를 NHN 토스트 블로그에서 설명을 잘 하고 있다. 해당 설명을 좀 더 쉽게 풀어보면... 사용자(백엔드 개발자 혹은 인프라 담당자)가 설정한 라우팅 설정에 따르며, 여러개의 서비스에 향하는 클라이언트로부터의 요청을 받아서 각 엔드포인트(실제 API)로 (클라이언트를 대리하여) 요청하고 응답을 받으면 다시 클라이언트에게 전달하는 프록시 역..

728x90
반응형