본문 바로가기

전체 글192

[Spring] HandlerMethodArgumentResolver 사용하기 사용자 요청을 처리할 때, 요청 데이터를 메서드의 매개변수로 받아와야하는 경우들이 있다.(특정 헤더를 객체로 변환하거나, 쿠키나 세션에서 사용자 정보를 가져오는 등) 이 때 사용 가능한 것이 HandlerMethodArgumentResolver이다.공식문서를 찾아보면 아래와 같이 설명하고 있다.Strategy interface for resolving method parameters into argument values in the context of a given request. 말그대로 요청에서 메서드 파라미터(데이터)를 인자값(Argument values)로 변환해주는 전략 인터페이스이다.우리가 원하는 값을 추출하기 위해 직접 커스텀해서 사용할 수 있다. 요청 쿠키에서 "token" 값을 찾아 메서.. 2024. 5. 9.
[Spring] JWT 사용시 javax/xml/bind/DatatypeConverter 에러 현재 자바 17, 스프링 부트 3 버전을 사용하고 있다.사용자 로그인을 처리하고 JWT를 사용하기 위해 아래 의존성을 추가해주었다.implementation 'io.jsonwebtoken:jjwt:0.9.1' 그러나 JWT를 생성, 리턴하는 과정에서 javax/xml/bind/DatatypeConverter 예외가 발생했다. 해당 예외는 JWT를 생성하는 과정에서 javax.xml.bind.DataTypeConverter를 사용하는데, 이를 찾지 못해 발생한 에러이다. JDK 11부터 관련된 Java EE 모듈이 제거되었다고 한다. (아래 공식문서 내용 참고)Risks and AssumptionsJava EE modulesThe risk of removing the Java EE modules is th.. 2024. 5. 7.
[우아한테크코스] Lv. 2 - 3주차 회고: 페어 프로그래밍 지난 일주일은 3일간의 페어 프로그래밍을 진행한 시기였다.이번 페어 프로그래밍에서 여러가지로 느낀점이 많아서 그 내용을 정리해보고자한다. 1. 적극적인 소통이번 페어와 나는 둘 다 스프링을 활용한 프로젝트 경험이 있는 상태였다.페어는 전공자이기도 해서 나보다는 알고있는 범위와 깊이가 더 많았다. 그러다보니 이번 과제는 예상보다도 더 빠르게 진행할 수 있었다.게다가 페어 프로그래밍하는 시간들이 정말정말 재밌고 빠르게 지나갔다.왜 그랬을까 지금 생각해보면, '소통 방식' 때문이었던 것 같다. 분명히 페어가 나보다 알고있는 것들이 많음에도 불구하고 내 의견을 적극적으로 들어주었고,내가 모르는 개념이 있으면 해당 부분을 친절하고 자세하게 설명해줬다.나 또한 모르는 부분에 대해서 대충 넘어가는 것이 아니라 모르는.. 2024. 5. 6.
[Spring] DTO 검증하고 결과 알려주기 with @Valid, @ExceptionHandler 사용자가 방탈출 게임 예약을 등록하는 웹 애플리케이션이 있다고 하자.사용자로부터 예약 데이터를 받아올 때, 올바른 내용(형태)인지 검증하는 과정이 필요하다. '검증'이란, 사전적 의미 그대로 검사하여 증명하는 것이다.만약 예약자 이름에 아무런 데이터가 들어있지 않다면? 날짜 데이터의 형태가 잘못되어있다면?어떤 게임(테마)을 선택했는지 내용이 없다면? 애플리케이션이 기대한대로 동작하지 않아야한다. 이를 위해서는 먼저, 잘못된 데이터임을 검증할 수 있어야 한다.그리고 잘못된 데이터가 입력되었다는 것을 사용자에게 알려주어야 한다.이번 글에서는 사용자로부터 요청을 받아온는 DTO를 검증하고, 검증에 실패했을 때 예외를 처리하는 과정을 남겨보고자 한다. DTO 검증하기 검증은 여러 단계에서 수행될 수 있다. D.. 2024. 5. 3.
[우아한테크코스] Lv. 2 - 2주차 회고: 본격적인 스프링 사용 본격적인 미션이 시작되었다.페어로 진행했던 부분은 애플리케이션의 기본 뼈대를 구현하는 것이었고, 혼자 진행한 부분은 데이터베이스 연결을 비롯해서 최소한의 웹 애플리케이션으로써의 역할을 하기 위한 기능들이었다.지난주를 보내면서 느꼈던 점은 크게 두 가지이다.1. 애매하게 아는 것은 위험하다.작년에 자바, 스프링 기반의 부트캠프를 수료했다. 그래서 스프링 사용법을 어느 정도는 경험해 보았다.우테코에서는 처음부터 스프링의 모든 기능을 적용하는 것이 아니라 하나씩 점진적으로 적용시켜 나간다.그러다 보니 "여기에서 이런 기능을 썼던 것 같은데", "이 방법을 쓰면 더 편할 텐데"하는 생각이 나도 모르게 자꾸 들고 있다.여러 각도에서 생각해 보는 게 나쁜 것은 아니다.그러나 사용하는 명확한 이유 없이 단지 "그렇게.. 2024. 4. 29.
[Spring] Controller, Service 레이어에서 DTO의 사용 이번에 스프링 애플리케이션을 구현하면서 레이어드 아키텍처를 적용했다.계층간 데이터 전달 방법에 대해 고민하게 되었는데,내가 어떤 고민을 했고 어떻게 진행하고 있는지 정리해보고자 한다.  레이어드 아키텍처(Layered Architecture)우선, 레이어드 아키텍처에 대해 알아보자.소프트웨어 시스템을 관심사별로 여러개의 계층(레이어)으로 분리한 아키텍처를 말한다.크게 Presentation Layer, Service Layer, Data Access Layer 세 가지로 구분된다.크게 세개의 계층으로 나누는것은 유사하나 표현이 조금씩 다르게 사용되기도 한다.   각 레이어에 대해 자세히 살펴보면 다음과 같다. Presentation Layer: 사용자 인터페이스(UI)와 .. 2024. 4. 24.