목록Java/Spring (12)
IT 성장일기

DTO를 이용해 중첩된 구조의 JSON 객체 전달 받기객체 안에 또 객체가 들어있는, 중첩된 구조의 객체를 JSON과 DTO를 이용해 주고받는 예제입니다.예제ClientJSON 객체는 아래와 같은 구조로 이루어져 있습니다.let dto = { master : { title , description , } , url : { id , url , } , location : { id , lat , lon , }}ServerJSON과 매핑시키기 위해 동일한 구조로 dto를 작성해야합니다. (롬복 애너테이션 등은 생략하겠습니다.)public class Dto { private Master m..

There is no getter for property named 'url' in 'class java.lang.String'문제MyBatis 사용 중 아래와 같은 오류가 발생했습니다.ReflectionException: There is no getter for property named 'url' in 'class java.lang.String'원인이 예외는 MyBatis가 #{url}과 같이 프로퍼티를 처리하는 과정에서 String 타입의 url 변수에 대한 getter를 찾으려 하기 때문에 발생한다고 합니다. MyBatis는 프로퍼티를 매핑하는 표현식을 사용할 때, 해당 프로퍼티가 객체의 필드라고 가정하고 getter 메서드를 찾습니다.그런데 매개변수로 전달한 url은 단순한 String 타입이고..

비동기로 화면에 JSP 파일 추가하기화면에서 버튼을 눌렀을 때 새로운 요소가 보이게 하는 방법은 여러 가지가 있습니다.이 번에는 스프링, 스프링부트 프로젝트에서 비동기로 뷰 템플릿 파일 조각을 불러오는 방법을 정리해 보겠습니다. 에러 핸들링과 관련한 내용은 과감히 제외하고 에센셜 한 부분만 정리해 보겠습니다.클라이언트 요청먼저 AJAX를 이용해 컨트롤러에 요청을 보내도록 하겠습니다.각각 순수 자바스크립트와 제이쿼리 구문입니다.function getHtml(parameters) { return fetch('/getHtml.do', { method: 'POST', headers: { 'Content-Type': 'application/json' ..

Fetch API로 사용자 정보 일치 여부 확인하기 (feat. 403 Error) 비밀번호를 입력받아 실시간으로 사용자의 비밀번호와 일치하는지 검사하는 로직을 구현해 봤습니다. 사용 언어 및 개발환경은 Java 17, Spring boot 3, Spring security, JPA입니다. Spring Security 로그인 인증 관련 403 Error가 발생해 해결 내용도 함께 작성합니다.😊 Controller @PostMapping("/password/check") : 보안의 이점을 가지기 위해 Post 방식으로 데이터를 받습니다. @PreAuthorize("isAuthenticated()") : 인증된 사용자만 해당 URL에 접근할 수 있게 하기 위해 적용했습니다. @ResponseBody : bo..

스프링부트에서 서버 재시작 없이 클래스 변경 사항 반영하기 클래스 코드를 변경하고 웹 페이지를 리로드 해도 변경 사항이 즉각 반영되지는 않습니다. 변경된 코드를 로컬서버에서 다시 컴파일 해야 하기 때문입니다. 코드 한줄을 새로 적더라도 일일이 서버를 재시작 해야 한다는 것은 개발을 진행하면서 상당히 귀찮고 불편한 일이 아닐 수 없습니다... Spring Boot Devtools 서버 재시작 없이 클래스의 코드를 반영해주는 Spring Boot Devtools와 웹 페이지 새로고침 없이 서버 변경 사항을 반영해주는 LiveReload++를 설치하겠습니다. Spring Boot Devtools를 사용하기 위해 의존성을 추가하겠습니다. Maven 프로젝트의 경우 pom.xml 파일에 아래 코드를 추가합니다. ..

BeanDefinitionStoreException이 발생하는 이유 BeanDefinitionStoreException은 스프링 컨테이너가 bean을 등록할 때 발생합니다. xml파일 등 bean을 관리하는 파일에서의 구문에 오류가 있거나 xml 형식에 오류가 있는 경우 가장 많이 발생합니다. 빈을 생성하기 위한 class 파일이 누락되어 있는 경우에도 발생합니다. context.xml 파일에서 bean을 정의할 때 Globals.properties 파일에서 전역변수를 가져와 값으로 매핑하는데, Globals 파일에 해당 변수가 선언되어 있지 않아 발생한 경우였습니다. bean을 정의하고 생성하는 과정에서 오류가 존재하여 발생하는 예외이기 때문에 예외를 일으킨 파일과 관련된 부분을 살펴보고 문제를 해결할..

Spring Tool Suite4 설치하기 Spring Tool Suite4 (이하 STS)는 Spring Framework와 관련된 기능들을 제공하는 Eclipse 플러그인입니다. Spring Framework로 이루어진 애플리케이션을 더 쉽게 개발할 수 있도록 다양한 기능들을 제공하기 때문에 Spring 개발자들에게 필수적인 툴이라고 합니다. 본래 Eclipse 상에서 하나의 Perspective 처럼 사용할 수 있는 툴이지만 Eclipse와 독립적으로 설치하여 사용할 수도 있습니다. Eclipse에서 설치하기 1. 이클립스를 열고 Help > Eclipse marketplace 메뉴를 열어줍니다. 2. STS를 검색하고 Spring Tools 4와 Spring Tools 3 Add-On을 설치해줍니..

BeanCreationException 해결하기 BeanCreationException을 이렇게나 자주 보게 될 줄은 몰랐습니다. Globals.properties 파일부터 해서 관련 context 파일들까지 훑어봤지만 별 다른 이상한 점을 찾을 수 없었습니다. 이전에 해결했던 경험도 있고 해서 찾아봤지만 DB 접속과는 무관한 다른 원인인 것 같습니다. 혹시나 해서 프로젝트 Build Path를 확인해보니 라이브러리들을 인식하지 못하는 것 같았습니다. 이를 해결하기 위해 라이브러리를 다시 인스톨합니다. 프로젝트 우클릭 > Run As > Maven Install 문제 없이 잘 실행 되는 것 같습니다. 도움이 되어드렸다면 구독 / 좋아요 부탁드립니다.👏🏻 감사합니다.🙂

외부 JS 파일에서 Spring message 사용하기 외부 JS 파일에서는 스프링 메시지 사용이 불가능하더라구요... JSP 파일 내부에 씌여진 Script에서는 Spring messge를 사용하는데 아무런 지장이 없습니다. MessageSource파일에 아래와 같이 선언되어 있다면 code.name = Name code.code = Code 아래와 같은 방법으로 사용할 수 있습니다. var name = '' alert(name); alert(''); 위 두개의 alert 함수는 같은 값을 띄워줍니다. 하지만 JS 파일이 외부에 선언되어 있다면 컴파일 된 Spring message를 읽어내지 못해서 메시지 태그를 단순한 텍스트로 받아들입니다. 그래도 사용할 수 있는 방법이 있을 것 아니예요 이를 해결하..

다국어 지원 버전을 만들다가 만난 상황들 -2- 한국어 외 3개 국어를 지원하는 글로벌 버전 어플리케이션을 개발하다보니 이런 저런 상황을 다양하게 마주했습니다. 오늘 재미있는 경험을 해서 기록으로 남겨봅니다. 따옴표 조심하세요 기존에 오류 없이 잘 돌아가던 화면에서 갑작스럽게 오류가 발생해 원인을 찾아보았습니다. 오류 내용은 Uncaught SyntaxError.. 스크립트 부분에서 괄호나 따옴표가 제대로 된 쌍을 이루지 않았을 경우 자주 볼 수 있는 오류였습니다. 분명 해당 화면을 한국어나 일본어로 사용할 때는 이상이 없었는데 영어버전일 때에만 이 오류가 발생했습니다. 오류를 표시하는 해당 라인을 찾아보니 alert 함수에 다국어 메시지를 삽입한 부분이었습니다. 원인이 뭘까 곰곰히 생각해보다가 아차 싶..

다국어 지원 기능을 만들다가 만난 상황들 내부회계관리를 위한 어플리케이션의 다국어 지원을 위해서 벌써 2주일 넘게 작업중입니다. 작업 중 겪은 여러가지 상황들을 조금 정리하고 기록해놓고자 합니다... 스프링 메시지 태그 번들 만들기 전자정부 기반 프로젝트다보니까 이미 많은 것들이 기반으로서 구현되어있었고 저는 필요한 메시지번들을 제작해서 화면에 가져다가 바르기만 하면 되는 상황이었습니다. 처음 메시지 번들을 만들 때 메시지 태그의 작명 규칙과 분류 규칙에서 많은 고민이 생겼었는데 그 중 분류방식에 대해 많은 고민을 했던 것 같습니다. 어플리케이션 상의 업무 프로세스를 기준으로 분류할 것 인지 버튼, 텍스트, 알러트 팝업 등 메시지 태그가 사용 될 고유 위치를 기준으로 분류할 것 인지 말도 안되지만 가나다..

Annotation의 중요성을 느끼다 회사에서 서비스하는 어플리케이션의 유지보수나 서비스 확장성 면에서 유리한 조건을 만들기 위해 사수님과 함께 코드 리팩토링을 진행하기로 했습니다. 컨트롤러 부분에서 코드 리팩토링을 진행하다가 애너테이션은 그냥 있는 것이 아니라는 것을 느끼게 됐습니다. NullPointException 발생 코드가 많이 중복되는 클래스나 메서드가 여러개씩 존재하는 경우가 있었습니다. 문제가 발생한 클래스에 메서드 두개가 존재했습니다. 각각 별개의 클래스를 호출하는데 클래스를 호출하는 한줄의 코드 외엔 기타 모든 코드가 동일했습니다. 중복코드를 통합하고 서비스 로직만 분기시킨 후 테스트하고 콘솔의 로그를 확인했는데 NullPointException이 발생했습니다. 처음엔 정보를 가져오는 ..