[멋사 클라우드 5기] Day 37 & 38 - Linux (3)
·
Learning Log
Chapter 18. 환경변수 & 셸 설정환경변수환경변수(Environment Variable)는 운영체제가 프로세스에게 전달하는 이름=값 형태의 설정 정보이다. 프로세스는 환경변수를 통해 자신이 실행되는 환경에 대한 정보를 얻는다.환경변수는 리눅스뿐만 아니라 모든 운영체제에 존재하는 개념이며, 애플리케이션 설정을 코드와 분리하는 핵심 메커니즘이다.셸 변수 vs 환경변수이 둘은 자주 혼동되지만 범위가 다르다:셸 변수: 현재 셸 안에서만 유효하다. 자식 프로세스에 전달되지 않는다.환경변수: export로 내보내면 자식 프로세스에도 상속된다.# 셸 변수 (현재 셸에서만 유효)MY_VAR="hello"echo $MY_VAR # hellobash -c 'echo $MY_VAR' # (빈 출력 ..
[멋사 클라우드 5기] Day 35 & 36 - Linux (2)
·
Learning Log
Chapter 10. 텍스트 정렬, 집계 & 비교grep, sed, awkgrep, sed, awk 는 단독으로도 유용하지만, 파이프(|)로 연결하여 데이터 분석 파이프라인을 구성할 때 더 많은 작업을 할 수 있다.# 로그에서 IP별 접속 횟수 상위 10개awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10sort — 텍스트 정렬sort는 입력을 줄 단위로 정렬한다. 기본은 알파벳(사전) 순서이다.# 알파벳순 정렬sort names.txt# 역순 정렬 (-r: reverse)sort -r names.txt# 숫자순 정렬 (-n: numeric) ★sort -n numbers.txt# 숫자 정렬 없이 하면: 1, 10, 100, 2, 20 ..
[멋사 클라우드 5기] Day 33 & 34 - Linux (1)
·
Learning Log
Chapter 01. 리눅스 개요리눅스란 무엇인가리눅스(Linux)는 오픈소스 운영체제(Operating System)이다. 정확히 말하면, 리눅스는 커널(Kernel)의 이름이다. 커널이란 하드웨어와 소프트웨어 사이에서 중재자 역할을 하는 운영체제의 핵심 구성 요소이다. "리눅스"라고 부르는 것은 이 리눅스 커널 위에 다양한 시스템 유틸리티, 라이브러리, 셸(Shell), 패키지 매니저 등을 결합한 리눅스 배포판(Distribution)을 의미한다.운영체제의 구조┌─────────────────────────────────────┐│ 사용자 애플리케이션 │ ← 웹 브라우저, 에디터, Docker 등├────────────────────────────────────..
[멋사 클라우드 5기] Day 31 & 32 - OSI 7 Layers
·
Learning Log
OSI 7 Layers네트워크 문제가 발생했을 때 "인터넷이 안 돼요"라는 말만으로는 원인을 파악할 수 없다. DNS가 안 되는 건지, 방화벽이 막는 건지, 물리 케이블이 빠진 건지.문제의 위치를 특정하려면 네트워크가 어떤 단계로 동작하는지 이해해야 한다.OSI(Open Systems Interconnection) 모델은 네트워크 통신을 7개의 계층으로 분리한 참조 모델이다. 1984년 ISO(International Organization for Standardization)가 제정했다. 실제 인터넷은 TCP/IP 4계층 모델로 동작하지만, OSI 7계층은 문제를 진단하고 설명하는 공통 언어로서 표준이다.Layer 1 — Physical (물리 계층)물리 계층은 0과 1의 비트(bit)를 실제 전기 신..
[멋사 클라우드 5기] Day 29 & 30 - 게시판 구현을 통해 확인한 Spring Data JPA
·
Learning Log
findById vs getReferenceById 차이메서드사용하는 곳대상findByIdgetPost(), getPostWithComments()Post 조회getReferenceByIdregisterPost(), updatePost())User, PostfindById — 즉시 SELECT 실행// PostService.java:29-33@Transactionalpublic PostDto getPost(Long pid) { return postRepository.findById(pid) // ← 이 시점에 SELECT 실행 .map(PostDto::from) .orElseThrow(() -> ..
[멋사 클라우드 5기] Day 28 - JWT 그런데 Redis를 곁들인
·
Learning Log
최근 Spring Security, JWT, Redis를 학습하며 보안에 대해 조금 더 고민해 볼 수 있었다.기술 하나하나만 보면 단순해 보이는데, 이들을 조합해서 쓰면 구조는 복잡해지는 한편훨씬 다양한 문제들을 해결할 수 있게 되는 점이 흥미롭다.그럼에도 불구하고, 보안에 있어 완벽한 기술이란 없다고 한다. 다만, 최선의 트레이드오프를 결정하기 위해서어떤 보안 위협을 최우선으로 방어할 것인지, 그리고 프로젝트의 복잡도와 아키텍처 사이에서어느정도의 타협점을 찾을 것인지 고민하는 것이 중요한 문제라고 느껴졌다.어제 정리한 내용들과 겹치는 부분이 있지만, 헷갈리던 점을 명확히 짚고 넘어가기 위해 다시 정리했다.세션 기반 인증의 구조와 한계세션 기반 인증이란?HTTP는 Stateless(무상태) 프로토콜이다...
[멋사 클라우드 5기] Day 26, 27 - Spring Security & JWT
·
Learning Log
1. 인증과 인가개념 의미 비유인증 (Authentication)"너는 누구인가?"를 확인하는 과정건물 출입 시 신분증을 보여주는 것인가 (Authorization)"너는 이것을 할 수 있는가?"를 확인하는 과정신분증 확인 후 특정 층에 들어갈 권한이 있는지 확인하는 것예를 들어, 사용자가 로그인하면 인증이 완료된 것이고, 로그인한 사용자가 관리자 페이지에 접근하려 할 때 관리자 권한이 있는지 확인하는 것이 인가이다.2. 세션 방식의 한계와 JWT의 등장세션(Session) 방식이란JWT가 등장하기 전, 대부분의 웹 서버는 세션(Session) 방식으로 사용자를 관리했다.세션 방식 동작 흐름:1. 사용자가 로그인 → 서버가 세션 생성 → 서버 메모리에 저장2. 서버가 클라이언트에게 Session ID(세..
[멋사 클라우드 5기] Day 25 - Spring Data JPA (3)
·
Learning Log
Fetch Type연관관계를 설정할 때 반드시 확인해야하는 부분이다.즉시 로딩 (Eager Loading)연관된 엔티티를 즉시 함께 조회 한다. FetchType.EAGER 로 설정한다.@ManyToOne(fetch = FetchType.EAGER) // 기본값private Customer customer;-- Order를 조회할 때 Customer도 JOIN해서 함께 가져옴SELECT o.*, c.*FROM orders oLEFT JOIN customer c ON o.customer_id = c.idWHERE o.id = 1문제: 지금 당장 Customer 정보가 필요 없어도 항상 JOIN 쿼리가 실행된다. 연관된 엔티티가 많을수록 불필요한 데이터를 많이 가져와 성능이 저하된다. 특히 N+1 문제가 발..
[멋사 클라우드 5기] Day 24 - Spring Data JPA (2)
·
Learning Log
1. 연관관계 매핑이란?현실 세계에서 고객(Customer) 과 상품(Product) 은 서로 관계가 있다.한 고객은 여러 상품을 주문할 수 있다.한 상품은 여러 고객에게 주문될 수 있다.이 관계를 Java 객체로 표현하면 참조(Reference)가 되고, DB로 표현하면 외래 키(Foreign Key)가 된다.연관관계 매핑은 이 두 세계를 JPA 어노테이션으로 연결하는 작업이다.[Java 세계] [DB 세계]Customer → Product ↔ customer_id FK product_id FK2. 연관관계의 종류연관관계는 4가지로 나뉜다.종류어노테이션예시다대일 (N:1)@ManyToOne여러 주문 → 한 고객..
[멋사 클라우드 5기] Day 23 - Spring Data JPA (1)
·
Learning Log
1. 왜 JPA가 필요한가? — 패러다임 불일치 문제객체 지향 vs 관계형 데이터베이스Java는 객체 지향 언어다. 개발자는 현실 세계를 객체(Object) 로 모델링하고, 객체 간의 관계를 참조(Reference) 로 표현한다.반면, 우리가 데이터를 저장하는 공간인 RDBMS는 데이터를 테이블과 외래 키(Foreign Key) 로 표현한다.이 두 세계는 근본적으로 사고방식이 다르다. 이것을 패러다임 불일치(Paradigm Mismatch) 라고 한다.패러다임 불일치의 구체적인 예시🔴 문제 1: 상속(Inheritance)Java에서는 클래스 간 상속이 자연스럽다.// Java: 상속 관계class Vehicle { Long id; String name;}class Car extends Ve..