[스프링] Swagger세팅과 사용
·
스프링
스웨거는 현대 웹 서비스에서 자주 사용되는 REST API의 통신 규약을 문서화한 도구이다.프론트엔드와 백엔드는 이 문서를 기준으로 API 요청과 응답의 구조를 명확하게 공유할 수 있으며,프론트엔드는 스웨거 문서만 확인해도“어떤 상황에서 어떤 값을 보내야 하는지, 어떤 데이터를 응답받게 되는지”를 별도로 소통하지 않아도 파악할 수 있다. 따라서 이 글에서는 스웨거의 기본 개념과 설정 방법, 그리고 실제 사용하는 방식을 간단하게 정리해본다. 1. Swagger가 무엇일까Swagger(OpenAPI)는 REST API의 구조를 자동으로 분석하여 웹 UI 형태의 문서를 제공하는 도구다.별도의 수작업 없이 API를 시각적으로 정리해주기 때문에,프론트·백엔드 협업 효율을 높이고 API 관리의 일관성을 유지할 수 ..
[최적화] 수강신청 메인 페이지 성능 개선 (N+1, Redis)
·
최적화
수강신청은 모든 학생이 동시에 접속하는 순간적인 트래픽 집중 구간이다. 페이지가 잠깐만 늦어져도 학생 입장에선 수강 실패로 이어진다. 이 글은 수강신청 “메인 페이지”에서 발생한 N+1 문제를 추적·해결하고, Redis 캐시로 응답 시간을 더 줄여 실시간 트래픽을 버티도록 만든 과정을 정리했다. 1. 처음 문제: N+1이 실제로 어떻게 터졌나사용자에게 과목들을 보여주는 초기 코드는 단순했다.public List findCourses(CourseSearch courseSearch) { return courseRepository.findAll(courseSearch);}이때 화면에서는 과목(Course) 목록과 함께 교수(Professor)·강의계획서(Syllabus) 정보를 같이 보여줬다. JPA의 ..
[스프링] 파일 업로드
·
스프링
요즘은 스프링에서 파일 업로드가 너무 당연하게 된다.MultipartFile 한 줄이면 끝나니까, 딱히 어렵게 느껴지지도 않는다. 그런데 조금만 거슬러 올라가보면,예전에는 파일 업로드가 꽤나 복잡한 작업이었다고 한다.multipart/form-data 요청을 직접 파싱해야 했고,파일 이름과 데이터 경계를 바운더리(------abc123)로 일일이 나눠야 했다.업로드하려면 InputStream을 열고, 바이트 단위로 읽어서 디스크에 써야 했고,중간에 에러라도 나면 로그를 뒤적이며 원인을 찾아야 했다. 지금처럼 file.transferTo() 한 줄로 끝나는 시대가 오기까지스프링은 이 과정을 단계적으로 단순화시켜왔다.서블릿의 Part API → MultipartFile 인터페이스 → 파일 저장과 다운로드 관..
[스프링] API 예외 처리
·
스프링
API를 설계하다 보면 예외 상황을 처리해야 하는 순간이 반드시 찾아온다.웹 서비스라면 단순히 예쁜 오류 페이지 하나 보여주면 끝나겠지만,API 서버는 다르다.클라이언트와는 오직 JSON 형태의 응답으로 통신하기 때문에,예외가 발생했을 때도 단순히 페이지를 보여주는 대신,그에 맞는 JSON 형태의 오류 응답을 반환해야 한다.오늘은 그래서, API 예외 처리의 전체 흐름을 이해하고HandlerExceptionResolver를 직접 구현해보며 원리를 살펴보고,스프링이 기본 제공하는 예외 리졸버를 통해 자동 처리 방식을 확인하고,마지막으로 @ExceptionHandler와 @ControllerAdvice를 사용해실무에서 가장 효율적으로 예외를 처리하는 방법을 알아볼 것이다. 1. HandlerException..
[스프링] 예외 처리와 오류 페이지
·
스프링
사용자가 웹을 이용할 때 접근할 수 없는 페이지나 예기치 못한 오류가 발생했는데, 아무런 안내도 없이 브라우저 기본 오류 화면만 보게 된다면 불쾌감을 느끼게 될 것이다. 이는 곧 서비스 품질이 낮다고 평가받는 원인이 되기도 한다. 따라서 안정적인 웹 서비스를 제공하려면 사용자가 이해할 수 있는 오류 페이지를 준비해야 한다. 오늘은 서블릿에서 제공하는 오류 처리 방식과, 이를 훨씬 간편하게 해주는 스프링 부트의 오류 페이지 처리 기능을 비교하며 살펴볼 것이다. 1. 서블릿 방식 오류 페이지 처리(1) 오류 페이지 등록하기스프링 부트 환경에서 서블릿 컨테이너(내장 톰캣 등)를 실행할 때는, WebServerCustomizer를 통해 오류 페이지를 등록할 수 있다.@Componentpublic class We..
[스프링] 로그인 처리 3 - 스프링 인터셉터(Interceptor)
·
스프링
앞에서 살펴본 서블릿 필터는 웹 애플리케이션의 수문장 역할을 하며, 로그인 여부 검증이나 공통 로직 처리에 유용했다.그런데 서블릿 필터는 서블릿 기술이 제공하는 기능이고, 스프링 MVC 안쪽과는 다소 거리가 있다.오늘은 스프링 MVC가 제공하는 또 다른 수문장, 스프링 인터셉터에 대해 알아볼 것이다.스프링 인터셉터는 필터와 유사하지만, MVC 구조와 더 밀접하게 동작하며 훨씬 정교하고 편리한 기능을 지원한다. 1. 스프링 인터셉터란 무엇인가스프링 인터셉터는 디스패처 서블릿과 컨트롤러 사이에서 동작한다.흐름을 그림으로 나타내면 다음과 같다.HTTP 요청 → WAS → 필터 → 서블릿(DispatcherServlet) → 스프링 인터셉터 → 컨트롤러즉, 필터는 서블릿 이전, 인터셉터는 서블릿 이후, 컨트롤러..