전체 글 30

2024년 11월 28일(목) Today I Learned

에러코드 추가로 인한 예외처리 기능 트러블 슈팅 에러코드 추가 환전 기능을 구현하고 난 후, 각각의 기능에서 발생하는 예외들을 ExceptionController를 이용하여 처리를 진행하였다. 해당 예외처리는 단순히 메세지와 상태코드만 반환하기에 에러코드를 추가하여 더 많은 정보를 포함한 에러 메세지를 출력하고 싶어 에러코드를 추가하였다.@RestControllerAdvicepublic class ExceptionController { @ExceptionHandler(IllegalArgumentException.class) public ResponseEntity> illegalArgumentExceptionHandler(IllegalArgumentException ex) { Map ..

카테고리 없음 2024.11.28

2024년 11월 27일(수) Today I Learned

지연 로딩과 즉시 로딩 지연 로딩 지연 로딩이란 데이터를 실제로 사용할 때 데이터베이스에서 조회하는 방식이다. fetch 속성을 이용해 지연로딩을 적용시킬 수 있고, 지연로딩을 사용하면 Proxy 객체를 조회한다. 이러한 특징을 가진 지연로딩은 연관된 객체를 매번 함께 조회하는 낭비를 방지하여 효율을 증대시킬 수 있다. @OneToMany, @ManyToMany 의 기본 값은 지연 로딩으로 설정되어 있다.  즉시 로딩 반면 즉시 로딩은 엔티티를 조회할 때 연관된 데이터까지 모두 한 번에 로드하는 방식으로, 지연로딩과 달리 Proxy 객체를 조회하지 않고 한 번에 연관된 객체까지 조회한다. 그렇기에 연관된 객체까지 함께 조회해야 하는 경우에 사용하는 것이 좋다. @ManyToOne , @ OneToOne ..

카테고리 없음 2024.11.27

2024년 11월 26일(화) Today I Learned

@Data 주의 사항 @Data 어노테이션이란 다음은 Formatter를 이용하는 예시 중 하나이다.@Datapublic class FormatForm { @NumberFormat(pattern = "#,###.##") private BigDecimal price; @DateTimeFormat(pattern = "dd-MM-yyyy") private LocalDate orderDate;} @Data 어노테이션은 @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 한꺼번에 적용하는 어노테이션이다. 해당 코드는 이러한 @Data를 이용해 많은 어노테이션을 호출하였다. 그러나 해당 예시는 운영코드에서 사용하..

카테고리 없음 2024.11.27

2024년 11월 25일(월) Today I Learned

최대공약수와 최소공배수 문제 내용두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 \[3, 12\]를 반환해야 합니다. n = a * b, m = a * c 라 할 때, a가 되는 수 중 가장 큰 수가 최대공약수이며 최소공배수는 a * b * c (a는 최대공약수) 이다. 따라서 최대공약수를 구하면, 최소공배수 또한 구할 수 있다. 최대공약수를 구하는 방법으로 유클리드 호제법을 사용하였다.유클리드 호제법의 원리는 다음과 같다.자연수 a,b에 대해서 a를 b로 나눈 나머지를 r이라 한..

카테고리 없음 2024.11.25

2024년 11월 19일(화) Today I Learned

부족한 금액 계산하기 문제 내용 새로 생긴 놀이기구는 인기가 매우 많아 줄이 끊이질 않습니다. 이 놀이기구의 원래 이용료는 price원 인데, 놀이기구를 N 번 째 이용한다면 원래 이용료의 N배를 받기로 하였습니다. 즉, 처음 이용료가 100이었다면 2번째에는 200, 3번째에는 300으로 요금이 인상됩니다.놀이기구를 count번 타게 되면 현재 자신이 가지고 있는 금액에서 얼마가 모자라는지를 return 하도록 solution 함수를 완성하세요. 단, 금액이 부족하지 않으면 0을 return 하세요.단순한 계산문제이지만 형 변환 관련하여 복습할 내용이 있기에 문제를 풀어보았다.  class Solution { public long solution(int price, int money, int co..

카테고리 없음 2024.11.19

2024년 11월 11일(월) Today I Learned

약수의 개수와 덧셈두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.해당 문제는 주어진 수들의 약수의 개수의 홀짝을 판별하는 간단한 문제이다. 처음 구현했던 코드에서는 단순히 for문으로 약수를 하나씩 확인하여 홀짝을 판별하였다. class Solution { public int solution(int left, int right) { int answer = 0; for (int i = left; i   문제의 난이도는 쉬웠기에 쉽게 통과할 수 있었다. 하지만 효율성 부분이 좀 떨어지는 느낌을 받..

카테고리 없음 2024.11.11

2024년 11월 8일(금) Today I Learned

유효성 검사받아오는 입력값이 항상 원하는 값으로 오진 않는다. int값을 받는 변수에 String값이 오면 오류가 발생한다. 이런 일들을 방지하기 위해 받은 데이터를 바인딩 할 때, 유효한 값인지 확인하는 절차가 필요하다. 일정 관리 어플리케이션에 적용할 유효성 검사로 @Valid를 이용하였다. 먼저 build.gradle에 의존성을 추가한다. dependencies { ... // validation implementation 'org.springframework.boot:spring-boot-starter-validation' ...} 이로써 @Valid 관련 어노테이션을 이용할 수 있다.@Valid의 어노테이션은 다음과 같다.  어노테이션기능@NotNullNull 불가@Null..

카테고리 없음 2024.11.08

2024년 11월 7일(목) Today I Learned

페이지네이션기본적으로 많은 데이터를 조회하게 되면, 모든 데이터가 한 줄로 길게 출력되기에 가시성이 떨어진다. 제작 진행중인 일정 관리 어플리케이션은 전체 일정 조회라는 기능이 있어, 너무 많은 데이터를 출력하는 경우가 생긴다. 그렇기에 일정 페이지로 데이터를 나눠 출력하게 만드는 페이지네이션을 이번 일정 관리 프로젝트에 적용하였다. @Getterpublic class Paging { private int page; private int size; private int startIndex; private int endIndex; public void handlePaging(int page, int size) { this.page = page; this...

카테고리 없음 2024.11.08

2024년 11월 6일(수) Today I Learned

입력받은 패스워드 비교 로직 트러블 슈팅진행중이던 일정 관리 앱 제작 프로젝트에서 일정 수정 및 제거를 수행하려면 알맞는 패스워드를 입력해야 한다. Request값으로 수정사항 및 패스워드를 입력 받으면 패스워드의 동일 여부를 확인하고, 동일할 시에만 해당 요청을 수행한다. 그렇기에 입력받은 패스워드와 저장되어 있는 패스워드를 비교할 로직의 구현이 필요하다.// Service Layer // 일정 수정 @Override public ScheduleResponseDto updateSchedule(Long id, String name, String contents, String password) { // 비밀번호가 틀렸을 경우, 실패 메시지 출력 if (!passwo..

카테고리 없음 2024.11.06