[gradle] 멀티모듈에서 컴포넌트 스캔이 되지 않는 문제
·
스프링 부트/오류
현재 클린 아키텍처를 학습하기 위해 코틀린을 통해 간단한 프로젝트를 진행하고 있으며, 파사드 패턴과 포트/어댑터 패턴을 적용한 헥사고날 아키텍처를 구현하려고 노력 중에 있다. 그리고 해당 과정에서 스프링 어플리케이션이 컴포넌트 스캔을 제대로 하지 못하는 문제를 발견하였고, 이를 성공적으로 해결하였다. 설명하기에 앞서서, 앞으로 설명하고자 하는 프로젝트는 총 5개의 모듈을 구축해서 운영하고 있으며, 모듈이 가지는 책임은 다음과 같다:domain: 순수 코틀린으로 이루어진 모듈independent: 모든 모듈에서 공통적으로 쓰이게 되는 모듈infra:persistence-db: JPA 관련 로직으로 이루어진 모듈infra:security: Spring Security 관련 로직이 이루어진 모듈(토큰 발급에 ..
[Spring Security] 스프링에서 CORS를 해결하는 또다른 방법
·
스프링 부트/오류
개발을 시작한 지 얼마 되지 않은 개발자들이 가장 마주치기 싫어하는 오류가 무엇일까? 난 당당하게 CORS라고 답해주고 싶다. 본인도 처음 프로젝트를 도전했을 때도 결국 CORS 때문에 API 연결에 실패해 마무리하지 못한 슬픈 기억을 가지고 있다. 그만큼 CORS는 웹 개발자라면 가장 먼저 넘어야 할 산이라고 불린다고 해도 과언이 아니다. 평소에 관심을 가지고 있었던 스벨트 프레임워크를 통해 간단한 어드민 관리자 페이지를 구현하는 도중, API를 서버와 연결하는 과정에서 CORS 오류를 마주치고 말았다. 개발을 본격적으로 시작한 지 어연 1년 하고도 6개월이 지났지만, 아직도 CORS의 늪에 빠져 허우적댈 줄은 꿈에도 몰랐다.. 심지어 이번에는 백엔드 개발자의 입장이 아닌, 프런트엔드 개발자의 입장에서..
[Kotlin] Spring Security에서 코틀린 DSL 적용하기
·
스프링 부트/오류
Spring Security에 Kotlin DSL을 사용했을 때 빌드가 되지 않는다...Kotlin으로 Spring Security 개발을 하던 중, 공식 문서와 동일한 코드인데 IntelliJ에서는 빌드가 되지 않는 오류가 계속 발생했다.. 코틀린 DSL과 자바와의 가장 큰 차이점을 꼽아보자면,자바는 람다 체이닝 메서드(`.`)을 통해 매개변수를 구현해 주지만,코틀린은 DSL을 통해 매개변수를 구현해 준다는 것이었다.근데 DSL이 대체 무엇일까? DSL(Domain Specific Language)DSL은 도메인 특정 언어, 쉽게 풀어 말하자면 특정 도메인에 국한된 문법이라고 생각하면 된다. 이를 통해 우리는 특정 도메인의 내부 로직 및 메서드를 추상화하여 가독성을 높이고 재사용 및 유지보수성을 높일 ..
[JPA] ExecutorService를 통한 엔티티가 변경되지 않는 않는 오류
·
스프링 부트/오류
가천대학교 가을 축제 웨이팅 서비스 라인업지를 개발하면서, 우리 서비스는 노쇼 방지를 위해 자동 취소 로직을 구현해야 할 필요가 있었다. 다만 단순한 '자동 취소'를 구현하는 것이 아닌,자동 취소 시 주점의 대기 팀 숫자가 감소해야 함자동 취소는 호출 이후 특정 시점 이후에 동작해야 함자동 취소 시, 사용자한테 알림톡으로 취소되었다고 알려주어야 함이런 정책들을 고려하면서 로직을 구현해야 했고, 이를 위해 ScheduledExecutorService를 도입하였다. ScheduledExcutorServiceScheduledExecutorService는 원하는 작업(메서드)를 특정 시간 이후에 동작하도록 설정할 수 있는 ExecutorService의 일종이다.ScheduledExecutorService는 총 ..
[gradle] 멀티 모듈에서 특정 모듈을 삭제했을 때 빌드가 실패하는 오류
·
스프링 부트/오류
오류 발생최근에 멀티모듈로 이루어진 프로젝트를 혼자서 연습하면서 특정 모듈을 추가했다가 삭제하였다.근데 계속 build.gradle 파일을 수정해도 Gradle 빌드가 실패하는 것이다..🥺그래서 Gradle 빌드를 새로고침 하려고 하면..이렇게 삭제한 모듈에 대한 빌드가 실패하는 모습을 볼 수 있다. Could not set process working directory to '프로젝트 위치': could not setcwd() (errno 2: No such file or directory) 원인 및 해결방법삭제된 모듈에 대한 캐싱 값들이 아직 프로젝트 구성 경로에 남아 있기 때문에 발생하는 것으로 추측된다. 따라서 .gradle, .idea 두 개의 폴더를 지워준 다음, IDE를 재시작하면 해결된다..