전체 글(77)
-
[Hype] AOP와 Redisson을 이용한 동시성 제어 코드 리팩토링
💡본문에 들어가기 앞서... 기존 구현 되어있던 로직 중에 게시글에 좋아요를 누르는 기능에서 여러 사람이 동시에 좋아요를 눌렀을 때 해당 게시글의 좋아요 수 정보에서 동시성 이슈가 발생할 수 있어서 이를 해결하기 위해 Redisson을 이용한 분산 락을 적용했습니다. 해당 코드를 리팩토링 하면 좋을 것 같아서 리팩토링 해보려고 합니다. 코드에 대한 설명 @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Post extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Embedded private Mu..
2023.05.24 -
[boj 1865] 웜홀 - Java
💡https://www.acmicpc.net/problem/1865 문제 설명 문제 때는 2020년, 백준이는 월드나라의 한 국민이다. 월드나라에는 N개의 지점이 있고 N개의 지점 사이에는 M개의 도로와 W개의 웜홀이 있다. (단 도로는 방향이 없으며 웜홀은 방향이 있다.) 웜홀은 시작 위치에서 도착 위치로 가는 하나의 경로인데, 특이하게도 도착을 하게 되면 시작을 하였을 때보다 시간이 뒤로 가게 된다. 웜홀 내에서는 시계가 거꾸로 간다고 생각하여도 좋다. 시간 여행을 매우 좋아하는 백준이는 한 가지 궁금증에 빠졌다. 한 지점에서 출발을 하여서 시간여행을 하기 시작하여 다시 출발을 하였던 위치로 돌아왔을 때, 출발을 하였을 때보다 시간이 되돌아가 있는 경우가 있는지 없는지 궁금해졌다. 여러분은 백준이를 ..
2023.05.15 -
[그래프] 그래프 알고리즘 공부하기
삼성 알고리즘에서 배웠던 것들 조금 고급이나 많이 접해보지 못한 것들 알고리즘이랑 자료구조들 공부해봅시다. 그래프란? 그래프는 노드랑 간선으로 이루어진 자료구조이고 순환 구조가 없는 걸 트리 자료구조라고 할 수 있음. 간선에 방향이 존재하는지 여부가 중요하니까 잘 파악할 것. 기본적인 DFS나 BFS는 많이 접해봤으니까 덜 접해본 알고리즘들을 공부해보자. 서로소 집합 (Union-Find) 오늘 풀었던 문제에서도 나왔는데 집합을 이루는지 확인하고 하나의 집합으로 만들 수 있는 그런 알고리즘. Union 연산 (합집합) 어떤 두 원소 a, b에 대해서 각 원소가 속한 집합을 하나로 합치는 연산임. def union(a, b): parentA = find(a) parentB = find(b) if paren..
2023.05.09 -
[BOJ 1300] K번째 수 - Java
💡https://www.acmicpc.net/problem/1300 문제 설명 세준이는 크기가 N×N인 배열 A를 만들었다. 배열에 들어있는 수 A[i][j] = i×j 이다. 이 수를 일차원 배열 B에 넣으면 B의 크기는 N×N이 된다. B를 오름차순 정렬했을 때, B[k]를 구해보자. 배열 A와 B의 인덱스는 1부터 시작한다. 입력 첫째 줄에 배열의 크기 N이 주어진다. N은 105보다 작거나 같은 자연수이다. 둘째 줄에 k가 주어진다. k는 min(109, N2)보다 작거나 같은 자연수이다. 출력 B[k]를 출력한다. 문제 풀이 해당 문제를 처음 보고 든 생각은 n의 값이 너무 크기 때문에 직접 정렬을 하는 방식을 이용할 수 없을 것 같다라는 생각이 들었습니다. 정렬을 한다면 메모리와 시간적으로 모..
2023.05.03 -
[Exception] 프로필 이미지 수정 기능에서 이미지가 아닌 경우에 대한 예외 처리 - Hype
💡Hype이란 프로젝트를 구현하면서 프로필 이미지 수정 기능을 구현했습니다. 이 때, png, jpg와 같이 특정 파일 형식이 아닌 경우에 대해서 예외처리를 구현했는데 해당 기능에 대한 테스트도 없었고 프론트 측에서 이 기능을 나중에 만들면서 해당 예외 처리가 제대로 동작하지 않는 것을 확인했습니다. 이 부분에 대한 테스트 추가와 기능 수정을 해보려고 합니다. 기존 기능 코드 현재 구현된 부분은 프로필 이미지 수정 요청이 들어오면 요청과 함께 multipart/form-data 형식으로 이미지 데이터가 들어오고 이를 AWS S3에 저장한 후 해당 이미지의 url 정보를 유저 정보에 update 하는 형식으로 구현되어 있습니다. 그래서 문제가 발생한 부분은 이미지를 저장하는 부분에서의 예외처리가 제대로 동..
2023.04.19 -
[프로그래머스] 인사고과 - (Java)
💡https://school.programmers.co.kr/learn/courses/30/lessons/152995 문제 설명 ※ 문제에 대한 자세한 설명은 위 링크를 참조해주세요! 일단 해당 문제에서 찾아야 하는 것은 완호의 랭킹입니다. 그리고 이 랭킹을 알기 위해선 인센티브를 받을 수 있는지 여부가 모든 값들에 대해서 알아야 합니다. 현 시점에서 가장 간단하게 생각하면 모든 노드를 돌면서 해당 노드가 인센티브를 받을 수 있는지 여부를 체크하고 완호가 인센티브를 못받는 사람을 제외하고 자기보다 더 큰 사람의 수를 센다면 랭킹을 구할 수 있겠죠. 하지만 주어진 scores의 크기가 10만이기에 O(N^2)에 해당하는 알고리즘을 사용할 수 없습니다. 최대 O(NlogN) 정도로 풀어줘야합니다. 이때 잘 ..
2023.04.19