e-commerce 웹 애플리케이션을 구현하던 중 가장 빈번하게 요청되면서도 거의 동일한 응답을 반환할 '단일 가게 조회' 기능에 Redis 캐싱을 적용하여 1) 정보 조회 속도를 높이고, 2) DB의 부하를 낮추는 것을 목표로 프로젝트를 진행했다.☆ 코드 ☆// build.gradle// Redisimplementation 'org.springframework.boot:spring-boot-starter-data-redis' // common/RedisRepositoryConfig.java@Configuration@EnableRedisRepositories(basePackages = "com.example.baglemonster.common.config")public class RedisReposito..
전체 글
I'm still working on it. We must be better.더보기 본 게시글은 개발자 상식인 MVC 패턴에 대한 글로, MDN의 공식 문서를 참조했습니다. MVC (모델-뷰-컨트롤러) 는 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴으로 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 두고 있습니다. 이러한 "관심사 분리"는 더 나은 업무의 분리와 향상된 관리를 제공합니다. MVC에 기반을 둔 다른 디자인 패턴으로는 MVVM (모델-뷰-뷰모델), MVP(모델-뷰-프리젠터), 그리고 MVW(모델-뷰-Whatever)가 있습니다. MVC 소프트웨어 디자인 패턴은 다음의 세 부분으로 설명할 수 있습니다. 모델 : 데이터와 비즈니스 로직을 관리합니다. 뷰 : 레이아웃과 화면을 처리합니다. 컨트롤러 : 모델과 뷰로 명령을..
정의 Java의 Garbage Collector(이하, GC)는 C의 malloc()과 free()처럼 개발자가 직접 메모리를 할당하고 해제할 필요 없이 사용하지 않는 메모리 영역을 자동으로 해제하여 메모리 누수(memory leak)를 방지합니다. 유형 JVM의 heap 영역은 처음 설계될 때 다음을 전제로 설계되었습니다. 대부분의 객체는 금방 접근 불가능한 상태(Unreachable)가 됩니다. 오래된 객체에서 새로운 객체로의 참조는 아주 적게 존재합니다. 즉, 객체는 대부분 일회성이며, 메모리에 오랫동안 남아있는 경우가 드뭅니다. 객체의 생존 기간에 따라 물리적인 heap 영역을 나눴고 Young과 Old의 2가지 영역으로 설계되었습니다. Young 영역 새롭게 객체가 할당되는 영역 대부분의 객체가..
문제 출처: https://www.acmicpc.net/problem/2565 문제 시도 문제 등급이 실버이든 골드이든 동적 계획법 문제는 점화식과 메모이제이션에 대한 감이 안 잡혀서 항상 난처함만 더해갔다. 풀이 import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.util.Arrays; import java.util.Comparator; public class Main { static Integer[] dp; static int[][] wire; public static void main(String[] ar..
문제 출처: https://www.acmicpc.net/problem/11053 문제 시도 배열의 첫 번째 요소부터 마지막 요소까지 각각 자기 위치에서 마지막까지 찾아가는 방법을 생각했으나 일단 이중 반복문으로 시간 복잡도가 O(n^2)여서 절대 좋은 결과는 안 나올거라고 생각해 동적 계획법에 관한 블로그부터 다시 찾아봤다. 풀이 import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { private static int[] arr; // 원 배열 private static int[] lis; // LI..
문제 출처: https://www.acmicpc.net/problem/9663 소요 시간 : 시도 (1h 20m) + 풀이 (20m) 문제 시도 2차원 boolean 배열을 이용한 백트래킹을 시도했다. import java.io.IOException; import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { private static int n; private static int cases = 0; private static boolean[][] board; public static void main(String[] args) throws IOException { BufferedReader br = new Bu..
문제 출처:https://www.acmicpc.net/problem/2580 문제 시도 문제의 카테고리는 백트래킹으로 분류되었지만 일단 재귀로 먼저 시도해보았다. import java.io.*; import java.util.Arrays; import java.util.StringTokenizer; import java.util.HashSet; import java.util.stream.Collectors; public class Main { private static int zeros = 0; private static HashSet set; // 입력 : 9 X 9 개의 수 입력 (0 ~ 9) private static int[][] sudoku = new int[9][9]; public static..
문제 출처: https://www.acmicpc.net/problem/4779 문제 시도 초반에 재귀를 Top-down으로 구현하려고 했는데, 오랜만의 재귀라 기억이 나지 않아 Bottom-Up으로 구현했다. import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); String[] kantour = new String[13]; kantour[0] = "-"; for(int i = 1; i
문제 출처: https://www.acmicpc.net/problem/12789 문제 시도 아래의 구조에 따라 코드를 작성했다. 1) Stack에 들어있는지 checker 점검 2) checker에 기록됐고, Stack 마지막에 존재한다면 Nice 3) checker에 기록됐지만, Stack 마지막에 없다면 Sad 4) checker에 없다면, 다음 번호표가 나올 때까지 넘기기 import java.io.*; import java.util.Stack; import java.util.StringTokenizer; public class Main { public static void main(String[] arsg) throws IOException { BufferedReader br = new Buffe..
문제 출처: https://www.acmicpc.net/problem/2485 문제 시도 // 가로수 수: N (3 ~ 100,000) // 가로수 위치: x ( ~ 1,000,000,000) // 방정식? -> f(n) = a*(n-1) + b // 방정식 사용 시 b는 무조건 첫 번째로 주어진 가로수 위치 // 이후 가로수 위치를 받을 때마다 자신 바로 이전의 가로수 위치와의 거리를 계산 // 가장 최소 차이를 보이는 거리를 증가 기준점 a로 삼고, a가 1이 될 때까지 1씩 빼기 import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new Bu..