본문 바로가기

전체 글86

[위스키 리뷰] 발렌타인 싱글몰트 글렌버기 16년 스몰배치 오늘 리뷰할 위스키는 발렌타인 싱글몰트 글렌버기 16년 스몰배치입니다.발렌타인이라고 하면 보통 블렌디드 위스키를 먼저 떠올리게 되는데, 이번에 마셔본 제품은 글렌버기(Glenburgie) 싱글몰트입니다.개인적으로 글렌버기는 처음 마셔봤는데, 첫 잔을 마시자마자 나온 생각은 딱 하나였습니다."오, 이거 괜찮다!"올해 마셔본 위스키 중에서는 가장 맛있게 느껴졌습니다.발렌타인 싱글몰트 글렌버기 16년 스몰배치발렌타인 공식 홈페이지에 따르면 이 제품은 마스터 블렌더 샌디 히슬롭(Sandy Hyslop)이 독창적이고 풍부한 아로마를 만들기 위해 72개의 아메리칸 오크 캐스크를 직접 선별해 만든 제품이라고 합니다.글렌버기 특유의 과일 캐릭터와 아메리칸 오크에서 오는 달콤한 풍미가 주요 특징이라고 합니다.공식 테이스.. 2026. 9. 15.
[Java] Day 9 - JVM Memory ⭐⭐⭐ Java 개발을 하다 보면 다음과 같은 질문을 자주 만나게 됩니다.객체는 메모리 어디에 생성될까?new로 객체를 생성하면 내부적으로 어떤 일이 일어날까?Stack과 Heap은 어떤 차이가 있을까?user = null을 하면 객체는 바로 삭제될까?Garbage Collector는 어떤 기준으로 객체를 삭제할까?GC Root는 무엇일까?이번 Day 9에서는 JVM의 메모리 구조를 이해하고, Java 객체와 Reference가 실제 메모리에서 어떤 관계를 가지는지 학습했습니다.1. JVM Memory 구조JVM의 메모리 구조를 개념적으로 보면 다음과 같습니다.JVM ├── Heap ├── Stack ├── Metaspace └── PC Register각 영역의 역할은 다음과 같습니다.영역주요 역할Heap객체와.. 2026. 9. 15.
[Java] Day 8 - Exception Java 스터디 2주 차를 시작하면서 오늘은 Exception(예외 처리)에 대해 학습했습니다.백엔드 개발에서는 잘못된 요청, 존재하지 않는 데이터, 재고 부족, 인증 실패 등 다양한 예외 상황이 발생합니다.따라서 단순히 오류가 발생했을 때 프로그램을 종료시키는 것이 아니라, 예외를 적절하게 발생시키고 처리하는 방법을 이해하는 것이 중요합니다.오늘은 Java의 예외 구조부터 try/catch, finally, throw, throws, 그리고 실무에서 자주 사용하는 Custom Exception까지 정리했습니다.1. Exception이란?프로그램을 실행하다 보면 정상적인 흐름에서 벗어나는 상황이 발생할 수 있습니다.예를 들어 다음 코드를 실행하면:int result = 10 / 0;다음과 같은 예외가 발.. 2026. 9. 14.
[Java] Day 7 - Stream API 정리 Java Stream API 정리Java 학습 7일차.이번에는 실무 Java 코드에서 자주 사용하는 Stream API를 학습했다.Stream은 단순히 데이터를 반복 처리하는 문법이 아니라, 여러 데이터 처리 작업을 하나의 파이프라인으로 연결해서 표현할 수 있도록 해준다.오늘은 filter, map, flatMap, sorted, distinct, limit, groupingBy, toMap, reduce 등을 학습하고 상품 데이터를 대상으로 실습해 보았다.1. Stream이란?Stream은 Collection 등의 데이터를 처리하기 위한 API다.데이터를 직접 저장하는 자료구조가 아니라, 데이터를 원하는 형태로 가공하기 위한 처리 흐름이라고 이해하면 쉽다.List numbers = List.of(1, .. 2026. 9. 12.
[Java] Day 6 - Lambda + Functional Interface Java 학습 6일 차.이번에는 Java에서 함수형 프로그래밍을 지원하기 위해 제공하는 Lambda(람다)와 Functional Interface(함수형 인터페이스)를 학습했다.특히 Predicate, Function, Consumer, Supplier의 차이와 익명 클래스와 Lambda의 차이, Method Reference까지 정리했다.🎯 학습 목표Lambda의 개념을 이해한다.Functional Interface가 무엇인지 이해한다.Predicate / Function / Consumer / Supplier의 차이를 이해한다.익명 클래스와 Lambda의 차이를 이해한다.Method Reference를 사용할 수 있다.1. LambdaLambda란?Lambda는 메서드를 하나의 값처럼 표현할 수 있.. 2026. 9. 11.
[Java] Day 5 - HashMap + equals/hashCode Java/Spring 백엔드 개발자라면 반드시 이해해야 하는 주제 중 하나가 HashMap과 HashSet이다.특히 면접에서 다음과 같은 질문이 자주 등장한다.HashMap은 어떻게 데이터를 저장하는가?Hash collision이란 무엇인가?equals()와 hashCode()는 왜 같이 구현해야 하는가?HashSet은 어떻게 중복을 판단하는가?hashCode()가 같으면 같은 객체인가?HashMap의 Key를 수정하면 왜 문제가 발생하는가?이번 학습에서는 단순히 HashMap을 사용하는 방법이 아니라 HashMap 내부에서 데이터가 어떻게 저장되고 검색되는지를 이해하는 것을 목표로 했다.1. hashCode()란?hashCode()는 객체를 식별하기 위해 사용되는 정수값을 반환하는 메서드다.모든 Jav.. 2026. 9. 10.
[Java] Day 4 - Collection Framework Collection FrameworkJava에서 여러 개의 데이터를 관리할 때 사용하는 Collection Framework를 학습했다.이번 학습의 핵심은 단순히 ArrayList, HashMap 등의 사용법을 익히는 것이 아니라,"어떤 상황에서 어떤 Collection을 선택해야 하는가?"를 이해하는 것이다.🎯 학습 목표Java Collection Framework의 구조를 이해한다.List, Set, Map의 차이를 이해한다.ArrayList, LinkedList의 특징을 이해한다.HashSet, TreeSet의 차이를 이해한다.HashMap, TreeMap, LinkedHashMap의 차이를 이해한다.데이터의 특성에 따라 적절한 Collection을 선택할 수 있다.1. Collection Fra.. 2026. 9. 9.
[Java] Day 3 - Generic, Enum, Record 정리 1. Generic이란?Generic(제네릭)은 클래스나 메서드에서 사용할 타입을 미리 정해놓지 않고, 사용하는 시점에 타입을 지정할 수 있도록 하는 기능이다.쉽게 말하면,"이 클래스는 String을 사용할 수도 있고 Integer를 사용할 수도 있는데, 실제 어떤 타입을 사용할지는 사용하는 쪽에서 결정하자."라는 개념이다. Generic을 사용하지 않는 경우public class Box { private Object value; public void setValue(Object value) { this.value = value; } public Object getValue() { return value; }} 사용할 때는 다음과 같다. Box box .. 2026. 9. 7.
PHP에서 Nest.JS로 JS 백엔드 프레임워크 Nest.JS 를 알아보고,Laravel vs Spring vs Nest.JS 3개 프레임워크를 비교해보았습니다. 2025. 11. 7.
swiper 에 lazy 적용 Swiper.js에서 Lazy Loading을 적용하려면 슬라이드 내부의 태그에 class="swiper-lazy" 속성을 추가하고, data-src와 같은 속성에 실제 이미지 경로를 지정합니다. 이렇게 하면 현재 보이는 슬라이드 이미지와 다음 슬라이드 이미지만 먼저 로드되고, 사용자가 스크롤하며 다른 슬라이드로 이동할 때 해당 이미지만 로드되어 초기 로딩 속도와 성능을 개선할 수 있습니다. Lazy Loading 적용 방법swiper-lazy class 추가: 태그에 class="swiper-lazy" 속성을 추가하여 브라우저가 해당 이미지를 지연 로딩하도록 지시합니다.data-src 속성 사용: 이미지의 실제 경로를 src 속성이 아닌 data-src 속성에 넣어둡니다. 예시 코드 (HTML.. 2025. 9. 19.
javascript defer, async 웹 프런트 개발을 할 때 외부 스크립트를 추가하는 경우가 있다. 브라우저는 HTML을 읽다가 태그를 만나면 스크립트를 먼저 실행해야 하므로 DOM 생성을 멈춘다. 이를 방지하기 위해서 스크립트를 페이지 맨 아래 놓는 것이 하나의 방법이 될 수 있다. 하지만 HTML 문서 자체가 아주 큰 경우 문서 전체를 다운로드 한 다음에 스크립트를 다운받게 하면 페이지가 정말 느려질 것이다. 이런 문제를 해결할 수 있는 defer, async 둘 다 '백그라운드'에서 스크립트를 다운로드한다. DOM을 그리는 중에 다운로드가 같이 되기 때문에 페이지 로딩 속도가 빨라진다. defer 스크립트 실행은 페이지 구성이 끝날 때까지 지연된다. 다른 스크립트를 모두 다운로드할 때까지 기다린다. 그리고 스크립트를 문서에 추가한.. 2025. 9. 10.
Git, Pull/Push할 때 id, password 묻지 않게 하기 git 사용 시 id, password를 매번 물어보지 않게 설정하는 방법이다. 처음에 소스를 clone 하거나 pull 하면 id, password를 물어볼 것이다.git clone, git pull 등의 명령어 실행 그때 id, password를 입력해서 명령어를 실행한다.그리고 아래 명령어를 입력한다.git config --global credential.helper cachegit config --global credential.helper store 쉘에서 위 명령어를 입력하면 로그인 정보를 credential에 저장해 둔다.그러면 더 이상 id, password를 물어보지 않을 것이다. 2025. 5. 27.
반응형