MINIWIKI
CareerSideProjectBook&Study
  • ⚡README
  • 😃ME
    • Review
      • 2025 OKR & 회고 - 회사 없이도 먹고살 수 있는 상태가 된다
        • 2025년 19주차
        • 2025년 18주차
        • 2025년 17주차
        • 소설쓰기의 쓸모
        • 2025년 15주차
        • 2025년 14주차
        • 요즘 회사생활
        • 첫 페이지 작성!
        • 큰 코 다쳤다
        • 오랜만에 좋았던 하루
        • 악순환과 반복실패
        • 2025년 12주차
        • 2025년 11주차
        • 2025년 3월 6일
        • 2025년 3월 4일
        • 2025년 3월 1일
        • 2025년 2월 회고
        • 2025년 1-2월 책, 영화, 음악
        • 2025년 1-2월 회고 (PM)
        • 2025년 1-2월 회고 (콘제품)
          • (Merged) 2025 비즈니스
        • 2025년 1-2월 회고 (삶/사람)
        • 2025년 1-2월 회고 (기본)
        • (25.02) 고객 피드백 받기
        • 다시 전략 수정
        • 머리 속 복잡한 것들 끄적끄적
        • 변하지 않는 핵심 철학
        • 개별화 능력을 이용하는 방법
        • 파고들기
        • 예술가와 사업가
        • 강점
        • PM으로서의 전문성
        • 부동시
        • 이게 다 무슨 소용인가
        • 내가 가장 잘 전할 수 있는 메시지
        • 연말인사 타이밍
        • Attitude는 옷부터
        • 다시 시작
      • 2024 회고
        • 2024년 12월 4주차 (52/52)
        • 원한다고 생각했던 것들
        • 2024년 12월 3주차 (51/52)
        • 회사 vs. 퇴사
        • 2024년 12월 2주차 (50/52)
        • 2024년 11월 4주차 (47/52)
        • 2024년 11월 3주차 (46/52)
        • 2024년 11월 1주차 (44/52)
        • 혓바늘
        • 2024년 10월 3주차 (42/52)
        • 그냥, 요즘하고 있는 생각들
        • 2024년 10월 1주차 (40/52)
        • 2024년 9월 4주차 (39/52)
        • 2024년 9월 3주차 (38/52)
        • 2024년 9월 2주차 (37/52)
        • 2024년 9월 1주차 (36/52)
        • 2024년 8월 4주차 (35/52)
        • 잃어버린 보물창고
        • 분기별 프로젝트
        • 강점검사
        • 글쓰기
        • 이상적인 하루
        • 나와 아프리카
        • 한 때 나에게 힘이되었던 문장들
      • 2023 회고
        • 2023년 12월 5주차
        • 2023년 12월 4주차
        • 2023년 12월 3주차
        • 2023년 12월 2주차
        • 2023년 12월 3일
        • 2023년 12월 1주차
        • 2023년 11월 29일
        • 2023년 11월 28일
        • 2023년 11월 27일
        • 2023년 11월 18일
        • 2023년 11월 15일
        • 2023년 11월 12일
        • 2023년 11월 11일
        • 2023년 11월 1주차
        • 2023년 10월 3주차
        • 2023년 9월 4주차
        • 2023년 9월 3주차
        • 2023년 9월 2주차
        • 2023년 9월 1주차
        • 2023년 8월 4주차
        • 2023년 8월 2주차
        • 2023년 8월 1주차
        • 2023년 7월 4주차
        • 2023년 7월 3주차
        • 2023년 7월 2주차
        • 2023년 상반기 회고
        • 나태하고 욕심많은 인간은 어떻게 살아야 하나
        • 책 <어떻게 살아야 하는가>
        • 책 <당신은 결국 무엇이든 해내는 사람>
        • 복잡계를 살아가는 단순한 사람
        • 책 <모든것이 되는법>
        • 글로 신뢰를 얻었던 경험들
        • 기획은 나를 찾아가는 과정
        • 나는 왜 살아가는가
        • 장항준 감독으로부터 배우는 "삶을 대하는 자세"
        • 개발자가 말하는 감정에도 분석이 필요한 이유
      • 2022년 회고
        • problem map 작성하기
        • 삶에서 내가 해결하고 싶은 문제 (2)
        • 삶에서 내가 해결하고 싶은 문제 (1)
        • <삶의 문제> 지도 다시 꺼내보기
        • 지도 위의 29살
        • 매번 시간계획을 망치는 MBTI 'P형 인간'을 위한 5단계 인생관리법
        • 당신은 왜 프로그래밍을 공부하는가?
        • 아무 것도 아닌 내가 글을 쓰는 이유
        • 책 <여행의 이유>
        • 책 <붕대감기>
      • 2021년 회고
    • Career
      • [미리캔버스] AI 제품 PM
        • 선택과 집중
        • 어쩌면 내가 틀릴 수도 있다는 생각
        • 뾰족한 사람들과의 협업
        • AI기능 PPT로 온보딩
        • AI 제품에서 가장 중요한 것
      • [미리캔버스] 앱 PM
      • [미리캔버스] 소상공인 제품 PM
      • [미리캔버스] 2.0 PM
      • [홀로스탠딩] 백엔드 개발
      • [청년5.5] 안드로이드 개발
      • [가축대출사업] NGO Project PM
    • Insight
    • Interview
    • Public Writing
  • SIDE PROJECT
    • [Youtube] 메이킹필름
      • [Product] 청춘집 프로젝트
        • (v24.11) 청춘집 JTBD
          • (구) 청춘집 실행계획
          • (구) 플레이리스트 기획
            • 데이식스 전곡 타임라인
            • 챕터 구성
        • (v25.01) 청춘집 JTBD
          • 아이돌 굿즈 시장 조사 (공식)
          • 아이돌 굿즈 시장 조사 (비공식)
        • 제작 준비
          • 레퍼런스 - 오프라인 시집
          • a5 책 만들기
    • [Youtube] 마포구타자기
      • [mptw] JTBD
        • IKIGAI
      • [mptw] 채널 설정
        • 채널 이름 후보군
      • 시리즈 [읽는음악]
        • [읽는음악] 백로그
          • 노래 가사 콘텐츠 레퍼런스
        • ep1. 파노라마 - 이찬혁
          • 이찬혁 <ERROR>
        • ep2. 마지막 인사 (feat. 청하) - 이찬혁
        • ep3. 나의 바다에게 - 도영
        • ep4. Dattom - 백예린
        • ep5. REBEL HEART - IVE
        • ep6. Either way - IVE
        • ep7. 너와의 모든 지금 - 재쓰비(JAESSBEE)
        • ep8. 예뻤어 - DAY6
        • 6주차. 데이식스 시리즈
    • [IT] 공적인사적모임 플랫폼
      • 1. 우리 조직의 얼굴을 만들자
      • 2. 내 생에 첫 기획서 만들기 (feat. QA Driven Development)
    • [Meet] 공적인사적모임
    • [Youtube] 이상한나라의 개발자할무니
    • [Study] Disquiet PM 스터디 쿨피스
    • [IT] 서울 빵 맛집 잘알 테스트
    • [Meet] 얼리버드 모닝클럽
      • 홍보를 곁들인 2주일 운영후기
  • 잡학사전
    • 와인 원데이 클래스
    • 소설쓰기
      • <책> 소설쓰기의 모든 것 1 - 플롯과 구조
      • 유튜브 - 소설 쓰는 법
      • 강의들
      • 작가가 되려면 어떻게 해야해
    • AI
      • 생성형 AI
    • ComfyUI
      • Stable Diffusion
      • ComfyUI 준비, 설치, 설정
      • Module 구조에 대해 이해하기
      • ComfyUI
      • Core Node
    • 작사
      • 작사가 되는 법
    • 유튜브
      • 유튜버 스토리님의 부캐 성장기
      • 주언규 유튜브 초보편 (클래스101)
      • 주언규 유튜브 왕초보 편
    • 경제
      • 연금저축펀드
    • ChatGPT
    • 크롤링
      • Automatio
      • Octoparse
    • 노코드
      • 북마크 & 노코드 서비스 목록
  • PRODUCT&BUSINESS
    • Service Planning/Analysis
      • 브런치시리즈 <개발보단 고객개발>
      • baemin mart
        • 1. 시작
        • 2. 우아한형제들 & 배민상회
        • 3-1. [인터뷰] 포항에서 치킨집을 운영하시는 최사장님
        • 3-2. [인터뷰] 부산에서 족발 프렌차이즈를 운영하시는 이사장님
        • 4. <아프니까 사장이다> 커뮤니티 데이터 분석
        • 5. 문제정의 & 개선 가설
        • 6. 결론 - 역기획서
      • careerly
      • meetme
      • 배달의 민족 역기획 사례
      • 당근마켓 역기획 사례
      • 도그냥 님이 말하는 진짜 역기획
      • 도그냥의 역기획 스터디법
      • 책 <현업 기획자 도그냥의 서비스 기획 스쿨>
      • 기획서 작성하기
    • Business/Growth
      • Unsexy Business 뉴스레터에서 얻는 인사이트
      • 책 <원씽>
      • 책 <아프리카 스타트업>
      • 책 <유난한 도전>
      • 책 <함께자라기>
      • 책 <나는 돈 없어도 사업을 한다>
      • 책 <나는 장사의 신 은현장이다>
      • 책 <왜 사업하는가>
      • 책 <왜 일하는가>
      • 이제는 피칭도 유튜브로
      • 세컨드 브레인이 필요한 이유
      • 책 <타이탄의 도구들>
      • 책 <역행자>
        • <역행자> 역행자의 7단계 모델 복습
        • <역행자> 운명을 거스르는 역행자의 7단계 모델
      • 책 <월급쟁이로 시작한 38살 그녀는 어떻게 30억을 벌어 파이어족이 되었을까?>
      • 책 <파리에서 도시락을 파는 여자>
      • 책 <존리의 금융문맹탈출>
      • 책 <돈의 감각을 길러주는 경제 지식 첫걸음>
        • 금리
        • 환율
        • 주식
        • 채권
        • 부동산
        • 연금
        • 경제정책
        • 규제
        • 경제위기
    • Product-Market Fit
      • 브런치 북 <개발보단 고객 개발>
      • 책 <아이디어 불패의 법칙>
      • 고이장례연구소
      • 글쓰기로 PMF 검증하기
      • 연대 송도 캠퍼스의 40%가 사용한 서비스
      • 어웨이크코퍼레이션의 김민준 님
      • 드로우 마이 브랜드
      • 노코드로 PMF 찾는 방법
    • UI/UX
      • UX Writing Workshop
        • 4. 고객과의 관계형성 - 차별점 강화
        • 3. 비즈니스 임팩트를 만드는 글쓰기
        • 2. 후킹한 문장으로 고객 행동 이끌기
        • 1. 쉽고 정확한 문장으로 문제해결
        • What is UX Writing?
        • Reference
      • UX/UI 관련 유용한 사이트 모음
    • PM/PO
      • 책 <프로덕트 매니지먼트>
      • 책 <인스파이어드>
      • PM Wiki
      • 당신과 팀을 성장시킬 PM 직무가이드
      • PO 미신, 파랑새를 찾아서 - CPO 김용훈
      • 개발자가 생각하는 좋은 PM 나쁜 PM
      • 프로덕트 매니저는 뭐하는 사람인가
      • 토스 리더가 말하는 PO가 꼭 알아야할 개념 (2)
      • 토스 리더가 말하는 PO가 꼭 알아야할 개념 (1)
      • 책 <조직을 성공으로 이끄는 프로덕트 오너>
        • <프로덕트 오너> PO의 시간관리법
        • <프로덕트 오너> PO가 데이터 기반으로 일할 수 밖에 없는 이유
  • DATA
    • Database
      • 이 위키를 만드는데 참고한 자료들
      • 데이터 기반 의사결정
      • 데이터베이스의 종류
      • 트랜잭션과 무결성
      • 트랜잭션, 커밋, 롤백, 트랜잭션 전파
      • ERD, entity relationship diagram
      • 기본 3 - 관계, 키
      • 기본 2 - 필드, 레코드, 타입
      • 기본 1 - 엔티티, 릴레이션, 속성, 도메인
    • SQL
      • Sub Query
      • JOIN
      • 데이터 정렬셋과 유니코드
      • 자료형
      • DDL, DML
      • SELECT
      • SQL
    • MySQL
      • MSQL to MySQL Data Migration
      • MySQL Server 다운로드, 로그인
      • helpful commands
      • 문자열 자르기 SUBSTR(column, startIdx, length)
      • 특정 값을 ORDER BY 특정 값 우선 정렬 하기 (ORDER BY FIELD)
      • 이것이 MySQL이다
    • H2
      • ‼️h2 in-memory-db Table not found (this database is empty) 해결방법
  • Dev-General
    • Webmark
    • Open Source
      • 나의 첫 opensource contribution 경험기
    • Dev-Insight
      • Event
        • YOUTHCON 2022
        • INFCON 2022
      • 책 <누워서 읽는 알고리즘>
      • 책 <나는 LINE 개발자입니다>
      • 서비스에 대해 개발자가 가져야할 생각들
      • AI 시대에서 결국 살아남는 것
      • AI 시대에 개발자가 살아남는 방법
      • 주니어를 넘어서, 성장하는 개발자의 길 (인프런)
      • 아마추어와 프로의 차이
      • 개발자의 개발공부에 대하여
      • 서비스에 대해 개발자가 가져야할 생각들
      • 좋은 개발자와 인맥을 만든 노하우
      • 개발자 취업기/이직기 모음
        • 라인게임즈 백엔드 개발자 경선님
        • OKKY 미니세미나 <비전공 학원출신 SI개발자, 유명스타트업 들어간.ssul> 참석 후기
        • 비전공자에서 2억받는 아마존 엔지니어가 되기까지
        • IT 대기업 100% 합격하는 방법
  • 🏗️computer science
    • Algorithm & Data Structure
      • About this page
      • Test Review
        • Page 1
      • Big-O
        • 빅오표기법의 문제풀이
        • 피보나치 수열의 시간복잡도
      • Bit Operation
        • bit masking
      • Math
        • 합공식 / 누적합
        • 피보나치 수
        • 약수찾기
        • 소수찾기
          • 백준 1978 소수찾기
          • 백준4948 베르트랑 공준
          • 백준 8393 합
          • 백준 1929 소수구하기
        • 최대공약수 / 최소공배수
          • 백준 2824 최대공약수, BigInteger
          • 백준 2609 최대공약수, 최소공배수
        • 순열과 조합
          • 백준 15649 N과 M
        • 그 외 개념 정리
      • Recursion
        • N Queens problem
        • counting cells in a blob
        • recursion 응용 - 미로찾기
        • 순환 알고리즘의 설계
        • 순환적으로 사고하기
        • 백준 17478 재귀함수가 뭔가요
        • 백준 10870 피보나치수 5
      • Sort
        • java 에서의 정렬
        • radix sort
        • sorting in linear time
        • comparison sort 에서 최상의 시간복잡도
        • priority queue
        • heap sort
        • quick sort
        • merge sort
      • Array and List
        • 표준 라이브러리
      • Linked list
      • String
      • Stack
        • 백준 1874 스택수열
        • 백준 10828 스택 구현하기
      • Queue
        • 백준 10845 큐 구현하기
      • Heap
        • 백준 11298 절대값힙
        • 백준11279 최대힙
        • 백준1927 최소힙
      • Deque
      • Tree and Binary tree
        • Tries
        • Red-Black Tree
        • Binary Search Tree
      • Search
        • 완전 탐색
        • 이분탐색
      • Graph
        • 최단경로
        • MST 2 - prim 의 알고리즘
        • MST 1 - Kruskal 의 알고리즘
        • MST, minumum spanning tree
        • DAG, Directed Acyclic Graph
        • DFS, Depth First Search
        • BFS, Breadth First Search
      • Dynamic Programming
        • Knapsack problem
        • LCS, Longest Common Subsequence
        • matrix chain
        • 행렬 경로 문제
        • 백준 1003 피보나치 함수
        • 백준 9461 파도반 수열
        • 백준9251 LCS
      • Greedy
      • Implementation
      • LIS, Longest Increasing Subsequence
      • Two Pointer
      • Line Swipping
      • Fenwick tree
      • Backtracking
    • Computer Structure
      • 이 위키를 만드는데 참고한 자료들
      • 그래서 컴퓨터는 어떻게 동작하나요?
      • 컴퓨터의 구성
      • 컴퓨터의 역사
      • 컴퓨터 구성요소의 기능 및 이해
      • 중앙처리장치 - 마이크로 명령 - 입출력과 인터럽트
      • 중앙처리장치 - 기본 컴퓨터 프로그래밍
      • 중앙처리장치 - 프로그래밍 언어와 실행
      • 파이프라인과 벡터처리 - 데이터의 종속성 - 병렬처리와 파이프라인
      • 파이프라인과 벡터처리 - 파이프라인 구조 - 데이터/구조
      • 파이프라인과 백터처리 - 산술&명령어 파이프라인
      • 파이프라인과 벡터처리 - 파이프라인 CPU의 성능분석
      • 메모리 구조 - 메모리 시스템의 이해
      • 메모리 구조 - 효율적인 메모리 관리 정책
      • 메모리 구조 - 컴퓨터 성능 개선을 위한 메모리 관리
      • 입출력구조 - 시스템 BUS 구성 및 제어
      • 입출력 구조 - 입출력(I/O) 연결과 주소 지정
      • 입출력 구조 - 입출력 수행과 인터럽트
      • 병렬컴퓨터 구조와 성능분석 - 멀티 프로세서
      • 병렬 컴퓨터 구조와 성능 분석 - 시스템 성능 분석과 개선
    • This Is Coding Test 2021
      • 1. 출제 경향 & 파이썬 문법 부수기
      • 2. 그리디 알고리즘 & 구현
      • 3. BFS & DFS
      • 4. 정렬 알고리즘
      • 5. 이진탐색
      • 6. 다이나믹 프로그래밍
      • 7. 최단경로 알고리즘
      • 8. 기타 그래프 이론
      • 9. 코딩테스트에서 자주 출제되는 기타 알고리즘
      • 10. 개발형 코딩테스트
    • Operating System
      • 이 위키를 만드는데 참고한 자료들
      • 운영체제란, Introduction to Operating Systems
      • 컴퓨터 시스템의 구조, Structure of Computer System
      • 프로그램의 실행, Program Execution
      • 프로세스, Process
      • 쓰레드, Thread
      • 프로세스의 생성과 종료, Start and End of Process
      • 프로세스 시스템 콜과 프로세스간의 협력, System call and Interprocess Communication
      • CPU Scheduling
      • CPU Scheduling Algorithm
      • Process Synchronization Problem
      • Initial Attempts to Solve Process Synchronization Problem
      • semaphore 와 monitor 로 synchronization 해결하기
      • 데드락, Deadlock
      • 메모리 관리, Memory Management
      • Memory Allocation
      • Virtual Memory
      • Virtual Memory 2
      • File System
      • File Systems Implementation
      • Disk Management & Scheduling
    • Network
      • 이 위키를 만드는데 참고한 자료들
      • 대규모 트래픽으로 인한 서버 과부하 해결방법
      • 유선 LAN과 무선 LAN
      • 네트워크를 이루는 장치 (L1, L2 .. L7)
      • REST API
      • HTTP 매서드
      • HTTP 상태코드
      • 직렬화와 역직렬화
      • 로그인 구현방식 2. 토큰 기반 인증방식
      • 로그인 구현방식 1. 세션 기반 인증방식
      • 웹 브라우저의 캐시 - 공통점과 차이점
      • 웹 브라우저의 캐시 - 쿠키
      • HTTP header
      • 웹 브라우저의 캐시 - 세션 스토리지
      • 웹 브라우저의 캐시 - 로컬스토리지
      • browser rendering
      • HTTPS 와 TLS - TLS 핸드쉐이크
      • HTTPS 와 TLS - 암호화
      • HTTP History
      • www.naver.com 을 주소창에 입력하고 화면에 나타나기까지의 과정
      • IP 주소 - 공인 IP와 사설 IP
      • IP 주소 - Classless,Subnet Mask, Subnetting
      • IP 주소 - Classful IP Addressing
      • IP 주소 - IPv4, IPv6
      • IP 주소 - 이진수 이해하기
      • IP 주소, MAC 주소, ARP, RARP
      • 라우팅
      • TCP 4way handshake and TIME_WAIT
      • TCP 3way handshake
      • TCP/IP - internet layer
      • TCP/IP - Transport Layer
      • TCP/IP - Application Layer
      • TCP/IP - MTU, MSS, PMTUD
      • TCP/IP 4계층, OSI 7 layer
      • 네트워크의 분류 - LAN, MAN, WAN
      • 네트워크 토폴로지와 병목현상
      • 네트워크의 기초 3
      • 네트워크의 기초 2
      • 네트워크의 기초
    • Linux
      • reference
      • sudo apt-get install / uninstall
      • vim
      • linux basic command
    • Design Pattern
      • 이 위키를 만드는데 참고한 자료들
      • static 을 자주 사용하게 되었을 때의 단점
      • 자바스크립트의 class와 static
      • 프로그래밍 컨텍스트
      • 의존성 주입 vs. 전략패턴
      • flux pattern
      • Spring MVC 패턴 적용 사례
      • MVC, MVP, MVVM pattern
      • 프록시 패턴
      • 옵저버 패턴
      • 전략패턴
      • 의존성 주입과 의존 관계 역전 원칙
      • 이터레이션 패턴
      • 추상 팩토리 매소드 패턴
      • 팩토리 메소드 패턴
      • 싱글톤 패턴
      • 디자인 패턴, 라이브러리와 프레임워크의 차이
    • Programming Basic (Go)
      • 이 위키를 만드는데 참고한 자료들
      • 트랜지스터, Trangister
      • 논리소자, Logic Element
      • 튜링과 폰 노이만, Turing and Von Neumann
      • 컴퓨터의 원리, Computer Principle
      • 프로그래밍 언어, Programming Language
      • 컴파일러와 동적언어, Compiler and dynamic language
      • golang
      • hello, world
      • variable
      • variable 2
    • Base Knowledge
      • 이 위키를 만드는데 참고한 자료들
      • 신기술 도입시 고민해야할 점(feat. react.js vs. vue.js)
      • 정적 타입 시스템의 필요성
      • 도커, 컨테이너
      • 클라우드, Saas, IaaS, PaaS
      • SSO
      • RBAC
      • OAuth2.0
      • REST API 사용을 위한 인증 방법 4가지
      • API
      • Data Format - XML
      • Data Format - JSON
  • ☕Java/Spring
    • Java
      • Java Code Convention
      • Java 버전별 특징 (v1-v19)
      • java.lang.Math
      • List 4가지의 초기화 방법
      • HashMap 4가지의 정렬 방법
      • 어노테이션 프로세서 정리하기
      • Annotation Processor 로 없는 소스코드 생성하기
      • lombok 은 어떻게 동작하는 것일까?
      • 다이내믹 프록시 정리하기
      • 클래스의 프록시
      • 다이내믹 프록시
      • 프록시 패턴은 무엇인가
      • Spring Data JPA 는 어떻게 동작할까?
      • reflection api 정리
      • reflection api 이용하여 spring ioc container 만들기
      • reflection api
      • spring dependency injection 은 어떻게 동작할까
      • 바이트 코드 조작하기
      • java bytecode 를 조작해 테스트 코드 커버리지 확인하기 (feat.jacoco)
      • Class Loader
      • JVM 의 구조
      • java, jvm, jdk and jre
      • synchronized
      • java string.split(".") 오류
    • Java 8
      • 이 위키를 만드는데 참고한 자료들
      • Metaspace
      • Parallel 정렬
      • Annotation
      • CompletableFuture
      • Date and Time
      • Optional
      • Stream
      • interface의 default 메소드와 static 메소드
      • 인터페이스의 변화
      • 함수형 인터페이스
      • java 8 소개
    • Spring Framework
      • Spring 3.0 준비하기
      • 특정 매소드만 transaction 처리하기
      • 스프링 프로젝트 시작하기
      • 스프링이란 무엇인가
      • 스프링 핵심 기술의 응용
      • AOP 2
      • AOP 1
      • 서비스 추상화 2
      • 서비스 추상화 1
      • 예외
      • 템플릿
      • 테스트
      • 오브젝트와 의존관계
      • 스프링이란
    • Spring Boot
      • [Gradle]UncheckedIOException
      • java19 + spring 3.0.5 + gradle 7.4.1 에서 프로젝트 gradle 설정하기
      • [리뷰] Gradle 멀티 프로젝트 관리
      • [리뷰] 멀티모듈 설계 이야기 with Spring, Gradle
    • JPA/QueryDSL
      • querydsl 을 쓰는 이유
      • JPA querydsl에서 json array 로 된 컬럼에 조건 적용하기
      • querydsl 에서 mysql order by field() 사용하기
  • 🏰Infrastructure
    • InfraWorkshop
      • 이 위키를 만드는데 참고한 자료들
      • aws로 안정적인 인프라 만들기 2
      • aws로 안정적인 인프라 만들기 1
      • 어플리케이션 진단하기
      • 서버 진단하기
      • 부하 테스트
      • 웹 성능 개선하기
      • 웹 성능 진단하기
      • <aws로 그럴듯한 인프라 만들기> 회고와 피드백
      • aws로 그럴듯한 인프라 만들기 3 - 배포스크립트
      • aws로 그럴듯한 인프라 만들기 2 - 배포하기
      • aws로 그럴듯한 인프라 만들기 1 - 네트워크 망 구성
      • docker container
      • connection check
      • network segmentation
      • cloud 서비스를 사용한다는 것
    • AWS
      • AWS IAM
      • AWS CodePipeline 으로 배포 자동화하기 (1)
      • AWS CodePipeline 으로 배포 자동화하기 (2)
  • 🪄Test
    • TDD
      • 이 위키를 만드는데 참고한 자료들
      • [2주차] 로또 과제 강의를 듣고나서
      • [1주차] 자동차 경주 과제 강의를 듣고나서
      • TDD, 리팩토링이란?
      • 가장 쉽게 TDD 시작하는 방법
      • 의식적인 연습과 학습 테스트
      • TDD 에 집착해야하는 이유
      • 공부하는 자세
    • AssertJ
      • 이 위키를 만드는데 참고한 자료들
    • JUnit
      • 이 위키를 만드는데 참고한 자료들
      • Junit 기본 개념
  • 😎OTHERS
    • Helpful Command
      • Mac 에서 특정 포트 검색, 종료
      • crontab
    • Llibrary
    • IntelliJ
      • 내가 좋아하는 커스텀 세팅
    • GIT
      • Github ID/Token 한번 입력 후 저장하기
      • Github Actions
      • github organization private repository push 안될 때 (not found issue)
      • commands
      • git commit convention
    • Logging
      • logback + webfilter 로 로그설정
      • ‼️log4j 보안 이슈
    • Postman
      • postman 의 header에서 언더바(_) 변수 인식 안되는 현상
Powered by GitBook
On this page
  • 1. 설명
  • 2. 이동
  • 3. 편집 1
  • 4. 편집 2
  • 5. 검색
  • 5-1. 주요 사용법
  • 5-2. 유용한 설정모음
  • 6. 스트링 치환
  • 7. RegEx
  • 8. 멀티 윈도우
  • 9. 단축키 (사용자 정의)
  • 10. 유용한 기능들
  • 11. vim 플러그인
  • 12. man
  • sections
  • example
  • command (less)
  • 13. diff
  • 자주 사용되는 옵션
  • example
  • 14. patch
  • 자주 사용되는 옵션
  • example
  • 15. ctags
  • 자주 사용되는 옵션
  • example
  • vim 연동 예제
  • 16. cscope
  • options
  • example
  • interactive mode
  • vim 연동 예제
  • 17. strace
  • option
  • example

Was this helpful?

  1. computer science
  2. Linux

vim

전 세계 개발자가 가장 많이 쓰는 에디터 중 하나

1. 설명

  • VI iMproved

  • 원래 vi -> vim 으로 변화됨

  • 자주 사용되는 옵션

    • -t : tag : tag 로 jump 하여 에디터를 시작한다.

    • -o files : 여러 파일을 split 모드로 열기

    • -R files : read-only mode 로 열기

    • -d files : diff mode

2. 이동

  • j, k, h, l : 상하좌우

  • w : 단어 시작점을 기준으로 앞으로 이동

  • e : 단어 끝점을 기준으로 앞으로 이동

  • b : 단어 시작점을 기준으로 뒤로 이동

  • 0 : 문장 맨 앞으로 이동

  • $ : 문장 맨 끝으로 이동

  • f(CHAR) : 문장 내에서 현재 포인터에서 가장 가까운 CHAR를 찾아 앞으로 이동

  • F(CHAR): 문장 내에서 현재 포인터에서 가장 가까운 CHAR를 찾아 뒤로 이동

  • } : 단락(빈줄) 단위로 아래로 이동한다.

  • { : 단락(빈줄) 단위로 위로 이동한다.

  • G : 파일의 맨 끝으로 한번에 이동

  • gg : 파일의 맨 앞으로 한번에 이동

  • :[number]

    • number 라인으로 이동한다.

    • :10 - 10번째 라인으로 이동한다.

  • :set number / :set nonumber

    • 파일의 라인 넘버를 보여준다/안보여준다.

  • H, M, L : 현재 페이지의 최상단, 중간, 최하단으로 이동한다.

  • ctrl + f / ctrl + b

    • 페이지 단위로 뒤로 / 앞으로 이동

  • ctrl + d / ctrl + u

    • 반페이지 단위로 뒤로 / 앞으로 이동

  • ctrl + e / ctrl + y

    • 한줄씩 밑으로 스크롤 / 한줄씩 위로 스크롤

    • 커서는 이동하지 않는다.

3. 편집 1

  • 입력모드로 전환

    • i : 커서 위치부터 편집 시작

    • I : 커서가 있던 라인의 가장 앞으로 이동하여 편집 시작

    • a : 현재 커서에서 한칸 왼쪽으로 이동하여 편집 시작

    • A : 커서가 있던 라인의 가장 마지막으로 이동하여 편집 시작

    • o : 현재 커서에서 맡으로 한줄을 추가하면서 편집 시작

    • O : 현재 커서에서 위로 한줄을 추가하면서 편집 시작

    • cc : 현재 라인을 한줄 삭제하면서 편집 시작

    • C : 현재 커서 단어를 지우면서 편집 시작

  • 복사

    • yy : 현재 줄 복사

    • yw : 현재 단어 복사

  • 붙여넣기

    • P : 현재 위치에 바로 붙여넣기

    • p : 현재 커서 다음줄에 붙여넣기

  • 잘라내기

    • x : 현재 캐릭터 잘라내기

    • dd : 현재 라인 잘라내기

    • dw : 현재 word 의 끝까지 잘라내기

    • D : 현재 커서부터 라인 끝까지 지우기 -> 클립보드에 보관 X

  • 덮어쓰기 - replace

    • r : 현재 캐릭터만 대체한다. 끝나자마자 replace 됨

    • R : 끝날때까지 덮어쓰기 모드가 유지됨

    • s :

  • 되돌리기/반복

    • u : undo

    • ctrl-r : redo

    • . : 마지막 행동 반복

4. 편집 2

  • :q : 문서 편집화면에서 나가기

  • :q! : 현재 변경사항을 저장하지 않고 나가기

  • :w [filename]: 파일 저장하기

  • :wq / :x : 저장하고 나가기

  • :qa : 전체 저장하고 나가기

  • :e : 현재 창에서 다른 파일 열기

    • 현재 파일 내용 위에 다른 파일이 열린다.

    • 현재 수정 내용을 저장한 뒤에야 이동할 수 있다.

5. 검색

  • vim file 내에서 내가 원하는 검색어를 찾기 위함

5-1. 주요 사용법

  • /keyword

  • ?keyword

  • /\<keyword\>

  • n : 정방향 검색 반복

  • N : 역방향 검색 반복

  • * : 커서 위치의 키워드 아래쪽으로 검색

  • # : 커서 위치의 키워드 위쪽으로 검색

  • /abc\|xyz : abc or xyz 검색

5-2. 유용한 설정모음

  • :set ic : 대소문자 구분없이 - ignore case

  • :set noic : 대소문자 구분있게

  • :set hlsearch : search highlight On

  • :set nohlsearch : search highlight OFF

  • :set incsearch : 타이밍시 화면에 표시 O

  • :set noincsearch : 타이밍시 화면에 표시 X

6. 스트링 치환

  • 문서 전체 스트링 치환 : %

    • :%s/str/replace : 전체 문서에 대해서 str -> replace 로 치환 / 라인별로 가장 최초의 한번만 적용된다.

    • :%s/str/replace/g : 다중 검색시에도 적용한다. / 검색되는 케이스 모두에 적용된다.

    • :%s/str/replace/gc : 치환하기 전에 사용자에게 묻는다. 하나하나 물어본다.

    • :%s/\<str\>/replace/gc : "str" 단어 단위로 검색하여 치환한다.

  • 라인 지정 의미 기호

    • . : 현재라인

    • 1 : 라인 1

    • $ : 문서의 마지막 라인

  • 라인 지정 스트링 치환

    • :1,10s/str/replace/gc : 라인 1-10 에 대해서만 치환을 적용한다.

    • :1,.s/str/replace/gc : 라인 1 - 현재 라인까지 치환 적용한다.

    • :1,$s/str/replace/gc : 라인 1 - 마지막 라인까지 치환 적용한다.

7. RegEx

  • 주로 vim 에서 찾을 때 많이 사용된다.

  • 주요 의미 기호

    • . : newline 제외한 모든 문자

    • ^ : 라인의 시작

    • $ : 라인의 끝

      • /{$

    • * : 0이거나 여러 개

      • /String.*r

    • \+ : 1이거나 여러 개 = 1개는 반드시 있다.

    • \= : 0개이거나 1개 = 없거나 1개가 있거나

    • \{n} : n회 반복한다.

    • \{n,m} : n~m회 반복한다.

    • \{,m} : 최대 m회까지 반복

    • \{n,} : 최소 n회까지 반복

    • [0-9] : 0~9 사이의 캐릭터

    • [a-z] : a~z 사이의 캐릭터

    • [abc] : a, b, c 중 하나와 매치되는 캐릭터

    • [^0-9] : 0~9를 제외한 캐릭터

  • 예제

    • /sem_.*(.*) : sem_ 으로 시작하여 함수를 호출/선언하는 경우

      • 예) sem_dnskdksldhk() : sem 시리즈를 호출하는 api 를 일괄적으로 검색하겠다.

    • /public.*(.*)

    • /^#include : 라인의 시작에 #include 가 나오는 경우

    • /\<inotify_ : 단어가 inotify_ 로 시작하는 경우

    • :%s/\<variable\>/var/g : 문서 전체에서 variable 단어와 정확히 일치하는 단어를 찾아 var 로 변경한다.

8. 멀티 윈도우

  • vim 실행시 창 분할

    • 가로분할

      • vim -o test.c test.h

      • vim *.sh -o

    • 세로분할

      • vim -O test.c test.h

  • vim 실행 후 창 분할

    • 가로분할

      • :split s / ctrl+w s

      • :split n / ctrl+w n

    • 세로분할

      • :vsplit v

      • ctrl+w v

  • vim 실행 후 새 창 분할

    • 가로 새 창

      • :new (n)

      • ctrl+w (n)

    • 세로 새 창

      • :vnew

      • ctrl+w

  • 창 닫기

    • 현재창

      • :quit

      • ctrl+w q

    • 현재창만 남기기

      • :only

      • ctrl+w o

  • 창 간 커서 이동

    • ctrl+w w : 다음 창으로 이동

    • ctrl+w k : 윗 창으로 이동

    • ctrl+w j : 아래 창으로 이동

    • ctrl+w h : 왼쪽 창으로 이동

    • ctrl+w l : 오른쪽 창으로 이동

    • ctrl+w t : 최상단 창으로 이동

    • ctrl+w b : 최하단 창으로 이동

  • 창 이동

    • ctrl+w K : 윗 창으로 이동

    • ctrl+w J : 아래 창으로 이동

    • ctrl+w H : 왼쪽 창으로 이동

    • ctrl+w L : 오른쪽 창으로 이동

  • 창 크기 조절

    • ctrl+w + // ctrl+w - : 높이 증가 // 감소

    • ctrl+w _ OR / : 높이 최대화

    • ctrl+w > // ctrl+w < : 폭 증가 // 감소

    • ctrl+w | : 폭 최대화

    • ctrl+w = : 높이/폭 모두 같게

  • 기타 기능

    • ctrl+w ] : 새창에서 tag jump

    • ctrl+w f : 커서 위치의 파일 이름을 새창에서 열기

9. 단축키 (사용자 정의)

  • 모드마다 다른 단축키를 설정할 수 있다.

  • 기본문법 : CMD LHS RHS

    • CMD : map, nmap, imap...

    • LHS : 입력할 키

    • RHS : 입력시 동작

  • <C-key> : ctrl + key

  • <S-key> : shift + key

  • <A-key> : alt + key

  • <C-S-key> : ctrl + shift + key

  • <BS>, <Tab>, ...

  • example

    • :nmap <F8> oprintf("%s %d line : \n", __func__, __LINE__);<ESC>

      • normal mode 에서 F8 누르면 아래 줄에 printf() 출력한다.

    • :imap <F8> printf("%s %d line: \n", __func__, __line__);<CR>

      • insert mode 에서 F8누르면 print() 출력한다.

    • :nmap <F2> :cs find s <C-R>=expand("<cword>")<CR><CR>

      • F2 누르면 커서위의 단어를 cscope find symbol 로 매핑해서 실행한다.

      • 그 후 엔터를 두번 누른다.

    • :map <F8> oprintf("hello\n");<ESC>

      • F8을 누르면 hello 를 츨력하고 개행한다.

10. 유용한 기능들

  • 자동완성 : insert mode 에서 ctrl + p

    • 미리 정의된 변수 등 프로그래밍 파일 내에서 유용하게 사용

  • diff mode

    • 서로 비슷하지만 살짝 다른 두 파일의 내용을 비교할 때 유용하게 사용

    • vim [file1] [file2] -d

    • or vimdiff [file1] [file2]

    • diff 설정 - :diffthis

    • diff 해제 - :diffoff

    • do : 왼쪽에 있는 내용 오른쪽으로 복사

  • fold

    • 생성 : [visual block 모드에서] zf

    • 삭제 : zd OR space

    • 열기 : zo

    • 닫기 : zc

  • 괄호 쌍 이동 : [괄호에 커서를 놓고] %

  • 마킹

    • 위치마킹 : m[a-z]

    • 마킹으로 이동 : '[a-z]

  • man page 열기 : 단어위에 커서 놓고 k

    • section 3 에 대한 man 페이지 열 때 : 3k

    • :!man -a : 모든 섹션으로 보기

  • indentation

    • 현재중 auto indent, ==

    • 블록에 적용시, [비주얼모드] =

    • 파일 전체에 적용시, gg=G

    • :set expandtab

11. vim 플러그인

  • vim 의 기능을 확장할 수 있는 방법

  • 운영체제에 소프트웨어 패키지를 설치해서 사용하듯, vim 도 plugin 을 설치할 수 있다. -> vim 기능의 확장!

  • 설치방법

    • ~/.vim/plugin 디렉터리에 plugin 파일(.vim) 복사

    • 플러그인 관리자

      • vundle

      • pathogen

      • vim-plug

  • 플러그인은 어디에서 찾는가?

12. man

  • man page 조회

sections

섹션에 따라서 내용이 나누어져 설명되어있다.

  1. general commands

  2. system call

  3. library functions : C standard library

  4. special files

  5. file formats and conventions

  6. games and screensavers

  7. miscellanea

  8. system administration commands and daemons

example

  • man 3 pringf

  • man -a stat

  • apropos pthread

    • 검색에서 포함된 모든 페이지를 보여준다.

  • whatis pthread

command (less)

  • 종료 : q

  • 검색

    • /pattern

    • ?pattern

  • 화면이동

    • 한 페이지 앞으로 : f, ctrl-f, space

    • 한페이지 뒤로 : b, ctrl-b

    • 한 줄 앞으로 : j, e, ctrl-e

    • 한줄 뒤로 : k, y, ctrl-y

13. diff

  • 두 파일의 차이점을 비교하고, stdout 으로 출력한다.

  • diff 결과를 patch command 로 적용하는 것이 가능하다.

자주 사용되는 옵션

  • -r, --recursive

    • diff 뜰 때, 디렉토리 단위로하면, 모든 파일에 대해서 반복적으로 설정해주어야 한다.

  • -q, --brief

    • 변경 여부만 출력

  • -u, -U NUM, --unified[=NUM]

    • unified context 방식으로 출력한다.

    • 기본값은 3dnl

  • -N, --new file

    • 없는 파일을 빈 파일로 인식한다.

  • -p, --show-c-function

    • 변화된 블럭 함수의 이름을 출력

example

  • diff -uN before.c after.c

  • diff -urNp dir_a dir_b

  • diff -q dir_a dir_b

    • echo $?

      • 변경사항 없다면 0

      • 변경되었다면, 1

 diff -urNp diff_a diff_b
--- diff_a	2023-01-17 16:24:35.000000000 +0900
+++ diff_b	2023-01-17 16:27:40.000000000 +0900
@@ -6,4 +6,4 @@ hello, vim
 hello, vim
 hello, vim
 hello, vim
-hello, vim
+hello, vim...!!!!

14. patch

  • patch file (diff 의 결과물)을 파일에 적용한다.

자주 사용되는 옵션

  • -pNum

    • --strip=NUM

  • -i patchfile

    • --input-patchfile

  • --dry-run

    • 가상으로 실행(적용되지 않음)

    • 실행 결과만 출력한다.

  • --merge

    • conflict 발생시 merge

example

  • patch -p0 --dry-run < test.patch

  • patch -p3 -i test.patch

  • patch -p0 --merge -i test.patch

15. ctags

  • 소스코드를 분석하여 tag 를 파일로 저장

    • function 이나 variable 등을 tag 로 저장하여 vim 이 탐색하기 쉽도록 해준다.

    • ctags 가 없다면 vim 은 주석인지, 함수인지, 변수인지 구분해내지 못한다.

  • vim 등의 에디터에서 소스코드 탐색이 쉽도록 한다.

  • ctags [options] [files...]

자주 사용되는 옵션

  • -R : recurse

  • --exclude=[pattern]

example

  • ctags -R

  • ctags -R --exclude="drivers"

vim 연동 예제

  • 특정 tag 파일 지정

    • :set tags=../tags

  • 상위로 올라가며 tag 파일 지정

    • :set tags=./tags;/

  • tag 찾기

    • :tag rte_eal_init

  • 여러가지 tag 중 선택

    • :tselect rte_eal_init

    • :tselect main

  • 여러가지 tag 중 선택 + 검색

    • :ts /rte_eal_

  • 커서 위의 단어로 tag jump 단축키 : ctrl+]

    • :tj dump_info

    • 수정하기 전에 다른 키워드로 jump 하고 싶을 때

    • ctrl + w + ]

      • 창을 새로 열면서 태그 점프하면 수정된 내용을 저장하지 않아도 다른 키워드 있는 파일을 볼 수 있다.

  • tag jump 에서 되돌아오는 단축키 : ctrl+t

  • ctags --list-languages

    • ctags 에서 지원되는 언어 목록

16. cscope

  • 소스 파일을 분석하여 파일로 저장한다.

    • ctags 보다 파일이름, 함수 호출하는 곳 - 호출되는 곳 등 다양한 방법으로 검색이 가능하다.

  • 자체 사용자 인터페이스 사용이 가능하다.

  • vim 등의 에디터에서도 연동이 가능하다.

options

  • -b : 분석 파일만 빌드한다. vim 에서 연동하기 위해서 필요하다.

  • -R : recursive

example

  • find `pwd` -type f -name ".[ch]" > csope.files

    • 현재 디렉토리에서 이름이 .ch 로 끝나는 타입의 파일들에 대해서 검색한다.

  • cscope -b

  • cscope -R

interactive mode

  • cscope -R

  • find this C symbol : symbol 검색. 원형, 함수 호출하는 부분을 포함한다.

  • find this global definition : 함수 선언부

  • find functions called by this function : 입력한 함수가 호출하는 함수를 검색

  • find functions calling this function : 입력한 함수를 호출하는 부분을 검색

  • find this text string : text 검색

  • change this text string : 텍스트 대체

  • find this egrep pattern : extended regex pattern 으로 검색

  • find this file : 파일 이름 검색

  • find files #including this file : 특정 파일을 #include 하는 부분 검색

  • find assignments to this symbol : 심볼에 해당하는 부분을 검색

vim 연동 예제

  • : set cscopetag

    • ctag 파일 대신에 ctrl+] 로 tag jump 한다.

  • :cscope (add, find, help, kill, reset, show)

    • a : 심볼에 해당하는 부분 검색

    • c : 이 함수를 호출하는 부분 검색

    • d : 이 함수가 호출하는 함수 검색

    • e : extended regex pattern 으로 검색

    • f : 파일 이름 검색

    • g : 함수 선언부

    • i : 특정 파일을 $include 하는 부분 검색

    • s : symbol 검색 (원형, 함수 호출하는 부분 포함)

    • t : text 검색

17. strace

  • system call 과 signal 을 trace 한다.

  • 어플리케이션을 개발하다보면, 알게모르게 app - linux kernal 사이를 자주 왔다갔다 한다. -> systeml call

option

  • -p : pid 지정. 동작 중인 프로세스에 attach 한다.

  • -f : 생성되는 thread 도 trace 한다.

  • -tt : timestamp 를 같이 출력한다.

  • -o : stdout 대신 입력받는 파일에 저장한다.

example

  • strace ls

  • strace -tt ls

  • strace -tt -o output ls

  • strace -p 1234

    • strace -p `pidof [실행중인 파일 이름]`

Previoussudo apt-get install / uninstallNextlinux basic command

Last updated 2 years ago

Was this helpful?

🏗️
https://www.vim.org/scripts/index.php
https://vimawesome.com/
vim [file1] [file2] -d
인프런 강의 - 리눅스 커맨드라인 툴 (Full ver.)