본문 바로가기

분류 전체보기101

[Refactoring] 간단한 리팩토링 모음 코딩할 때 가볍게 다루기 좋은 리팩토링에 대해 소개하려고 한다. 😀 코드의 이해를 높이는 데 도움이 되며 사실상 어떠한 비용도 들지 않으니 신경 써주는 게 좋다. 👍 사소하지만 코딩하는 과정에 도움이 되었으면 한다. 필자도 프로젝트하면서 한 번씩 참고하려고 포스팅한다. "부정을 피하자" 코드에서는 긍정적인 표현식이 부정적인 표현식보다 훨씬 이해하기가 쉽다. 즉, Objects.nonNull(), !StringUtils.hasText() 등 보다 Objects.isNull(), StringUtils.hasText()가 좋다. @Test void goodRefactoring() { Shiba shiba = null; if(Objects.isNull(shiba)) { System.out.println("Nul.. 2023. 3. 5.
[React] router v6에서 JWT 인증과 Private 컴포넌트를 통한 화면 접근 보안 구현하기 토이프로젝트 진행 중 서버에서 JWT 인증을 구축한 뒤, 로그인한 경우에만(클라이언트가 정상적인 access_token을 가진 경우에만) 특정 화면에 접근할 수 있도록 하려면 어떻게 해야 할지 고민하게 되었다. 😿 필자의 경우 별도의 Private 컴포넌트를 생성해서 접근하는 순간 자동으로 서버에 access 토큰 인증 요청을 하게 되고, 인증에 실패한 경우는 클라이언트가 해당 화면에 접근하지 못하도록 구현했다. 방식은 간단하다. Route 컴포넌트 element에 실제 접근하려는 컴포넌트 대신 Private 컴포넌트를 전달하고, Private에 컴포넌트에 실제 접근하려는 컴포넌트를 속성으로 넘기면 된다. [TO-BE] const App = () => { return ( ); }; 기존에는 따로 토큰을 .. 2023. 2. 25.
[Spring] ServiceLocatorFactoryBean을 활용하여 분기 처리하기 🤜 문제점 개발하다 보면 분기 처리를 통해 특정한 경우에 따라 다르게 처리해야 하는 경우가 굉장히 많다. 🤔 예를 들면, 서비스 기획자가 이러한 요청을 한다. " Color가 BLACK이라면 A 시바견을, Color가 WHITE 라면 B 시바견을, Color가 YELLOW 라면 C 시바견을, 그 외에는 D 시바견을 활용해서 처리해 주세요! " 이런 요청을 일반적인 조건문을 사용한 분기 처리를 통해 해결하면 다음과 같을 것이다. (실제로 프로젝트에 이런 코드가 많이 존재한다.) public class ShibaService { public void shibaTalk(Color color) { if(color == Color.BLACK) { new ShibaA().talk(); } else if(color .. 2023. 2. 19.
React로 가성비 Pagination 만들기 (with. react-js-pagination) 토이 프로젝트 중 React + Spring 조합으로 개발하는 과정에서 Pagination이 필요해서 구현하다가 직접 만든 거 말고 기존에 있는 라이브러리를 사용해 보는 건 어떨까🤔 라는 생각이 들어서 찾아보게 되었다. 그렇게 react-js-pagination라는 라이브러리를 활용하여 Pagination을 구현하였고 관련 내용을 공유하고자 한다. 🐕 0. 준비 React 프로젝트 Terminal에 하기 명령을 입력하여 react-js-pagination 라이브러리를 받는다. npm i react-js-pagination 🐕 1. Spring 서버 페이징 처리 Controller @GetMapping("/api/study") public ResponseEntity getPublicStudyList(@Pa.. 2023. 2. 12.
AWS SAA-C03 합격 후기 필자는 2022년 11월 7일 AWS Certified Solutions Architect - Associate SAA-C03 자격증에 합격했다. 늦었지만 SAA-C03으로 바뀐 지 얼마 안 된 자격증이기도 해서 합격 관련 후기를 작성해 본다. 😅 🤜 취득 목적 AWS 자격증을 준비하며 클라우드 기술과 서비스 활용법을 학습해서 다음에 회사에서 AWS 클라우드를 활용한 프로젝트 개발에 참여할 기회가 있을 때 기술 학습 부담을 줄이고 싶었다. 무엇보다..! 회사에서 자격증 시험비를 지원해 주는 복지 제도가 있어서 큰 부담 없이 도전하게 되었다. 😌 🤜 학습 기간 학습 기간은 총 2개월 정도 걸렸다. 처음에는 학습 기간을 얼마나 잡아야 할지 고민하여 우선, 다른 합격 후기들을 찾아보았다. 그리고 보통은 직장에.. 2023. 2. 12.
JPA 동일 트랜잭션에서 update와 insert 동시에 수행할 때 문제 해결하기 (쿼리 실행 순서 문제) unique 제약이 걸린 필드를 '동일한 트랜잭션' 내에서 수정하고 저장해야 하는 경우가 있었다. 그래서 필드를 먼저 수정(update)하고 새롭게 저장(insert)하면 순서대로 처리되지 않을까? 예상하며 코드를 작성했다. 하지만 예상과 다르게 예외가 발생하며 실패했고, 이후 원인을 찾아서 해결하게 되었다. 이 문제를 해결했던 내용을 비슷한 상황을 재현한 간단한 테스트 코드를 활용해 공유하고자 한다. 🐕 테스트 환경 Shiba.java (엔티티 내용 중 일부) ... @Column(unique = true) private String identification; public void updateIdentification(String identification) { this.identification =.. 2023. 2. 5.
JavaScript Date 타입을 Java LocalDateTime으로 전달하기 Spring과 React를 활용해서 토이프로젝트 개발 진행 중 자바스크립트의 Date 타입을 자바의 LocalDateTime 형태로 어떻게 전달할 수 있을지 고민하였고, 찾아본 결과 date-format 라이브러리를 활용하면 쉽게 전달할 수 있다는 것을 알게되었다. date-format 라이브러리의 활용 방법을 토이프로젝트의 일부 코드를 통해 공유하고자 한다. [React] client.js import axios from "axios"; const client = axios.create(); export default client; api.js import client from './client'; export const createSchedule = ( memberId, name, startDate,.. 2023. 2. 1.
Hamcrest 라이브러리 Matcher를 활용하여 JUnit 테스트 가독성 향상하기 JUnit 테스트의 가독성을 높일 수 있도록 Hamcrest에서 제공하는 몇 가지 Matcher 활용법에 대해 소개한다. 0. 준비 우선, 최신 버전의 hamcrest 라이브러리를 받는다. (현재 최신 버전은 2.2) 참고로 스프링에서는 기본적으로 assertj와 함께 해당 라이브러리를 제공한다. org.hamcrest hamcrest test 그다음 assertThat + hamcrestMatcher 조합을 통해 가독성 있는 테스트를 해본다. assertThat의 정적 메서드 파라미터의 첫 번째 인자는 검증하고자 하는 값, 두 번째는 Matcher를 사용한다. * 여기서 assertThat은 hamcrest 패키지에 있는 assertThat을 사용한다. public static void assertTh.. 2023. 1. 29.