Spring
Spring의 API 예외 처리
개요 이전 글에서 오류와 예외처리에 대한 설명을 진행했다. https://hyeophyeop.tistory.com/150 이전 글은 BaseController에 대한 설명이었으며 개발자는 편하게 error 페이지를 관리할 수 있다는것이 핵심이었다. 하지만 API의 예외 처리는 다르다. HTML 페이지는 4xx, 5xx 오류 페이지만 있으면 대부분의 오류 문제를 해결할 수 있으나 API는 그렇지 않다. 왜냐하면 API는 각 서버와 연동을 하기 때문에 오류 응답 스펙이 다향하며 JSON 데이터로 응답을해줘야 하기 때문이다. 이 글에서는 복잡한 API 예외 처리를 효율적으로 처리하기 위한 ExceptionResolver에 대햇 설명하며 해당 내부기술이 어떻게 동작하는지와 사용법에 대해 설명한다. Spring의..
Spring의 예외처리와 오류페이지
예외 처리랑 오류 페이지를 만드는 작업을 왜 해야 하나요? 웹 사이트 이용시 비정상적인 접근을 할 경우 서버에서 오류 페이지를 반환받은 경험이 있을것이다. 위와 같은 상황에서 개발자는 사용자에게 정상적인 요청이 이루어지지 않은 이유를 알려줘야 할 필요가 있다. Spring은 이러한 오류처리를 편리하게 제공한다. 이 글에서는 Spring의 예외 처리와 오류페이지에 대해 설명하며 이러한 동작을 할 때 내부원리의 동작과정에 대해서 설명한다. 스프링의 예외처리는 어떻게 진행되나요? 스프링은 ErrorPage를 자동으로 등록한다. src/main/resources/error 경로의 HTML 파일을 오류 반환 HTML로 설정한다. 파일 이름을 오류 번호대로 해야한다. ex:)300.html, 3xx.html, 40..
Spring의 필터와 인터셉터
필터와 인터셉터란? 인증과 보안이 필요한 사이트에서 해당 서비스를 사용할 수 없어야한다. 스프링에서는 인터셉터와 필터를 통하여 검증로직을 작성할 수 있다. 필터는 서블릿 자체의 기술이며 스프링이 서블릿 기반의 기술이기 때문에 필터를 사용할 수 있는것이다. 인터셉터는 스프링 자체의 기술이다. 즉 스프링은 서블릿 기반의 기술이므로 검증을 할 수 있는 수단이 2가지가 있는것이다. 필터와 인터셉터의 흐름 필터와 인터셉터의 전체적인 흐름은 아래와 같다. HTTP요청 -> WAS -> Filter -> Servlet -> Intercepter -> Controller 필터는 서블릿에 도달되기전에 검증로직을 수행한다. 인터셉트는 컨트롤러에 도달하기전에 검증로직을 수행한다. 필터는 아래와 같은 인터페이스를 통해서 구현..
Spring의 쿠키,세션
1. 개요 이번 글에서는 고객들의 로그인 상태를 지속적으로 유지시키기 위한 방법을 다룬다. 고객들의 정보를 지속적으로 유지시키기 위해서는 쿠키의 개념이 필요하다. 쿠키의 고질적인 문제를 파악하고 이를 해결하기 위한 세션의 등장개념을 이해하도록 하고 스프링에서의 세션을 어떻게 적용하는지 확인해보자 쿠키가 생성되는 전체 흐름 서버에서 로그인에 성공하면 HTTP 응답을 통해 Server에 접속한다. 접속에 성공한 이후 현재 쿠키가 존재한다면 해당 쿠키를 반환하고 없을 경우 Server에서 생성해서 보내준다. 클라이언트가 쿠키를 가지고 있다면 Server에서는 별도의 login 로직을 거치지 않기 때문에 속도, 성능 측면에서 이점을 가져갈 수 있다. 이런 쿠키에는 2가지의 종류가 있다. 영속 쿠키: 만료 날짜를..
Spring의 Bean Validation
1.Bean Validation 소개 이전 Validation에 대한 글을 작성할 때 검증 로직이 굉장히 복잡한것을 알 수 있다. https://hyeophyeop.tistory.com/145 Spring의 Validation이란 Spring_Boot_Study/4.spring-MVC2/message at master · NamHyeop/Spring_Boot_Study GitHub - NamHyeop/Spring_Boot_Study: Spring 공부를 하며 기록한 자료들입니다. Spring 공부를 하며 기록한 자료들입니다. C.. hyeophyeop.tistory.com 이런 복잡한 로직을 Spring에서는 Bean Validation을 통해 간단하게 검증을 할 수 있다. 아래의 복잡한 이전 코드와 S..
Spring 메시지, 국제화
Spring_Boot_Study/4.spring-MVC2/message at master · NamHyeop/Spring_Boot_Study GitHub - NamHyeop/Spring_Boot_Study: Spring 공부를 하며 기록한 자료들입니다. Spring 공부를 하며 기록한 자료들입니다. Contribute to NamHyeop/Spring_Boot_Study development by creating an account on GitHub. github.com 1.메시지 국제화 소개 메시지는 아래와 같이 Message.propertis에 내용을 관리하면서 수정에 용이하게 만드는것을 의미한다. //messages_kr.properties item=상품 item.id=상품 ID item.itemN..
Spring의 Validation이란
Spring_Boot_Study/4.spring-MVC2/message at master · NamHyeop/Spring_Boot_Study GitHub - NamHyeop/Spring_Boot_Study: Spring 공부를 하며 기록한 자료들입니다. Spring 공부를 하며 기록한 자료들입니다. Contribute to NamHyeop/Spring_Boot_Study development by creating an account on GitHub. github.com 1.검증이 필요한 이유 사용자가 잘못된 입력값을 넣었을 경우 정상적인 요청인지 검증을 해야한다. 만약 검증을 안할 경우 아래와 같은 상황이 발생할 수 있다. 만약 이름 입력란에 공백을 넣고 입력했는데 이름이 입력되지 않았습니다가 출력이 ..
Spring MVC 구조 및 구현
개요 얼마전에 네이버에서 기술 면접을 보게 되었는데 질문으로 MVC 패턴에 대해서 설명해달라는 질문을 받게 되었다. 설명은 했으나 너무 오래전에 학습해서 내가 알고있는 전부를 제대로 전달하지는 못한거 같아서 글로 다시 정리해볼려고 한다. 1.스프링 MVC 전체 구조 스프링의 MVC 구조는 간단하게(?) 아래와 같은 구조로 이루어져있다. 먼저 Http 요청이 이루어진다 이후 DispatcherServelet의 doDispatch()가 실행된다. 현재 스프링 부트의 핸들러 매핑 정보를 탐색한다. handler 동작을 수행해줄 Adapter의 정보를 보고 handler 동작을 수행할 수 있는 Adapter가 존재한다면 반환하게 된다. 다시 DispatcherServlet으로 돌아온뒤 3번에서 받아온 Contr..
스프링 빈 기능
스프링 컨테이너와 스프링 빈 1.스프링 컨테이너 생성 목표 Spring의 @Bean 기능을 사용하여 스프링 컨테이너에 등록하는 연습을 해보자 Spring의 ac.getBean(), ac.getBeanDefinitionNames(), ac.getBeanDefinitionName() 기능을 사용해보자 Configuration을 사용해 Contatiner에 Bean을 저장하는 방법을 수행해보자 //AppConfig.class import bluish_Community_Projcet.bluish.discount.DiscountPolicy; import bluish_Community_Projcet.bluish.discount.RateDiscountPolicy; import bluish_Community_Projc..
Spring의 종류와 장점
1.스프링이란? 스프링의 종류 스프링 프레임워크(지원 기술 대상을 알아보자) 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타 웹 기술 : 스프링 MVC, 스프링 WebFlux 데이터 접근 기술 : 트랜잭션, JDBC, ORM 지원, XML 지원 기술 통합 : 캐시, 이메일, 원격 접근, 스케쥴링 테스트 : 스프링 기반 테스트를 지원한다 언어 : 코틀린, 그루비 스프링 부트란? 스프링을 편리하게 사용할 수 있도록 지원한다. 단독으로 실행할 수 있는 스프링 애플리케이션을 생성한다. Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치할 필요가 없다. 손쉬운 빌드 구성을 위한 starter를 제공한다. 스프링과 외부 라이브러리를 자동으로 구성해준다. Spring과 타 라이브러리의 버전을 전부..
좋은 객체 지향 설계의 5가지 원칙(SOLID)
개요 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리한것 1.SRP: 단일 책임 원칙(single responsibility principle) 한 클래스는 한나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적은 단일 책임 원칙을 잘 따르는 것이다. 예) UI변경, 객체의 생성과 사용을 분리 2.OCP: 개방-폐쇄 원칙 (Open/closed principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 위의 문장은 모순이 존재한다. 다형성을 활용해서 생각해보자 인터페이를 구현한 새로운 클래스를 만들어서 새로운 기능을 구현해보자 ..