본문 바로가기

전체 글314

정적 분석 도구 Sonarqube 란? Intro 코드 품질에 대해 이야기를 하다가 정적 분석 도구에 대해 잘 모르고 사용하고 있어서 오늘은 그 개념과 실습을 해보았다. 실습은 여기 를 참고하여 해보았다! Sonarqube 지속적으로 코드 품질을 높이고, 유지보수를 할 때 도움을 주는 애플리케이션이다. 코드 컨벤션부터 잠재적인 위험 사항까지 체크를 해주어 코딩 습관과 품질 향상에 도움을 준다. Intellij에는 소나 큐브 플러그인이 있는데, SonarLint만 설치하더라도 소나큐브 서버 없이 정적 분석이 가능하다. 소나큐브 서버를 연동해 놓으면 서버의 Code analyzer가 업데이트 되었을 때 최신 Ruleset이 로컬에도 동기화되어 서버와 연동해 놓는 것이 좋다. 특징 다양한 언어에 대한 코드 분석 지원 Admin을 통해 확인해볼 수 .. 2021. 8. 20.
[MyBatis] 동적 SQL 처리 - trim 사용하기 Intro 검색 관련 쿼리를 작성하다가 동적으로 SQL을 처리해야했다. IF문을 3번 써야했는데, Where절 뒤에 들어가는 조건문 속에 AND가 바로 오면 Syntax Error가 발생했다. trim을 사용해서 해결했는데, 공식문서에 정말 자세히 설명이 나와있고 유사 케이스여서 금방 해결할 수 있었다. Trim 문 안에 있는 쿼리의 맨앞 혹은 맨뒤에 붙는 문자열을 붙이거나 뗄 수 있도록 한다. prefix trim 내부 쿼리 가장 앞에 문자열을 붙여준다. ... prefixOverrides trim 내부 쿼리 가장 앞에 해당 문자열을 지워준다. ... suffix trim 내부 쿼리 가장 뒤에 해당 문자열을 붙여준다. ... suffixOverrides trim 내부 쿼리 가장 뒤에 해당 문자열을 지워.. 2021. 8. 19.
[Java] 스트림(Stream) 개념과 연산 - 1 Intro java8의 Stream을 알아보려한다. 보통 java8 이전에는 for문, foreach문을 사용했다. 나 역시 거기에 더 익숙하다. 간단하면 상관이 없는데, 로직이 복잡해질수록 코드가 지저분해졌다. 스트림은 데이터의 흐름이다. 함수 여러 개를 조합해 원하는 결과를 필터링할 수 있다. 또, 병렬처리가 가능하다. 하나의 작업을 둘 이상의 작업으로 잘게 나눠 동시에 진행할 수 있다. 즉, 쓰레드를 이용해 빠르게 처리할 수 있다. 생성하기 : 스트림 인스턴스 생성 가공하기 : filtering, mapping 등의 중간 작업 결과 만들기 : 결과 만들기 작업 (terminal operations) 크게 세 단계로 나누어 스트림을 익히니 쉽게 이해됐다. List는 Collections.sort()를.. 2021. 8. 16.
[SpringBoot] Request로 오는 객체 검증(Validation) 알아보기 객체 검증은 정말 자주 하는 작업이지만 정말 중요한 작업이기도 하다. Annotation만 붙일 것이 아니라, 어떻게 동작하는지 또 어떻게 깔끔한 유효성 검사를 할 수 있는지 알아보자. Intro 일반적 애플리케이션의 Validation 검시 시, 아래와 같은 문제를 갖고 있다. 애플리케이션 전체에 분산되어 있다. 코드 중복이 심하다. 비즈니스 로직에 섞여있어 로직 추적이 어렵고, 복잡해진다. Bean Validation 위와 같은 문제를 해결하기 위해 Java에서는 Bean Validation이라는 유효성 검사 프레임워크를 제공해준다. 도메인 모델에 어노테이션으로 정의할 수 있다. dependency 추가 org.springframework.boot spring-boot-starter-validatio.. 2021. 8. 15.
[개발지식] 딥링크(DeepLink) 개념 알아보기 Intro http나 https로 시작하는 인터넷 주소는 모두 특정 웹 페이지로 이동한다. 그럼 웹에서 모바일 앱으로 이동할 때는 똑같이 링크를 통해서 동작할까? 종종 모바일 웹 페이지를 보고 있다가 앱에서 보기 버튼을 누르면 앱으로 이동하는 것을 접할 수 있다. 이건 대체 어떻게 동작하는 것일까? 앱에서의 URL, 딥링크 앱으로 보기 버튼을 누르면 웹과 동일한 컨텐츠를 갖고 있는 앱 내 페이지로 랜딩하는 것을 자주 접했을 것이다. 이처럼 유저를 앱 내 페이지로 바로 랜딩시킬 때 사용하는 URL을 딥링크라고 한다. 딥링크의 종류 URI Scheme (초기형태) Universal LInk (IOS) App Link (Android) URI Scheme (스킴 딥링크) 딥링크의 가장 초기 형태이다. 앱에 S.. 2021. 8. 14.
[Java] ObjectMapping을 위한 MapStruct 알아보기 - 2 Intro 이전 포스팅에서는 MapStruct의 기본 개념과 가장 기본적인 적용에 대해서 알아보았다. 이번 포스팅에서는 실제 구현 시 유연하게 적용할 수 있는 방법들을 알아보도록 하자. 서로 다른 속성 매핑 이전에 사용했던 예제 코드를 활용해보자. StudentDto public class StudentDto { private String name; private String age; private String level; } StudentEntity public class StrudentEntity { private String seq; private String name; private String age; private String grade; private String status = "Atten.. 2021. 8. 12.