배경 스프링 커뮤니티에서 필드 주입보다는 생성자 주입을 권장하기 때문에 생성자 주입을 아무런 생각없이 쓰고 있었다. 그런데 오늘 jwt 토이 프로젝트를 하다가 순환 참조가 발생해서 해당 내용을 기록한다. 문제 jwtRequestFilter defined in file [xx\IdeaProjects\study\simple_shopping_mall\out\production\classes\com\ssmallgiant\simple_shopping_mall\filter\JwtRequestFilter.class] ┌─────┐ | memberService defined in file [xx\IdeaProjects\study\simple_shopping_mall\out\production\classes\com\ss..
배경 스프링 프레임워크 기준으로 resources 경로에 있는 파일들에 접근할 때 classpath라는 키워드를 사용하곤 하는데, 전부터 이게 뭔지 궁금했다. 우연히 해당 내용에 대해 정리되있는 블로그를 알게되 해당 내용과 실제 프로젝트를 빌드해서 비교해봤다. 본문 classpath가 가리키는 경로부터 말하자면 빌드된 classes 경로를 가리킨다. 그렇다면, classes 경로를 가리키는데 어떻게 개발시 resources 밑에 있던 파일들이 불러와 질까? war나 jar로 빌드되면 resources 경로 하위에 있던 파일들이 WEB-INF\classes 밑으로 이동하게 된다. bootJar나 bootWar를 이용하면 비슷하지만 BOOT-INF\classes 밑으로 이동한 것으로 확인된다.
배경 사놓고 반년 넘게 묵혀둔 '처음 배우는 스프링부트2' 예제를 따라하다가 thymeleaf 에서 희안한 문법을 쓰는것을 봤다. th:value="${board?.idx}" 모델 객체로 넘겨준 board 옆에 붙은 물음표는 무엇인가? 삼항연산자 null 체크를 줄인거 같긴 한것 같은데 용법이 모호해서 책의 다음 페이지를 읽어 봤는데, 그냥 null check 해서 null이면 빈값을 출력 했다고 써있었다. 답답해서 thymeleaf null check syntax라고 검색을 했는데 stackoverflow를 통해 해당 문법이 Safe Navigation operator이라는 것을 알게 되었다. 해당 답변의 링크를 따라가보니 스프링 레퍼런스 페이지에서 해당 내용을 찾을 수 있었고, 그 밑에 Elvis o..
증상 토이 프로젝트용 프로젝트를 생성하고 테스트를 돌리는데, Class not found 문제가 일어났다. 내가 생성하는 중에 뭔가 잘못했나 싶어, 메인 메서드를 실행해 프로젝트를 돌려봤는데 희안하게 프로젝트는 정상 작동했다. 테스트만 작동하지 않고 있음 해결 정상적인 루틴인지는 모르겠으나, 위의 상황을 볼때 세팅의 문제는 아니라고 판단했다. gradle 플러그인 탭을 가보니 비워져 있길래, 리프레쉬 했더니 탭이 정상적으로 보여졌다. 문제가 해결됐다고 생각해 다시 테스트를 해봤는데 또 위와 같은 상황이 벌어졌다. 다시 리프레쉬 후, 탭에서 clean -> test를 돌려보니 제대로 실행되길래 이번엔 클래스에서 실행해보니 정상 작동했다. clean -> test -> 원하는 테스트 작동.
javax.persistence.Id: 관계형 DB에서 사용. org.springframework.data.annotation.Id : JPA에 의해 지원되지 않는 Nosql이나 프레임워크에서 사용됨. https://stackoverflow.com/questions/39643960/whats-the-difference-between-javax-persistence-id-and-org-springframework-data What's the difference between javax.persistence.Id and org.springframework.data.annotation.Id? I'd be interested whether there is the difference between javax.pe..
원인 AOP에서 execution을 사용하면 생기는 버그라고 한다. 해결 execution을 within으로 바꾸면 해결된다고 한다. 출처: https://okky.kr/article/431250 OKKY | 삽질기행 - spring boot 에서 JOOQ 사용시, 구동 1분이상 느려짐 현상 (버그) spring boot 에서 JOOQ 사용시 구동 1분이상 느려짐 현상 (버그) 1. 현상 boot 구동시에 80초이상 느려짐 발생 2. 윈인점 파악 AOP쪽 execution 표현식에 따른 JOOQ와의 버그 okky.kr
들어가기 전.프로젝트 생성은 spring initializer로 생성하고 javafx를 구현하는 방식으로 개발.java 11로 오면서 javafx가 분리됨. 따라서 직접 라이브러리를 추가 하는 방법과, gradle을 이용한 방법 두가지 모두 해봄. 직접 라이브러리를 추가 하는 방법.Project Structure > Library 또는 Global Library에 jar 파일을 추가하고, 추가한 라이브러리를 오른쪽 클릭하여 Add to module로 모듈에 추가해줘야됨. Gradle을 이용한 방법.plugins { id 'org.springframework.boot' version '2.1.2.RELEASE' id 'java' id 'org.openjfx.javafxplugin' version '0.0...
전임 관리자와 전임자가 하던 과제를 이어 받은 뒤. 어떻게든 개발 후 검수하기 전 지적사항을 해결해가는 과정을 간략하게 기록하고자 한다. 나와 같이 외롭게 문제를 해결해가는 이름 모를 1인 개발자 분들에게 도움이 됬으면 한다.내가 욕받이로 전락하게 만드는 전자정부프레임워크에도 서운함을 느끼며 기록한다. 1. 취약점, 시큐어 코딩 점검 관련. - 전자정부프레임워크(이하 전정프)에서 PMD를 제공한다. 전정프의 소개 란에도 써 있듯이 국가적 표준화를 한다고 하니 PMD를 사용하면 되겠거니 했다. 조치한 보고서를 제출한 뒤엔 수치스러운 말을 면전에 듣게 됐다. - 대부분의 정부 SW 개발은 행정안전부 지침을 따른다고 보면 될것 같다. 적어도 지금 내 경우는 그렇다. - 2016년 고지된 공개SW를 활용한 소프..
협업하는 환경에서 공통부분을 @AllArgsConstructor로 만들어서 공유했는데, 협업하는 개발자 한명이 @RequiredArgsConstructor로 바꿔서 보냈다. 처음엔 큰 차이가 있을까 싶어 그냥 본인이 개발한 소스를 추가했는데, 테스트 하다보니 생성자 주입이 작동하지 않아 찾아본 내용을 기록한다. 정리 @RequiredArgsConstructor 초기화 되지 않은 final 필드와 @NonNull 어노테이션이 붙은 필드에 대한 생성자 생성@AllArgsConstructor 모든 필드에 대한 생성자 생성. @RequiredArgsConstructor @RequiredArgsConstructor generates a constructor with 1 parameter for each field..