분류 전체보기 224

Vim 마스터의 길...

작년에 인텔리제이 서브로 vscode대신 lazyvim을 사용하려고 했는데 진입장벽을 넘지 못하고 포기했다..하지만 다시 또 온다... vim 마스터가 될거야..lazyvim을 재설치하고 다시 한 번 써보려했지만 단축키 기억도 제대로 못하는데 사용법 익히는게 너무 막막하다..일단 인텔리제이에IdeaVim 을 설치했다...그리고 몇년째 곧잘 활용 못하는 Vimium을 적극 사용해보기로...먼저 Vimium 단축키다...현재 페이지 탐색?: 모든 단축키 목록이 담긴 도움말 표시.h: 왼쪽으로 스크롤.j: 아래로 스크롤.k: 위로 스크롤.l: 오른쪽으로 스크롤.gg: 페이지 맨 위로 이동.G: 페이지 맨 아래로 이동.d: 페이지 반만큼 아래로 스크롤.u: 페이지 반만큼 위로 스크롤.f: 현재 탭에서 링크 열기..

기타 2025.03.03

순서복잡도 (Time Complexity)

순서복잡도가 뭐고, 왜 중요한가?  뭔지 순서 복잡도는 알고리즘이나 코드가 실행되는 시간이나 연산 횟수를 데이터 크기(n)에 따라 수학적으로 표현한 것이다. 예를 들어, O(1)은 데이터 크기와 상관없이 항상 일정한 시간이 걸리고, O(n)은 데이터가 커질 수록 비례해서 시간이 늘어나는 것이다.  => 코드가 얼마나 빨리 끝나느냐를 데이터 크기에 따라 숫자로 나타낸 것 왜 중요한지  시간과 돈이 걸려있다.  1. 서비스 성능 : 사용자가 10명일 땐 O(n)을 써도 괜찮다. 100만 명이 되면 서버가 터질 수도 있다. 예를 들어, 책 목록 검색을 List로 하면 느려지는데 Set으로 바꾸면 빠르게 응답 가능하다.  2. 확장성: 처음엔 데이터 적어서 문제없었던 게 나중에 커지면 망가질 수 있다. 순서복잡..

기타 2025.03.02

List와 Set의 차이

List와 Set의 차이는 기본 중에 기본이다. 범죄 신고는 112, 화재 신고는 119 같은 기본 중에 기본이다.. Set은 데이터 중복을 허용하지 않고 순서도 보장하지 않는다.        - Set은 Hash table로 구현되는데, 그 이유는 ha h table이 Set과 같은 특징을 갖고 있기 때문이다.   Hash table에서는 Key가 중복될 수 없다. 그리고 데이터는 순차적이 아니라 랜덤하게 저장된다. 이런 hash table의 특징이 Set의 특징과 일치한다. 따라서 Set을 구현할 때는 Hash table의 Key에 데이터를 저장하는 형태로 구현하게 된다.   O(1)인 Set은 얼마나 많은 데이터를 hash table에 저장하고 있는지와 상관없이 늘 빠르게 키를 검색할 수 있다. 따..

기타 2025.03.02

제네릭 초기화

스프링에서 리스트나 맵 같은 제네릭 컬렉션을 사용할 때 항상 초기화해야 하느냐는 질문에 대해, 답은 상황에 따라 다르지만 일반적으로 "예, 초기화하는 것이 좋다"고 할 수 있습니다. 다만, 스프링의 특정 기능(예: 의존성 주입)이나 코드 작성 방식에 따라 초기화가 필수적이지 않을 수도 있습니다. 좀 더 자세히 설명해볼게요.1. 기본적인 초기화 필요성자바에서 리스트나 맵 같은 컬렉션 객체는 선언만으로는 실제 객체가 생성되지 않습니다. 예를 들어:List myList;myList.add("hello"); // NullPointerException 발생위 코드처럼 myList를 초기화하지 않으면 null 상태로 남아있고, 사용하려 할 때 NullPointerException이 발생합니다. 따라서 컬렉션을 직접..

GPT Archiving 2025.02.28

계층별 @Transactional

네, 퍼사드 계층에서의 @Transactional 적용 방식은 그대로 서비스 계층이나 다른 계층에도 동일하게 적용할 수 있습니다.하지만, 각 계층의 역할과 트랜잭션의 범위를 고려하여 적용하는 것이 중요합니다.아래 정리를 보면 더 확실하게 이해될 거예요.🚀 @Transactional을 적용할 때 고려할 사항각 계층별로 @Transactional을 어떻게 적용해야 하는지 역할과 책임에 맞게 조정해야 합니다.1. 퍼사드(Facade) 계층에서 @Transactional 적용퍼사드 계층은 여러 서비스 계층을 조합하는 역할이므로, 일반적으로 트랜잭션을 직접 걸지 않음.하지만, 비즈니스 로직 단위가 하나의 트랜잭션으로 묶여야 한다면 퍼사드에서 @Transactional을 걸 수 있음.외부 시스템 연동(Kafka,..

GPT Archiving 2025.02.12

어떻게 공부할 것인가.... 1

캐시 알고리즘 마냥..현시점에 필요한..공부할 걸 리스트업 하고,우선순위(업무, 업무 연관, 재미, 호기심) 줄 세운 뒤딱딱 골라서적절히 스킵하고필요한 만큼만 공부하고 그만!!!! 멈출 줄 아는 것도 아는 것.다음으로 넘어가 고투넥스트.(*그 판단력도 실력이다.) 문법 공부하는 것보다 중요한 건,..어떻게 쓸 것인가? 생각하면서..    많이 시도하고 반복할수록..결과가 점차 안정됨극단적 편차가 줄어듦본질적 평균이나 패턴에 수렴함

기타 2025.02.11

펌)MySQL 쓰면서 하지 말아야 할 것 17가지 [13~17] With GPT

https://blog.lael.be/post/370 MySQL 쓰면서 하지 말아야 할 것 17가지*MySQL 쓰면서 하지 말아야 할 것 17가지* 권장사항이다. 이것을 이해하면 당신의 어플리케이션이 더 나은 성능을 발휘할 것이다. 다만 이것이 사람의 실력을 판단하는 척도로 사용되서는 안 될 것blog.lael.be 13. Deep Scan 고려하지 않는 것- 검색엔진 크러울러가 쓸고 지나갈 수 있다.웹 어플리케이션에서 페이징을 사용할 때, 컴색엔진 크롤러(bot)가 모든 페이지를 크롤링할 수 있음특히 ORDER BY + LIMIT 을 사용하는 쿼리는 성능 저하 유발할 수 있음크롤러가 수많은 페이지를 요청하면 db는 불필요 연산 수행해야하므로 부하 심해짐;; ex: 크롤러가 모든 페이지 크롤링하는 경우S..

DB 2025.02.09

펌)MySQL 쓰면서 하지 말아야 할 것 17가지 [7~12] With GPT

https://blog.lael.be/post/370 MySQL 쓰면서 하지 말아야 할 것 17가지*MySQL 쓰면서 하지 말아야 할 것 17가지* 권장사항이다. 이것을 이해하면 당신의 어플리케이션이 더 나은 성능을 발휘할 것이다. 다만 이것이 사람의 실력을 판단하는 척도로 사용되서는 안 될 것blog.lael.be 7. 인덱스 레이아웃 이해 못 하는 것- 제대로 인덱스랑 스토리지 엔진 선택하려면 공부 좀 해인덱스란?      - DB에서 데이터 빠르게 찾기 위한 자료구조     - 어떤 인덱스를 사용하느냐에 따라 성능 차이가 큼     - 스토리지 엔진에 따라 인덱스 구현 방식이 다름 ( MyISAM vs InnoDB 등) 스토리지 엔진별 인덱스 방식 비교엔진기본 인덱스 구조특징InnoDB Clust..

DB 2025.02.09

펌)MySQL 쓰면서 하지 말아야 할 것 17가지 [1~6] With Claude

https://blog.lael.be/post/370 MySQL 쓰면서 하지 말아야 할 것 17가지*MySQL 쓰면서 하지 말아야 할 것 17가지* 권장사항이다. 이것을 이해하면 당신의 어플리케이션이 더 나은 성능을 발휘할 것이다. 다만 이것이 사람의 실력을 판단하는 척도로 사용되서는 안 될 것blog.lael.be 1. 작게 생각하기- 조만간 규모가 커질거라면 MySQL ecosystem을 봐야된다.규모가 큰 서비스란 일반적으로 일일 활성 사용자(DAU) 10만명 이상, 초당 트랜잭션(QPS) 1000건 이상을 의미한다.     이렇게 규모가 커지면 단일 MySQL 인스턴스로는 감당이 어려워지고 확장성이 필수적으로 고려되어야 한다. MySQL ecosystem이란 복제(Replicaion), 파티셔닝,..

DB 2025.02.09

Wrapper Class

​객체처럼 쓰기 위해객체처럼 써야 할 때 기본형을 감싸는 역할기본형 (int)은 가볍고 성능이 좋다.하지만 객체로 다룰 수 없다따라서 컬렉션 (List, Map 등)에는 넣지 못한다.래퍼 클래스 (Integer)는 기본형을 객체로 감싸서 컬렉션에 넣거나null을 다룰 수 있게 해준다.또 자동 박싱/언박싱 덕분에 기본형처럼 쓸 수도 있다.1. DTO에서 Integer 를 사용하면?DTO에서 Integer를 사용하면 해당 DTO 객체 내부에 또 다른 Integer 객체가 존재하는 구조가 됨.public class SampleDTO { private Integer number; public SampleDTO(Integer number) { this.number = number; }..

Java 2025.02.09