본문 바로가기

JAVA27

Spring boot 순환 참조 회피하기(구조 파악, 중재자 패턴, 지연 초기화) 순환 참조 사이드 프로젝트를 진행하며 순환 참조 오류가 발생하였습니다.  런타임에 로그가 정말 친절하게 어떤 부분에서 순환 참조 오류가 발생하였는지 설명해주었습니다. 순환 참조는 paragraphExtractorHandler 클래스가 controlAdditionalTextExtractor 클래스를 의존하는데 controlAdditionalTextExtractor 클래스도 paragraphExtractorHandler 클래스를 의존하고 있을때, 다시말해 두 클래스가 서로를 의존하고 있을 때 발생합니다. 프로젝트를 실행하면 스프링 컨테이너는 어노테이션으로 판단하여 빈을 생성합니다. 그리고 빈을 생성할 때 참조하는 클래스를 판단하여 의존성을 주입합니다. 이 때, 의존성을 주입하는 방법은 생성자 주입, sett.. 2025. 1. 25.
Spring AOP @Aspect를 활용하여 Logging 기능을 적용해보자. 서론 이 포스팅은 배움을 토대로 실제 개발중인 프로젝트에 Spring AOP를 사용한 로깅 기능을 어떻게 구현했는지에 대한 내용입니다. 그리고 그 배움은 김영한 선생님의 '스프링 핵심원리 - 고급편' 강좌를 참고하였습니다. 목표 구현하고자 한 기능은 다음과 같습니다.호출한 메소드를 계층 별 순서에 맞게 화살표와 띄어쓰기를 통해 구분한다.계층 별 메소드 호출 시작부터 종료까지의 시간을 구한다.메소드 파라미터를 함께 표시한다.hibernate 구현 쿼리문을 출력한다.예외 발생 시 별도 표시와 함께 예외 메시지를 출력한다.log의 형태는 다음과 같다.INFO 12-16 17:29:18 [788ecafc] |--> WorkPlanController.getWorkPlanList(WorkPlanSearch(stDa.. 2025. 1. 10.
[Spring] ControllerAdvice, ExceptionHandler, static factory method pattern을 사용하여 예외 처리하기 사설더보기인프런에서 김영한 선생님이 강의에서 종종 해주시는 말씀이 있다. 고객을 편하게 하려면 개발자가 불편해야 한다. 스프링 강의를 듣고 있으면 스프링을 사용하고 있는 내(고객)가 편하게 개발할 수 있게 스프링을 개발한 개발자들이 정말 많이 신경써서 개발했다는 것을 느낄 수 있다. 현재 새로운 프로젝트의 구조를 세우고 있는 상황인 나(개발자)도 어떻게 하면 개발자(고객)가 이 구조 안에서 더 편하게 개발을 할 수 있을까에 대해 고민하게 된다. 그리고 그 중 하나가 예외처리이다. 우리는 웹 안에서 발생하는 다양한 상황에 맞는 예외를 구현해야 한다. 그것을 좀 더 간편하게 하기 위해 스태틱 팩토리 메서드 패턴을 사용하여 구현해보고자 한다. 배경 예외처리는 현재 다음과 같이 만들어져 있다.@Getter@Al.. 2024. 12. 8.
[Spring] MapStruct 라이브러리 사용해서 dto to entity 매핑 간단화시키기 배경 새로 프로젝트를 제작하게 되었습니다. 레이어드 아키텍처 기반이며 계층 간의 모듈화를 좀 더 엄격하게 관리하고 싶어 dto와 entity를 별도로 관리하게 되었습니다. 기존에는 빌더 패턴을 통해 각각의 값들을 매핑해주었습니다. @Controllerpublic class ExController {... @PostMapping("/testUrl")    @ResponseBody    public List getWorkPlanList(@RequestBody TestSearch testSearch) {        List testList = testService.findSpYjSelect(testSearch);        return getTestListEntityToDto(testList);    } .. 2024. 11. 18.
[Spring] application.yml 에 환경변수가 제대로 저장되지 않을 때(java.lang.IllegalArgumentException: Could not resolve placeholder) 배경 깃허브에서 코틀린 기반 스프링 프로젝트를 받아 실행을 했는데 다음과 같은 오류가 떴다. java.lang.IllegalArgumentException: Could not resolve placeholder '' in value...확인해본 결과 application.yml에 환경 변수로 지정된 것들을 코틀린에서 전혀 사용하지 못하고 있었다.소스를 확인해본 결과 "\${app.name}" 다음과 같은 형태로 사용중이었으며 이상은 없었다. 해본 방법들 역시 첫번째 방법은 프로젝트 리빌드 후 기도 메타.리빌드 방법은 인텔리제이 기준 상단 메뉴 - Build - Rebuild Project 를 클릭한다. 단축키로는 윈도우 : Ctrl + Shift + F9맥 : command +  Shift + F9 으로.. 2024. 11. 16.
프로그래머스 레벨1 - 공원[자바] 문제  프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 풀이 mats 가 정사각형이기 때문에 2차원 배열을 탐색하면서 -1인 값을 찾고 그곳을 시작점으로 정사각형의 넓이만큼 -1이 존재하는지를 조건문으로 검색합니다. class Solution { public int solution(int[] mats, String[][] park) { for(int m : mats) { for(int i=0; i mats 배열의 원소를 하나씩 꺼내서 하나씩 비교합니다. 30점 나왔습니다.뭐가 문제인지 문제부터 다시 읽었는데 mats의 배열의 .. 2024. 10. 5.