본문 바로가기

분류 전체보기148

[리팩토링] 레디스 캐싱을 통한 인증과정 유저정보 조회 속도 개선하기 개발환경 Java 17 / Spring Boot 3.x / Spring Security 3.x / MySQL 8.0 / Redis / JWT 테스트 DB는 로컬환경에서 진행. 현재코드 Spring Security를 통해 인증이 필요한 API의 경우 JWT 토큰을 기반으로 유저정보를 가져온다. 아래는 인증 구현체에서 유저정보를 가져오는 코드. username을 기반으로 select 쿼리를 보내서 가져온다. //UserDetailsServiceImpl.java @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { User user = userRepository.findByUsernam.. 2023. 11. 28.
231128 : 책과 세미나가 보이기 시작했다 위 다리는 다리의 역할을 하는가? Yes 이 다리를 만든 사람을 고용해 우리집으로 가는 다리를 만들도록 고용할 것인가? NO 지난 교육과정 돌아보기 지난 여름동안 간신히 REST API 설계, CRUD 게시판에 백오피스 기능 등 간신히 구현하는 법을 배웠다. 그렇게 5개월의 교육을 마치고 취업전선으로 몰아부치는 시즌에 나를 돌아보았다. 나는 위와 같은 다리를 만드는 사람같다는 생각을 떨칠 수 없었다. 구현은 어떻게든 시켰는데, 굉장히 허술한 느낌. 이런 내가 회사에서 값어치를 할 수 있을까? NO 나였어도 허술한 다리를 만드는 사람을 고용하진 않을 것이다. 최근 한달동안 돌아보기 최근 프론트-백을 모두 구현하며 나의 퀴즈형 게시판 사이트를 배포하는데 집중했다. 동시에 자연스럽게 구현만 배웠을 때 경험하지.. 2023. 11. 28.
[리팩토링] Redis 캐싱을 통한 조회 성능 개선 도전기 캐시 이해하기 한번 꺼내온 데이터 캐시에 저장해둬서 빠르게 다시 꺼내주기 쉽게 생각하면 캐시란 쉽게 생각하면 퀵슬롯처럼 한번 조회한 데이터의 사본을 밖에 가지고 있다가 다시 부르면 빠르게 사본을 주는 것이다. 사본? 주방을 예로 들어보자. 주방안에서 재료가 떨어져서 A메뉴가 주문불가 상태이다. 홀에서는 예상되는 메뉴의 사본인 메뉴판만 보고 주문을 하게되고 A메뉴를 return할 수 없게되어 문제가 발생한다. (가격이 변동됐다거나) 이는 주방과 홀 사이에 같은 정보를 토대로 사본으로 나눈 시점으로부터 데이터의 변경이 일어났음에도 즉시 반영이되지 않아 생긴일이다. 캐시도 원본 데이터의 복사본을 들고있기 때문에 빠른속도를 얻는 대신 정합성을 조심해야하는 기능은 것이다. 이러한 특징 때문에 원본 캐시데이터 간의.. 2023. 11. 28.
[테스트 코드] JaCoCo을 통한 코드 커버리지 확인 '놓친 테스트 코드는 없을까?' 항상 고민하던 주제다. '분명 누군가 이것에 대한 해결책을 만들어뒀을텐데' 하는 마음에 검색해본 끝에 JaCoCo를 발견했다. 세팅 build.gradle에 추가만 해주면 된다. //build.gradle plugins { id 'jacoco' } test { finalizedBy jacocoTestReport } jacocoTestReport { dependsOn test } 리포트 확인 Gradle - test 한번 돌려주면 build폴더에 jacoco 폴더가 생겨있다. index.html 를 통해 리포트를 확인할 수 있다. index.html 코드까지 확인할 수 있다. 느낀 점 그동안 구현에 집중하느라 테스트코드 작성법에 대해 공부조차도 못했는데, 현재 21% Ins.. 2023. 11. 24.
[트러블 슈팅] github actions를 이용한 CD구현 도중 오류 (비공개 파일 포함해서 빌드하기, https) 1. 문제 발견 - Gradle Build 실패 yml 파일상 해당 부분을 살펴보면 이게다다. save-state라는 command를 찾을 수 없다. Warning은 경고니까 실제로는 동작에는 문제가 없을수도 있다고 생각했다. Error를 난 부분을 찾아보면 gradlew파일을 실행할 수 없다고 나온다. 해결 - 실행권한 부여 Actions를 위해 생성된 Ubuntu 환경에서 접근을 할 수 없는 걸 수도 있겠다 싶어서 실행 권한을 부여했다. Gradle 실행이 됐다! 2. 보완 - 변수명 재설정 구글링해온 파일을 맞게 수정해야 하는데 이 과정을 놓쳤다. Nov23이 아니라 어제 띄워둔 jar이 계속 실행중이었다. 스크립트 파일 변수명 지정이 제대로 되어있지 않았다. 스크립트대로면 spring-webapp.. 2023. 11. 23.
6일차(완독) - 객체지향 설계를 바라볼 관점의 추가 이 책을 통해 이후 객체지향 프로그래밍에 관련된 여러 갈래로 파생된 기법들, 방법론, 디자인 패턴 등을 접할때 바라볼 수 있는 관점을 하나 얻은 기분이다. '적절한 책임을 위한 적절한 객체들의 설계.' 읽고나서 처음 커피를 시키는 카페에서의 과정을 예시로 시작하여, 객체들의 협력으로 이루어져있는 설계, 협력을 위한 메시지 역할, 구현과 인터페이스의 구분 등을 거쳐 작은 시스템을 구성하는 흐름을 보여주기까지 7장에 걸쳐 나누어 설명하고 있다. 전체에 걸쳐 자주 반복되어 책을 덮은 지금에도 생각나는 구절은 아래와 같다. 객체의 상태보다 행동이 중요하다. 상태는 과거의 행동의 결과를 유추할 수 있게 해줄 뿐이다. 객체에 책임을 정하는 것이 아닌, 책임을 행할 적절한 객체를 고르는 것이다. 도메인 모델을 통해 .. 2023. 11. 21.