목록Framework/Spring (15)
IT 성장일기

@PathVariable과 @RequestParam 응용해 보기앞서 스프링 컨트롤러에서 URL에 매핑된 변수를 어떻게 받아내는지 여기에서 간단하게 정리했습니다.이번 글에서는 두 어노테이션에서 여러 개의 변수를 받는 법, 기본값 설정하는 법 등을 정리해 보겠습니다.✅ 두 어노테이션의 차이?이전 글을 읽을 시간이 없으신 분들을 위해 두 어노테이션의 차이를 간략하게 다시 짚어보겠습니다.두 어노테이션 모두 GET 방식을 기반으로 URL에 포함된 요청 파라미터를 파싱하고 메서드 파라미터로 바인딩해줍니다. @PathVariable: URI 경로에 포함된 값을 바인딩할 때 사용@RequestParam: 쿼리 스트링, 즉 ?key=value 형식이나 폼 데이터에서 사용 ✅ 어노테이션 속성 부여하기URL 변수와 메서드 ..

@UtilityClass우리는 문자열을 암호화 한다던지, JSON 데이터를 파싱 하는 유틸리티 클래스를 종종 접합니다.애플리케이션 전역에서 공통적으로 특정 역할을 수행하기 위해 아래와 같은 몇가지 요구사항이 존재합니다.객체를 생성할 필요가 없고,값이나 상태를 저장하지 않으며,역할만을 수행하도록 설계되어야 함Lombok이 제공하는 @UtilityClass 어노테이션을 사용하면 매우 간편하게 유틸리티 클래스를 구성할 수 있습니다.@UtilityClass@UtilityClass 어노테이션의 내부는 이렇게 생겼습니다.@UtilityClass의 역할과 기능컴파일 시점에 작동하며 해당 어노테이션이 붙은 클래스를 자동으로 유틸리티 클래스로 기능하도록 만들어줍니다.구체적인 기능은 아래와 같습니다.상속 방지 : 클래스를..

@PathVariable과 @RequestParam의 공통점과 차이점HTTP 요청의 여러 메서드 중 GET은 URL에 값을 포함해 요청을 보낸다는 특징을 가지고 있습니다.이때 값을 포함하는 방법은 크게 두 가지로 나뉘는데, 스프링에서 이를 어떻게 처리하는지,그리고 어떤 공통점과 차이점을 가지는지 짧게 알아보았습니다.공통점두 어노테이션 모두 Spring MVC에서 사용되며, 클라이언트의 요청 값을 컨트롤러 메서드 파라미터로 바인딩하는 역할을 합니다.이때 문자열, 정수형, enum 등의 다양한 자료형으로의 형변환을 지원하고,@Valid, @NotNull 애너테이션과 병용하여 유효성을 검사할 수도 있습니다.@PathVariable과 @RequestParam은 URL에 포함된 값을 읽어 들여 메서드 파라미터로 ..

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 타입이고..

비동기로 화면에 뷰 템플릿 추가하기화면에서 버튼을 눌렀을 때 새로운 요소가 보이게 하는 방법은 여러 가지가 있습니다.이 번에는 스프링, 스프링부트 프로젝트에서 비동기로 뷰 템플릿 파일 조각을 불러오는 방법을 정리해 보겠습니다. 에러 핸들링과 관련한 내용은 과감히 제외하고 에센셜 한 부분만 정리해 보겠습니다.클라이언트 요청먼저 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를 읽어내지 못해서 메시지 태그를 단순한 텍스트로 받아들입니다. 그래도 사용할 수 있는 방법이 있을 것 아니예요 이를 해결하..