전체 글 342

[Spring MVC] @Valid / @Validated

Spring MVC를 학습하는 도중에 @Valid와 별개로 @Validated를 추가하는 이유가 궁금해서 찾아보았다. 결론부터 얘기하자면 @Valid와 @Validated를 같이 사용하는 이유는 위 코드의 CoffeeController 클래스의 모든 메서드에 대해서 Spring의 제약 조건을 사용하여 데이터 유효성 검사를 수행하기 위해서이다. @Valid와 @Validated 애너테이션은 모두 메서드 파라미터에 적용되며, 메서드의 파라미터로 들어오는 입력 값의 유효성 검사를 수행하는 Spring Framework 애너테이션이다. @Valid 애너테이션은 Java Bean Validation API를 사용해서 데이터 유효성 검사를 수행하는데, 만약 입력 값이 제약 조건과 일치하지 않으면 'MethodArg..

[프로그래머스] 문자열 내 마음대로 정렬하기

import java.util.*; class Solution { public String[] solution(String[] strings, int n) { String[] answer = new String[strings.length]; ArrayList arr = new ArrayList(); /* n번째 인덱스를 추출해서 맨 앞에 붙인 ArrayList 생성해서 n번째 인덱스가 같은 경우 사전순으로 문자열 배치 (제한 조건 만족) */ for (int i = 0; i < strings.length; i++) { arr.add("" + strings[i].charAt(n) + strings[i]); } // 리스틀르 오름차순으로 정렬한 다음 맨 앞의 문자만 빼고 arr에 넣기 Collections...

[Spring MVC] @Rest + @Controller/@ControllerAdvice

@Controller / @RestController Spring에서 컨트롤러를 지정해 주기 위한 애너테이션은 @Controller와 @RestController가 있다. @Controller는 클래스를 SpringMVC 컨트롤러로 표시하는 데 사용되며, 주로 사용자의 요청을 처리하고 난 후 정해진 뷰에 객체를 넘겨주는 역할을 한다. @Controller는 전통적인 Spring MVC 컨트롤러이며, @RestController는 RESTful 웹 서비스 컨트롤러이다. Spring은 @Controller에 @ResponseBody를 추가해서 @RestController를 도입했으며, 이 둘은 HTTP Response Body가 생성되는 방식에 차이가 있다. @Controller는 Model 객체를 만들어 ..

Spring Boot DB 오류(Failed to configure a DataSource)

스프링 프레임워크를 이용해서 프로젝트를 새로 생성하고 실행시켰을 때 아래와 같은 오류가 발생했다. 찾아보니까 Failed to configure a DataSource 에러가 발생하는 이유는 Database에 연결할 때 필요한 정보가 없어서 발생한 것이며, 이러한 문제 말고도 application.properties나 application.yml과 같은 설정 파일을 삭제하거나 위치를 옮겼을 경우에도 볼 수 있는 현상이라고 한다. 나의 경우에는 뭘 건들지도 않았으니 start.spring.io에서 프로젝트 생성할 때 MySQL Driver 의존성 설정으로 인해 발생한 것이 아닐까라고 추측해본다..., 해결방법 1. DataSourceAutoConfiguration 제외 (나는 연습용 프로젝트라 서버가 당장..

[Spring MVC] DTO

DTO(Data Transfer Object)란, 계층간의 데이터 교환을 위해 사용하는 객체이다. 데이터 전송은 클라이언트에서 서버 쪽으로 전송하는 요청 데이터, 서버에서 클라이언트 쪽으로 전송하는 응답 데이터 형식으로 클라이언트와 서버 간에 데이터 전송이 이루어지는데 여기서 DTO를 사용할 수 있다. DTO를 사용하는 이유 코드의 간결성 : DTO 클래스를 통해 클라이언트의 요청 데이터를 하나의 객체로 전달 받을 수 있기 때문에 코드가 간결해진다. 데이터 유효성(Validation) 검증의 단순화 : 유효성 검증 로직을 DTO 클래스로 빼내서 핸들러 메서드의 간결함을 유지할 수 있다. 필요한 데이터만 응답으로 줄 수 있다. : Entity 자체를 클라이언트에 대한 응답으로 넘기면 개인 정보같은 민감한 ..

[Spring MVC] DispatcherServlet

DispatcherServlet은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아서 적합한 컨트롤러에게 위임해주기 때문에 프론트 컨트롤러(Front Controller)라고 할 수 있다. Spring MVC의 요청 처리 흐름을 보면 DispatcherServlet이 애플리케이션의 가장 앞단에 배치되어 다른 구성요소들과 상호작용하면서 클라이언트의 요청을 처리하는데, 이러한 패턴을 프론트 컨트롤러 패턴(Front Controller Pattern)이라고 한다. 개발자가 컨트롤러를 구현만 해두면 DispatcherServlet이 알아서 적합한 컨트롤러로 위임해주기 때문에 매우 편리하다. Spring MVC의 요청 처리 흐름 클라이언트가 요청을 전송하면 DispatcherServlet이라는 클래스에 요..

정규 표현식(정규식)

정규 표현식(regular expression, regexp)은 프로그래밍에서 문자열을 다룰 때, 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다. 주로 프로그래밍 언어에서 문자열의 검색과 치환을 위한 용도로 사용된다. 일반적인 조건문으로는 복잡한 코드도 정규 표현식을 이용하면 간단하게 표현할 수 있지만 정규 표현식을 숙지하고 있지 않다면 이해하기 힘들다. 다음은 정규 표현식의 용어들이다. ^ : 문자열의 시작을 의미한다. $ : 문자열의 끝을 의미한다. * : * 앞에 평가할 대상이 0개 이상인지를 평가한다. \s : 공백 문자열을 의미한다. \S : 공백 문자열이 아닌 나머지 문자열을 의미한다. ? : ? 앞에 평가할 대상이 0개 또는 1개인지를 의미한다. + : + 앞에 평가..

개발 일지/etc 2023.02.14

[Spring MVC] Spring MVC

Spring MVC는 클라이언트의 요청을 편리하게 처리해 주는 프레임워크이다. Spring의 모듈 중에는 웹 계층을 담당하는 몇가지 모듈이 있는데, 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈을 spring-webmvc라고 한다. 이 Spring Web MVC를 줄여서 Spring MVC 또는 Spring MVC Framework라고 부른다. 이 모듈을 사용해서 백엔드 프로그래밍의 기본 프레임워크를 잡으면 개발자가 해야 할 영역을 더 적게 만들어줌으로써 기존의 Spring 보다 더 깔끔하고 간편한 개발이 가능하다. Spring MVC에서 M은 Model, V는 View, C는 Controller를 의미한다. Model Spring MVC 기반의 웹 애플리케이션이 클라이언트의..