본문 바로가기

Develop

(317)
[Spring] ControllerAdvice @Exceptionhandler같은 경우는 @Controller, RestController가 적용된 Bean 내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. 해당 컨트롤러에서 Exception이 발생하면 아래 핸들러에서 호출되어 처리가 된다. @ExceptionHandler가 하나의 컨트롤러를 위한 것이면, ControllerAdvice는 전역 모든 클래스에 대한, 모든 컨트롤러를 위한 예외를 잡아주는 역할을 한다. (특정 경로를 설정할 수도 있긴하다.) 주로 예외 처리를 위해 이렇게 사용되기는 하지만, initBinder와 함께 바인딩/ 검증 설정, ModelAttribute와 함께 사용하여, 전반에 걸친 모델 정보 설정을 해주는 등의 목적으로 사용할 수도있다. 1. Targ..
@SessionAttribute에 대해서 이전에 공부한 ModelAttribute는, 전달 받은 값도탐색을 하지만, 세션에 있는 값도 탐색을 한다. 해당 과 같이 작성을 하면 Model 객체에 저장시 세션에 저장될 key을 저장한다. 즉 model에 test라는 값을 넣으면 자동으로 세션에 넣어준다. 해당 과 같이 사용하면, modelAttribute로 세션에 있는 값도 탐색을 한다. 처음 호출할때 오류가 발생할 수있지만 별도 ModelAttribute메서드를 선언하게 되면, 해당 메서드 별 인터셉트 같이 베이스로 돌기때문에 값을 넣어줄수있다. 만약에 모든 세션이 종료되면, SessionStatus 객체의 setComplete를 활용하여 지울 수 있다. @SessionAttributes는 해당 컨트롤러 내에서만 동작한다. 해당 컨트롤러 안에서 ..
[Spring] static 과 스프링 빈의 차이 정확히는 Spring 의 싱글톤 과 자바 static을 이용한 싱글톤 패턴의 차이라고 볼 수 있다. 여러 객체들이 하나의 인스턴스를 공유 한다는 개념은 같다. 하지만 해당 인스턴스의 생명주기에서는 큰 차이를 보인다. 1. 공유 기준 java static 의 공유 범위는 클래스 로더 기준 스프링 싱글톤의 공유 범위는 어플리케이션 컨텍스트 기준 클래스 로더기준이라고 하면, 톰캣 기준, webapp부분을 계층 적으로 관리한다. 만약에 webapp1, webapp2가 있다면, war파일 기준으로 다른 파일에 있는 클래스들끼리는 참조할 수 없다. 만약, 싱글 톤 기반으로 어플리케이션 컨텍스트 기준으로 공유하게 된다면 하나의 war파일 안에는 web.xml에 등록된 여러개의 servlet이 있을수있다. Spring..
[Spring] ModelAttribute 커맨드 객체에 대한 기능에 대해서 알아야 한다. 서블릿의 생명주기 서블릿 컨테이너가 서블릿 인스턴스의 init()메서드를 호출하여, 초기화한다. 서블릿이 초기화된 다음부터 클라이언트가 요청을 처리할 수 있다. 각 요청은 별도 스레드로 처리하고, 이때 서블릿의 service메서드를 호출한다. 이안에서 HTTP 요청을 받고, 클라이언트로 보낼 HTTP응답을 만든다. get,post에 따라서 doGet이나 doPost등으로 위임하여 처리한다. 서블릿 컨테이너 판단에 따라 서블릿을 메모리에서 내려야할 시점에 destroy를 호출한다. 서블릿은 개발자가 Http요청 메시지를 편리하게 사용할 수 있도록 HTTP 요청 메시지를 파싱한다. 결과를 HttpServletRequest객체에 담아서 제공한다. HttpServ..
[Junit] Test coverage 확인하기_Jacoco Jacoco를 사용하여, Test coverage를 확인하여보자 TestCoverage는 테스트 결과에 대한 성공 실패에 대한 결과를 레포트성으로 출력해주는 툴이라고 생각하면된다. 흔히 테스트 결과에 대한 내용을 문서화할수있다는 것이 테스트 코드 작성의 장점중 하나인데, 해당 장점을 극대화 시켜준다. 테스트 메소드에 대한 것들을 전체적으로 집합하여 보여준다. 방법은 간단하게 플러그인 설치 및 연동이라...그렇게 도움은 안되고 참고 정조만 하면 좋을듯 하다. 테스트코드 작성중 놓친 부분에 대한 부분을 report로 제공해준다. 콘솔로 실행하면, html이 하나 생성이 되는데,(build/jacocohtml) 해당 경로에 있는 html 레포트에서 우리가 작성한 테스트 메서드 내 테스트 케이스에 대해서 놓친게..
[Springboot]Springboot_test 1. TDD (테스트 주도 개발 방법 , 테스트 코드 작성의 목적) -코드의 안정성을 높일수 있다. -기능을 추가하거나, 변경하는. 과정에서 발생할 수 있는 side-effect를 줄일 수 있다. -해당 코드가 작성된 목적을 명확하게 표현할 수 있다. 2. Junit 이란? 독립된 단위테스트를 지원해주는 프레임워크 단정 메서드로 테스트 케이스의 수행 결과를 판별한다. 3. Junit 4 , Junit5 두개 차이는? 3-1) 자동지원 스펙 차이 spring 2.2 버전 부터는 자동 Junit5, 그 전은 Junit4 3-2) 구성 차이 Junit5는, JUnit Platform +. Junit Jupiter + Junit Vintage -platform : 테스트 개발을 위한 API 제공, 테스트를 발견..
[Redis] Redis Pub Sub 레디스는 메시지를 주고 받는 기능을 제공한다. 따로 메시지를 보관하지 않고, 채널을 구독한, 구독자에게 제공하는것이다. publish, subscribe 의 약자이다. 클러스터링 될때 서로 다른 노드에서 서로 간의 데이터 통신이 필요하면 해당방식으로 데이터를 전달한다.
[Redis] Persistence Redis의 영속성이라고 해석되며 프로그램이 종료되어도 사라지지 않는 데이터 특성이다. Redis는 이 영속성을 어떻게 지킬까? RDB 영속성은 명시된 간격 마다 dateset의 해당 시점의 스냅샷을 수행한다. AOF는 서버로 수신된 모든 쓰기작업을 기록하고, 서버 재시작시에, 수행되서 원래의 데이터셋을 재구축한다. 동일한 인스턴스에서 AOF와 RDB를 결합해서 사용할 수 있다. 자식 프로세스가 forking 하기 때문에 메모리를 2배를 사용할수 있지만, 부모 인스턴스가 디스크I/O를 수행하지 않아 AOF에 비해서 다 빠르게 재시작된다. 일정시간마다 스냅샷이 생성되기 떄문에, 예외 종료시에 데이터를 잃어버릴 수 있다. redis 에서 데이터를 저장하는 방법으로 snapshotting 방식과 AOF방식이 ..