developer 20

[Redis] Redis + RedisInsight

1. 개념Redis: 메모리 기반 초고속 데이터 저장소RedisInsight: Redis의 시각화(GUI) 도구 2. 도커 설치 방법Docker hub 공식 문서 - How to use this image 활용 (이미지가 없어도 다운로드 후 자동 실행) 3. Redis Insight를 Redis에 연결하기1) localhost:5540 접속 및 약관 동의2) Add database - Connection Settings에서 다음과 같이 설정 (Host 입력 란 주의)3) 연결 실패 시, Docker Desktop에서 redis 컨테이너가 6379 포트에서 잘 실행되고 있는지 확인포트에 6379:6379가 표시되어 있지 않은 경우, 컨테이너 삭제 후 터미널에서 수동 실행docker run -it -d --..

Redis 2026.03.27

[AWS] (3부) Auto-Scaling 테스트, 도메인 부여, HTTPS 적용

1. Scale-Out 실습ec2 접속 후, cpu 사용량을 100%로 늘리는 명령어 실행yes > /dev/null &이후 실제 부하 확인top -bn1 | head -5결과 해석cpu 사용률 = 사용자 6.7% + 시스템 43.3% = 50.0% (6.7 us, 43.3 sy)시간별 평균 부하 (1분/5분/15분): 0.98, 0.45, 0.20메모리 사용량- 총량 1846.6MB (t4g.small 또는 t3.small 수준)- 사용 중 706MB- OS가 캐시로 활용 중인 메모리 1047MBAuto Scaling Group에서 확인 - ec2 인스턴스가 2개가 됨 2. Scale-In 실습ec2 콘솔에서 다음 명령어 입력kill %1결과(단, scale-in은 수십 분 걸릴 수 있음)scale-..

카테고리 없음 2026.03.19

[알고리즘] 콜라 문제: 수학적으로 닫힌 공식으로 환원하기

문제 본문오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다.정답은 아무에게도 말하지 마세요.콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가?단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다.문제를 풀던 상빈이는 콜라 문제의 완벽한 해답을 찾았습니다. 상빈이가 푼 방법은 아래 그림과 같습니다. 우선 콜라 빈 병 20병을 가져가서 10병을 받습니다. 받은 10병을 모두 마신 뒤, 가져가서 5병을 받습니다. 5병 중 4병을 모두 마신 뒤 가져가서 2병을 받고, 또 2병을 모두 마신 뒤 가져가서 1병을 받습니다. 받은 1병과 5병을 받았을 때 남은 1병을 모두 마신 뒤 가져가면 1병을 또 받을 수 있습니다. ..

Algorithm 2026.03.17

[알고리즘] 가장 가까운 같은 글자 찾기: HashMap으로 이중 루프 예방하기

문제 본문문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 ..

Algorithm 2026.03.06

[알고리즘] 두 개 뽑아서 더하기: Set 인터페이스 활용

문제 요구사항정수 배열 numbers가 주어집니다. numbers에서 서로 다른 인덱스에 있는 두 개의 수를 뽑아 더해서 만들 수 있는 모든 수를 배열에 오름차순으로 담아 return 하도록 solution 함수를 완성해주세요.제한사항numbers의 길이는 2 이상 100 이하입니다.numbers의 모든 수는 0 이상 100 이하입니다. 3줄 접근서로 다른 인덱스에 있는 모든 두 수를 더하고, 순서를 보장해 주는 Treeset에 더한다.set에 담긴 요소들을 배열에 복사한다.배열을 출력한다.나의 풀이import java.util.Set;import java.util.TreeSet;class Solution { public int[] solution(int[] numbers) { ..

Algorithm 2026.03.05

[Spring Plus] JPQL을 Querydsl로 변환하기

목표JPQL로 작성된 아래 메서드의 쿼리문을 Querydsl로 변환하자. 상황1. Todo 조회 시 연관된 엔티티인 user를 left join으로 가져옴: N+1 문제 발생 가능2. Querydsl 관련 종속성 및 QuerydslConfig 없음: 추가 필요3. 연관 객체로 가져오는 user의 데이터 중에서 일부만 사용하여 dto로 재가공: db에서 조회할 때부터 dto projection 적용 해결 방법1. build.gradle에 종속성 추가 2. QuerydslConfig.java 파일 추가 3. TodoCustomRepository.java 및 Querydsl 적용할 db 조회 메서드 생성 4. 3의 구현체인 TodoCustomRepositoryImpl 및 Querydsl 쿼리문 작성 5. ..

[Spring Plus] JPA Cascade 옵션 지정하기

상황할 일을 새로 저장할 시, 할 일을 생성한 유저는 담당자로 자동 등록되어야 합니다.JPA의 cascade 기능을 활용해 할 일을 생성한 유저가 담당자로 등록될 수 있게 해주세요.해결 방법하나의 할일은 여러 담당자를 가진다(리스트 형태). 따라서 할일이 생성될 때 할일을 생성한 사용자는 managers라는 list에 add 되어야 한다. 할 일이 생성될 때만 유저를 담당자 리스트에 넣어주면 되므로, @OneToMany의 Cascade 옵션을 Cascade = Cascade.PERSIST로 지정해주자. 속성 값설명Cascade.ALL모든 변경(저장, 병합, 삭제, 재로딩)이 관련 엔티티에 적용됩니다. Cascade.DETACH엔티티가 detach 상태로 변경될 때, 관련 엔티티도 함께 변경됩니다. Ca..

[Spring Plus] AOP의 동작 흐름 제어하기

상황AOP가 잘못 동작하고 있어요!UserAdminController 클래스의 changeUserRole() 메소드가 실행 전 동작해야해요.AdminAccessLoggingAspect 클래스에 있는 AOP가 개발 의도에 맞도록 코드를 수정해주세요. 원인 분석1. AOP 기능을 구현하기 위한 의존성이 있는지 확인한다.없으면 추가해 준다. 2. AOP 어노테이션이 After로 설정되어 있어 changeUserRole 메서드가 UserController.getUser()이라는 JoinPoint의 실행 전이 아니라 실행 후 동작한다.해결 방법해당 Aspect의 @After 어노테이션을 @Before 어노테이션으로 바꿔준다. 잘 적용되었는지 확인해 보자.UserController.getUser() 메서드를 호출하..

[Spring Plus] Troubleshooting - @Transactional

문제 요약/todos API 호출 시 jakarta.servlet.ServletException 발생 문제 상세에러 로그 원문jakarta.servlet.ServletException: Request processing failed: org.springframework.orm.jpa.JpaSystemException: could not execute statement [Connection is read-only. Queries leading to data modification are not allowed] [insert into todos (contents,created_at,modified_at,title,user_id,weather) values (?,?,?,?,?,?)] 문제 원인 추정 Conne..