본문 바로가기

restapi6

11. SAI(RestAPI) 사용 설명서 1. SAI는 어떻게 동작하나요? - SAI는 JWT를 기반으로 요청과 응답을 제공하는 RestAPI 서버입니다. - JWT는 회원가입, 일반 로그인에서 제공됩니다. a) Filter - 회원가입과 일반 로그인을 요청할 때에는 JWT를 기반한 검증을 수행하지 않습니다. - 그 외의 요청을 할 때에는 반드시 유효한 JWT를 쿠키로 보유하고 있어야 합니다. - 이 부분은 Filter를 이용하여 구현했습니다. - 아래의 코드는 JwtFilter 클래스의 한 부분입니다. @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException.. 2022. 9. 14.
10. 배포 완료 1. SAI의 RestAPI 서버를 소개합니다. https://restsai.herokuapp.com/sai-api Swagger UI restsai.herokuapp.com - 올해 6월에 시작하여, 4개월이 지난 오늘 드디어 프로젝트 SAI RestAPI 서버의 마침표를 찍었다. - 개발 기간은 4개월이지만, 여기까지 오는데 2년이 걸렸다. - 지난 2년 동안 매일을 실수하고 개선하고 실패하고 도전하고 배우고 연습하며 스스로의 멱살을 부여잡고 왔다. - 이전에 무언가 꾸준히 하는 것을 은은하게 달리는 것이라 표현했는데, 은은하기 보다는 꽤나 치열했다. - 이제 유종의 미를 거둘 시간이다. 좋은 결과가 있기를 바란다. 2022. 9. 14.
9. 개선사항(비즈니스 로직 제거, Exception Handler 적용, DataIntegrityViolationException 처리 방법) 0. 개요 - 우연한 기회로 SI 업체에 면접을 보러 가게 되었다. - 많은 기대는 하지 않았지만, 기대 이상으로 면접 경험이 좋았다. - 문답 형식의 이론 질문이 없었고 코드를 보여주고 해당 코드를 분석하는 방식의 면접이었다. - 확실히 다른 사람이 작성한 코드에서 그 맥락을 모른 체 문제점을 파악한다는 것은 아직은 쉽지 않다. - 면접에서 내가 작성한 사이(SAI)의 코드를 보면서 RestAPI, Java, Spring에 관련된 질문을 받았다. - 그 과정에서 몇 가지 프로젝트의 개선사항을 듣게 되었고 하나씩 개선해보았다. 1. 비즈니스 로직은 Service에서 처리하자. a) 고민은 개선의 시작 - 사실 SAI를 만들면서 방법론적인 고민을 많이 했다. - 그중 하나가 비즈니스 로직의 기준에 대한 고.. 2022. 9. 12.
8. 백엔드 개발 완료(OpenAPI 소개 및 문제해결 회고록) 0. 개요 - 포트폴리오를 개발하는데 매진하여 그동안 블로그를 신경 쓰지 않았다. - 백엔드 개발이 어느 정도 완성되었다. 그래서 이번 포스팅에서는 그동안의 결과물(OpenAPI)을 소개하고 개발 과정에서 겪었던 문제점과 해결방법에 대해 소개해보려 한다. 1. 프로젝트 구조(Structure) - 6월부터 SAI를 개발하고 있다. - 프런트와 연동 작업을 진행하면서 메서드가 추가될 수는 있으나, 전체적인 구조적 측면에서는 변동이 없으므로 현재 시점에서 SAI의 백엔드 구조를 소개한다. ├─ projectSAI/sai-backend/src ├── SaiBackendApplication.java ├── api │ ├── EventApiController.java │ ├── FriendApiController.. 2022. 9. 6.
API 조회 성능 최적화 - 컬렉션(Fetch Join, distinct) 0. 개요 - 이전 포스팅에서 DTO 변환을 이용한 컬렉션 조회 방법을 알아보았다. - DTO 변환 방법을 사용하여 컬렉션 조회 시, 다수의 SQL 문이 발행된다는 문제점을 확인하였다. - 이 문제를 해결하기 위해 Fetch Join을 이용한 컬렉션 조회 방법을 알아보자. 1. DTO 변환 + Fetch Join a) Fetch Join 쿼리 작성 - 우선 Fetch Join을 이용하는 쿼리를 작성해보자. - 쿼리는 다음과 같다. public List findAllWithItem() { return em.createQuery("select o from Order o " + "join fetch o.member " + "join fetch o.delivery " + "join fetch o.orderIte.. 2022. 6. 2.
API 조회 성능 최적화 - 컬렉션(DTO 변환) 0. 개요 - 이전 포스팅까지 Many To One 또는 One To One 관계에 대한 조회 방식을 알아보았다. - To One 관계는 Join 대상이 하나인 관계로, Fetch Join을 이용하여 N + 1 문제를 해결하였다. - To Many의 관계는 Join 대상이 다수인 관계로, 중복 데이터가 발생하는 문제를 가진다. - 이번 포스팅에서 To Many 관계를 조회할 때 발생하는 문제와 해결책에 대해서 알아보자. 1. 컬렉션 조회 시 DTO 변환 방식 a) 예시 코드 - 다음과 같이 DTO를 사용하여 컬렉션 조회를 수행하려고 한다. @RestController @RequiredArgsConstructor public class OrderApiController { private final Orde.. 2022. 6. 1.