아직 작성중인 글입니다 :) 불완전한 내용이 포함되어 있을 수 있습니다 ✔️
스프링에서 오류를 처리하는 방법은 아래의 2가지가 있습니다
스프링은 컴포넌트의 이름을 의인화를 많이함
먼저 서블릿 컨테이너의 오류 처리 전략부터 알아보자
웹 애플리케이션에서 오류가 발생하면 BasicErrorController가 해당 오류를 캐치하여 처리하게 된다. 이 컨트롤러는 오류 페이지도 제공하는데 이 error controller 는 errorviewresolver, errorattributes 로 구성되어있고 스프링 내부적으로 잘 짜여진 에러 처리 전략을 가지고 작동한다고 합니다
ErrorAttributes를 적절히 이용하면 사용자 친화적인 에러 처리가 가능합니다. 특히나 데코레이터 패턴을 활용하면 가능하다고 합니다
데코레이터 패턴이란?
- 주어진 상황 및 용도에 다라 어떤 객체에 책임을 덧붙이는 디자인패턴
- 책임을 덧붙일때 상속, 합성을 사용(합성이 권장됨)
따라서 이번 강의에서 DefaultErrorAttributes 를 합성해서 ReadableErrorAttributes 라는 사용자 친화적인 에러 처리를 위한 클래스를 만들었습니다
MessageSource 기반으로 에러 메시지를 가공하는 방법에 대해서도 배웠습니다
이 모든 과정을 거치며 역시나 중요한 것은 변경에는 닫혀있지만 확장에는 열려있다(OCP) 라는 것을 깨달았습니다
국제화는 소프트웨어가 언어 및 문화권 등이 다른 여러환경을 지원할 수 있도록 소프트웨어를 설계하는 것
지역화는 소프트웨어를 각 환경에 대해 지원하는 것을 의미하며 언어외에도 문자열 출력형식, 화폐, 날짜, 측정 단위, 타임존, UI, OS/플랫폼 등 다양한 요소를 고려해야한다
그 중에서도 국제화에 대해 살펴보자
웹 환경에서는 Accept-Language 콘텐트 협상 매커니즘을 기반으로 작동합니다
예를 들어 Accept-Language : en-US
는 영어 국가권의 미국꺼를 달라는 의미입니다
한편 앞서 말한 MessageSource는 국제화를 염두에 두고 설계되었다고 합니다.
따라서 messages.properties
, messages_ko.properties
, messages_en.properties
처럼 언어별로 설정파일을 달리하면 스프링부트의 설정에 의해 웹서버의 언어 설정에 따라 에러메시지가 출력된다고 합니다
인증단계는 사용자의 신원을 확인(학교 통과시 학생증 보여주는 과정)
인가단계는 신원이 확인된 사용자에게 리소스에 접근할 수 있는 권한을 부여(학교 안에서 허가된 곳만 들어갈 수 있다, 어디에 접근할 수 있는 권한이 없다 - 인가)
로그인 과정에서 사용자를 찾지 못했거나 비밀번호가 틀렸으면 아래와 같이 ExceptionHandler 애노테이션을 활용해 에러 처리를 진행하는 과정을 경험
서버와 클라이언트 간의 데이터 통신 방식에는 크게 3가지가 존재합니다
- 폴링 방식(클라이언트에서 1초에 한번씩 폴링(찌름)) - 서버가 힘들어함
- 롤폴링 - 서버에 요청을 하면 서버가 커넥션을 가지고있다가 응답해줄게 있으면 응답해주고 특정 시간이 지나면 연결끊음(약10초) - 서버가 커넥션을 물고있어야한다는 단점, 커넥션이 비효율적, 유저가 백만명이 되면 서버의 개수가 많아야함
- 푸쉬기술(현재- SSE)- 서버에서 클라이언트로 데이터를 보내줌
SSE 기술은 마지막 푸쉬기술을 활용한 예제로 이 기술도 수업시간에 다뤘다
모바일클라이언트환경에서는 세션,쿠키를 쓰기가 어렵기 때문에 토큰을쓰는게 합리적이며
웹 환경의 경우 세션과 세션스토리지를 쓰면 훨씬 효율적일 수 있다는 의견도 들었습니다
따라서 인증방식을 처리할때는 다양한 방식들을 검토해보고 명확하게 사용해야한다