TIL 44

프로그래머스 SQL 문제풀이 성분으로 구분한 아이스크림 총 주문량

https://school.programmers.co.kr/learn/courses/30/lessons/133026 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr SELECT I.INGREDIENT_TYPE, SUM(F.TOTAL_ORDER) AS TOTAL_ORDERFROM ICECREAM_INFO I INNER JOIN FIRST_HALF F ON I.FLAVOR = F.FLAVORGROUP BY I.INGREDIENT_TYPEORDER BY 2

TIL 2024.09.12

AOP 특강

AOP횡단 관심사 분리핵심기능 시스템의 주요 목적 부가기능 주요 목적이 아닌 기능 횡단 관심사 부가 기능이 여러곳에서 반복적으로 적용되는 상황 ex.Transectional AOP는 핵심기능과 횡단관심사(부가기능)를 분리해서 관리하는 것 어드바이스 실제로 실행되는 횡단관심사 @Around, Before, After, AfterThrowing, AfterReturning 포인트컷 어드바이스를 적용할 구체적인 범위를 선택하는 규칙 @execution, annotiations, within, this, target, args 타겟 어드바이스가 적용될 객체 (포인트컷으로 지정) excution(* com.example.service.CourseService.*(..)) 조인포인트 어드바이스가 적용되는 실행지점 ..

TIL 2024.09.11

예외처리와 공통응답

체크예외(Exception)높은 복구 가능성RuntimeException을 제외한 Exception 클래스 상속컴파일 시점에 체크함명시적 처리 필요예외처리(try-catch) 또는 책임전가([클래스명] throws) 필요IllegalArgumentException, NoSuchElementException언체크예외(RuntimeException)낮은 복구 가능성부모가 RuntimeException일 경우컴파일시점에 체크하지 않음명시적 처리 불필요예외처리(try-catch) 또는 책임전가([클래스명] throws) 불필요IOException, NoSuchAttributeException ! 비즈니스 계층에서 복구 가능성으로 판단 !

TIL 2024.09.09

if 조건문 최소화 하기

데이터 검증에 대해 사용한 if 조건문을 validate 메소드를 사용해서 정리했다 기존코드UserService.java// user가 존재하는지 확인User user = userRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));// 탈퇴한 유저가 아닌지 확인if (user.isDeleted()) { throw new IllegalArgumentException("User is deleted");} 수정된 코드Preconditions.javapublic class Preconditions { public static void validate(boolean expression, ErrorCode er..

TIL 2024.09.06

Code Convention 도구 "Spotless"

팀프로젝트를 진행하면서 merge를 했는데 코드의 일관성이 너무 떨어져서 튜터님이 알려준 Spotless plugin을 적용했다 build.gradleplugins { id 'com.diffplug.spotless' version '6.23.3'}//compile시에 동작tasks.named('compileJava') { dependsOn 'spotlessApply'}spotless { java { googleJavaFormat().aosp() // 아래 순서로 import문 정렬 importOrder('java', 'javax', 'jakarta', 'org', 'com') // 사용하지 않는 import 제거 removeU..

TIL 2024.09.05

jakarta.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'jakarta.validation.constraints.NotBlank' validating type 'java.lang.Long'. Check configuration for error

public class FollowerCreateDto { @Getter @NoArgsConstructor @AllArgsConstructor public static class Request { @NotBlank private Long followerId; }}validation을 적용하면서 '@NotBlank'를 추가했는데 오류가 발생했다@NotBlank 어노테이션은 문자타입에만 사용가능하다 숫자타입이기 때문에@NotBlank -> @NotNull변경하여 오류를 해결했다 public class FollowerCreateDto { @Getter @NoArgsConstructor @AllArgsConstructor public st..

TIL 2024.09.03