분류 전체보기 234

Git 핵심 개념

1) Mac에서 Git 설치하기Mac에서는 Git 설치가 매우 간단하다.기본적으로 터미널에서 git --version을 입력하면macOS가 필요한 구성요소(Xcode Command Line Tools)를 자동으로 설치하도록 안내한다.cmd + space로 Spotlight를 열고 터미널을 실행아래 명령을 입력git --version설치 안내 창이 나타나면 설치 진행을 선택설치가 완료되면 다시 git --version으로 버전을 확인Homebrew를 사용 중이라면 brew install git로도 설치가 가능하다. 2) Git을 이해하는 기본 구조Git을 제대로 쓰려면 내부 흐름 이해하기2-1) Working Tree사용자가 실제로 파일을 편집하는 공간이다.Git이 추적하는 파일과 추적하지 않는 파일이 섞..

IT/Git & GitHub 2025.10.12

Git과 Github - 개발자가 알아야 할 버전 관리의 시작점

1. Git이란 무엇인가?Git은 파일과 코드의 변경 기록을 저장하고 관리하는 도구이다.쉽게 말해, “코드의 타임머신”이라 할 수 있다.개발 과정에서 코드는 계속 바뀐다. 새로운 기능이 추가되고, 버그가 수정되며, 때로는 실수로 문제가 생기기도 한다.Git은 이러한 모든 변경 사항을 기록하여, 언제든지 과거 상태로 되돌아갈 수 있게 해주는 버전 관리 시스템(VCS, Version Control System)이다.Git은 혼자 쓸 수도 있지만, 여러 명이 동시에 협업할 때 진가를 발휘한다. 누가 언제 어떤 코드를 수정했는지 추적할 수 있고, 충돌(conflict)이 생기면 서로의 변경 사항을 비교하면서 합칠 수 있다. 2. Github란 무엇인가? Git이 코드의 변경 이력을 관리하는 도구라면,Github..

IT/Git & GitHub 2025.10.12

Studying English (4)

2019년쯤 부터 사용해온 영어쉐도잉 어플, 꾸매영.미디어로 공부할 수 있어 재미없지 않고 좋았다.영어 공부 어플 추천해요!https://play.google.com/store/apps/details?id=com.doctor9.evdtenmineng 🎬 Nocturnal Animals Talking About Their Marriages ● Are things are a little better?상황은 조금 나아졌어? ● He's just having a hard time with his business right now.그는 사업이 조금 힘들어 ● Thought we were hiding it pretty well.우리는 잘 숨기고 있다고 생각했어. ● He would be very upset to ..

ENGLISH 2025.09.28

Git Merge 옵션 : --ff, --no-ff, --squash

Git에서 브랜치를 병합할 때 merge나 pull 명령어와 함께 자주 등장하는 옵션이 있다.--ff, --no-ff, --squash이다.모두 병합의 히스토리 관리 방식과 관련이 있으며, 어떤 옵션을 쓰느냐에 따라 프로젝트 히스토리가 크게 달라진다. 1. --ff (fast-forward merge)fast-forward merge는 Git의 기본 동작대상 브랜치가 단순히 뒤쪽에만 커밋이 이어져 있는 경우,새로운 병합 커밋을 만들지 않고 브랜치 포인터만 앞으로 이동시킨다. 장점히스토리가 직선으로 이어져 깔끔하다불필요한 merge commit이 생기지 않는다단점브랜치가 존재했다는 흔적이 남지 않는다협업 시 어떤 기능이 어느 브랜치에서 개발되었는지 추적하기 어렵다사용 시점기능 브랜치를 짧게 만들어 금방..

IT/Git & GitHub 2025.08.29

Polling: 전통적인 실시간 데이터 통신 방식

Polling이란?웹 애플리케이션에서 클라이언트가 서버의 변경된 데이터를 얻기 위해 가장 먼저 사용된 방식이 Polling이다.Polling은 클라이언트가 일정한 주기를 두고 서버에 요청을 보내고, 서버는 그 시점의 데이터를 응답하는 구조이다.즉, 서버에서 이벤트가 발생했는지 여부를 알기 위해 클라이언트가 계속해서 물어보는 방식이라고 할 수 있다. Polling의 특징Polling 방식의 장점은 단순성이다.특별한 설정이나 프로토콜 없이 기존의 HTTP 요청/응답 모델 위에서 동작하기 때문에 구현이 쉽다.하지만 단순성 뒤에는 명확한 단점이 존재한다.서버에 변경 사항이 없어도 요청/응답이 발생하여 리소스가 낭비된다요청 주기를 짧게 잡으면 빠르게 변경 사항을 알 수 있지만, 서버에 과부하가 걸린다요청 주기를..

IT/IT 2025.08.27

Spring Cloud Gateway에서 Java DSL로 라우팅 설정

Spring Cloud Gateway는 Spring 생태계에서 널리 쓰이는 API Gateway 솔루션이다.간단한 설정으로 라우팅, 필터링, 보안, 모니터링 기능을 제공하며, Spring WebFlux 기반으로 비동기/논블로킹 처리를 지원한다.application.yml이 아닌 Java DSL 방식으로 라우트를 등록하는 방법과 이를 담는 GatewayConfig 클래스를 예시로 살펴본다. 1. GatewayConfig 클래스Spring Cloud Gateway에서 라우팅 정보를 등록하는 방법은 크게 두 가지이다.application.yml 설정 기반Java DSL 기반 (RouteLocator Bean 등록)여기서 Java DSL 기반의 라우팅 설정은 @Configuration 클래스 안에서 Route..

카테고리 없음 2025.08.18

H2 인메모리 DB의 동작 원리

Spring Boot 프로젝트를 실행하고, POST로 데이터를 전송한 후 GET으로 조회해 보니, 방금 저장한 데이터가 잘 나온다.application.properties에 DB 연결 정보가 없음MySQL이나 PostgreSQL 같은 데이터베이스를 설치하지도 않음이게 가능한 이유는 Spring Boot의 기본 동작 때문이다. Spring Boot의 기본 동작 — 자동 H2 인메모리 DB Spring Boot에서 JPA(JpaRepository)를 사용하지만 DB 설정이 없는 경우,자동으로 인메모리 H2 데이터베이스를 사용한다.인메모리 DB란?디스크가 아닌 메모리(RAM)에 데이터가 저장되는 데이터베이스로,애플리케이션이 종료되면 모든 데이터가 사라진다. Spring Boot는 다음 조건에서 H2를 자동..

IT/Spring 2025.08.12

Spring Boot에서 @Valid와 @ExceptionHandler로 유효성 검사 에러 처리

웹 애플리케이션에서 클라이언트로부터 데이터를 받을 때, 값이 유효하지 않다면 서비스 로직이 실행되기 전에 차단하는 것이 안전하다.Spring Boot에서는 @Valid 또는 @Validated 어노테이션을 활용해 손쉽게 입력값 검증을 수행할 수 있다.하지만 유효성 검증에서 실패하면 MethodArgumentNotValidException 같은 예외가 발생하고, 기본적으로는 깔끔한 JSON 형태로 응답되지 않는다.@Valid 유효성 검사와 @ExceptionHandler를 활용하여 사용자 친화적인 에러 메시지 응답을 구현하는 방법 ⬇️ @Valid와 유효성 검사 어노테이션Spring Boot에서는 DTO 클래스에 다양한 검증 어노테이션을 붙여 입력값을 제한할 수 있다.대표적으로 다음과 같은 어노테이션이 있..

IT/Spring 2025.08.05

미들웨어 Middleware

시스템과 소프트웨어를 이어주는 다리현대의 소프트웨어 시스템은 점점 복잡해지고 있다. 다양한 디바이스, 운영체제, 네트워크 환경 속에서 사용자에게 안정적인 서비스를 제공하려면, 단순히 애플리케이션과 운영체제만으로는 부족하다. 이 틈을 메워주는 것이 "미들웨어(Middleware)"이다.미들웨어미들웨어(Middleware)는 운영체제(OS)와 응용 프로그램(애플리케이션) 사이에 위치하여,양쪽 기능이 원활하게 연동될 수 있도록 돕는 중간 계층 소프트웨어이다.애플리케이션이 하드웨어나 네트워크와 직접 소통하지 않고도 복잡한 처리를 수행할 수 있게 해주는 ‘중간 관리자’ 역할을 하는 존재이다. 운영체제는 기본적인 기능(파일 시스템, 메모리 관리 등)만을 제공하며,분산 시스템, 네트워크 통신, 데이터 처리 같은 복잡..

IT/IT 2025.08.02

Spring Data JPA 페이지네이션(Pagination) 처리

웹 애플리케이션에서 데이터를 조회할 때, 수만 건 이상의 데이터를 한 번에 내려받는 것은 매우 비효율적이다.이런 경우에 사용하는 대표적인 기법이 바로 페이지네이션(Pagination)이다.페이지네이션이란? 페이지네이션은 대량의 데이터를 페이지 단위로 나누어 사용자에게 제공하는 방식이다.예를 들어, 데이터베이스에 10,000건의 로그가 있을 때, 이를 한 번에 모두 내려받기보다 20개씩 나눠서 보여주는 방식이다.이를 통해 메모리 사용을 줄이고, 사용자 경험을 개선하며, 네트워크 비용도 줄일 수 있다.Spring Data JPA에서 페이지네이션 구성 요소Spring Data JPA는 페이지네이션을 위해 여러 유틸리티를 기본 제공한다. 대표적으로 아래 3가지가 있다. 1. Pageable 인터페이스페이지 요청..

IT/Spring 2025.07.30

동기화 vs 원자적 연산

멀티스레드 환경에서 데이터 일관성과 충돌 방지는 반드시 고려해야 할 중요한 주제이다.동기화(synchronization)와 원자적 연산(atomic operation)은 모두 이를 다루는 방법이지만, 그 목적과 동작 방식이 다르다. 동기화 (Synchronization)공유 자원(변수, 객체, 컬렉션 등)에 여러 스레드가 동시 접근할 때 충돌을 막기 위한 보장 수단Java에서는 synchronized 키워드 또는 Lock 인터페이스를 통해 구현✅ 예시class Counter { private int count = 0; public synchronized void increment() { count++; }}이 코드에서는 increment() 메서드 전체가 임계 구역(critical sectio..

IT/JAVA 2025.07.24

ConcurrentHashMap – 멀티스레드 환경에서 안전하게 Map 사용하기

Java에서 HashMap은 단일 스레드에서는 빠르게 작동하지만, 멀티스레드 환경에서는 안전하지 않다.여러 스레드가 동시에 put()이나 get()을 호출하면 데이터 손상, ConcurrentModificationException, 무한 루프 같은 심각한 문제가 발생할 수 있다. HashMap의 멀티스레드 한계Map map = new HashMap();스레드 간 동기화가 없기 때문에 동시 접근 시 데이터 충돌 가능성이 있다최악의 경우 Iterator 사용 중 ConcurrentModificationException이나 무한 루프도 일어난다. ConcurrentHashMap – 안전하고 빠른 멀티스레드 Map스레드 안전(Thread-safe): 여러 스레드가 동시에 접근해도 안전높은 병렬성: 내부적으로 버..

IT/JAVA 2025.07.24

인텔리제이에서 클래스, 인터페이스, 테스트코드까지 빠르게 만드는 팁 모음

✅ 1. Cmd + N or Alt + Insert : 코드 자동 생성사용하는 곳: 클래스/인터페이스/메서드 안 등Getter/Setter, Constructor, toString(), equals() 등 자동 생성Builder 패턴 생성도 가능@Getter, @Setter 안 쓸 때 직접 생성이 필요하면,클래스 안에서 Cmd + N 누르고 원하는 메서드를 선택 ✅ 2. Cmd + Shift + A : 모든 명령어 검색사용하는 곳: 모든 곳단축키 하나로 모든 기능에 접근 가능예: "Generate", "Create Test", "Reformat Code" 등 타이핑하면 바로 실행 ✅ 3. Ctrl + O (Override) / Ctrl + I (Implement)사용하는 곳: 부모 클래스를 상속했거나 인..

IT/IT 2025.07.24

JPA에서 deleteAll() vs deleteAllInBatch()의 차이와 주의할 점

Spring Data JPA를 사용하다 보면 전체 데이터를 삭제해야 할 때 deleteAll()과 deleteAllInBatch() 두 가지 메서드 중 무엇을 써야 할지 고민하게 된다두 메서드는 이름만 보면 비슷해 보이지만, 동작 방식, 성능, 주의사항 모두 다르기 때문에 잘 구분해서 사용해야 한다 1️⃣ deleteAll() — 하나씩 순회하며 삭제userRepository.deleteAll();내부적으로는 findAll()로 모든 데이터를 조회한 뒤,for 루프로 한 건씩 EntityManager.remove() 호출즉, n개의 delete 쿼리가 실행된다✅ 특징JPA가 영속성 컨텍스트를 유지한 채 개별 엔티티를 추적엔티티 리스너, 연관된 Cascade, orphanRemoval 등 모두 동작❗ 단점..

IT/Spring 2025.07.19

스프링 어노테이션

@Transactional@Transactionalpublic void createUser(User user) { userRepository.save(user); emailService.sendWelcomeEmail(user);}해당 범위 내의 DB 작업을 하나의 트랜잭션으로 묶어 처리한다.모두 성공하면 커밋, 하나라도 실패하면 모두 롤백한다.적용 위치에 따라 다르게 작동한다:클래스에 선언 → 해당 클래스의 모든 public 메서드에 적용메서드에 선언 → 해당 메서드에만 적용주의: private, protected, default 접근자 메서드에는 적용되지 않다.옵션:@Transactional(rollbackFor = Exception.class) @Valid@PostMapping("/user..

IT/Spring 2025.07.15

HikariCP

🔍 HikariCP란?HikariCP는 경량의 고성능 JDBC 커넥션 풀이다.Spring Boot에서는 기본 커넥션 풀로 HikariCP를 사용하고 있으며, 빠른 속도와 낮은 메모리 사용량으로 잘 알려져 있다.Hikari는 일본어로 "빛"이라는 뜻이며, 그 이름처럼 빠르고 가볍다는 특징을 가진다.Spring Boot 2.x부터는 HikariCP가 기본으로 설정되어 있기 때문에 별도 설정 없이도 바로 사용할 수 있다.🤔 커넥션 풀애플리케이션이 데이터베이스에 접근할 때마다 커넥션을 새로 생성한다면 다음과 같은 문제점이 발생한다.커넥션 생성/종료는 비용이 크고 느리다대량의 요청 처리 시 DB 자원 고갈 가능성이 있다응답 속도 저하, 장애 발생 위험이 있다➡️ 이런 문제를 해결하기 위해 미리 일정량의 커넥션..

IT/Spring 2025.07.12

macOS | Linux 공통 주요 명령어

macOS (zsh)와 Linux (bash/zsh) 에서 공통으로 사용되는 주요 명령어🐚 공통 기본 명령어 표명령어 기능 macOS (zsh) Linux (bash/zsh) 차이점명령어기능macOS (zsh)Linux차이점 ls디렉토리 목록 보기ls -G (컬러)ls --color=auto컬러 옵션 다름cd디렉토리 이동동일동일❌ 없음mkdir폴더 생성동일동일❌ 없음touch빈 파일 생성동일동일❌ 없음rm파일/폴더 삭제동일동일❌ 없음cp파일 복사동일동일❌ 없음mv파일 이동/이름 변경동일동일❌ 없음cat파일 내용 출력동일동일❌ 없음echo문자열 출력동일동일❌ 없음pwd현재 디렉토리 출력동일동일❌ 없음grep문자열 검색동일동일✅ GNU grep이 더 많은 기능find파일 찾기동일동일✅ 옵션 차이 있음man..

IT/IT 2025.06.17

Docker 명령어

Docker 명령어 기능별로 정리 🐳 Docker 명령어 요약표분류명령어설명버전 확인docker -v docker versionDocker 버전 정보 확인시스템 상태 확인docker infoDocker 시스템 정보 출력이미지docker images로컬에 저장된 이미지 목록 보기 docker pull 이미지 다운로드 docker build -t .Dockerfile로 이미지 생성 docker rmi 이미지 삭제컨테이너 실행/종료docker run 새 컨테이너 생성 및 실행 docker run -d 백그라운드로 실행 docker run -it 터미널로 인터랙티브 실행 docker exec -it bash실행 중 컨테이너에 접속 docker stop 컨테이너 정지 docker start 컨테이너 시작 d..

IT/Cloud & DevOps 2025.06.17

vi 또는 vim 편집기의 주요 단축키, 명령어

vi 또는 vim 편집기의 주요 단축키(명령어)vi는 모드 기반 편집기라, 현재 어떤 모드에 있느냐에 따라 동작이 달라집니다.🧭 모드 설명명령 모드기본 모드. 커서 이동, 삭제, 복사 등 가능입력 모드글자 입력 가능 (i, a 등으로 진입)명령행 모드저장, 종료 등 (: 키로 진입)🖱️ 명령 모드에서 자주 쓰는 단축키i커서 앞에 입력 모드 진입a커서 뒤에 입력 모드 진입o아래 줄에 새 줄 만들고 입력 모드x커서 위치 한 글자 삭제dd한 줄 삭제yy한 줄 복사 (yank)p복사한 내용 붙여넣기u실행 취소Ctrl + r실행 취소 취소 (redo):명령행 모드 진입/검색어아래 방향으로 검색n검색 결과 중 다음 결과로 이동⌨️ 명령행 모드 (입력 방법: :):w저장 (write):q종료 (quit):wq 또..

IT/IT 2025.06.16

맥 MacOS 단축키

💻 MacOS 자주 쓰는 단축키 모음 📁 파일 및 창 관리파일 삭제Command + BackspaceDeletefn + BackspaceFinder 새 탭에서 열기Finder에서 클릭 후 Command + 더블클릭앱 종료Command + Q잘라내기 후 붙여넣기Command + Option + V창 숨기기fn + H폴더 생성Command + Shift + N 창 닫기Command + W최소화Command + M전체화면 전환Control + Command + F🖥️ 화면 제어 및 정리Mission Control 보기Control + ↑Dock 보기/숨기기Option + Command + D화면 분할 / 전체화면 제어Control + Option + 방향키 / U/I/J/K/ Enter🔍 검색 및 ..

IT/IT 2025.06.10
반응형