본문 바로가기

Java9

효율적인 리팩토링을 위한 전략 1. 리팩토링의 목표를 명확히 정의a) 주요 목표 설정가독성 향상: 코드를 더 쉽게 이해하고 유지보수할 수 있게 개선.성능 최적화: 처리 속도, 메모리 사용량, API 응답 시간을 개선.테스트 가능성 개선: 코드의 단위 테스트 작성 및 통합 테스트 용이성 증가.재사용성 향상: 중복 코드를 제거하고 공통 로직을 추출.기술 부채 상환: 초기 개발 시 급하게 구현한 부분이나 비효율적인 코드를 수정.2. 리팩토링을 위한 사전 준비a) 코드의 상태를 평가코드 리뷰:코드가 복잡하거나 반복되는 패턴을 식별.비효율적인 SQL 쿼리, 불필요한 메서드 호출, 중복된 로직 등 확인.정적 분석 도구 활용:SonarQube, Checkstyle, PMD 등을 사용해 코드 품질을 분석.b) 충분한 테스트 코드 작성테스트 코드 확.. 2025. 1. 24.
자바 컬렉션 프레임워크 종류와 사용 사례 자바에는 다양한 컬렉션 프레임워크가 존재한다. 프로젝트를 진행하고 관련 내용을 공부하다 보면 컬렉션이 굉장히 많이 나오지만 무슨 기준으로 해당 컬렉션을 사용했는지 감이 안와서 관련 내용을 찾아봤다. 컬렉션 프레임워크의 주요 인터페이스 및 구현체컬렉션 프레임워크는 크게 List, Set, Queue, Deque, Map의 다섯 가지 주요 인터페이스로 나눌 수 있다. List (순서 유지, 중복 허용)요소가 순서를 가지고 있으며, 중복을 허용합니다.사용 상황: 순서가 중요한 데이터, 중복된 데이터 허용.주요 구현체ArrayList배열 기반, 랜덤 접근이 빠름, 삽입/삭제는 느림데이터가 많고 읽기 위주인 경우LinkedList노드 기반, 삽입/삭제가 빠름, 랜덤 접근이 느림데이터 삽입/삭제가 빈번한 경우Vec.. 2025. 1. 23.
JWT 로그인 테스트-4 ○ 로그인 아키텍쳐JWT 관련 필터들을 구현하면서 자세하게 공부할 필요가 있다고 생각한게적다보면 이게 무슨 역할을 하는건지, 어떤 원리로 동작하는건지 이해하기 어려웠다. 우선은 로그인 필터를 구현했다. SecurityConfig에서 .formLogin을 disable()했기 때문에UsernamePasswordAuthenticationFilter가 동작하지 않는다고 한다. ○ formLogin을 비활성화?- 문득 소스 코드를 작성하다가 생각이 든건 JWT 토큰 인증 방식에서는 꼭 formLogin을 비활성화 해야할까?토큰 로그인 방식은 stateless 방식이기 때문에 세션을 사용하지 않는다. 따라서 세션을 사용하는 formLogin을 비활성화 하는 것이 일반적이다. 하지만 반드시 비활성화 할 필요는 없다.. 2025. 1. 22.
의존성 주입에 대한 관점 문득 프로젝트를 진행하다가 이런 생각이 들었다."왜 레포지토리나 서비스를 생성자로 처리하는 것일까?" private final UserRepository userRepository;public CustomUserDetailsService(UserRepository userRepository){ this.userRepository = userRepository;} 궁금해서 찾아보니 세 가지 방식이 있었다. 1. @Autowired 생성자 주입2. @RequiredArgsConsructor lombok 사용3. 수동 생성자 주입 위 소스코드는 수동 생성자 주입 방법이고 세 가지 방법에서 효율차이가 있는지 살펴봤다.근데 황당하게도 성능적인 차이는 실제로 없다고 한다.   @Autowired를 사용한 생성.. 2025. 1. 21.
JWT 로그인 테스트-3 테스트 구현은 완료하고 다시 복기하며 생겼던 문제에 대해서 정리해보려고 한다. ○ 회원가입 아키텍쳐○ 유저 정보 저장을 위한 Entitypublic class JwtUser { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String role;} ○ 회원가입을 위한 JoinService 생성public Boolean joinProcess(JoinDto joinDto){ String username = joinDto.getUsername(); String password = j.. 2025. 1. 21.
JWT 로그인 테스트-2 리프레시 토큰? 토큰을 안전하게 사용하기 위해선 토큰 유효기간이 필요한데,유효기간이 만료되면 새로운 토큰을 발급하기 위해 사용한다.위와 같이 토큰 발급을 처리하게 되는데 특이하게 데이터베이스가 등장했다.여기서 드는 궁금증은 리프레시 토큰을 위한 데이터베이스를 따로 만들어야 하는가 이다. 데이터베이스에 리프레시 토큰 저장구현 방식사용자의 로그인 시, 서버는 리프레시 토큰을 생성하여 데이터베이스에 저장클라이언트는 이 토큰을 저장하고, 액세스 토큰이 만료되면 리프레시 토큰을 사용해 새 액세스 토큰을 요청서버는 리프레시 토큰의 유효성을 확인하기 위해 데이터베이스를 조회합니다.장점서버가 리프레시 토큰의 유효성을 명확히 검증할 수 있습니다.리프레시 토큰 탈취 사고가 발생했을 때, 해당 토큰을 데이터베이스에서 삭제하.. 2025. 1. 19.