Back-End

    [Refactor] 리팩터링에 순서가 존재할까?

    완성된 프로젝트나 작성된 코드를 객체지향 프로그래밍을 적용해서 리팩터링 하려 한다. 리팩터링을 진행하려고 할 때, 어디서부터 시작하여 마무리해야 할까? 특별한 순서나 규칙, 절차는 존재하지 않는 것 같다. 하지만 리팩터링도 단계별로 적용하는 것이, 유지보수가 쉬운 형태로 만들어 나갈 수 있다고 생각한다. 단계별 프로그래밍, 작은 단위부터 기능을 구현한 경험을 바탕으로 리팩터링을 하기 전 점진적 단계를 구성해 보자. 단계별 프로그래밍 경험 + 리팩터링 단계 설정 1. 코드 이해 먼저 코드베이스를 깊게 이해하고 어떤 부분이 수정되어야 하는지 파악해야 한다. 요구사항을 정확히 준수한다. README를 재검토한다. 정상적인 경우, 예외적인 상황 정리 2. 테스트 추가 코드베이스에 예외 테스트가 부족하다면, 리팩..

    [Java] EnumMap 정리

    토이프로젝트를 진행하며 EnumMap을 사용하는 다른 코드들을 보았다. 기존에 나는 Enum을 사용할 때, Enum 내부에 변수를 추가하는 방식으로 사용하였었지만 Enum 타입을 Map 구조로 다루는 방식과 목적에 대해서 궁금해졌다. 따라서 EnumMap 구조와 장점 사용하는 방식에 대해서 알아보려고 한다. EnumMap이란? Java에서 특정 Enum 타입의 키를 사용하는 맵이다. (HashMap과 유사) 특히 Enum 상수를 효율적으로 다룰 수 있도록 최적화된 구현을 제공한다. 특징과 성능의 장점을 알아보자. 특징 Enum 타입만 key로 사용 가능한 특별한 Map이다. 해싱 과정이 필요 없어 HashMap보다 빠르다. null을 key로 넣는 경우 NullPointerException 발생 Enum..

    [Spring] Security 테스트 적용기 02 (+ Oauth2.0, jwt)

    Spring Security 테스트 적용기 02 OAuth 2.0 또는 JWT와 같은 보다 복잡한 인증 메커니즘을 사용하는 경우, @WithMockUser와 @WithUserDetails만으로는 충분하지 않을 수 있다. OAuth 2.0 및 JWT와 같은 토큰 기반 인증 방식은 다른 방식으로 테스트해야 한다. 일반적인 방식으로 Spring Security Test 프레임워크에서 지원하는 @WithSecurityContext 애노테이션을 사용하여, 커스텀한 @WithMockUser 애노테이션을 만들고 OAuth 2.0 인증을 가정하는 테스트를 작성할 수 있다. 테스트 코드 작성에 도움을 주는 애노테이션들을 정리하고, @WithSecurityContext 어노테이션을 사용하여 @WithMockOAuth2Us..

    [Spring] Security 테스트 적용기 01

    Spring Security는 어떻게 테스트를 할 수 있을까? Spring Security와 관련된 기능을 테스트하려면 인증 정보를 미리 주입해야 한다. 테스트를 진행할 때 초록빛을 보기 위한 가장 간단한 방법은 테스트 전에 SecurityContext에 직접 Authentication을 주입하는 경우이다. class UserServiceTest { @BeforeEach void setUp() { UserDetails user = createUserDetails(); SecurityContext context = SecurityContextHolder.getContext(); context.setAuthentication(new UsernamePasswordAuthenticationToken(user, ..

    [Java] Java 11 vs Java 17, JDK 17 정리

    JDK 11 vs JDK 17 팀 프로젝트 진행 시 JDK11과 JDK17 버전 중 어떤 것을 사용할지 고민한 결과 그동안 많이 접해온 Java 11의 익숙함과 더 많은 정보 량을 가진 Java 11을 결정하기로 하였다. 고민하는 과정에서 공부한 Java 11, Java 17의 변경내용과 JDK17의 중요 업데이트 항목 중 하나인 record 클래스를 정리해보려고 한다. JDK 17까지의 주요 업데이트 JDK 11 Type Features Content 패키지 Jigsaw 모듈 시스템 모듈을 만들고 해당 모듈은 외부에서 호출할 수 있는 API를 제공하여, 언어레벨에선 직접적으로 해당 모듈에 접근이 불가능 패키지 New Garbage Collector, ZGC 추가 새로운 Garbage Collector ..