본문 바로가기

프레임워크

(35)
Spring Boot는 Run시에 무엇을 할까 - Spring AOP Spring boot는 Run시에 BeanFacotory에 Bean Scope가 SingleTon인 객체들에 대해 SingleTon 패턴으로 객체들을 생성한다. 그렇다면 그 이후는 어떻게 될까? Proxy? 우리는 Spring Framework를 사용하며 아무 생각없이 코드 중간에 Throws 라는 키워드를 사용하여 Exception을 발생시키고는 한다. 그렇다면, 그 키워드가 발생할때 Exception을 어떻게 처리하는지에 대해 생각해봐야 한다. ProxyFactory 위에서 볼수 있듯이, ProxyFactory는 JDK 동적 프록시인지, CGLIB인지 선택해서 Proxy객체를 생성하는 역할을 담당한다. JDK동적 프록시 vs CGLIB는 다음 글을 참고하자. https://ptrsr.tistory.c..
프레임워크란? 프레임워크란? 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것. 라이브러리 vs 프레임워크 가장 대중적인 차동차를 기반으로 설명해보겠습니다. 라이브러리 라이브러리란 자주 사용되는 로직을 재사용하기 편리하도록 잘 정리한 일련의 코드들의 집합. 라이브러리는 자동차의 기능을 하는 부품을 의미합니다. 프레임워크 프레임워크는 자동차의 프레임, 즉 기본적으로 구성하고 있는 뼈대를 말합니다. 한 번 정해진 자동차의 프레임은 바꾸질 못합니다. 소형차를 만들기 위해 뼈대를 사용하는데, 이 뼈대로 SUV를 만들 수는 없습니다. 그러나 바퀴나, 선루프, 헤드라이트 등은 비교적 다른 종류로 쉽게 바뀔 수 있습니다. 이게 라이브러리와 프레임워크의 차이입니다...
Spring 주절주절(지속적 업데이트) 오늘은 Spring에 대해 알고 있는 내용들을 주절주절 써보려고 한다. Spring의 특징 환경 스프링이랑 뭘까? 스프링의 환경이란 뭘까? 스프링이란 왜 필요할까? 주어진 모든 상황에 왜 라는 물음을 던지며 시작하려 한다. 왜 Spring boot를 쓸까? spring boot를 사용하며, 왜 spring boot를 쓸까? 아니 모든 내가 사용하는 모든 것들에 대해서 왜 쓸까 라는 물음을 가져야 해야 한다고 생각한다. 언제나 당연한건 없다고 생각하기 때문이다. 왜 쓸까? 내가 생각했을때, 스프링 부트를 사용하는 원인은 5가지이다. Java라는 언어 비교적 사용하기 쉬운 프레임워크 IOC / DI로 이어지는 스피링의 특징(객체지향적) 풍부한 생태계 멀티 쓰레드 환경( 동반되는... 동시성 문제... ) J..
throws시 어떤 일이 발생될것인가 ? 가정 서비스 내에서 Throws를 발생시킨다. 그 Throws를 잡는 Controller @ExceptionHandler가 존재한다. 이제 내가 한 코드를 예를 들어서 설명해보겠다. 과정 Proxy객체의 throw ex.getTargetException() 함수를 호출한다. Dispatcher Servlet객체까지 올라가 processDispatchResult() 함수를 호출한다. Handler Exception을 처리하기 위한 processHandlerException()을 호출한다. resolver의 resolveException()을 호출한다. handlerExceptionResolver가 resolveException()함수를 호출한다. exceptionHandlerMethod.invokeAndH..
Spring Validation과 JsonSerializer<Errors> 목적 스프링은 비즈니스 로직에만 집중할수 있도록 애플리케이션 전 계층에서 도메인 객체를 검증할수 있는 인터페이스를 제공한다. Validator Interface Spring은 도메인 객체를 검증할 수 있도록 Validator 인터페이스를 도입했다. Validator 인터페이스는 객체를 검증하는데 실패하면 Errors 객체에 에러를 등록함으로써 동작한다. 예시 supports(Class): 매개변수로 전달된 클래스를 검증할 수 있는지 여부를 반환 validate(Object, org.springframework.validation.Errors): 매개변수로 전달된 객체를 검증하고 실패하면 Errors 객체에 에러를 등록한다. validator의 validate함수에서 reject 함수를 호출하면 Bindi..
Spring hateoas Spring Hateoas란? HATEOAS는Hypermedia As The Engine Of Application State의 약자로 서버가 클라이언트에게 하이퍼 미디어를 통해 정보를 동적으로 제공해주는 것입니다. API에서 리소스에 대한 어떤 행동을 할수 있는지 URL을 통해 전달하여 클라이언트가 참고하여 사용할수 있도록 합니다. 예를 들면, 리스트를 전달할때 각 리스트안에 요소에 self_url을 전달하여 보내는 것입니다. 이러한 메시지를 표현하기 위해서 헤더의 Content Type을 application/hal_json으로 전달하면 클라이언트에서는 _link필드에 링크정보가 있다고 예상할수 있습니다. 예시 사용법 의존성 추가하기 org.springframework.boot spring-boot-..
@Repository자리와 @Service자리를 바꾼다면? Annotation 메타데이터란? Annotation(@)은 사전적 의미로는 주석이라는 뜻이다. 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다. 즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다. 그렇다면 @Service ? @Repository ? 위에서 말했다싶이 추가적인 정보 제공에 의미를 두어야 한다. 기본적으로, 개발자는 문제가 발생하면 빠르게 문제 원인을 찾고 판단하여 해결하여야 한다. 그러기 위해서는 각 패키지별로 역할을 나누어야 한다. 각 비즈니스 로직과 관련된 로직은 @Service annotation을 사용한 Service 패키지에 위임하고, DB 접근과 관련된 부분은 Repository 패키지에 위임한다...
예외 처리 @ControllerAdvice Controller를 작성할 때는 메서드의 모든 예외사항을 전부 핸들링해야 한다면 중복적이고 많은양의 코드를 작성해야 하지만, AOP 방식을 이용하면 공통적인 예외사항에 대해서는 별도로 @ControllerAdvice를 이용해서 분리하는 방식입니다.