본문 바로가기

Kotlin

(27)
(Spring) Lettuce를 활용하여 Redis를 활용하는 방법을 알아보자 Spring 에서 Redis를 다루기 위해서는 다양한 라이브러리들이 있는데 나는 그중에서 Lettuce를 활용한 Redis 구현을 해보려고 한다 여기서 잠깐 Redis란??Redis는 Key - Value 값을 기반으로 하는 In Memory NOSQL DB 이다장점모든 데이터를 메모리에 저장하기 때문에 속도가 굉장히 빠르다다양한 자료구조를 저장하기 때문에 보다 다양하게 데이터를 관리 할 수 있다만료 시간을 설정할 수 있고 만료 시간이 지나면 자동으로 지워지기 때문에 보다 효율적인 데이터 관리가 가능하다단점용량이 작기 때문에 대용량으로 저장하기 어렵다휘발성이 있기 때문에 일반 DB와 같이 사용 하는 것이 좋다싱글 스레드 이기 때문에 하나의 명령어만 처리가 가능하다 즉 크기가 큰 명령을 처리하게 될 경우 ..
(알고리즘) 멀리 뛰기 풀이 프로그래머스 멀리뛰기 문제를 풀면서 어떤 방식으로 접근해야 할 지 고민을 좀 했다 해당 문제는 멀리뛰기를 1칸 또는 2칸을 할 수 있고 해당 방법으로 맨 끝 칸 까지 갈 수 있는 경우의 수를 구하는 문제이다 사실 여러가지 방법이 있지만 나는 그림을 그려 보았다 사실 1과 2일 경우에는 1 하나와 (1,1) , 2 이렇게 2개 가 있어서 1과 2가 나올 것이고 3부터 그림을 그려서 얼추 가짓수를 생각해보았다그런데 이 갯수가 1 -> 2 -> 3 -> 5 -> 8 ... 이렇게 커지는 것이 아닌가?? 사실 이건 어디서 많이 본 것 같은데.. 바로 피보나치의 수열을 생각해보았다 피보나치의 수열은 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열 이라고 한다 이번 문제에서는 0이 존재하..
(알고리즘) 최소공배수와 최대공약수 구하기 알고리즘 문제를 풀다 보면 최대 공약수와 최소 공배수를 활용한 문제들이 자주 등장한다 오늘은 N개의 최소공배수 문제를 통해서 최소 공배수와 최대 공약수의 연관 관계를 알아보려고 한다 해당 문제는 배열 내부의 값들의 최소 공배수를 반환 하는 문제이다 이 문제는 쉽게 말하면 최대 공약수를 구한 다음에 남은 값들을 곱하면 되는 문제이다 최대 공약수는 말 그대로 에서 공통된 약수들의 최대 값이다 즉 저 숫자들로 더 이상 나누어 떨어질 수 없는 상태 까지 나누고 나눈 값을 곱한 값이 최대 공약수 이다 최소 공배수는 말 그대로 저 숫자들의 공통된 최소 공배수로 이는 즉 최소 공약수를 구한 후에 나머지 값 까지 구한 값이 될 수 있다 즉 위의 예제의 경우에는 2가 최대 공약수, 168이 최소 공배수가 되는 것이다 그..
(Spring) 크론 표현식에 대해 알아보자 이번 개인 프로젝트에서 나는 SoftDelete를 구현하기로 했다 SoftDelete란??Delete 쿼리가 날아갈 시점에 Delete를 시키지 않고 이 데이터를 업데이트 하면서 추후에 복구 및 증거 수집등에서 유용하게 사용하기 위한 방법이다단점으로는 Query를 관리를 많이 해야 하고 DB에 데이터가 지속적으로 축적되지 않기 위해서 관리를 해줘야 한다우선 SoftDelete를 구현하기 위해서 간단하게 정책을 설정하기로 했다 SoftDelete 된 내용은 본인 혹은 관리자만 볼 수 있어야 한다SoftDelete 된 내용은 90일이 지나면 삭제가 되서 지속적으로 데이터가 축적되는 현상은 방지한다이 2가지 정책을 가정하고 시작을 하려고 한다 우선 오늘은 2번째 정책인 90일이 지나면 자동으로 삭제가 되는 A..
(Spring) No property {} found for type {} 해결 법 JPA와 QueryDSL 을 동시에 사용하려다 보면 이런 현상들이 발생 한다@Transactional@Serviceclass IssueService( private val issueRepository: IssueRepository, private val queryDslIssueRepository: QueryDslIssueRepository private val memberService: ExternalMemberService,){이런 식으로 2개의 Repository를 주입 받아야 하는 현상이 생기는 것이다 나는 이 부분이 마음에 안들어서 JPA와 QueryDSL 을 하나의 Repository로 통합을 해보려고 한다위와 같이 리펙터링을 하여 Service 코드에서 하나의 Repositor..
(Spring) 관점 지향 코딩의 핵심!! AOP 의 설정 법을 알아보자 implementation("org.springframework.boot:spring-boot-starter-aop")AOP 란??부가 기능과 핵심 기능을 구분하여 부가 기능을 모듈화 하여 Application 전체에서 사용 할 수 있도록 하는 방법Annotation 을 사용하여 모듈화 할 수 있고 이를 전체적으로 사용할 수 있다사용하기 전에 build.gradle에 설정을 해주고 가자!! AOP를 사용하기 위해서는 실행 위치나 메서드의 상태 변화 따라서 다음과 같은 Annotation 을 적용할 수 있다@AspectAOP를 사용하기 위해서 정의한 클래스 위에 지정해 준다@PointcutAOP기능을 메서드, Annotation 등 어디에 적용시킬지 지점을 설정 지점을 설정하기 위한 Annotation@B..
(Spring) 발생할 가능성은 언제든지 있다!! StackOverflowError 금일 발생한 문제는 StackOverflowError 이다  StackOverflowError 는 재귀 함수를 많이 호출한 나머지 스텍 메모리가 초과해서 발생하는 애러라고 볼 수 있다 우선 나는 처음에 해당 문제에 대한 인지를 못하고 있고 내가 맵핑하지 않은 애러 메세지만 떴기 때문에 JWT 인증 문제인 줄 알았다 그러나 로그를 확인해보니까  at com.yoong.myissue.domain.team.dto.TeamResponse$Companion.from(TeamResponse.kt:16) ~[main/:na] at com.yoong.myissue.domain.issue.entity.Issue.toIssueResponse(Issue.kt:79) ~[main/:na] // X100이런 애러가..
(프로젝트) 2차 프로젝트 마무리 회고 Keep팀 분위기가 재미있고 유쾌한 편이라서 심적으로 보다 편한 상태에서 프로젝트를 진행했던 것 같습니다예전 팀에서 많이 진행하지 못했던 테스트를 보다 많이 진행해서 다양한 버그를 잡음이번 프로젝트 때는 전부 적용하지는 못했지만 제일 중요한 메서드외 Seivice 기준으로 테스트 코드도 작성을 하면서 다양한 시도를 하면서 테스트를 했다고 생각 합니다필요한 부분이 있다면 시간을 아끼지 않고 바로 테스트를 시도했다 Problem배운 것에 비해서 스코프가 짧았음특히 Spring Security 나 OAuth 같은 경우에는 추가로 공부해야 할 만큼 보완이 필요한 부분이었지만 해당 부분을 다루지 않고 넘어간 부분이 가장 아쉽다 ( 권한을 이번 프로젝트에서 제일 많이 다루기는 했지만 Spring Security를 ..