![[Ubuntu] ssh 원격접속 보안 강화](https://blog.kakaocdn.net/dn/vOZdu/btsLzqF56aG/NTpSpB9fXfkkt4pbYiRsTk/img.jpg)
![[DB 성능 최적화] 인덱스(Index)](https://blog.kakaocdn.net/dn/nA2td/btsI9RE76dJ/L4bSgASjdtfHqK9KGAAC4k/img.png)
![[JPA] 병합(Merge)과 변경 감지(Dirty Checking)](https://blog.kakaocdn.net/dn/bFZDNu/btsIWaxR2k8/cSvhbm9EekSz6ubAKDeTkK/img.png)
![[Linux] 프로세스와 시그널](https://blog.kakaocdn.net/dn/bkg05L/btsKDFCOXxP/e8zaWDdfLamdv5yM8KsPZ1/img.jpg)
![[Docker] Docker Compose를 이용한 SpringBoot + MySQL + Redis 컨테이너 동시에 띄우기](https://blog.kakaocdn.net/dn/bQ4rTl/btsJfoCTWhU/Cfi1RaJSboO8ccgtmJepX1/img.webp)
![[Github Actions] 기본 문법 + 스프링부트 프로젝트 배포 자동화](https://blog.kakaocdn.net/dn/PPr6T/btsJtKAsSo9/rdlgK2vLTiqH2KUkdRBqkK/img.png)
![[Database] 트랜잭션 ACID, DB 연결구조와 세션](https://blog.kakaocdn.net/dn/c7kA33/btsFcQKD9PM/TAAAfUh62KENKRsO32rye0/img.png)
![[JAVA] 상속 - 타입 변환과 다형성(매우 중요)](https://blog.kakaocdn.net/dn/viEHP/btrVjnz9GER/zaV6B2QF28VWdHsPVapgZ1/img.jpg)
![[Linux / Ubuntu] VMware Tools 수동 설치](https://blog.kakaocdn.net/dn/cNmx0k/btsGbDbW1yY/767altqOB2ZCrUZi5Z3tC1/img.png)
![[JSP] IntelliJ 에서 JSP 개발환경 만들기](https://blog.kakaocdn.net/dn/cNQOvx/btsC7qtoxqm/UuNX5TxNKYHXQ3Wk18KFyk/img.png)
![[Git] 소스트리(Sourcetree)로 브랜치(Branch) 다루기](https://blog.kakaocdn.net/dn/1Ulru/btsCy6Do1i6/E5Ooi4C792QgEUJrdGQKAk/img.png)
![[컴퓨터 구조] 명령어의 구조와 주소 지정 방식](https://blog.kakaocdn.net/dn/wjHiK/btr2vnkUSMK/rbuw2sVIIN2RkhYhKkVdGK/img.jpg)

![[Spring 핵심원리 - 고급] 쓰레드 로컬(Thread Local)](https://blog.kakaocdn.net/dn/brYFzu/btsNfwC8WZm/sQKvnhxZIanRKLRAa3zztK/img.png)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.동시성 이슈동시성 이슈란, 하나의 자원에 여러 스레드가 동시에 접근하여 값을 수정하거나 조회하는 과정에서, 개발자가 의도한 대로 동작하지 않는 현상을 말한다.스프링에서 빈은 기본적으로 싱글톤 스코프이므로, 여러 요청에서 동일한 인스턴스를 공유하게 된다.이때, 싱글톤 빈 내부에 상태를 저장하는 필드가 있다면, 동시에 여러 요청이 들어올 경우 서로의 요청 데이터가 충돌하면서 동시성 이슈가 발생할 수 있다.이러한 상황에서는 ThreadLocal을 사용하여 각 쓰레드마다 독립적인 저장 공간을 제공함으로써 문제를 해결할 수 있다.import lombok.extern.slf4j.Slf4j;@Slf4jpublic class ..
![[java] 백준 1456번 문제(거의 소수)](https://blog.kakaocdn.net/dn/bQlV8i/btsNcY18IzY/2mCKZXY3XFKPiLSRIpzdfK/img.png)
원본 링크 : https://www.acmicpc.net/problem/1456문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;import java.util.StringTokenizer;public class Boj_1456{ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st =..
![[java] 소수 구하기(에라토스테네스의 체)](https://blog.kakaocdn.net/dn/ecUIuM/btsNcqY65x8/eN9xioI5JBhbcNlOqowy0K/img.png)
에라토스테네스의 체는 고대 그리스 수학자 에라토스테네스가 고안한 소수(Prime Number)를 빠르게 구하는 알고리즘이다.특정 수 N 이하의 모든 소수를 구할 때 매우 효율적이다.이 알고리즘의 시간 복잡도는 O(Nlog(logN))이다.핵심 아이디어- 2부터 시작해서, 아직 지워지지 않은 가장 작은 수를 소수로 기록한다.- 그 수의 배수들은 모두 지운다.- 이를 N까지 반복한다. 1. 크기가 N + 1인 배열을 선언한 후 인덱스 0과 1은 false 처리한다.N이 16이라고 가정하면 배열은 아래와 같다. 2. 인덱스 2부터 시작해서 N의 제곱근(=4)까지 해당 인덱스의 배수를 순차적으로 탐색한다. 값이 true라면 false로 바꿔준다.N의 제곱근까지만 탐색하는 이유어떤 수 N이 두 수 a와 b의 곱이..
![[DB 모델링] 쉬운 데이터베이스 모델링](https://blog.kakaocdn.net/dn/cvoAv0/btsNdBFikbf/Tw8hMIfNPrD3dkk8zf82B0/img.png)
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.가장 중요한 핵심 원칙DB 설계의 핵심은 '중복 없애기'이다.users 테이블id이름1박재성2김유찬 posts 테이블id제목내용작성자1[속보] 개발자 채용 확대내용1박재성2취업 꿀팁 공유합니다!내용2박재성............132어제 면접 보고 온 썰내용132박재성위의 표와 같이 게시글 데이터가 DB에 많이 쌓여있다고 가정하자. 어느 날 박재성이라는 사람이 박지성으로 개명을 했다.그래서 게시글에 작성된 작성자의 이름도 전부 박재성에서 박지성으로 고쳐주어야 한다. 그럼 위 게시글의 모든 데이터를 뒤져서 박재성이라는 이름을 전부 찾아서 박지성으로 고쳐야 한다. 이런 문제가 발생한 가장 근본적인 이유는 데이터 중복 때..
![[java] 백준 1541번 문제(잃어버린 괄호)](https://blog.kakaocdn.net/dn/5hm6N/btsNcMmlyrw/Vu9lTaJH41Ke4nPoxvsEw0/img.png)
원본 링크 : https://www.acmicpc.net/problem/1541문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;public class Boj_1541{ /* 10+20-30+40-50+60 = 10+20-(30+40)-(50+60) = 10+20-(30+40+50+60) */ public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRe..
![[java] 백준 1931번 문제(회의실 배정)](https://blog.kakaocdn.net/dn/xBHjd/btsNcvd2nxW/Lba9146mpsEwXakIRUm3B1/img.png)
원본 링크 : https://www.acmicpc.net/problem/1931문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.StringTokenizer;public class Boj_1931{ // 회의 클래스 static class Meeting { int startTime; // 회의 시작시간 int endTime; // 회의 종료시간 public Meeting(int startTime, int endTime) { ..
![[java] 백준 1715번 문제(카드 정렬하기)](https://blog.kakaocdn.net/dn/b3y7VC/btsNamPOeFf/dIqlIvmZCA7vYfTP5gwmTk/img.png)
원본 링크 : https://www.acmicpc.net/problem/1715문제설명 소스코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.PriorityQueue;public class Boj_1715{ public static void main(String[] args) throws IOException { PriorityQueue pq = new PriorityQueue(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ..
![[java] 백준 1744번 문제(수 묶기)](https://blog.kakaocdn.net/dn/49FC1/btsNaEpa5bg/ucp1BQ7mtmaJ9S8VQYjsX1/img.png)
원본 링크 : https://www.acmicpc.net/problem/1744문제설명 소스코드방법 1import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;public class Boj_1744{ public static void main(String[] args) throws IOException { List positives = new ArrayList(); // 2 이상 ..
![[JPA] @Builder.Default](https://blog.kakaocdn.net/dn/Cobk0/btsM6iG3kXO/SxKFjCenvMLgkUsT81OXq0/img.png)
@Builder.Default는 Lombok의 @Builder와 함께 사용할 때, 기본값이 무시되지 않도록 유지시켜주는 어노테이션이다.일반적으로 @Builder를 사용하면, 필드에 직접 초기화한 값이 무시된다.@Builderpublic class Product { private String name; private int price = 1000;}위와 같이 price = 1000을 설정했더라도, Product.builder().build()를 실행하면 price는 0이 된다.즉, 기본값 1000이 무시되는 것. 해결 방법@Builderpublic class Product { private String name; @Builder.Default private int price = ..
![[JPA] 엔티티 클래스에서 @Builder 위치](https://blog.kakaocdn.net/dn/DW2Rs/btsM7gHZ67o/DIfjTjnmMtzbGUJL7rUeK0/img.png)
@Builder를 생성자 위에 두는 방식@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@Entitypublic class Product extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String productNumber; private String name; private int price; @Builder // 생성자 위에 빌더 public Product(String productNumber, String name, int price) { this.produc..