2025
- 06 Aug Redis 운영 관점에서 알아보기 (2)
- 24 Jul Redis 운영 관점에서 알아보기
- 14 Jun Redis vs MySQL
- 26 May ReentrantLock
- 06 May Kafka at-least-once 메시지 보장 중복 처리
- 05 May 채팅 시스템 roomId 기반 파티셔닝
- 28 Apr GC는 단순한 자동 관리 도구가 아니다. (Java GC)
- 26 Apr 채팅 시스템 Kafka Consumer 실패 처리 및 DLQ, Replay 설계 (+ Trace)
- 21 Apr Docker를 이용한 로컬 개발 환경 구축
- 08 Feb 배치 성능 개선기
- 03 Feb 데이터 조회 쿼리 성능 개선기
- 07 Jan 댕댕살롱 최종 배포 구조도 (+ 아쉬운 점)
- 05 Jan 쿠폰 이벤트 구현 (실시간 대기열 보여주기 - SSE)
2024
- 27 Dec 로그 추적기, Flyway, RestAssured, Jacoco 도입
- 16 Dec AWS에서 부하테스트
- 08 Dec APM 도구 도입하기 (Pinpoint, Scouter)
- 04 Dec 채팅 시스템 Kafka 도입
- 01 Dec 채팅 시스템 프로토콜 전환 (STOMP) + 겪었던 문제
- 27 Nov 채팅 시스템 구현 (WebSocket)
- 20 Nov 소셜로그인 구현 (구글, 네이버)
- 18 Nov 1차 배포 환경 구축하기
- 09 Nov 대용량 트래픽 대응 (선착순 이벤트 응모 시스템 구현기)
- 28 Oct 프로메테우스, 그라파나
- 27 Oct 마이크로미터, 메트릭
- 27 Oct 프로덕션 준비 기능 (액추에이터와 엔드포인트)
- 26 Oct 좋아요/싫어요 정보에 따른 성향 변경 (+ 카프카 정리)
- 24 Oct 논리/물리 삭제 구현 (+ Spring Batch 정리)
- 23 Oct 트랜잭션 분리를 통한 개선
- 07 Oct Event 처리 방식으로 친밀도 랭킹 효율적으로 계산하기 (+Event 정리)
- 06 Oct 캐시 방식으로 친밀도 랭킹 효율적으로 확인하기 (+Redis 정리)
- 05 Sep 스프링 Security
- 24 Aug Item89 (인스턴스 수를 통제해야 한다면 readResolve 보다는 열거 타입을 사용하라)
- 23 Aug Item86 (Serializable을 구현할지는 신중히 결정하라)
- 22 Aug Item85 (자바 직렬화의 대안을 찾으라) + JPA에서의 직렬화에 관하여
- 22 Aug Item84 (프로그램의 동작을 쓰레드 스케줄러에 기대지 말라) + 스프링 스케줄러
- 21 Aug Item83 (지연 초기화는 신중히 사용하라)
- 19 Aug Item81 (wait와 notify보다는 동시성 유틸리티를 애용하라)
- 19 Aug Item80 (스레드보다는 실행자, 태스크, 스트림을 애용하라) + Callable, Runnable, Executor
- 18 Aug Item79 (과도한 동기화는 피하라)
- 16 Aug Item78 (공유 중인 가변 데이터는 동기화해 사용하라)
- 15 Aug Item77 (예외를 무시하지 말라)
- 15 Aug Item76 (가능한 한 실패 원자적으로 만들라)
- 14 Aug Item75 (예외의 상세 메시지에 실패 관련 정보를 담으라)
- 14 Aug Item74 (메서드가 던지는 모든 예외를 문서화하라)
- 13 Aug Item73 (추상화 수준에 맞는 예외를 던지라)
- 13 Aug Item72 (표준 예외를 사용하라) + 커스텀 예외에 대한 내 생각
- 12 Aug Item71 (필요 없는 검사 예외 사용은 피하라)
- 12 Aug Item70 (복구할 수 있는 상황에서는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라)
- 11 Aug Item69 (예외는 진짜 예외 상황에만 사용하라)
- 09 Aug Item68 (일반적으로 통용되는 명명규칙을 따르라)
- 09 Aug Item67 (최적화는 신중히 하라)
- 08 Aug Item66 (네이티브 메서드는 신중히 사용하라)
- 08 Aug Item65 (리플렉션보다는 인터페이스를 사용하라)
- 08 Aug Item64 (객체는 인터페이스를 사용해 참조하라)
- 08 Aug Item63 (문자열 연결은 느리니 주의하라)
- 07 Aug Item62 (다른 타입이 적절하다면 문자열 사용을 피하라)
- 07 Aug Item61 (박싱된 기본 타입보다는 기본 타입을 사용하라)
- 06 Aug Item60 (정확한 답이 필요하다면 float와 double는 피하라)
- 06 Aug Item59 (라이브러리를 익히고 사용하라)
- 05 Aug Item58 (전통적인 for문보다는 for-each문을 사용하라)
- 05 Aug Item57 (지역변수의 범위를 최소화하라)
- 31 Jul Item56 (공개된 API 요소에는 항상 문서화 주석을 작성하라)
- 31 Jul Item55 (옵셔널 반환은 신중히 하라)
- 30 Jul Item54 (null이 아닌, 빈 컬렉션이나 배열을 반환하라)
- 30 Jul Item53 (가변 인수는 신중히 사용하라)
- 29 Jul Item52 (다중 정의는 신중히 사용하라)
- 29 Jul Item51 (메서드 시그니처를 신중히 설계하라)
- 28 Jul Item50 (적시에 방어적 복사본을 만들라)
- 26 Jul Item49 (매개변수가 유효한지 검사하라)
- 26 Jul Item48 (스트림 병렬화는 주의해서 적용하라) + 동시성 처리 학습에 대한 생각
- 25 Jul Item47 (반환 타입으로는 스트림보다 컬렉션이 낫다)
- 25 Jul Item46 (스트림에서는 부작용 없는 함수를 사용하라)
- 24 Jul Item45 (스트림은 주의해서 사용하라)
- 24 Jul Item44 (표준 함수형 인터페이스를 사용하라)
- 23 Jul Item43 (람다보다는 메서드 참조를 사용하라)
- 23 Jul Item42 (익명 클래스보다는 람다를 사용하라)
- 22 Jul Item41 (정의하려는 것이 타입이라면 마커 인터페이스를 사용하라)
- 22 Jul Item40 (@Override 애노테이션을 일관되게 사용하라)
- 22 Jul Item39 (명명 패턴보다 애너테이션을 사용하라)
- 20 Jul Item38 (확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라)
- 19 Jul Item37 (ordinal 인덱싱 대신 EnumMap을 사용하라)
- 19 Jul Item36 (비트 필드 대신 EnumSet을 사용하라)
- 19 Jul Item35 (ordinal 메서드 대신 인스턴스 필드를 사용하라)
- 19 Jul Item34 (int 상수 대신 열거 타입을 사용하라)
- 18 Jul Item33 (타입 안전 이종 컨테이너를 고려하라)
- 18 Jul Item32 (제네릭과 가변인수를 함께 쓸 때는 신중하라)
- 16 Jul Item31 (한정적 와일드카드를 사용해 API 유연성을 높이라)
- 15 Jul Item30 (이왕이면 제네릭 메서드로 만들라)
- 15 Jul Item29 (이왕이면 제네릭 타입으로 만들라)
- 14 Jul Item28 (배열보다는 리스트를 사용하라)
- 12 Jul Item27 (비검사 경고를 제거하라)
- 12 Jul Item26 (로(raw) 타입은 사용하지 말아라)
- 11 Jul Item25 (톱레벨 클래스는 한 파일에 하나만 담아라)
- 11 Jul Item24 (멤버 클래스는 되도록 static으로 만들어라)
- 11 Jul Item23 (태그 달린 클래스보다는 클래스 계층 구조를 활용하라)
- 10 Jul 진행중인 프로젝트 참여하기 (남이 만든 코드에 들어가기)
- 10 Jul Item22 (인터페이스는 타입을 정의하는 용도로만 사용하라)
- 10 Jul Item21 (인터페이스는 구현하는 쪽을 생각해 설계하라)
- 10 Jul Item20 (추상 클래스보다는 인터페이스를 우선하라.)
- 09 Jul Item19 (상속을 고려해 설계하고 문서화하라. 그렇지 않으면 상속을 금지하라.)
- 09 Jul Item18 (상속보다는 컴포지션을 사용하라)
- 09 Jul Item17 (변경 가능성을 최소화하라)
- 08 Jul Item16 (public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라)
- 08 Jul Item15 (클래스와 멤버의 접근 권한을 최소화하라)
- 07 Jul Item14 (Comparable을 구현할 지 고려하라)
- 05 Jul Item13 (clone 재정의는 주의해서 진행하라)
- 05 Jul Item12 (toString을 항상 재정의하라)
- 04 Jul Item11 (equals를 재정의하려거든 hashCode도 재정의하라)
- 04 Jul Item10 (equals는 일반 규약을 지켜서 재정의하라)
- 03 Jul Item9 (try-finally 보다 try-with-resources를 사용하라)
- 03 Jul Item8 (finalizer와 cleaner 사용을 피하라)
- 02 Jul Item7 (다 쓴 객체 참조를 해제하라) feat. 약한 참조와 강한 참조
- 01 Jul Item6 (불필요한 객체 생성을 피하라)
- 01 Jul Item5 (자원을 직접 명시하지 말고 의존 객체 주입을 사용하라)
- 01 Jul Item4 (인스턴스화를 막으려거든 private 생성자를 사용하라)
- 28 Jun Item3 (private 생성자나 열거 타입으로 싱글턴임을 보증하자)
- 28 Jun Item2 (생성자에 매개변수가 많다면 빌더를 고려하라)
- 27 Jun Effective Java 시작하기 + Item 1 (생성자 대신 정적 팩토리 메서드를 고려하라)
- 17 Apr Controller 테스트에서 만난 오류 (csrf, HttpMessageNotReadableException)
- 16 Apr Repository, Controller, Service 계층 테스트 (테스트와 인증)
- 07 Apr Kotlin - ( Type Alias, as import / componetN / Jump, Label / TakeIf, TakeUnless )
- 07 Apr Kotlin - 람다 그리고 컬렉션을 함수형으로 다루는 방법
- 07 Apr Kotlin - 코틀린의 다양한 메서드
- 07 Apr Kotlin - 배열 및 컬렉션
- 06 Apr Kotlin - 중첩 클래스와 다양한 클래스 (Data, Enum 등)
- 06 Apr Kotlin - 접근제어와 object 키워드
- 06 Apr Kotlin - 상속
- 06 Apr Kotlin - 클래스
- 06 Apr Kotlin - 기본적인 함수
- 06 Apr Kotlin - 예외
- 06 Apr Kotlin - 반복문
- 06 Apr Kotlin - 조건문
- 05 Apr Kotlin - 연산자
- 05 Apr Kotlin - Type
- 05 Apr Kotlin - null
- 05 Apr Kotlin - 변수
- 05 Apr Kotlin?
- 28 Mar AWS 도메인 연결 및 HTTPS 설정
- 27 Mar GithubActions + Docker을 이용한 배포 (Spring + Vue + NginX)
- 26 Mar AWS EC2 서버 개설 (RDS, Elasticache)
- 13 Mar 친구의 웹툰 동적 쿼리 작성 시 발생했던 문제 그리고 최적화 (MySQL - group by)
- 12 Mar Java로 구현하는 개인화 웹툰 추천 알고리즘 with apache commons math
- 11 Mar MBTI별 선호 웹툰 조회 시 발생한 N+1 문제
- 11 Mar 추천 알고리즘에서의 update 쿼리 N+1 문제
- 09 Mar Spring Rest Docs vs Swagger
- 09 Mar 기존 페이징 + shuffle 구현 방식 문제 with 캐싱, 성능개선, 여전히 남은 문제
- 07 Mar 페이징에 shuffle 적용하기, 무한스크롤
- 06 Mar mbti 지연로딩 문제, 변경감지 with setter
- 06 Mar Refresh 토큰을 이용한 Access 토큰 갱신에서의 문제
- 05 Mar JWT 토큰 (Access + Refresh) 방식의 보안 문제 고민(2) - 프론트 서버
- 04 Mar JWT 토큰 (Access + Refresh) 방식의 보안 문제 고민.
- 04 Mar Spring Security + JWT를 이용한 회원가입 및 로그인 (2)
- 03 Mar Spring Security + JWT를 이용한 회원가입 및 로그인 (1)
- 28 Feb Vue 기본 구조 (+ Vue router 페이지 이동이 안됐던 문제), Axios
- 27 Feb ElementCollection 사용 이유, DataJpaTest (vs SpringBootTest)
- 04 Feb recommtoon.com 기존 프로젝트 정리 및 문제점.
- 03 Feb recommtoon.com 재개발 결정.
- 30 Jan 스프링 데이터 JPA + Querydsl
- 27 Jan 순수 JPA + Querydsl
- 25 Jan 프로젝션과 결과 반환, 동적 쿼리, 벌크 연산
- 24 Jan Querydsl 기본 문법
- 23 Jan 설정 방법
- 20 Jan 스프링 데이터 JPA의 내부 구조 (em.merge)
- 20 Jan 확장 기능 (사용자 정의 리포지토리, Auditing, 페이징- 등)
- 19 Jan 페이징과 정렬, 벌크성 수정 쿼리, EntityGraph, Lock
- 19 Jan 쿼리 메서드 기능
- 19 Jan 공통 인터페이스 기능
- 16 Jan OSIV
- 16 Jan API 성능 최적화 - 컬렉션 조회 최적화
- 13 Jan API 성능 최적화 - 지연 로딩 조회 성능 최적화
- 13 Jan 예제 프로젝트 API 개발 - 기본
- 11 Jan 학습용 JPA 프로젝트 개요 - 애플리케이션 (+ 변경감지와 병합)
- 09 Jan 학습용 JPA 프로젝트 개요 - 엔티티
- 08 Jan JPQL 문법 (*페치 조인)
- 07 Jan JPQL (JPQL 기본 문법)
- 07 Jan JPA 데이터 타입 - 값 타입
- 06 Jan 영속성 전이(CASCADE), 고아 객체
- 06 Jan JPA 프록시 그리고 지연 로딩
- 05 Jan MappedSuperclass
- 05 Jan 상속관계 매핑
- 04 Jan 연관관계 매핑의 종류 (1:N, N:M .. )
- 04 Jan 연관관계 매핑 기본(연관관계의 주인)
- 03 Jan 예제코드1, 그리고 문제점
- 03 Jan 객체(엔티티)와 DB의 매핑
- 03 Jan 영속성 컨텍스트
- 03 Jan info.soccer.com 변경 사항
- 03 Jan jekyll Setup Ruby 실패 문제
2023
- 24 Dec 프리티어 기간 만료에 따른 배포 서버 종료하기
- 17 Nov MVC 패턴 각각의 책임, 도메인 모델의 책임
- 16 Nov 프리코스 4주차 및 프리코스 전체 회고
- 14 Nov DTO 그리고 DTO 사용 이유
- 13 Nov 입력 값은 어떻게 처리하는 것이 좋을까?
- 12 Nov 프리코스 3주차 회고
- 07 Nov Enum Map
- 06 Nov Integer.valueOf(127) == Integer.valueOf(127), Integer 캐시
- 06 Nov 변수 이름에 왜 자료형을 사용하면 안될까?
- 05 Nov 함수형 프로그래밍 그리고 람다식과 함수형 인터페이스
- 05 Nov record
- 05 Nov 프리코스 2주차 회고
- 05 Nov Input값의 검증은 어디서 이루어져야 할까?
- 04 Nov Mock 그리고 Mockito, BDDMockito
- 04 Nov 불변 컬렉션의 내부 변환 문제?
- 03 Nov 소프트웨어 개발 3대 원칙 - KISS, YAGNI, DRY
- 03 Nov ParameterizedTest, private 메서드의 테스트에 관해
- 02 Nov 생성자 대신 정적 팩토리 메서드를 고려하자.
- 02 Nov 상수를 관리하는데 Enum을 사용해야 할까?
- 01 Nov Enum 활용
- 31 Oct BiPredicate, Function
- 29 Oct 랜덤 값에 따라 다르게 동작하는 메서드를 테스트하는 방법
- 29 Oct AssertJ (테스트) 사용법
- 29 Oct 테스트 + 테스트 작성 요령
- 29 Oct 프리코스 1주차 회고
- 28 Oct getter 대신 객체에 메시지를 보내자 (+깊은 복사)
- 28 Oct 일급 컬렉션
- 27 Oct 애플리케이션 구동 환경이 변하는 것을 고려해보자.
- 26 Oct 자바 정규표현식
- 26 Oct 인스턴스 필드가 없는 클래스는 정적으로 공개해야 하는가? (유틸리티 클래스)
- 23 Oct 객체지향 생활체조 원칙
- 22 Oct IntelliJ 자동 코드 포맷팅 및 플러그인
- 21 Oct 스프링 트랜잭션 전파 활용
- 20 Oct 스프링 트랜잭션 전파 개념
- 19 Oct 스프링 트랜잭션 deep dive
- 17 Oct 데이터베이스 접근 기술 활용 방안 + 고민
- 17 Oct Querydsl
- 16 Oct 스프링 데이터 JPA
- 16 Oct JPA
- 15 Oct MyBatis
- 15 Oct DB와 연동하는 테스트 방법
- 14 Oct 스프링 JdbcTemplate
- 13 Oct DB 접근 기술들
- 12 Oct 스프링 예외 처리 (서비스 코드 예외 포함 문제 해결)
- 12 Oct 예외 이해하기
- 11 Oct 자바 예외
- 10 Oct 스프링과 트랜잭션, @Transactional
- 10 Oct equals, hashCode, @Data
- 10 Oct IntelliJ 단축키 정리
- 09 Oct 트랜잭션 (애플리케이션 적용)
- 09 Oct 트랜잭션과 락 (개념)
- 08 Oct 커넥션 풀과 DataSource
- 08 Oct JDBC 이해 (+ 코드)
- 08 Oct JDBC 구조와 최신 기술
- 05 Oct 파일 업로드, 다운로드
- 04 Oct 스프링 타입 컨버터
- 03 Oct API에서의 예외 처리
- 02 Oct 예외 처리(오류 페이지)
- 01 Oct 필터, 인터셉터 (로그인)
- 30 Sep final 키워드
- 30 Sep Stream과 Optional
- 29 Sep 로그인 처리 (쿠키, 세션)
- 27 Sep Bean Validation
- 26 Sep Validation (검증)
- 26 Sep Git 커밋 메시지 규칙
- 25 Sep 메시지, 국제화
- 25 Sep static 키워드
- 25 Sep 자바 코딩 규칙 (Java Code Conventions)
- 25 Sep 메모리 할당 및 기타 정리
- 24 Sep 타임리프 + 스프링 및 타임리프 폼 기능
- 24 Sep CPU 스케줄링 알고리즘, 캐시
- 23 Sep 첫 문제풀이
- 22 Sep 타임리프 기본기능
- 22 Sep 프로세스와 쓰레드 (경쟁상태(세마포어), 데드락)
- 21 Sep SpringMVC 기본기능 이용한 간단한 상품 페이지
- 21 Sep 프로세스와 쓰레드
- 20 Sep 스프링 MVC에서 HTTP 요청, 응답 처리
- 20 Sep 요청 매핑
- 20 Sep 스프링 MVC 시작 + 로깅
- 20 Sep 메모리계층, 가상메모리, 페이지 교체 알고리즘
- 20 Sep info.soccer.com 간단한 구상
- 19 Sep 스프링 MVC 도입
- 19 Sep 스프링 MVC 구조
- 19 Sep 운영체제, 컴퓨터 구조, 인터럽트, 시스템 콜
- 18 Sep MVC 프레임워크 제작(프론트 컨트롤러의 도입)
- 18 Sep 데이터베이스 정규화
- 17 Sep 서블릿, JSP 그리고 이 둘로 만드는 MVC 패턴
- 17 Sep 조인(JOIN), DB 데드락 해결방법
- 14 Sep 데이터베이스, 엔진 그리고 인덱스에 대하여
- 14 Sep 서블릿
- 13 Sep 트랜잭션
- 11 Sep 데이터베이스 기본
- 07 Sep 대규모 트래픽으로 인한 서버과부화 해결 방법
- 07 Sep 네트워크 관련 가능 질문
- 06 Sep 자바 백엔드 웹 기술의 역사
- 06 Sep HTML, HTTP API, CSR, SSR
- 06 Sep 서블릿 기본 지식
- 06 Sep 웹 애플리케이션의 이해
- 06 Sep 유선 LAN, 무선 LAN
- 05 Sep 네트워크 장치
- 04 Sep HTTP 메서드 (GET POST 차이, PUT PATCH 차이)
- 03 Sep HTTP 웹 지식 - HTTP 헤더 (캐시 & 조건부 요청)
- 03 Sep HTTP 웹 지식 - HTTP 헤더 (일반 헤더)
- 03 Sep HTTP 웹 지식 - HTTP 상태 코드
- 02 Sep HTTP 웹 지식 - HTTP 메서드, 메서드의 활용
- 01 Sep 로그인 인증방식 (세션, 토큰)
- 30 Aug 웹 브라우저 캐시
- 30 Aug HTTP 웹 지식 - HTTP 기본
- 30 Aug HTTP 웹 지식 - URI와 웹 브라우저 요청 흐름
- 06 Aug HTTP 헤더, HTTP에 관해.
- 31 Jul IP주소체계 (+MAC, ARP, RAPP)
- 21 Jul HTTP 웹 지식 - 인터넷 네트워크
- 21 Jul 라우팅
- 20 Jul 빈 스코프
- 20 Jul 빈 생명주기와 콜백
- 20 Jul 네트워크 분류, TCP/IP 4계층 (vs OSI 7계층)
- 20 Jul 백준 14725 - 개미굴(java)
- 19 Jul 백준 1956- 운동 (java)
- 19 Jul 백준 11657 - 타임머신 (java)
- 18 Jul 의존관계 자동주입
- 18 Jul 네트워크 기초
- 17 Jul 컴포넌트 스캔
- 17 Jul 전략패턴, 옵저버 패턴, 프록시 패턴, MVC, flux 패턴
- 17 Jul 백준 1753 - 최단경로 (java)
- 15 Jul 백준 11053 - 가장 긴 증가하는 부분 수열 (java)
- 14 Jul 싱글톤 컨테이너
- 14 Jul 스프링 컨테이너와 스프링 빈
- 14 Jul 싱글톤, 팩토리, 이터레이터 패턴
- 14 Jul 백준 2470- 두 용액 (java)
- 13 Jul 회원,주문,할인 설계와 개발 예제 (2) - 스프링 전환
- 13 Jul 회원,주문,할인 설계와 개발 예제 (1) - 순수 자바
- 13 Jul CI/CD
- 12 Jul 스프링과 객체지향
- 12 Jul API, 클라우드
- 11 Jul 웹 MVC 개발 + DB 접근 + AOP
- 11 Jul 스프링 빈과 의존관계
- 11 Jul 회원 관리 예제
- 11 Jul 웹 애플리케이션 구조
- 11 Jul 스프링부트 입문
- 10 Jul JSON, XML
- 10 Jul 백준 24480 - 알고리즘 수업 - 깊이 우선 탐색 2 (java)
- 09 Jun Git blog Jekyll Chirpy 테마 적용 ( /assets/js/dist/.js not found 오류 해결)
- 08 Jun Git blog 생성
- 04 Jun 코테 응용(조합, 소수, 약수배수, 정렬, 집합 등등)
- 04 Jun 코테 심화(dfs, bfs, 동적계획법, 그리디 등등)
- 04 Jun 코테 기본(자료형, 문자열, Collection 등)
- 27 Mar mysql Disk Full
- 12 Mar 프로세스와 쓰레드
- 12 Mar 스트림(Stream)
- 12 Mar 람다(Lambda)
- 15 Feb 지네릭스, 열거형, 애너테이션
- 13 Feb 해시
- 13 Feb 컬렉션 프레임워크(List, Set, Map)
- 13 Feb 형식화 클래스, java.time
- 11 Jan 문자열 검색, 리스트
- 10 Jan 정렬
- 10 Jan 재귀알고리즘(EightQueen)
- 03 Jan 기본 자료구조, 검색, 스택과 큐
- 03 Jan BufferedReader, BufferedWriter, StringTokenizer