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. PEM 키 생성
  • 2. draw.io 로 네트워크 망 설계
  • 2-1. 구성 정리
  • 2-2. 구성에 맞춰 설계도 작성
  • 2-3. 네이밍 규칙
  • 2-4. 서브네팅
  • 3. VPC 생성
  • 3-1. VPC 는 결국 땅따먹기
  • 3-2. 구성하기
  • 4. Subnet 생성
  • 4-1. Subnet은 방만들기
  • 4-2. 구성하기
  • 5. Internet Gateway 와 Nat Gateway 생성 및 연결
  • 5-1. IGW 는 밖으로 향하는 문
  • 5-2. Nat Gateway
  • 5-3. 구성하기
  • 6. Route Table 생성 및 연결
  • 6-1. RT 는 경비실
  • 6-2. 구성하기
  • 7. Security Group 설정
  • 7-1. SG는 경비대
  • 7-2. 구성하기
  • 7-3. IP 주소 기반이 아닌 SG 기반으로 설정하기
  • 8. Server 생성
  • 8-1. 서버 구성하기
  • 8-2. bastion 서버는 왜 만들까
  • 9. 통신 확인하기
  • 9-1. bastion 서버 접속하기
  • 9-2. bastion 서버에서 다른 서버로 접속하기 위한 설정
  • 9-3. ping test 해보기
  • 10. Trouble Shooting
  • 10-1. 보안그룹으로 보안정책 설정 후, Public IP 로 접근 오류
  • 10-2. 너무 Open 된 PEM key 권한
  • 11. 기타 하면 좋은 설정들
  • 11-1. 환경변수 적용 - 세션 타임아웃 설정
  • 11-2. 쉘 프롬프트 변경
  • 11-3. logger 를 사용하여 감사로그 남기기

Was this helpful?

  1. Infrastructure
  2. InfraWorkshop

aws로 그럴듯한 인프라 만들기 1 - 네트워크 망 구성

1. 망 구성하기

Previousaws로 그럴듯한 인프라 만들기 2 - 배포하기Nextdocker container

Last updated 2 years ago

Was this helpful?

에 참여하고 있다. 총 4주 과정으로 매 주마다 진행해야할 미션이 주어지고, 미션을 단계별로 해결하면서 인프라에 대한 지식을 자연스럽게 습득하고 경험해볼 수 있다. 매 주 경험하게될 주제는 대략 아래와 같다.

  1. 그럴듯한 인프라 만들기

  2. 안정적인 인프라 만들기

  3. 조회 성능 개선하기

  4. 확장하는 인프라 만들기

오늘은 그 첫번째 주차인 "그럴듯한 인프라 만들기" 라는 주제로 과제를 진행했던 과정과 그 속에서 겪었던 어려움들을 기록하며 배운 점들을 조금 더 오래 기억하고자 한다.

1주차는 그럴듯한 인프라를 구축해보는 미션이 주어졌다. 아래와 같이 진행될 예정이다. 이번 글에서는 1번과 2번을 다룬다

1. PEM 키 생성

  • 미션을 시작하기 전에, 나의 PEM 키를 생성하여 이후 구축할 모든 서버에서 해당 키를 사용한다.

2. draw.io 로 네트워크 망 설계

2-1. 구성 정리

우리가 구성할 인프라는 대략 아래와 같다. 각 요소별로 만족해야하는 조건이 주어졌기 때문에 그에 맞춰 순서대로 구축을 진행해볼 것이다.

  1. VPC : CIDR은 C class(x.x.x.x/24)로 생성

  2. Subnet

    1. 외부망으로 사용할 Subnet : 64개씩 2개 (AZ를 다르게 구성)

    2. 내부망으로 사용할 Subnet : 32개씩 1개

    3. 관리용으로 사용할 Subnet : 32개씩 1개

  3. Internet Gateway 연결

  4. Route Table 생성

  5. Security Group 설정

    1. 외부망

      1. 전체 대역 : 8080 포트 오픈

      2. 관리망 : 22번 포트 오픈

    2. 내부망

      1. 외부망 : 3306 포트 오픈

      2. 관리망 : 22번 포트 오픈

    3. 관리망

      1. 자신의 공인 IP : 22번 포트 오픈

  6. 서버 생성

    1. 외부망에 웹 서비스용도의 EC2 생성

    2. 내부망에 데이터베이스용도의 EC2 생성

    3. 관리망에 베스쳔 서버용도의 EC2 생성

    4. 베스쳔 서버에 Session Timeout 600s 설정

    5. 베스쳔 서버에 Command 감사로그 설정

2-2. 구성에 맞춰 설계도 작성

위의 그림은 툴을 이용하여 AWS 네트워크 망을 어떻게 구성할 것인지 간단히 설계도를 작성한 것이다. 오른쪽에는 전체적으로 기본적으로 인터넷망부터 VPC, Availability Zone, Subnet, Server, IGW, NAT gateway 까지 필요한 요소들을 적절하게 배치하여 전체적으로 우리 서비스가 어떤 흐름을 통해 사용자들과 소통할 수 있는지를 그려본다.

왼쪽의 표는 각 서비스별로 기억해야할 name 별칭과 ip 들이다. AWS 는 워낙 다양한 서비스들을 제공하고 있어서 저렇게 name 으로 별칭을 정해두지 않으면, 서비스가 성장하고 시스템이 커질수록 각 요소들을 적절하게 관리할 수 없게 된다.

2-3. 네이밍 규칙

의외로 네이밍을 대충하는 개발자들을 종종 봤는데, 저 네이밍이 잘 되어있으면 시스템을 파악해야하는 뉴비 입장에서는 정말 감탄스럽다. 맨 처음 일했던 회사에서 이사님과 함께 네트워크 구축을 하며 배웠던 것인데, [기업의 서비스명]-[AWS 요소]-[public/private여부]-[az영역] 으로 네이밍을 하면, 처음보는 사람도 해당 구성요소에 대해서 많은 정보를 얻을 수 있기 때문에 참 좋은 방법이라고 생각했다. 이후로도 계속 그 방법을 사용하고 있다. (다만, 이번 과제에서는 다른 사람들와 AWS 계정을 공유해서 사용하고 있기 때문에 내 리소스임을 드러내야하므로, 나의 gitub 아이디나 나를 표현할 수 있는 단어를 prefix 로 두어야했다.)

2-4. 서브네팅

서브네팅도 왼쪽의 표를 작성할 때, 아예 함께 진행한다. 그래야 논리적으로 한번에 계획하고, 나중에 AWS 콘솔 상에서 작업할 때에는 마음 편하게 저 표만 보면서 구성할 수 있다. 그때그때 생각하려면 골치아프고 실수할 가능성도 높아진다.

3. VPC 생성

3-1. VPC 는 결국 땅따먹기

VPC는 Virtual Private Cloud 의 약자이다. VPC를 구성한다는 것은 결국 지구상 존재하는 드넓은 네트워크 망 중에서, "나는 이 땅에다가 내 집을 만들거야", "여기까지는 내 공간이야, 침범하지마!"하고 공헌하는 것이라는 생각이 들었다. 한번 땅을 사고 나면, 그 내부에서 집을 지을지, 빌딩을 세울지, 방을 어떻게 나눠서 쓸지, 외부와 소통할 수 있는 창문을 낼지, 손님이 들어올 수 있는 문을 만들지, 아니면 우리 가족들끼리만 소통하게 할지 그 세부적인 것은 오로지 그 땅 주인 마음이다.

이렇게 명확하게 영역을 구분하여 선을 긋는 땅따먹기(?)를 하면 니땅 내땅을 주장하며 싸울 논란의 여지도 없고, 좁은 땅을 좀 더 효율적으로 구분하여 사용할 수 있게 된다. 애매한 공간은 필요한 다른 사람에게 주고, 필요없으면 다시 땅을 팔아도 된다.

3-2. 구성하기

사실상 위처럼 설계 계획을 세웠다면, 이제 나머지는 표에 맞게 구축하는 것만 남았다. AWS 콘솔 > VPC 메뉴로 가서 VPC 를 생성해보자.

  • 생성할 리소스 : VPC만

    • "VPC 등"을 선택하면 서브넷 등 필요한 요소를 한꺼번에 설정하고 생성할 수 있도록 도와주는데, 문제는 내가 잘 모르는 부분까지 AWS 가 알아서 구축해준다는 점이다. 결국 구성하는 내가 잘 모른다면, 나중에 디버깅해야할 때, 어떤 부분에서 문제가 생겼는지 파악하기가 어렵다. 때문에 나는 수동으로 하나하나 설정을 했다.

  • 위의 설계도에 따라 이름태그, IPv4 CIDR, 태그(Name) 등을 기입한다.

4. Subnet 생성

4-1. Subnet은 방만들기

VPC가 내 집을 만들기 위한 토지를 확보하는 과정이라면, Subnet은 집을 짓고 방을 만드는 과정이다. 집에 아무리 넓어도 공간을 효율적으로 분리해야 프라이버시도 보존하고, 많은 사람들이 더 효율적으로 살 수 있다.

4-2. 구성하기

  • 역시 위의 설계도에 따라 Subnet 을 생성한다.

  • 서브넷을 생성하면서 가용영역(availability zone) 역시 같이 설정하는데, 보통 시스템의 안정을 위해 다양한 가용영역에 서브넷을 분산하여 만들어둔다. 보통은 A-C, B-D를 페어링하여 구성하는 것 같다.

  • 우리는 A와 C 영역에 public subnet 1개씩을 만들고, A영역에 Bastion 서버가 위치할 public 서브넷, 데이터베이스가 위치할 private 서브넷을 하나씩 만들었다. 역시 위의 설계도에 따른 것이다.

5. Internet Gateway 와 Nat Gateway 생성 및 연결

5-1. IGW 는 밖으로 향하는 문

VPC에서 토지를 확보하고, Subnet 으로 집 내부의 방을 나눴다면, IGW 는 집에서 바깥세상으로 향하는 문을 만드는 것과 같다는 생각을 했다. 외부로부터의 모든 요청들, 외부로 향하는 모든 요청들은 바로 이 IGW 를 통과한다.

5-2. Nat Gateway

Nat gateway 는 igw 와 연결되어 내부에서 외부의 인터넷망을 쓸 수 있도록 해주는 것이다. public subnet 에 위치하며, private subnet 이 이와 연결되면, nat gateway -> public subnet -> igw -> internet 까지 접속이 가능해진다.

5-3. 구성하기

6. Route Table 생성 및 연결

6-1. RT 는 경비실

라우터 테이블은 택배기사분이 경비실에서 목적지를 찾는 과정 같다는 생각을 했다. 사용자로부터 전달된 소포(패킷)을 가지고 있는 택배기사님은 어디쪽으로 전달되어야할지 아파트의 정확한 동과 호수를 경비실에서 한번 확인한다. 경비실에서는 정확한 위치가 파악되면, 그 위치를 알려주되, 위치를 모르겠다면, 그냥 경비실에 맡겨주도록한다.

아파트 주민이 택배를 보낼 때도 마찬가지이다. 아파트 주민은 서로 간의 거래라면 당근 직거래처럼 직접 만나서 소통하고 교환할 수 있겠지만, 외부의 사람들과 거래해야할 때면, 아파트 경비실에 맡겨둔다. 경비아저씨가 세상 바깥으로 그 물건을 전달해준다.

6-2. 구성하기

  • public rt 에는 public subnet 2개와 igw 를,

  • bastion rt 에는 bastion 용 public subnet 1개와 igw 를

  • 그리고 내부망을 위한 internal rt 에는 priavet subnet 1개와 nat gateway 를 연결해준다.

7. Security Group 설정

7-1. SG는 경비대

보안그룹은 말 그대로 우리 인프라에 대한 보안정책을 설정하는 곳이다. 예전에는 네트워크 ACL처럼 서브넷 단에서도 보안정책을 생성했다고 하는데, 이 보안정책이라는게 복잡하게 구성하면 한도끝도 없어지는지라, 요즘에는 그냥 서버 단위로 정책을 설정하는 것이 일반적이라고 한다.

7-2. 구성하기

설계도에 맞게 구성한다.

7-3. IP 주소 기반이 아닌 SG 기반으로 설정하기

보안그룹을 설정할 때, 보통은 특정 프로토콜, 포트, IP 를 허용할 것인지 설정하도록 되어있는데, 이렇게 IP 주소를 기반으로 할 경우에는 서버의 대수가 늘어날 때마다 계속 추가 설정해주어야 하는 불편함이 있다. 이때 우리가 보안그룹을 기반으로 설정하면, 보다 간편하게 설정이 가능하다.

예를 들면 위와 같은 식이다.

  • bastion server의 보안 정책인 mhson-sg-bastion 은 이미 서버와 연결되어있다.

  • 즉, mhson-sg-bastion 와 연결된 bastion 서버의 private ip 주소를 기반으로 하는 트래픽은 public server 에 허용된다는 것이다.

  • 따라서 bastion 서버의 private ip 를 통해서 public 서버에 접근할 수 있다는 말!

  • 그래서 나의 public server 보안그룹 mhson-sg-public 은 아래와 같은 보안 규칙을 가지고 있다.

    • ICMP 와 SSH 는 bastion 서버에서만, user 들이 접속하는 포트는 80과 443만 전체 대역대로 허용

  • 다만 한 가지 주의할 점은 private ip 를 기반으로 처리되기 때문에 AWS 리소스만 추가할 수 있고, 외부 리소스, public ip 는 사용 불가하다는 점이다. aws 서비스만 소스에 그룹을 넣어 반영이 가능하다. 외부 ip의 경우는 적용이 되지않는다.

8. Server 생성

8-1. 서버 구성하기

서버는 아래와 같이 구성하도록 하자.

  • 이름 : 미리 설계도에서 네이밍 해둔대로 적는다.

  • 어플리케이션 및 OS 이미지 : 우분투 22.0 버전, 64비트 선택

  • 인스턴스 유형 : git 과 연동하여 어플리케이션 운영해야하므로 t3.medium 으로 생성

  • 키페어 : 미리 생성해준 PEM 키 선택

  • 네트워크 설정

    • 적절한 VPC, 서브넷 선택

    • 퍼블릭 IP 자동할당 비활성화

    • 방화벽 (보안그룹) : 기본 보안그룹 중 서버에 맞게 선택

  • 스토리지 구성 : 30GB까지는 프리티어 요금제로 사용 가능하다.

  • 지금은 고급 세부정보를 건드리지 않지만 종료나 삭제 방지 등 필요한 부분을 나중에 수정할 수 있다.

8-2. bastion 서버는 왜 만들까

네트워크 망에서 구성하는 베스천 서버도 그와 비슷한 역할을 한다. 보통 퍼블릭 서브넷 상에 퍼블릭한 서버로 베스천 서버를 구성하고, 베스천 서버를 통해서 다른 서버로 접근할 수 있도록 구성을 한다. 외부에서 서버로 직접 접근하는 것이 아니라 꼭 배스천 서버를 통해서만 접근 가능하도록 하는 것이다.

이렇게 구성하면 대략 아래와 같은 이점이 있다.

  1. 보안 설정을 베스천 서버에만 집중하고, 나머지 서버는 베스천 서버를 통해 접근할 수 있도록 하여, 랜섬웨어, 악성 루트킷 등의 피해를 줄인다.

    1. 배스천 서버가 공격당할 경우, 이 서버만 재구성하면 되니까, 전체 인프라에 미치는 영향력이 적어지게 된다.

    2. 보안상 매우 중요한 22번 포트를 전체 서버가 아니라, 배스천 서버로만 오픈하여 보안 정책을 더 엄격하게 유지할 수 있다.

    3. 동시에 서버가 auto scaling 등으로 대수가 늘어나고 확장되더라도 보안 정책에 엄격하게 유지될 수 있다.

  2. 서비스 정상 트래픽과 관리자용 트래픽을 구분할 수 있다.

    1. 서비스가 DDos 공격을 받아 대역폭을 모두 차지하고 있다고 하더라도 관리자는 22번 포트를 통해 배스천 -> 서버 루트로 접근할 수 있게 된다.

여기까지 구성했다면 필요한 부분은 모두 구성한 것이다. 네트워크가 잘 구성되었는지 통신을 확인해보자.

9. 통신 확인하기

통신 확인은 다음과 같은 과정으로 진행한다.

  1. 먼저 bastion 서버(mhson-ec2-bastion-2a)에 ssh + pem key 로 원격 접속하기

  2. mhson-ec2-bastion-2a 서버에서 public 서버인 mhson-ec2-public-2a 로 접속하기

  3. mhson-ec2-bastion-2a 서버에서 private 서버인 mhson-ec2-internal-2a 로 접속하기

9-1. bastion 서버 접속하기

# 터미널 접속한 후 앞 단계에서 생성한 key가 위치한 곳으로 이동한다.
$ chmod 400 [pem파일명]    # user 만 읽을 수 있도록 권한을 변경한다.  
$ ssh -i [pem파일명] ubuntu@[SERVER_IP]
ubuntu@ip-192-168-11-182:~/.ssh$ chmod 400 key-mhson.pem
ubuntu@ip-192-168-11-182:~/.ssh$ ls -al
total 20
drwx------ 2 ubuntu ubuntu 4096 Mar  3 03:34 .
drwxr-x--- 4 ubuntu ubuntu 4096 Mar  3 03:34 ..
-rw------- 1 ubuntu ubuntu  391 Mar  3 03:11 authorized_keys
-r-------- 1 ubuntu ubuntu 1676 Mar  3 03:26 key-mhson.pem    # user 에게만 reading 권한 추가 
-rw-r--r-- 1 ubuntu ubuntu  142 Mar  3 03:34 known_hosts

9-2. bastion 서버에서 다른 서버로 접속하기 위한 설정

// Bastion 서버에서 공개키를 일단 생성한다. 
bastion $ ssh-keygen -t rsa bastion $ cat ~/.ssh/id_rsa.pub
// 접속하려는 서비스용 서버에 해당 키를 추가한다. 
// 이때 접속을 위해서 22번 포트를 잠시 열고 접근한 뒤, 다시 닫는다. 
public $ vi ~/.ssh/authorized_keys
private $ vi ~/.ssh/authorized_keys
// bastion server 에서 접속을 해본다. 
bastion $ ssh ubuntu@[서비스용 서버 IP] 
  • bastion server -> public server, bastion server -> internal server 로 접근을 확인하면, 통신 연결 완료!

  • 보안정책대로 잘 처리되는지 확인한다.

9-3. ping test 해보기

만약 SSH 프로토콜로 접속시 오류가 있다면, ping test 를 통해 서버가 정상 운영되고 있는지 확인한다.

ping [서버 IP]

디버깅은 보통 아래와 같이 진행한다.

  1. SSH 로 접속 시도

  2. 접속되지 않고 터미널이 그 상태로 응답없이 있다면, 취소하고 ping test

  3. ping test 결과, 정상적으로 패킷을 받는다면, 보안 정책상 막힌 것은 아닌지 살펴본다.

  4. pint test 결과, 정상적으로 패킷을 못받는다면, 서버가 running 상태인지 확인한다.

# 정상
PING google.com (172.217.174.110): 56 data bytes
64 bytes from 172.217.174.110: icmp_seq=0 ttl=110 time=71.854 ms
64 bytes from 172.217.174.110: icmp_seq=1 ttl=110 time=68.993 ms
64 bytes from 172.217.174.110: icmp_seq=2 ttl=110 time=76.598 ms
64 bytes from 172.217.174.110: icmp_seq=3 ttl=110 time=76.201 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 4 packets received, 20.0% packet loss
round-trip min/avg/max/stddev = 68.993/73.411/76.598/3.158 ms


# 비정상
 ping 13.124.81.243
PING 13.124.81.243 (13.124.81.243): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
^C
--- 13.124.81.243 ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss

10. Trouble Shooting

10-1. 보안그룹으로 보안정책 설정 후, Public IP 로 접근 오류

예전에 설정할 때, 분명 보안정책을 보안 그룹으로 설정했던 기억이 있어서 그대로 진행했다. 그런데 접속하려니 계속 오류가 나는 것이 아닌가...? 알고보니 보안그룹 설정에 대해서 제대로 알지 못해서 발생한 이슈였다.

내가 간과한 것은 private ip 였다.

  • bastion 서버 + bastion 보안그룹 설정을 완료했고

  • public 서버 설정을 완료한 뒤, public 보안그룹 설정에 bastion 보안그룹을 연결시켜주었다. 따라서 bastion 서버는 pulbic 서버에 접근이 가능하다.

  • 그런데 bastion -> public 으로 접근할 때, private ip 를 기반으로 접근을 해야하는데, 나는 자꾸 public ip 로 접속을 시도해서 접속이 안되는 현상이 있었다.

  • 접속 ip 를 public 서버의 private ip 로 바꾸어주니 정상 접속 할 수 있었다.

10-2. 너무 Open 된 PEM key 권한

  • PEM 키의 권한이 400보다 너무 오픈되어있다면, 아래와 같이 오류 메시지가 뜬다.

ubuntu@ip-192-168-11-182:~/.ssh$ ssh -i key-mhson.pem ubuntu@192.168.11.32
The authenticity of host '192.168.11.32 (192.168.11.32)' can't be established.
ED25519 key fingerprint is SHA256:bf8Up22yCj3R3S7TRbgmG386jaujCC5gTOdAhcAz04w.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.11.32' (ED25519) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0664 for 'key-mhson.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "key-mhson.pem": bad permissions
ubuntu@192.168.11.32: Permission denied (publickey).

11. 기타 하면 좋은 설정들

11-1. 환경변수 적용 - 세션 타임아웃 설정

  • Session Timeout 설정을 하여 일정 시간 작업을 하지 않을 경우 터미널 연결이 자동으로 해제되도록 한다.

    • 보안에도 좋고, 불필요한 커넥션을 끊을 수도 있다는 점도 좋다.

$ sudo vi ~/.profile
  HISTTIMEFORMAT="%F %T -- "    ## history 명령 결과에 시간값 추가
  export HISTTIMEFORMAT
  export TMOUT=600              ## 세션 타임아웃 설정 
    
$ source ~/.profile
$ env

11-2. 쉘 프롬프트 변경

  • 서버마다 쉘 프롬프트를 변경하여 관리자가 Bastion 등 서버를 보다 쉽게 구분할 수 있도록 한다. 실수를 사전에 방지할 수 있다. 

  • 서버에 직접 접속하여 작업할 경우, 작업 이력 히스토리를 기록해두어야 장애 발생시 원인을 분석할 수 있다. 감사로그를 기록하고 수집하여 장애 상황을 대비해보자.

$ sudo vi ~/.bashrc
  tty=`tty | awk -F"/dev/" '{print $2}'`
  IP=`w | grep "$tty" | awk '{print $3}'`
  export PROMPT_COMMAND='logger -p local0.debug "[USER]$(whoami) [IP]$IP [PID]$$ [PWD]`pwd` [COMMAND] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"'

$ source  ~/.bashrc
$ sudo vi /etc/rsyslog.d/50-default.conf
  local0.*                        /var/log/command.log
  # 원격지에 로그를 남길 경우 
  local0.*                        @원격지서버IP
    
$ sudo service rsyslog restart
$ tail -f /var/log/command.log

첫 회사 재직시절부터 네트워크 망 설계를 할 때, 좀 더 빠르고 직관적인 툴이 없을까 이런 저런 소프트웨어들을 기웃거렸다. 그렇게 여러 곳을 방황하다가 결국 정착한 것은 google 의 서비스이다.

는 단순히 네트워크 망 설계 뿐만 아니라 마인드맵, 조직도, ERD 등 굉장히 다양한 용도로 사용될 수 있는 툴이다. 개인적으로는 인터넷 브라우저 상에서 작업이 가능하고, 여러 명이 동시에 작업할 수 있다는 점, 반응 속도도 (데이터가 일정 수준 이하이면) 꽤 나쁘지 않다는 점, 쉽게 요소를 추가하고 삭제하는 것이 가능하다는 점, 그리고 AWS 관련 서비스 아이콘들을 제공해준다는 점 등 다양한 이점 때문에 이 툴을 초기 인프라 설계할 때나 데이터 베이스 모델링 할 때도 사용하고 있다. (강추...👍)

이때, public server 인 mhson-sg-public 을 구성할 때, 만약 bastion 서버의 보안정책인 mhson-sg-bastion 를 선택한다면, .

베스천(bastion) 이라는 단어는 원래는 보루, 요새라는 뜻으로, 중세 시대에 영주나 왕이 살고 있는 중요한 기지인 성을 둘러싸고 있는 방어막을 의미한다고 한다. ()

에 따르면 보안그룹으로 보안정책을 설정할 경우, 접근은 연결된 리소스의 "Private IP"를 기반으로 허용이 된다.

11-3. 를 사용하여 감사로그 남기기

🏰
draw.io(Diagrams.net)
Draw.io
이는 해당 보안 그룹과 연결된 리소스의 private ip 주소를 기반으로 하는 트래픽을 허용한다는 의미가 된다
https://rainbound.tistory.com/entry/AWS-보안그룹-규칙-소스에-보안그룹-넣기
참고
AWS 공식문서
쉘변수
PS1 generator
logger
nextstep 의 인프라 공방 과정
망 구성하기
배포하기
배포 스크립트 작성하기
PEM 키 생성하기