본문 바로가기
728x90

Spring9

Spring AOP 이번 포스트에서는 Spring의 3대 요소 중 하나인 Spring AOP에 대해서 알아보도록 하겠습니다. AOP(Aspect Oriented Programming) 일단 AOP가 뭔지 알아보기 전에 Asepect가 뭔지에 대해서 간단하게 알아보도록 하겠습니다. Aspect란 애플리케이션의 핵심 기능을 담고 있지는 않지만, 애플리케이션을 구성하는 중요한 한 가지 요소이면서 핵심 기능에 부가되어 의미를 갖는 특별한 모듈을 가르킵니다. Aspect는 부가 기능을 정의한 코드인 어드바이스와 어드바이스를 어디에 적용할지 결정하는 포인트 컷을 함께 갖고 있으며, 이 둘을 합친 개념의 어드바이저는 단순한 형태의 Aspect라고 볼 수 있습니다. Aspect를 간단하게 알아보았으니 이제 AOP에 대해서 알아보도록 하겠.. 2023. 8. 5.
필터에서 응답 데이터 가공 이번에 저희 팀이 개발한 기업용 해외송금 서비스에 기능 추가 건이 생기면서 새로운 외부 API와 연동을 하게 되었는데 연동 조건에 서로 요청과 응답에 signature를 추가하고 검증해야 하는 조건이 있었습니다. 저는 요청 헤더의 signature 복호화 및 검증과 응답 시 헤더에 signature 추가를 필터에서 하는 것이 적합하다고 판단하였고 이 역할을 하는 필터의 개발을 맡게 되었습니다. (밑의 코드들은 회사에서 작성한 코드를 공개할 수 없기 때문에 비슷한 역할을 하는 필터를 따로 만든 예제 코드입니다. 또한 이번 포스트에서는 암호화 복호화 방법에 대해서는 다루지 않습니다.) Signature 검증 및 생성을 담당하는 필터 SecurerFilter Code @Slf4j @RequiredArgsCon.. 2023. 4. 15.
컨트롤러 단위 테스트시 모든 요청에 대한 공통 속성 적용하기 이번에 사내에서 Spring REST Doc을 이용하여 API 문서화 작업을 진행 중 컨트롤러 테스트 코드에 공통적으로 적용되는 속성에 대한 코드가 반복적으로 나타나는 부분을 리팩토링 한 내용을 공유할까 합니다. 밑의 코드는 테스트 코드 작성 시 코드마다 반복되는 부분을 나타내는 코드입니다. (회사 api의 상세 주소는 공개할 수 없기 때문에 주소는 간략하게 작성하였습니다.) 코드를 보시면 contextPath, characterEncoding, contentType이 계속 반복되는 것을 볼 수 있습니다. 처음에는 대수롭지 않게 넘어갔는데 테스트 코드가 점점 많아질수록 저 코드를 치는 것조차 조금씩 귀찮아지더라고요... @WebMvcTest( controllers = CommonApiControllerT.. 2023. 4. 10.
예외와 예외 처리 방법 예외란? 컴퓨터 프로그램에서 예외란, 프로그램이 실행 중에 발생한 예기치 않은 오류를 말합니다. 이러한 예외 상황을 처리하지 않으면 프로그램이 비정상적으로 종료될 수 있기 때문에 모든 예외는 적절하게 복구되든지 아니면 작업을 중단시키고 운영자 또는 개발자에게 통보하고 서비스를 이용하는 사용자에게 적절한 안내 메세지를 제공하는 등의 처리를 반드시 해줘야 합니다. 예외의 종류 이번 포스트에서는 Error에 대한 설명은 제외하겠습니다. Exception (Checked Exception) Exception 클래스와 이를 상속하고 Runtime Exception을 상속하지 않은 서브 클래스로 정의되는 예외입니다. 이 예외는 컴파일 시점에 예외 처리를 하는지 검사하기 때문에 개발자가 예외 처리를 강제하는 예외입니.. 2023. 4. 9.
스프링의 템플릿/콜백 패턴 이번 포스트에서는 스프링에서 자주 등장하는 템프릿/콜백 패턴에 대해서 알아보도록 하겠습니다. 템플릿/콜백 패턴을 설명하기 전에 확장에는 자유롭게 열려있고 변경에는 굳게 닫혀 있다는 객체지향 설계의 핵심 원리인 개방 폐쇄 원칙(OCP)을 다시 한번 생각해 봅시다. 이 원칙은 코드에서 어떤 부분은 변경을 통해 그 기능이 다양해지고 확장하려는 성질이 가지고, 어떤 부분은 고정이 되어있어 변하지 않으려는 성질을 가지고 있습니다. 변화의 특성이 다른 부분을 구분 해주고(변하는 것과 변하지 않는 것), 각각 다른 목적과 다른 이유에 의해 다른 시점에 독립적으로 변경될 수 있는 효율적인 구조를 만들어주는 것이 개방 폐쇄 원칙입니다. 템플릿/콜백 패턴은 이렇게 바뀌는 성질이 다른 코드 중 거의 변경이 일어나지 않으며 .. 2023. 4. 2.
Spring - 테스트와 TDD 테스트란? 개발자가 예상하고 의도했던 대로 코드가 정확히 동작하는지 확인해서 만든 코드를 확신할 수 있게 해주는 작업입니다. 테스트하고자 하는 대상이 명확하다면 그 대상에만 집중해서 테스트하는 것이 바람직합니다. 테스트하려는 범위가 클수록 테스트가 힘들어지고 오류가 발생했을 때 정확한 원인을 찾기가 힘들어지므로 가능하면 테스트의 관심이 다르다면 테스트할 대상을 분리(관심사의 분리) 하고 작은 단위로 쪼개서 테스트를 하는 것이 좋습니다. 이것을 단위 테스트라 합니다. 이전 포스트에서 테스트를 하기 위해 사용했던 main() 메소드를 보시면 테스트를 하기 위해서 프레젠테이션, 서비스 계층이 필요 없고 한 가지 관심에 집중해서 작은 단위로 테스트를 할 수 있기 때문에 단위 테스트를 적용했다 할 수 있습니다. .. 2023. 3. 26.
728x90