본문 바로가기

Back/Spring

(5)
DTO에 무엇을 담아야 적절할까? 자바 - 스프링 프레임워크 혹은 스프링 부트를 기반으로 사용했다면 DTO, VO, Entity 등 필요한 값만 정의한 객체를 흔히 봤을 것이다. 만드는 것은 정말 단순하지만, 응용하기에 따라서 DTO, Entity 등 영속성과 변동성 문제 때문에 역할을 나누는 등 DTO 하나를 가지고 여러 방법으로 정의할 수 있다. 내가 실질적으로 여러 번 만드면서 고민한 것은, 과연 DTO에는 어떤 값이 들어가야 적절한가? 이것이다. 1. DTO 기존에는 로직처리에 들어가는 모든 값을 담으면 객체 하나로 필요한 변수를 모두 파악할 수 있으니 편하리라 생각했다. 하지만 기존에 딱 전달할 데이터만 담아서 만든 프로그램의 경우는 위와 같은 방법으로 하면 왜 필요도 없는 정보를 DTO에 담는지 의문이 든다는 말을 들었다. 확..
Spring framework는 기본적으로 String 타입을 사용한다 Spring 기반 Java 앱에서는 반환받는 타입의 값이 무엇인지 딱히 고민한 적이 없었다. 일반적으로 String 타입이겠거니 하면 다 맞았다. 사칙연산을 사용하거나 수학적인 계산이 필요하다면 그 때만 Integer, int 타입을 사용했다. 그런데 왜 String이 기본 타입일까? 스프링은 기본적으로 프로퍼티 값을 BeanFactory 구성 파일에서 가져온다. 구성 파일 내부에서는 일반적으로 쌍따옴표로 값을 표현한다. 반환하는 값도 기본적으로 String 타입이다. 따라서 String이 Spring 기반 Java 앱의 기본 타입으로 사용되는 것이다! ========= 전문가를 위한 스프링 5를 읽다가 알게 된 사실이다. 역시 책을 읽으면 당연하게 여겼던 것도 왜 그렇게 작동되는지 알게 되니 돈이 아깝..
서비스 디스커버리, 서비스 레지스트리 패턴이란? 마이크로서비스를 공부하다 보면, 서비스 자체보다 그 기반 서비스에 대한 다양한 패턴이 이해가 안 될 때가 많다. 그 중에서 가장 시작점이 되는 서비스 레지스트리 및 서비스 디스커버리 패턴에 대해서 간단하게 알아보고자 한다. 1. 서비스 디스커버리 패턴 클라우드 기반 마이크로서비스 패턴에서는 다양한 클라이언트에 대응하는 단 하나의 진입점을 생성하는 API GATEWAY 패턴을 사용한다. API GATEWAY는 어떤 서비스를 호출하라는 요청을 받는다면, 그 서비스를 호출하기 위한 두 가지 절차가 필요하다. 최적 경로를 찾기 위한 라우팅. 부하 분산을 위한 로드밸런싱. 두 가지를 활용하여 서비스 호출에 대한 요청을 응답하는 것이 서비스 디스커버리 패턴이다. 2. 서비스 레지스트리 패턴 최적 경로를 찾기 위해서..
[Spring] MediaType에 text/plain; utf=8;은 어떻게 적용할까? MediaType을 사용하여 consumes, produces에 오타없이 상수를 적용할 수 있다. 하지만 text/plain;charset=UTF-8; 이건 해당하는 상수가 없다. 반드시 적용해야 한다면 찾아보니 현실적으로 쓸 이유가 있는 건 하나 밖에 보이지 않았다. MediaType의 valueOf() 메서드를 사용하는 것이다. MediaType.valueOf("text/plain;charset=UTF-8;") 하지만... 굳이 저렇게 쓰라고 할 이유가 있을까? 단순히 패턴을 통일한다는 점 외에는, MediaType을 반드시 붙여야하는 근거를 말하기 어렵다. 설득하기 어려우니 아마도 안 쓸 것 같다.
[에러-잡기] @ExceptionHandler를 통한 예외 처리 에러 핸들링에 대해서 공부하는 와중에 정말로 이해하고 쉬운 예시를 보여주는 블로그를 찾았다. 이론 정리도 할 겸 해당 블로그 주소와 함께 예시를 가져와 봤음. 스프링 공식 문서를 정리한 것이라고 한다. @ExceptionHandler를-통한-예외처리 [스프링부트] @ExceptionHandler를 통한 예외처리 @ExceptionHandler는 Controller계층에서 발생하는 에러를 잡아서 메서드로 처리해주는 기능이다.Service, Repository에서 발생하는 에러는 제외한다.간단한 예시부터 살펴보자.이렇게 @Controller로 선언된 클 velog.io 큰 틀에서 보자면 기존 방식 >> 새로운 방식으로 전환하는 방향으로 예시가 적혀있다. 컨트롤러 내부에서 발생한 에러를 컨트롤러에서 매번 처리..