Develop (21) 썸네일형 리스트형 [Test] 단위 테스트 구조 모든 단위 테스트는 AAA패턴을 따라야 한다. AAA패턴이란 준비(Arrange), 실행(Act), 검증(Assert)을 의미합니다. 만약 비개발자들을 고려한다면 각각을 given, when, then으로 구분할 수도 있습니다. 실행 구절이 한 줄 이상이면 SUT의 API에 문제가 있다. SUT(System Under Test)의 이름을 sut로 지정해 테스트에서 구별하는게 좋습니다. 구절 사이에 빈 줄을 추가하거나 준비, 실행, 검증 구절 주석을 각각 앞에 둬서 구분하는게 좋습니다. 만약 실행 구절이 한 줄 이상이라면, 클라이언트가 항상 이 작업을 같이 수행해야 한다는 의미로, 이로 인해 잠재적 모순에 이어질 수 있습니다. 일반적으로 준비 구절이 세 구절 중가장 큽니다. 같은 테스트 클래스 내 비공개 .. [Test] 런던파 vs 고전파 들어가면서 단일 테스트의 필요성은 많이 알려져있습니다. 테스트 코드를 작성할 때, 개발자가 고민해야 할 점들을 정리해두고자 합니다. 단위 테스트란? 단위 테스트란: 작은 코드 조각(단위)을 검증하고, 빠르게 수행하고, 격리된 방식으로 처리하는 자동화된 테스트입니다. 여기서 "격리된 방식"에 대하여 두가지 관점이 존재합니다. 책 "테스트 주도 개발"을 지은 켄트 백의 입장을 표명하는 고전파의 관점과, 런던의 개발 커뮤니티에서 시작된 런던파의 관점이 있습니다. 이때 런던파를 칭하는 표현으로 목 추종자(좋은 의미로 쓰이진 않는 듯 합니다. 하지만 런던파가 어떤 방식을 선호하는지 확 와닿습니다)가 있습니다. 격리된 방식에 대한 두 분파의 관점 각 분파의 차이에 대한 요약표를 살펴보도록 하겠습니다. 격리 주체 단.. [Spring] Entity Class와 OOP 들어가면서 JAVA는 객체 지향 프로그래밍 패러다임을 사용하고 있는 언어입니다. 객체 지향 프로그래밍, 즉 OOP는 객체는 모두 자율적인 객체여야 하며, 이때 자율적인 객체라는 의미는 객체가 자신의 상태를 직접 관리하고 스스로의 결정에 따라 행동하는 객체임을 의미합니다. 그런데, Spring을 이용하여 개발할 때, Entity 클래스는 Database의 Table과 1:1 매칭되는 객체를 의미합니다. 그리고 상태(필드)만 가질 뿐, 해당 엔티티에 대한 책임(매서드)는 온전히 가지고 있지 못한 상태로 보입니다. 그래서 어떻게 해야 OOP 관점에서 Entity 클래스를 정의하는게 좋을 지 정리하고자 합니다. OOP 단어 정의 OOP에서 자주 등장하는 단어 협력, 책임, 역할을 간단하게 설명하면 다음과 같습니.. [Develop] Redis 캐시로 사용하기 본 포스팅은 아래 유튜브 영상을 정리한 내용입니다. https://www.youtube.com/watch?v=92NizoBL4uA&t 정리 - 캐시란? 데이터의 원래 소스보다 더 빠르고 효율적으로 액세스할 수 있는 임시 데이터 저장소 언제 사용하는게 좋을까?: 같은 데이터에 반복적으로 액세스할 때 (데이터의 재사용 횟수가 한 번 이상일 때) 변하지 않는 데이터 레디스는 캐시로 사용하기 좋은 솔루션입니다. 레디스 특징: 단순한 key-value 구조 In-memory 데이터 저장소(RAM) -> 빠른 성능(초당 작업속도 < 1ms, 초당 수백만 건의 작업 가능) - 캐싱 전략 레디스를 캐시로 사용할 때, 배치 전략: 캐싱 전략 데이터 유형, 데이터 액세스 패턴을 고려하여 선택해야 함 읽기 전략: Look-.. [Spring Security] Authentication 예외 처리 도입 Spring Security는 Filter를 사용해서 사용자가 인증받았는지 확인합니다. 만약 인증 과정 중에 예외가 발생한다면 어떻게 처리해야 할까요? 본 포스팅에선 Spring Security에서 인증 / 인가 과정에서 예외가 발생했을 때 처리 방법에 대해서 정리하고자 합니다. ExceptionTranslationFilter Spring Security는 기본적으로 필터를 통해 인증 과정을 구현합니다. 다양한 필터들 중 ExceptionTranslationFilter가 예외 처리를 담당해주는 필터입니다. 그 안에 AuthenticationEntryPoint 객체를 필드로 가지는데, 이 객체에서 예외 발생 시 어떻게 처리해줄지를 담당하는 객체입니다. class JwtExceptionIntercept.. [Spring] Exception (예외) 처리 스프링 예외 스프링 예외는 2가지로 나뉜다: Dispatcher Servlet 외에서 발생하는 예외 Filter에서 발생하는 예외를 의미하기도 한다. Spring Security의 Filter에서 발생하는 예외가 이에 해당한다. Dispatcher SErvlet 내에서 발생하는 예외 스프링 MVC 내에서 발생하는 예외를 의미하기도 한다. 서버 개발자가 일반적으로 처리해야 하는 예외는 이에 해당한다. 예외 처리 방법: Filter에서 발생하는 에러: web.xml에서 error-page 등록 예외 처리 필터를 둔다. 예외 발생 시, HandlerExceptionResolver를 빈으로 주입받아 @ExceptionHandler에서 처리하는 방법 DispatcherServlet의 예외 처리기인 HandlerE.. [AWS] Code Deploy시 Script at specified location: scripts/deploy.sh failed to close STDOUT 에러 저는 간단한 개인 프로젝트에서 code deploy를 사용하여 배포하고 있습니다. 그런데 code deploy에서 계속 배포 실패가 되었습니다. 에러 로그는 "Script at specified location: scripts/deploy.sh failed to close STDOUT", 즉 표준 출력이 제대로 닫히지 않고 있다는 거죠. 원인 원인은 말 그대로 표준 출력이 제대로 닫히지 않고 있어서였습니다. 저는 배포 시에 로그를 기록하기 위해 아래와 같은 명령어를 사용하고 있었습니다. nohup java -jar $REPOSITORY/$JAR_NAME & 이렇게 되면 nohup 명령어로 백그라운드 프로세스를 실행하면서, 표준 출력 및 표준 에러를 제대로 리다이렉션을 하지 않게 되어서입니다. 해결 아래와.. [Spring] Dispatcher Servlet 세부 동작 분석 Dispatcher Servlet의 세부 동작을 분석한 다이어그램을 작성해보았습니다. HandlerMethodArgumentResolver에 대해 이해하기 위해 시작하였으며, 추상 클래스나 몇 개의 인터페이스는 생략하기도 했습니다. 이전 1 2 3 다음