[gradle] 멀티모듈에서 컴포넌트 스캔이 되지 않는 문제
·
스프링 부트/오류
현재 클린 아키텍처를 학습하기 위해 코틀린을 통해 간단한 프로젝트를 진행하고 있으며, 파사드 패턴과 포트/어댑터 패턴을 적용한 헥사고날 아키텍처를 구현하려고 노력 중에 있다. 그리고 해당 과정에서 스프링 어플리케이션이 컴포넌트 스캔을 제대로 하지 못하는 문제를 발견하였고, 이를 성공적으로 해결하였다. 설명하기에 앞서서, 앞으로 설명하고자 하는 프로젝트는 총 5개의 모듈을 구축해서 운영하고 있으며, 모듈이 가지는 책임은 다음과 같다:domain: 순수 코틀린으로 이루어진 모듈independent: 모든 모듈에서 공통적으로 쓰이게 되는 모듈infra:persistence-db: JPA 관련 로직으로 이루어진 모듈infra:security: Spring Security 관련 로직이 이루어진 모듈(토큰 발급에 ..
2024년 총망라, 그리고 신년을 대하는 마음가짐
·
회고
초안을 작성하는 지금, 어느덧 2024년이 일주일도 남지 않은 시점이다. 블로그 첫 글로 2024년 한참 늦은 중간 회고록을 적은 게 11월인데, 시간이 참 빠르다는걸 느낄 수 있는 부분이다.🥺 https://jwnnoh.tistory.com/1 [일상] 2024년 중간 회고 - 새학기부터 휴학까지매번 블로그 글을 써야지! 생각만 하고 실천으로 옮기지는 못했다..그 사이에 나랑 같이 학교 다니는 친구들은 조금씩이나마 실천하고 있었고, 나는 바쁘다는 핑계로 단 하나의 글도 작성하지jwnnoh.tistory.com 연말 회고록은 처음 작성하지만, 사실 대부분의 내용은 위에 첨부되어 있는 11월의 중간 회고록에 담겨 있다. 그래서 이번에는 위 글에서 다루지 못한 내용을 다뤄보려 한다. 📝 AI 메모장 요약..
코틀린에서 JPA 적용하기
·
스프링 부트/Kotlin
최근 들어 실무 진영에서는 코틀린에 대한 선호도가 높아지고 있는 상황으로 보인다. 당장 올해 여름에 진행했던 당근 테크 인턴십의 서버 직군만 보더라도, 코틀린과 Spring 프레임워크를 활용하는 개발자들을 원했다. 또한 상당수의 빅테크 기업이 여러 서비스를 점차 자바가 아닌 코틀린을 활용해서 개발하거나, 기존의 서비스를 코틀린으로 마이그레이션 하는 것을 볼 수 있었다. 더 이상 코틀린은 선택이 아닌 필수라고 생각했다. 그래서 최근부터 코프링(Kotlin + Spring Framework)을 공부하고 있는데, 해당 과정에서 JPA를 적용하면서 겪은 과정을 풀어내보려고 한다. 코틀린과 궁합이 좋지 않은 JPAJPA는 자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스의 집합체이고, 이를 구현한 것이 Hi..
주삼끄 챌린지를 마무리하며
·
회고
주삼끄 챌린지길고도 길었던 주삼끄 챌린지가 어느새 마무리되어 간다. 주삼끄 챌린지는 "주에 세 번 이상 끄적이기"의 줄임말로, 참여하는 사람들로 하여금 강제로 기록하는 습관을 들일 수 있도록 도와주는 프로그램이다. 분야를 막론하고 우리 모두가 기록하는 습관을 길러야 한다는 것은 매우 자명하다. 머리는 생각하는 곳이지, 기록하는 곳은 아니기 때문이다. 사람은 몇 초 전에 일어난 일도 왜곡해서 기억하고는 한다. 물론 특정 순간이나 지식을 떠올릴 때 머리를 쓰고는 하지만, 그 과정에서 도출되는 결과물들의 신뢰도가 높을 것이라는 기대는 접어두는 편이 마음이 편할 것이다. 그래서 우리는 꾸준히 그러한 순간들과 기억들을 기록해야만 한다. 하지만 말이 쉽지, 이를 실천하고 장기적인 습관으로 가져가기는 무척 어려운 법..
[백준] 1012-유기농 배추 (Java)
·
알고리즘
https://www.acmicpc.net/problem/1012 문제 구현 방식육지(1)로 표시된 지점들을 탐색하면서 연결된 육지를 올바르게 판단하는 것이 관건인 문제이다.방문하지 않은 칸을 방문할 때마다, 연결된 모든 칸을 한 번에 탐색하여 육지로 묶는 방식으로 문제를 접근하였다. BFS를 위한 자료구조2차원 배열 check로 방문 여부를 관리한다.큐(Queue)를 활용하여 BFS를 구현한다.이동 방향을 나타내기 위한 dy, dx 배열(상하좌우)을 준비한다.로직이중 for문을 통해 모든 좌표들을 하나씩 순회하면서 탐색한다.아직 방문하지 않은 칸을 발견하면, 해당 칸에서 시작하는 새 육지를 찾은 것이므로, 육지 개수를 담당하는 변수의 값을 1 증가시킨다.현재 좌표 (y, x)를 큐에 넣고, check[..
[백준] 2178-미로 탐색 (Java)
·
알고리즘
https://www.acmicpc.net/problem/2178 문제 구현 방식(0,0) → (m,n) 으로 이동하는데 얼마나 많은 블럭을 이동해야하는지 판단하는 것이 관건인 문제이다.  입력 처리숫자가 공백 없이 주어지므로, 문자열 입력 후 개행(\n)을 기준으로 분리한다.각 줄에서 불필요한 ‘0’을 제거한 뒤 정수 형태로 변환하여 미로를 표현하는 2차원 배열에 저장한다. BFS를 위한 자료구조큐(Queue)를 생성하여 BFS 로직을 구현한다.방문 여부와 이동 거리를 동시에 관리하기 위해 check라는 2차원 배열을 사용한다.check[y][x]에는 '(y, x)까지 이동하는 데 필요한 거리'를 저장한다.이전 위치의 check 값에 1을 더한 값을 현재 위치에 대입함으로써 거리를 갱신한다. 로직우선 ..
내가 알고리즘을 공부한 이유와 그 방법
·
회고
계기내가 본격적으로 웹 개발을 접하게 된 건 작년 봄이었지만, 그때는 아무것도 모르는 말 그대로 '백지' 상태였다. 그 상태에서 여름에 프로젝트를 진행하려고 하는데, 기본적인 개념이 잡혀있지 않으니 당연히 제대로 서비스가 완성될 리는 없었다. 당연히 나의 첫 프로젝트는 흐지부지 되었고, 그 과정에서 많은 감정들을 느낄 수 있었다. 그 감정들 중에서 가장 패착이라고 여긴 부분은 바로 '언어에 대한 미숙함'이었다. 백엔드 개발을 희망하는 사람이 기본적인 자바 문법에 대한 이해도가 전혀 없으니 당연히 제대로 된 프로젝트를 진행할 수는 없었다. 프로젝트를 통해 언어를 배우면 된다고들 하였지만, 나한테 해당 방식은 맞지 않았고, 그러던 중 '알고리즘' 문제풀이를 통해 문법을 빠르게 익힐 수 있다는 친구의 조언을 ..
[동아리] Leets 4기를 리드로 마무리하며
·
회고
LeetsWho Cares?www.leets.land 현재 리드로 역임하여 운영하고 있는 동아리인 Leets는 2023년에 성민이 형과 아연이의 주도 하에 창설되어 가천대학교 교내 구성원들로 이루어져 있다. 덕분에 1기부터 활동한 나는, 개발의 'ㄱ'도 모르던 사람에서 이제는 기술적으로 다양한 도전을 시도하고, 다른 이들에게 배움을 나눠줄 수 있는 주니어 개발자로 성장하게 되었다. 그만큼 Leets에 대한 자부심도 상당하다. 같은 목표와 방향을 향해 달려가는 열정적인 이들이 함께 모여서 이루어진 만큼, 교내에서는 손꼽힐 정도의 열정과 결과물을 자부할 수 있다고 생각한다.   하지만 항상 든 생각은, Leets가 이들에게 종착지가 되어서는 안 된다는 것이었다. 이번 기수를 포함해 지금까지 총 4 기수 동안..
[모니터링] Prometheus와 Grafana를 통한 스프링 부트 모니터링 구축
·
DevOps
원격 웨이팅 서비스 라인업지의 모니터링을 진행하면서 결국은 Pinpoint를 더욱 많이 사용했고, 서비스 이튿날에는 핀포인트만 사용했다고 해도 과언이 아니었다. 하지만 Pinpoint를 적용하기 전에는 Prometheus와 Grafana를 통한 인스턴스 모니터링을 진행했고, 이를 어떻게 진행했는지 글로 남기고자 한다. Prometheus와 Grafana그전에 앞서서, Prometheus와 Grafana의 기능과 차이점을 짚고 넘어가야 한다. PrometheusPrometheus는 시스템의 성능 지표(metrics)를 수집, 시각화, 알림 등을 제공하는 오픈 소스 모니터링 시스템이다. 이번에는 Prometheus를 통해 Spring Actuator에서 각종 성능 지표들을 가져올 예정이다. 하지만 Prome..
[Spring Security] 스프링에서 CORS를 해결하는 또다른 방법
·
스프링 부트/오류
개발을 시작한 지 얼마 되지 않은 개발자들이 가장 마주치기 싫어하는 오류가 무엇일까? 난 당당하게 CORS라고 답해주고 싶다. 본인도 처음 프로젝트를 도전했을 때도 결국 CORS 때문에 API 연결에 실패해 마무리하지 못한 슬픈 기억을 가지고 있다. 그만큼 CORS는 웹 개발자라면 가장 먼저 넘어야 할 산이라고 불린다고 해도 과언이 아니다. 평소에 관심을 가지고 있었던 스벨트 프레임워크를 통해 간단한 어드민 관리자 페이지를 구현하는 도중, API를 서버와 연결하는 과정에서 CORS 오류를 마주치고 말았다. 개발을 본격적으로 시작한 지 어연 1년 하고도 6개월이 지났지만, 아직도 CORS의 늪에 빠져 허우적댈 줄은 꿈에도 몰랐다.. 심지어 이번에는 백엔드 개발자의 입장이 아닌, 프런트엔드 개발자의 입장에서..