이전에는 API 요청에 대한 응답으로 단순히 데이터만을 전달해주었다. 그러나 한 프로젝트에서 모든 API 요청에 대해 공통의 응답 형식을 가지도록 개발해달라는 요청을 받았다. 예를 들어 이전에는 아래와 같이 응답 데이터를 전달한 반면 { "categoryList": [ { "categoryId": 1, "type": "FOOD" }, { "categoryId": 2, "type": "TRAFFIC" }, { "categoryId": 3, "type": "RESIDENCE" } ] } 이제는 실질적인 데이터는 data 필드로 감싸고, timestamp, status, code, message 등의 필드를 추가한 공통 응답 형식을 가지도록 개발하는 것이다. { "timestamp": "2024-01-14 1..
Facade 패턴 적용 이유 Service가 Controller의 DTO에 의존 개인 프로젝트를 진행하고 있던 중 고민인 부분이 생겼다. 바로 Controller - Service - Repository 계층에서 요청 또는 응답 DTO가 어디까지 진입 가능할지, 어디서부터 만들어져 나갈지에 대한 것이다. (참고로 여기서 말하는 DTO는 계층 간 DTO가 아닌 사용자 요청으로부터 오는 DTO 혹은 사용자에게 응답으로 전달되는 DTO를 말한다. 즉 Controller의 인자 혹은 반환값으로 전달되는 DTO) 기존에는 해당 블로그를 참고하여 DTO가 Service Layer까지는 들어오고 해당 계층에서 나갈 수 있도록, Entity ↔ DTO 간 변환은 별도의 Mapper 클래스가 수행하도록 구현하였다. 따라..
API를 개발하다보면 클라이언트로부터 String 타입의 날짜 데이터를 전달받는 경우가 있다. 요청받은 날짜 데이터를 처리하기 위해서는 문자열 데이터를 LocalDate 또는 LocalDateTime과 같은 날짜 관련 타입으로 역직렬화해주어야 한다. 또는 LocalDateTime 타입의 객체를 클라이언트가 원하는 패턴으로 직렬화하여 전달해주어야 할 수도 있다. 스프링에서는 날짜 관련 클래스를 요청 및 응답으로 주고 받을 수 있도록 다양한 방법을 지원하며 크게 4가지 방법이 있다. 각각에 대해 자세히 알아보고 자신의 상황에 맞게 적절히 선택해보자. 앞으로의 예제에서 사용할 아래 요청 클래스는 스케줄을 생성하는데 사용되는 DTO로, 요청을 처리하기 위해서는 사용자가 보낸 "2023-11-22 14:00:00..
스프링 프로젝트에서 특히 관계형 DB를 사용하는 경우, 일반적으로 스프링 데이터 JPA + Querydsl의 조합을 사용한다. 사실 자바에서 관계형 데이터베이스와의 연결을 위해서는 JDBC(자바 프로그램 안에서 SQL을 실행하기 위해 데이터베이스를 연결해주는 응용프로그램 인터페이스)가 필요한데, 왜 JDBC가 아닌 JPA를 사용는지, 또한 Querydsl을 함께 사용했을 때의 이점은 무엇인지 간단히 알아보고자 한다. 단순히 Querydsl 설정이 궁금하신 분들을 스킵하고 링크로 바로 넘어가시길... What is ORM? ORM은 Object-Relational Mapping의 약어로, 말 그대로 '객체지향 패러다임을 사용해서 데이터베이스로부터 조회된 데이터를 조작할 수 있도록 하는 기술'을 의미한다. ..
- Total
- Today
- Yesterday
- Gitflow
- spring boot
- 단위 테스트
- Spring Security
- rest api
- 디자인 패턴
- facade 패턴
- C++
- github
- SSE
- Git
- Assertions
- junit5
- QueryDSL
- FrontController
- Transaction
- Java
- 서블릿 컨테이너
- servlet filter
- ParameterizedTest
- mockito
- Linux
- JPA
- 모두의 리눅스
- 템플릿 콜백 패턴
- vscode
- spring aop
- spring
- Front Controller
- 전략 패턴
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |