전체 글 100

AI한테 브라우저를 통째로 맡겨봤다 - Aside 이틀 사용기와 보안 체크리스트

요즘 이틀째 Aside + Claude 조합으로 브라우저를 쓰고 있다.메일 확인, 블로그 통계 정리, 귀찮은 반복 작업까지.말로 시키면 진짜 알아서 한다. 솔직히 생각보다 너무 편하다. 그런데 쓰면 쓸수록 이런 생각이 들었다."이거... 내 계정 전부를 AI한테 맡긴 거 아닌가?" 그래서 Aside가 뭔지부터 설치, 사용법,그리고 쓰면서 보인 보안상 주의할 점까지 한 번에 정리해봤다. ✅ Aside가 뭔데? Aside는 Aside Computer Inc.가 만든 AI 브라우저다. Y Combinator 2025 가을 배치 출신 스타트업이다.겉보기엔 크롬이랑 비슷한 브라우저인데, 안에 AI 에이전트가 들어 있다. 기존 AI 에이전트랑 제일 다른 점은 연동(integration)이 아니라 "직접 사용"..

AI 2026.10.05

3주간 새벽마다 500이 떴다 - 슬로우 쿼리 전수 감사 실전기

새벽 4시 47분. 알림이 왔다. [PROD] 500 INTERNAL_SERVER_ERRORCannotCreateTransactionException 트랜잭션을 시작하려는데 커넥션을 못 얻었다는 뜻이다. 처음엔 그러려니 했다. (((((흐린눈))))) 그런데 이게 3주 동안 여덟 번 반복됐다.7/31 8/1 8/6 8/8 8/12 8/13 8/18 8/20 이상한 건 규칙이었다. 매일도 아니고, 5일씩 조용하다가 이틀 연속 나기도 했다. 시간대만 새벽 4시 40분대로 거의 고정이었다. 나는 작년에 슬로우 쿼리 로그 분석부터 인덱스 튜닝까지 라는 글을 썼었다. 도구는 그때랑 똑같이 썼는데, 이번엔 결론이 전혀 다른 데서 나왔다. ✅ 가설을 세우고 하나씩 지웠다 "커넥션을 못 얻는다"는..

DB/SQL 2026.09.08

2025년 회고, 이슈는 비동기였지만, 책임은 동기였다

올해를 돌아보면, 계획은 분명 세웠는데 그 계획대로 흘러간 적은 거의 없었다.운영 이슈는 생각보다 자주 터졌고, 프로젝트는 “이것만 하면 끝”이라는 말을 믿으면 안 된다는 것도 다시 배웠다.게다가 퇴근 후에는 개인 사정으로 또 다른 일정이 자연스럽게 이어졌다.이상하게도 일이 몰릴 때는 항상 동시에 몰린다. 그리고 그때마다 “지금 이 타이밍에?”라는 말이 절로 나온다. 이 글은 열심히 했다는 자기 위로용 회고라기보다는,왜 이렇게 일이 많아졌고, 그 상황에서 어떤 선택을 했는지를 기록한 글이다.잘 버틴 날도 있었고, 솔직히 좀 벅찼던 날도 있었다.그래도 결국은 다 끝냈고, 그래서 이렇게 회고를 쓴다. 1️⃣ 운영 이슈: 숫자로 보이는 것보다 훨씬 많은 일올해 운영 이슈로 정식 등록된 건 243건이고, 그중 ..

회고 2026.01.01

슬로우 쿼리 로그 분석부터 인덱스 튜닝까지: 성능 최적화 실전기

처음에는 몰랐지만, 데이터가 점점 많아지며 실서비스에서 페이지 로딩 속도가 체감될 정도로 느려지기 시작...!!이제는 더 이상 안되겠다 싶어 MySQL 슬로우 쿼리 로그를 분석하게 되었다. 이번 포스팅에서는 슬로우 쿼리 분석 도구인 pt-query-digest 를 활용해 문제를 진단하고, 쿼리 개선 및 인덱스 튜닝을 통해 성능을 최적화한 과정을 공유한다. ✅ 1. 문제 인지: 느려진 페이지 응답 시간운영 중 다음과 같은 문제가 포착되었다.특정 페이지에서 데이터 조회 시간이 3초 이상 소요DB 조회 쿼리 성능 병목 가능성 의심Azure 포털에서 슬로우 쿼리 로그 확인 가능👉 참고: Azure MySQL 슬로우 쿼리 진단 가이드 쿼리 성능 문제 해결 - Azure Database for MySQL - F..

DB 2025.07.08

ArrayDeque는 언제 LinkedList보다 나을까?

자바에서 Queue를 구현할 때 흔히 LinkedList를 사용하는 경우가 많다. 나도 처음엔 아무 생각 없이 이렇게 작성했다:Queue queue = new LinkedList(); 하지만 이 코드는 충분히 동작은 하더라도, 성능 면에서 최적의 선택은 아니다.이번 글에서는 왜 ArrayDeque가 LinkedList보다 더 나은 선택인지, 그리고 실무에서 어떻게 적용할 수 있을지를 정리해봤다. 1. ArrayDeque가 더 나은 이유✅  ArrayDeque는 내부적으로 배열 기반 LinkedList는 각 요소가 노드 객체로 연결되는 구조메모리 사용량이 더 많다.캐시 적중률도 낮다.따라서 삽입, 삭제가 빠를 것처럼 보여도 실제론 느릴 수 있다.반면 ArrayDeque는 동적 배열 구조를 사용하기 때문에데..

Java 2025.04.01

"왜 이렇게 돌아가지?" 디미터의 법칙이 실무에서 중요한 이유

개발하면서 이런 코드 한 번쯤은 보신 적 있지 않나요? String city = order.getCustomer().getAddress().getCity(); 처음 봤을 땐 별문제 없어 보이지만, 나중에 유지보수하다 보면 이런 생각이 들기 시작합니다. “어디서부터 잘못됐지?”“이거 nullPointer 나면 어디가 문제인 거지?”“이거 구조 바뀌면 코드 전부 뜯어고쳐야 하잖아…”  이런 문제를 막기 위해 나온 개념이 바로 디미터의 법칙(Law of Demeter)입니다.🧠 디미터의 법칙이란? "너와 가까운 친구와만 이야기해라!"  객체는 자신이 직접 알고 있는 객체와만 상호작용해야 한다는 원칙입니다. 쉽게 말하면, 체인처럼 객체를 줄줄이 이어서 호출하지 말라는 이야기 !// ❌ 디미터의 법칙을 어긴 코..

JPA Entity Timestamp 관리 전략: DB Level vs Application Level

JPA Entity에서 생성 시간(created_at)과 수정 시간(updated_at)을 관리하는 방식은 크게 두 가지로, 데이터베이스 레벨(columnDefinition)과 애플리케이션 레벨(@CreationTimestamp/@UpdateTimestamp)입니다. 각 방식의 특징과 적합한 사용 환경에 대해 알아보겠습니다.1. 데이터베이스 레벨 관리 (columnDefinition)1.1 구현 방식@Column(name = "created_at", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")@Generated(event = EventType.INSERT)private Instant createdAt;@Column(name = "updated_a..

DB/JPA 2025.01.20

Java Pattern 클래스 사용 시 반드시 알아야 할 주의점

Java에서 정규 표현식을 다룰 때 Pattern 클래스는 매우 중요한 역할을 한다. 하지만 Pattern을 잘못 사용하면 성능 저하나 예상치 못한 동작이 발생할 수 있다. 나는 실제로 프로젝트에서 정규식을 사용할 때 이러한 문제로 지적을 받은 경험이 있었고, 이를 해결하기 위해 Pattern 사용 시의 몇 가지 주의사항을 정리하게 되었다.   Pattern 클래스란 무엇인가?Pattern 클래스는 Java에서 정규 표현식을 다루기 위한 클래스이다. 주로 Pattern.compile(String regex) 메서드를 통해 정규식을 컴파일하고, 이를 기반으로 생성된 Matcher 객체를 사용해 문자열 매칭 작업을 수행한다. 예를 들어, 다음과 같은 코드로 정규식을 사용할 수 있다.Pattern patter..

Java 2025.01.13

효율적인 테스트 코드를 위한 도구 선택: AssertJ와 JUnit의 차이

테스트 코드를 작성할 때 사용하는 AssertJ와 JUnit의 기본 assert 메서드는 모두 검증 로직을 작성하기 위한 도구지만, 그 사용 방식과 기능, 제공하는 개발 경험에서 차이가 있다. 이 두 가지를 디테일하게 비교하여 설명하면 아래와 같다. AssertJAssertJ는 플루언트 API 스타일과 체이닝 방식으로 구성된 검증 라이브러리로, 테스트 코드의 가독성을 높이고, 복잡한 데이터 타입 검증을 쉽게 처리할 수 있도록 설계되었다. 1-1. 주요 특징플루언트 인터페이스: 메서드를 체이닝으로 연결하여 가독성이 높다. 테스트 코드의 의도를 자연스럽게 드러낼 수 있어 읽기 쉽다.데이터 타입 지원: 기본 데이터 타입뿐만 아니라 리스트, 맵, 배열, 날짜, 예외 등 다양한 데이터 타입을 위한 검증 메서드를 ..

Java 2025.01.10

Spring Boot 'InvalidConfigDataPropertyException' 해결하기

org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property 'spring.profiles.active' imported from location 'class path resource [application-dev.yml]' is invalid in a profile specific resource [origin: class path resource [application-dev.yml] - 3:13] 이 에러는 Spring Boot의 설정 파일 관리에서 잘못된 위치에 특정 프로퍼티를 정의했을 때 발생한다. 특히 spring.profiles.active와 관련된 설정 문제일 가능성이 크다.   에러 원인 분석spr..

error-log 2024.12.22