
지금까지 자칭 'REST API'라는 것들을 구현해왔지만 REST API가 정확히 뭐야? 라고 질문한다면 제대로 답하지 못할 것이다. 그러던 와중 그런 REST API로 괜찮은가 라는 컨퍼런스 영상을 보게 되었다. 내가 지금까지 만들어온 API가 REST하지 않았다는 것을 깨닫게 되었다. REST API의 제약조건에는 다음 6가지가 있다. API가 HTTP 프로토콜을 따른다면 대부분의 제약조건을 만족시키지만 문제는 굵은 글씨로 표시한 uniform interface 라고 한다. client-server stateless cache uniform interface layered system code-on-demand (optional) uniform interface 또한 하나의 아키텍처 스타일로 다음의 ..

이전에는 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..

부모 엔티티 삭제 시 자식 엔티티를 어떻게 처리할지 따로 지정해주지 않으면, 다음과 같이 DB 상에서 FK 제약 조건을 위반했다는 오류를 뱉으면서 요청 처리에 실패하게 된다. 부모 엔티티를 삭제하는 경우 자식 엔티티를 어떻게 처리할지에 대해서는 구현하고자 하는 어플케이션의 비즈니스 로직에 따라 다를 것이다. 예를 들어 게시글을 삭제하는 경우 해당 글에 포함된 댓글 역시 모두 삭제해야 하는 반면, 어느 회사 내의 팀이 해체된다면 즉 팀이 삭제되는 경우에는 해당 팀에 속한 사원들의 정보는 삭제하지 않고 해당 사원의 소속팀 값을 NULL 또는 "무소속" 등과 같은 기본값으로 수정해주어야 한다. Spring Data JPA는 이렇게 부모 엔티티 삭제 시 자식 엔티티는 어떻게 처리할지에 대해 여러 옵션을 제공한다..

API를 개발하다보면 클라이언트로부터 String 타입의 날짜 데이터를 전달받는 경우가 있다. 요청받은 날짜 데이터를 처리하기 위해서는 문자열 데이터를 LocalDate 또는 LocalDateTime과 같은 날짜 관련 타입으로 역직렬화해주어야 한다. 또는 LocalDateTime 타입의 객체를 클라이언트가 원하는 패턴으로 직렬화하여 전달해주어야 할 수도 있다. 스프링에서는 날짜 관련 클래스를 요청 및 응답으로 주고 받을 수 있도록 다양한 방법을 지원하며 크게 4가지 방법이 있다. 각각에 대해 자세히 알아보고 자신의 상황에 맞게 적절히 선택해보자. 앞으로의 예제에서 사용할 아래 요청 클래스는 스케줄을 생성하는데 사용되는 DTO로, 요청을 처리하기 위해서는 사용자가 보낸 "2023-11-22 14:00:00..
- Total
- Today
- Yesterday
- 템플릿 콜백 패턴
- mockito
- 단위 테스트
- github
- SSE
- 서블릿 컨테이너
- Assertions
- rest api
- ParameterizedTest
- 전략 패턴
- Java
- FrontController
- Front Controller
- Gitflow
- 모두의 리눅스
- Linux
- 디자인 패턴
- spring boot
- vscode
- C++
- servlet filter
- Git
- facade 패턴
- JPA
- QueryDSL
- junit5
- spring
- Transaction
- Spring Security
- spring aop
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |