프로젝트에서 조회수 기능을 구현해야 했다.처음에는 단순하게 조회수 컬럼을 게시판 테이블에 추가하여, 게시글을 조회할 때마다 조회수를 1씩 증가시키는 방식으로 설계했다. 예를 들면 다음과 같은 구조다. @Entitypublic class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String content; private int views; public void increaseViews() { this.views += 1; }}그래서 GET 요청이 올 때마다 조회수를 단순히 증가시키는 접근으로..
전체 글
기록 겸 공부 블로그입니다. 문제를 해결해 나아가는 과정을 기록하고 있어요. 잘못된 부분이 있으면 자유롭게 댓글 달아 주세요👍계층 구조에 대한 DB를 찾다가 알게 된 구조흔히 사용하는 인접리스트가 있는데 DB에서 자식만 가져오는 것이 아닌 자손까지 가져온다고 했을 때, 계층이 너무 깊으면 self join을 많이해서 쿼리 구조가 복잡하다는 단점이 있다. 그래서 다른 방법을 찾다가 여기까지 왔다. 자기 자신을 포함해서 자식 노드를 모두 저장하는 DB 형태 예를 들어 계층구조가 이런 형태면 DB형태가 ancestor, descendant, length가 저장이 된다. length는 우리가 dfs를 풀 때 depth를 사용하는데 이와 같다고 생각하면 될 것 같다. 그래서 만약 내가 조상일 때 ancestor=1일때라는 조건을 걸어서 select를 하면 되니까 자손을 모두 가져오기도 편하고자식을 가져올 때도 depth=1이라는 조..
언제 발생?1:N, N:1, 양방향 관계 내 경우는?나의 경우 user, userinfo를 1:1 양방향으로 해놓았는데 여기서 문제 발생 문제 해결 방법1. @JsonManagedReference와 @JsonBackReference를 사용@JsonManagedReference를 부모 클래스, 연관 관계 주인의 반대편@JsonBackReference를 자식 클래스, 연관 관계의 주인(외래 키가 있는 곳)에 붙인다. 2. DTO를 객체를 만들어서 반환한다. -> 선택!-> 이걸로 시도해서 해결-> 사실 DTO를 만들어야 해야하는데, 비즈니스 로직 같은 복잡한 코드는 없고 순수하게 전달해야할 때 사용한다~라고만 알고 있었다. 개념만 알고 있었는데 실제 사용해야하는 이유를 알게 되었다.
⏰문제https://school.programmers.co.kr/learn/courses/30/lessons/258712 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 선물을 직접 전하기 힘들 때 카카오톡 선물하기 기능을 이용해 축하 선물을 보낼 수 있습니다. 당신의 친구들이 이번 달까지 선물을 주고받은 기록을 바탕으로 다음 달에 누가 선물을 많이 받을지 예측하려고 합니다. - 두 사람 사이에 더 많은 선물을 준 사람이 선물을 받음 - 선물 기록이 없거나 주고받은 수가 같다면, 선물 지수가 더 큰 사람이 선물 지수가 더 작은 사람에게 받음 - 선물..
🐛문제Test에 아래와 같은 코드를 작성했다. @DisplayName("updateArticle : 블로그 글 수정에 성공한다.")@Testpublic void updateArticle() throws Exception {} 원래라면 실행탭에 `updateArticle : 블로그 글 수정에 성공한다.`라는 글이 떠야 하는데 아래 사진과 같이 아무것도 뜨지 않았다! 🛠️ 해결 방법1. `File` -> `Settings` -> `Build, Execution, Deployment` -> `Build Tools` -> `Gradle`2. `Gradle Projects` -> `Run tests using`에서 기존에 `Gradle` -> `IntelliJ IDEA`로 바꾼다. 수정했더니 아래와 같..
🐛문제`@AllArgsConstructor`, `@Getter` 등 롬복을 인식 못하는 오류가 생겼다. 🛠️ 해결 방법1. Lombok 의존성 확인프로젝트에서 gradle을 사용해서 build.gradle을 확인했다. dependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'} 2. IDE Lombok 플러그인 확인1. `File` -> `Settings` -> `Plugins`Lombok 플러그인이 설치되어 있는지 확인2. `File` -> `Settings` -> `Build, Execution, Deployment` -> `Compiler` -> `Annot..
⏰문제https://www.acmicpc.net/problem/23796 💡풀이1. 정답용으로 빈칸인 answer_map 생성, 방향에 따라 switch로 분리- 배열은 long[][]을 사용하기2. for문을 돌면서 한 줄씩 탐색해서 0이 아닌 데이터를 Queue에 집어넣는다. 3. Queue에 있는 내용을 tmp = q.poll()하고 다음 숫자를 next = q.peek()으로 뽑아내면서,숫자가 똑같으면 answer_map에 2배를 해서 집어넣고, next를 Queue에서 뽑아야 하므로 poll로 뽑아낸다. 다르면 tmp만 집어넣는다. 4. 마지막에는 peek()을 할 수 없어서 null처리를 해주었다. ⌨️ 코드import java.io.BufferedReader;import java.io.I..
https://www.acmicpc.net/problem/2206 ⏰문제N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로로 이동하려 한다. 최단경로는 맵에서 가장 적은 개수의 칸을 지나는 경로를 말하는데, 이때 시작하는 칸과 끝나는 칸도 포함해서 센다.만약에 이동하는 도중에 한 개의 벽을 부수고 이동하는 것이 좀 더 경로가 짧아진다면, 벽을 한 개 까지 부수고 이동하여도 된다.한 칸에서 이동할 수 있는 칸은 상하좌우로 인접한 칸이다.맵이 주어졌을 때, 최단 경로를 구해 내는 프로그램을 작성하시오.입력첫째 줄에 N(1 ≤ N ≤ 1,000), M(..
1. EC2 인스턴스 생성 TEST용으로 간단한 EC2를 만들어보자. 키 페어는 설정해주고 나머지 옵션은 default로 둔다. 키 페어 생성 방법 더보기 키페어가 없다면 하나 만들어주자. 있다면 기존 걸 선택해도 괜찮다. 나는 `새 키 페어 생성`을 눌러 키 페어를 생성하겠다. `키 페어 생성` 클릭 2. PuTTY 다운 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html Download PuTTY: latest release (0.80) This page contains download links for the latest released version of PuTTY. Currently this is 0.80, released on 202..
인강들으면서 Cloudwatch를 실습했는데, 윈도우라 안 되는 부분이 있었다. 그런데 내가 구글링을 잘 못하는 건지 관련된 자세한 글이 없어서 까먹을까봐 포스팅한다. 1. EC2 인스턴스 생성 Test용으로 만들거니까 정말 단순한 EC2 인스턴스를 만들어보자 좌측 탭의 `인스턴스` > `인스턴스` 클릭 `인스턴스 시작` 클릭 참고로 지역은 서울로 설정함 이름 설정해주기 나머지는 다 default로 해주고 키페어도 설정해주고 인스턴스를 생성하자! 키페어 생성 방법 더보기 키페어가 없다면 하나 만들어주자. 있다면 기존 걸 선택해도 괜찮다. 나는 `새 키 페어 생성`을 눌러 키 페어를 생성하겠다. `키 페어 생성` 클릭 방금 인스턴스를 만들어서 텅텅 비었다. 이제 여기에 Local PC에 있는 파일을 전송해..