Back-End

    [회고] 2024 Backend 개발자 회고

    개발자 회고2024년도는 목표를 구체적으로 세우지 않고 흘러가는 대로 시간을 보냈던 것 같다. 어떻게 지냈는지 뒤돌아보니 아쉬움과 미련이 남는 한 해가 된 거 같아,2025년도에는 목표를 설정하고 그에 맞춰 행동하도록 노력해야할 것 같다. 이번 글에서는 지난 시간을 돌아보고 느낀 점들과 앞으로의 목표를 정리해보려고 한다. 이번 년도는 어떻게 지냈을까?첫 개발자 취직2024년의 첫 이슈는 SI/SM 회사에 신입으로 입사하면서 개발자로서의 첫 취직이 이루어졌다는 것이다. 초반에는 업무 환경과 새로운 문화에 적응하는 것이 가장 큰 도전이었고, 그 과정에서 인프라, 코드리뷰, 협업 도구 사용, 기능 개선 그리고 예상치 못한 버그 등을 직면하며 배운 것이 많은 해가 된 것 같다. 어려움도 많았지만, 그만큼 성장의..

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

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

    [Java] EnumMap 정리

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

    [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, ..