비즈니스 로직을 처리하다 보면 비동기적으로 데이터가 생성되거나, 외부 API 호출 시 타이밍 이슈로 데이터가 준비되지 않아 실패하는 상황을 자주 겪게 됩니다. 특히, Feign 클라이언트를 사용할 때 외부 API가 아직 데이터 준비를 마치지 않은 상태라면 null 값이나 예외가 발생할 수 있습니다.최근 저 역시 이런 문제를 경험했는데, 이를 해결하기 위해 Spring Retry를 활용해 재시도 로직을 도입했고, 최종적으로 실패한 경우에만 알림을 전송하는 구조로 개선했습니다. 이 과정을 공유하고자 합니다.문제 상황Feign 호출 실패외부 API 호출 시 데이터가 아직 생성되지 않아 예외(null)가 발생.재시도 필요외부 시스템이 데이터를 생성하는 데 약간의 지연 시간이 필요하므로, 요청을 일정 시간 간격으..
스프링 프레임워크는 객체 지향 프로그래밍에서 핵심적인 디자인 패턴인 의존성 주입(DI, Dependency Injection)을 지원합니다.DI는 객체 간의 의존 관계를 개발자가 아닌 프레임워크가 자동으로 주입해주는 방식으로, 코드의 결합도를 낮추고, 유연성과 테스트 용이성을 높여줍니다.이번 글에서는 서비스 계층(Service Layer)을 DI를 활용해 설계하는 방법과, DI의 주요 방식인 @Autowired 필드 주입과 생성자 주입의 차이점을 알아보겠습니다. 의존성 주입 DI(Dependency Injection)란?의존성 주입(Dependency Injection)은 클래스가 다른 클래스에 의존할 때, 직접 생성하지 않고 외부에서 필요한 객체를 주입받는 방식입니다.이를 통해 객체 간의 결합도를 낮추..
엑셀 다운로드 기능이 갑자기 안되는 일이 생겨났다에러 로그를 살펴보니 FontConfiguration쪽에서 NPE(NullPointerException)가 발생했다발생로그더보기org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.InternalError: java.lang.reflect.InvocationTargetException org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.InternalError: java.lang...
저번 포스팅에서 글 등록에 관한 구현을 진행해봤습니다. 한글로 제목에는 제목테스트, 내용에는 내용테스트로 등록을 진행해보겠습니다. 해당 에러를 보니까 타이틀에 들어가는 값이 '\xEC\xA0\x9C\xEB\xAA\xA9...'이런식으로 되어있는것으로 UTF-8 인코딩 부분이 문제가 있는것 같습니다. 해당 테이블에 chartset을 utf-8로 바꾸어 줍니다. ALTER TABLE board CONVERT TO CHARSET utf8; 다시 한글로 된 내용을 정상적으로 에러없이 등록이 되는 것을 확인 할 수 있습니다. 등록후에도 아무런 변화가 없어서 등록이 잘 된건지 화면에서는 확인 할 방법이 없습니다. 정상적으로 되면 등록이 완료된다면 창을 닫고 목록도 다시 로딩하도록 하곘습니다. 현재는 등록을 서버에 ..
안녕하세요. 너무 오랜만에 포스팅을 이어 나가서 죄송합니다... 그동안 회사 프로젝트와 개인 토이프로젝트랑 개발 공부까지 하다가 보니 시간이 정신없이 흘러 글을 쓸 생각조차 못했습니다... 천명만 넘어도 좋겠다라는 블로그의 방문자수는 어느덧 4000이 넘는 수의 방문자를 기록하였습니다 블로그명도 몽상개발자에서 개발은 재밌어야 한다로 바꾸었습니다...! 토이프로젝트나 잡담에 대한 내용들은 앞으로 NullPointerException 카테고리(Null 채우겠다라고 바뀔수도 있습니다...)에 게시물을 통해서 작성하도록 하고 이만 본론에 들어가겠습니다. 저번 포스팅에서 만든 프로젝트를 이어 가보도록 하겠습니다. 우선 포스팅한지 너무 오랜기간이 지나서 github에 올라가있는 마지막 프로젝트를 기준으로 다운을 받..
이전 포스팅에 이어서 이번에는 프로젝트에 프론트 환경을 구축해서 Spring에 연결하는 환경을 만들어 보겠습니다. 우선 프로젝트의 소스파일 폴더에 Vue프로젝트를 생성해보도록 하겠습니다. src에서 마우스 우측클릭을 하면 보이는 설정에서 Properties를 클릭합니다. 해당 버튼을 누르면 해당 소스가 있는 파일 편집기 폴더를 열어줍니다. 스프링폴더의 루트 레벨에서 frontend를 만들어 보겠습니다. 해당 파일의 주소를 클릭하고 cmd를 누르고 엔터를 하게 되면 해당 위치의 cmd창이 열립니다. 저번과 마찬가지로 Vue create frontend 명령어를 입력하여 frontend라는 이름의 Vue 프로젝트 폴더를 생성합니다. 정상적으로 폴더가 완성이 되었습니다. 아까 없었던 frontend라는 폴더가..
이번에는 프론트엔드 환경을 구축해서 Vue를 사용할 수 있는 환경을 만들어 보도록 하겠습니다. 우선 NPM을 사용하기 위한 환경을 구축하도록 합니다. NPM(Node Package Manager)는 자바스크립트를 위한 패키지 관리자입니다. 즉, 자바스크립트에서 사용하는 모듈들을 패키지화해서 관리하고 베포하는 자바스크립트 런타입 환경인 Node.js의 기본 패키지 관리자입니다. 과거에는 npm을 별도로 설치해야 했지만 지금은 node.js만 설치하면 자동으로 설치가 됩니다. node.js 사이트에서 node.js installer를 다운로드 합니다. node.js 다운로드 페이지 : https://nodejs.org/en/ Node.js Node.js® is a JavaScript runtime built..
이제 본격적으로 게시판의 기능들을 구현해보려고 합니다. src/main/java 에 패키지를 작성합니다. - com.dream.controller : 웹에서 처리해야할 데이터를 받아서 해당 데이터를 담당할 service를 선택하여 호출합니다. - com.dream.service : 데이터를 DAO를 통해 넘겨주거나 받으면서 비즈니스 로직을 수행하는 역할을 합니다. - com.dream.mapper: mapper에 기제된 SQL문을 호출하여 DB의 데이터에 접근합니다. - com.dream.vo : DB에 있는 테이블 컬럼 값을 java에서 객체로 다루기 위해 사용합니다. vo 패키지에 BoardVO 클래스를 생성합니다. BoardVO클래스에 BOARD테이블에 맞게 VO객체를 생성합니다. package c..
HTTP 상태 에러 코드중에 405에러가 나왔습니다. 콘솔 에러에서 잡힌 로그 Resolved exception caused by handler execution: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported친절하게도 POST를 지원하지 않는다라고 합니다.브라우저에서 호출할때 POST로 호출하고Controller에서는 당당히 @RequestMapping(value = "호출URL.do", method = RequestMethod.GET)'매핑하여 받는 주소에 대한 method를 GET으로 지정해서 POST 방식으로 지정해서 Request를 받아라'라고 GET은 허용불가하다..
스프링으로 게시판을 만들어보는 포스팅을 작성해보려고 합니다. 최종적인으로 완성 형태는 Vue, Spring, MariaDB을 사용한 형태로 완성하려고 합니다. 일단 이전 포스팅에서 작성한 프로젝트를 기반으로 사용합니다. Lombok을 사용하여 Java 개발시에 자주 사용되는 getter/setter, toString(), 생성자등을 변수를 선언한 것만으로도 자동으로 생성해줘서 코드를 줄이는데 유용합니다. Lombok 다운로드는 http://prprojectlombok.org/에서 jar 파일 형태로 다운 받을수 있습니다. 받은 lombok.jar를 실행킵니다. Quit Installer 눌러서 설치를 해주세요 이제 pom.xml에 lombok의 라이브러리를 추가해주고 Log4j 라이브러리는 1.2.15로..
지난번 프로젝트를 실행하면 Hello world와 현재 시각이 나오는데 한글부분이 깨져서 ?로 나오는 것을 확인할 수 있습니다. 이 부분을 UTF-8로 변환하여 한글로 나오게 처리합니다. 프로젝트를 선택한 후 Project > Properties로 들어갑니다. Resource > Text file Encoding에서 Other을 클릭하여 UTF-8로 바꿔준 후 Apply and Close하여 적용합니다. Window > Preferences로 들어가서 General > Workspace에 들어가서 똑같이 UTF-8로 설정해줍니다. 그 후 프로젝트를 클릭해서 src > main > webapp > WEB-INF > web.xml에 들어가가서 source를 클릭합니다. 그럼 다음과 같은 서블릿 관련 xml파..
이클립스(STS)에서 스프링 프로젝트를 생성하는 방식은1) 처음부터 스프링 프로젝트를 지정하고 생성하는 방식2) Maven이나 Gradle 프로젝트를 생성한 후 프레임워크를 추가하는 방식3) 직접 프레임워크 라이브러리를 추가하는 방식이 있다.* 프로젝트 생성하기STS나 Eclipse의 스프링 관련 플러그인을 설치하면 별도의 설정없이 Maven을 사용하는 스프링 프로젝트를 생성할 수 있다.화면 오른쪽 상단의 'Perspective'를 'Spring'으로 지정한 후 'File'메뉴를 통해 프로젝트를 생성한다. 'Spring Legacy Project' 메뉴를 이용하여 스프링 기반 프로젝트를 Maven 기반으로 생성할 수 있다.프로젝트는 'Spring MVC Project'를 생성한다.Next를 하면 처음 시..