본문 바로가기

java48

MapStruct! JPA Entity 매핑 간 주의해서 사용하자 최근 비상 결제 모드를 개발 및 배포하며, 참으로 어이 없는 작은 코딩 관련 이슈로 인해 데이터에 이상이 있었다. 바로, MapStruct 얘 때문인데.. 한번 나열해보겠다. (항상 생각하는 거지만, 코드 단 한줄의 파급효과가 엄청 나다.) MapStruct 란?Java Bean 유형 간 매핑 구현을 도와주는 코드 생성기컴파일 타임에 코드 생성 및 런타임에서 안정성 보장순수 Java code 를 호출하므로 다른 매핑 라이브러리보다 속도가 빠르다. (Reflection 을 사용하지 않기 때문)Annotation Processor 를 이용하여 매핑 방식에 편리함을 제공 사용 예시JAVA@Mapper public interface UserMapper { UserMapper INSTANCE = Mappers.g.. 2024. 3. 24.
[감상문] Effective Java를 읽고 나서 책을 읽은 이유 자바 공부를 하면서 한번 쯤 도전해보고 싶었던 책 중에 하나가 바로 이펙티브 자바다. 워낙 어렵기로도 소문이 났고, 그 만큼 자바의 정수라고 불리우길래 자바 서적 중 가장 가치가 높게 느껴졌었다. ​ 백엔드 챌린지 교육을 들으며 멘토님이 수 많은 교육 영상과 책들을 추천해주셨는데, 그 중에 언어 실력의 기준이 되는 척도가 이펙티브 자바라고 하셨다. 책 읽을 시간 없다는 핑계로 미루고 미루다가 바로 지르기로 결심했다. ​ 새 책을 사기에는 가격이 부담스럽기 때문에, 이번 기회에 당근 마켓을 이용해보기로 했다. 다행히 가까운 동네에 판매자 분이 계셔서 비바람을 가르며 거래 장소로 갔다. 네고까지 해주시고 개발자 취준 응원까지 해주셔서 나의 첫 당근 거래에 매우 따스함을 느꼈고, 스타트가 좋을.. 2022. 10. 26.
WebFlux는 무엇이고, 왜 나왔고, 언제 쓰이는가? 어제 Cart API 코드 리팩터링을 마무리하고, 리뷰를 받기 위해 PR을 올렸다. 클린 한 코드로 작성하려고 노력하기 위해 리뷰어님이 주신 의견을 되뇌고, 클린 코드를 작성하기 위한 방법을 구글링을 통해 하루 종일 모니터를 노려보며 클래스 간 책임을 나누어 보았다. 빨리 성장하고 싶다!! 리뷰를 앞두고, 카카오페이를 이용한 도메인 코드들을 리팩터링 하기 앞서, 기존에 외부 API와 통신하기 위해 사용하던 템플릿인 RestTemplate의 대체 여부에 대해 떠올랐다. RestTemplate은 deprecated 되었으므로, WebClient의 사용을 고려해보라는 의견을 받았다. WebClient에 대해 알아보다가 동기/비동기, 블로킹/논블로킹이라는 개념의 정의에 대해 다시 공부하게 되었고, 나아가 Web.. 2022. 8. 31.
객체 간 매핑을 위한 MapStruct 사용 방법 기존 프로젝트에서 Dto Entity를 매핑할 때 model mapper 라이브러리를 사용했었다. 편하게 사용할 수 있었지만 내부적으로 리플렉션을 이용하기 때문에, 성능 상 문제가 있다. 이번에는 많이들 추천하는 Map Struct를 사용해봤다. 적용하면서 자잘한 문제들이 있었는데, 내가 겪은 문제점들에 대한 해결 방법들을 정리해보겠다. https://mapstruct.org/documentation/dev/reference/html/ MapStruct 1.5.2.Final Reference Guide If set to true, MapStruct in which MapStruct logs its major decisions. Note, at the moment of writing in Maven, al.. 2022. 8. 29.
Spring Security [2] - 예외 처리 AuthenticationEntryPoint & AccessDeniedHandler 서큐리티를 도입하며 인증, 인가의 과정을 마쳤다. 이제 인증 및 인가 작업에서 발생하는 예외에 대해서 처리를 해주어야 하는데, 한 가지 생각해봐야 하는 문제가 있다. 스프링 서큐리티는 필터에 기반한 체이닝 구조이므로, 스프링 컨테이너까지 요청이 도달하지 않는다. 따라서, @ExceptionHandler를 통한 편한 예외 처리가 불가하다. 직접 Try - catch로 잡아서 응답을 내려주는 방법 밖엔 없다. 하지만, 스프링 서큐리티가 그렇게 허술하진 않다. 서큐리티 필터 체인의 구조를 보면 마지막 즈음에 예외를 처리하는 필터가 있는 것을 확인할 수 있다. 여기서 주로 사용하는 AuthenticationEntryPoint와 AccessDeniedHandler를 구현해 인증 및 인가 과정에서 일어난 예외에 대.. 2022. 8. 21.
DB 수정 & jpa 세팅 프로젝트의 전반적인 리팩터링을 다시 시작하며, 기존 mybatis를 이용했던 것을 그대로 옮겨왔다. 하지만 SQL Mapper를 이용한 설계 특성상 객체 지향적인 코드의 작성이 어려웠고, 또 기존 DB 설계의 문제도 있다는 것을 알게 되었다. DB의 전반적인 수정과 더불어, JPA를 이용해 다시 리팩터링을 해보기로 결정을 내렸다. 그 수정과정과 JPA 세팅 방법을 나열해보겠다. https://github.com/GroovyArea/My-ChickenBreast-Shop GitHub - GroovyArea/My-ChickenBreast-Shop: shop api with spring boot shop api with spring boot . Contribute to GroovyArea/My-ChickenB.. 2022. 8. 8.
스프링 부트 소나큐브(SonarQube) 적용 + PostgreSql 갈수록 쉽지 않다. 프로젝트를 만들어 가는 과정에서 코드를 작성하는 부분은 극히 일부 과정임을 깨달았다. 오히려 코드를 작성하는 시간이 더 그립다. 리팩터링과 기술 적용 및 버전 맞춤 수정에 시간을 더 쏟는 요즘이다. 클린 한 코드를 위해 손수 리팩터링을 할 수 있지만, 정적 코드 분석 도구란 것이 있다고 한다. 대표적으로 SonarQube를 많이 사용한다고 하는데 이를 적용해 보는 시간을 가졌다. 정말 오래 걸렸고, 정확하진 않을 수 있지만 나름대로 적용했던 과정을 정리해보겠다. (틀린 부분이 있으면 무한한 댓글 감사히 받겠습니다!) 이것이 완료된 후 AWS lightsales, ec2 적용 여부를 판단해보아야겠다. 정적 분석 도구 코드의 품질에 대해 고려할 때 필수적으로 사용하는 도구이다. 지속적인 .. 2022. 7. 5.
2022.06.22 「Lv.2 N-Queen」 이번 주는 코딩 테스트 연습에 더 박차를 가해볼 계획을 짰다. 다음 주에 모의 테스트를 볼 계획이므로 비중을 좀 더 둬봐야겠다. 이번 기회에 자료구조 한번 더 정리해볼 계획도 구상했다. https://programmers.co.kr/learn/courses/30/lessons/12952 코딩테스트 연습 - N-Queen 가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은 programmers.co.kr 문제 설명 가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경.. 2022. 6. 22.
2022.06.14 「Lv.2 멀쩡한 사각형」 문제 설명 가로길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자 칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm × 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭짓점 2개를 잇는 방향으로 잘라 놓았습니다. 그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm × 1cm로 잘라 사용할 수 있는 만큼만 사용하기로 하였습니다. 가로의 길이 W와 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구하는 solutio.. 2022. 6. 14.
2022.05.11 「SHA-256 + Salt & 인증」 인증 관련해서 사실 스프링 시큐리티를 사용해도 괜찮지만 순차적으로 가기 위해서 순수하게 SHA-256 암호화 알고리즘을 이용해 비밀번호 암호화와 로그인을 원시적으로 구현한 하루다.. 거진 12시간을 삽질한 것 같다. 암호화 알고리즘 이용과, Mybatis 매핑 문제도 있고, ModelMapper를 사용해 DTO VO 매핑이 계속 안되어서 하루 종일 멘털이 나갔었다. 다른 공부도 할게 너무 많은데 프로젝트만 비중이 많았던 하루라 너무 아쉽다. 하지만 삽질한 만큼 내 것이 되었으면 좋겠다. 오늘은 하루종일 삽질한 내용을 기반으로 한번 정리를 해보려고 한다. 여담으로 다이어트중인데 요새 상주하는 공부 환경에서 오트밀 미니 바이트를 제공해주는데 이거 진짜 너무 맛있다.. 예전엔 진짜 단 거 잘 참았는데 늙었나 .. 2022. 5. 11.
2022.05.10 「Rest Ful Api & DTO,VO mapping & Mysql Index & 상수화」 프로젝트를 진행 중에 수정사항이 너무도 많다는 것을 알게 되었다. 예전에 학원에서 프로젝트를 할 때는 어떻게 만들든 기한이 정해져 있었기 때문에 완성도가 우선이었고, 유지보수에 대한 프로그래밍에 신경을 쓰지 않았었다. 하지만 실제로 제대로 된 프로그래밍을 하다 보니 예전 버릇이 나오게 되었고, 이번 리뷰를 받은 김에 리팩터링을 빠르게 하며 정리를 해볼 생각이다. RestFul Api 의 return 값 1. 되도록 체이닝 하는 방식을 사용 2. response에 해당되는 헤더 메시지(상태 코드, 메시지 등등), 바디 값을 다 넣도록 노력하자 DTO, VO 간의 매핑 현재 Mybatis를 사용중이므로 테이블 자체의 Entity는 VO service mapper 계층 이동 시 VO를 이용해야 함 .. 2022. 5. 10.
2022.05.09 「해시 Lv.2」 요새 매일매일 코테를 준비하며 프로그래머스 문제를 풀고 있다. 처음엔 완전히 막혔지만 그래도 이젠 어느 정도 풀이가 떠오르긴 한다. 한 가지 아쉬운 점은 생각보다 클래스마다 다양한 메서드를 가지고 있고 이를 잘 알고 활용해야 한다는 점이다. 제일 많이 나오는 유형인 해시 문제를 마주하고 문제를 풀기 위해 활용할 메서드를 검색해서 이를 활용하여 문제를 풀었지만 한번 정리해볼 만한 가치가 있다고 생각이 들어서 이렇게 정리하게 되었다. 문제 설명 위장이라는 문제인데, 옷의 종류와 옷의 이름으로 이루어진 2차원 배열을 가지고 그 경우의 수를 구하는 문제이다. 매일 옷을 다르게 입어야 하고, 하루에 옷 1개는 무조건 입는 조건이다. 해시를 이용해 풀란다. 풀이 public int solution(String[][.. 2022. 5. 9.
2022.04.28 「Thymeleaf 설정」 ▶ 파트 1 (10시30분 ~ 5시30분) 1. 로지텍 마우스 구매 2. 알고리즘 정렬 Level2 3. mysql CH.9 4. 위키 수정 5. 스프링부트 프로젝트 진행 ▶ 파트 2 (9시30분 ~ 12시) 1. 스프링부트 프로젝트 진행 => 알바 갔다 와서 경로 좀 손 보고 html도 좀 넣고 하자 ▶ 문제 1. view 디자인 문제 문제점: Thymeleaf 엔진을 사용하는데 여기는 jsp에서 사용하는 tiles를 사용하지 못한다. 해결 : - Thymeleaf가 제공하는 layout 라이브러리를 사용해서 적용 가능하다. - Thymeleaf 관련 resolver properties 파일 정의함 2. resources 폴더 아키텍쳐 관련 문제점 : 스프링부트에서 view 관련 아키텍쳐 설계가 처음이.. 2022. 4. 28.
2022.04.25의 기록 ▶ 파트 1 (2시 ~ 12시) 1. 테스트 코드 수정 2. 노션 자기소개서 정리 -> 디테일한 부분 추가해보자 3. Spring 개념 정리 4. mysql 옵티마이저와 힌트 5. wiki 수정 6. 개념, 자소서, 프로젝트 계획 검수 7. 알고리즘 1문제 ▷ 테스트 코드 문제 : 하나의 값만 임의로 비교하는 것도 좋을 것 같지만 3가지 경우를 모두 테스트하면 좋겠다 해결 : Static 메서드를 하나 선언하여 입력 정수 값과 기대 값을 비교하는 테스트로 수정하였다. 2022. 4. 25.
2022.04.24의 기록 ▶ 해야할 일 1. Gradle test code 수정 2. mysql CH7. 데이터 암호화 정리, CH8. 인덱스 중간 3. Boot 프로젝트 구상 (점심 먹고 쏟아붇자) https://github.com/GroovyArea/Shop-with-SpringBoot/wiki 4. 알고리즘 1문제 ▷ 테스트 코드 문제 1 : gameCount()를 호출 할 때마다 예외가 발생됨 해결 : 제어문을 통해 해결 문제 2 : @ParameterizedTest 진행 시 파라미터를 메서드의 매개변수로 집어넣어주지 않아 테스트 코드 문제 발생 2022. 4. 24.
반응형