분류 전체보기 (133) 썸네일형 리스트형 [Design Pattern] 싱글톤 (Singleton) 패턴이란? 1. 싱글톤 패턴이란?싱글톤 패턴은 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 생성 패턴이다. 애플리케이션 전역에서 동일한 인스턴스를 공유해야 할 때 사용하며, 설정 관리자, 로거, 커넥션 풀 같은 경우가 대표적인 예시이다. 싱글톤 패턴의 핵심 요소private 생성자: 외부에서 직접 인스턴스를 생성하지 못하도록 막는다.private static 인스턴스 변수: 클래스 내부에서 유일한 인스턴스를 보관한다.public static 접근 메서드: 외부에서 인스턴스에 접근할 수 있는 전역 접근점을 제공한다. 2. 싱글톤 패턴 구현 방식싱글톤 패턴은 여러 방식으로 구현할 수 있으며, 각 방식마다 장단점과 적용 시나리오가 다르다. 2.1 Lazy Initialization (지연 초기화)가장 기.. [Design Pattern] 전략 (Strategy) 패턴이란? 전략 패턴?실행 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행동 패턴 핵심 아이디어 동일한 문제를 해결하는 여러 알고리즘이 있을 때, 각 알고리즘을 별도의 클래스로 캡슐화런타임에 알고리즘을 선택하여 교체 가능조건문(if-else, switch) 대신 객체 위임을 통한 알고리즘 선택 구조 실무 예제: Java Comparatorpublic class ComparatorExample { public static void main(String[] args) { List names = Arrays.asList("John", "Alice", "Bob", "Charlie"); // 전략 1: 알파벳 순 정렬 C.. [프로젝트] 좋아하면숭리는 - 취미 기반 주변사람 소개팅 어플리케이션 1. 개요주변 사람의 권유로 짧게 축제때 쓸 소개팅 어플리케이션의 서버 개발자로 참여하게 되었다. 바쁜 일정으로 인해 안하려고 했으나 저번에 한 프로젝트에서 채팅을 개발해본 경험이 있으므로 손쉽게 구현할 줄 알았다.(왜 이런 생각을 가졌을까...)'좋아하면숭리는'은 주변에 있는 사람과 취향을 기반으로 매칭이 일어나는 소개팅 어플리케이션으로, 나는 여기서 채팅 API를 도맡아서 개발했다. 2. 일정2025.09.07 ~ 2025.09.25, 총 3주정도 진행된 프로젝트이다. 매우 짧은 기간내에 개발이 이뤄져야 했고, 결제도 붙는 서비스다 보니 구현을 대충할 수도 없던 프로젝트이다. 3. 팀 구성- 기획 1명- 디자인 1명- 프론트엔드 2명- 백엔드 3명- 법률 1명- 마케팅 1명 4. 기술 스택La.. [Spring Boot] 커스텀 프로퍼티 완벽 가이드 개요Spring Boot 개발을 하다 보면 하드코딩된 값들로 인해 고민을 하게 된다."이 설정값을 바꾸려면 또 코드를 수정하고 배포해야 하나?" 라는 생각이 들 때가 종종 생긴다. 이런 문제를 해결해주는 것이 바로 커스텀 프로퍼티이다.이 글에서 커스텀 프로퍼티가 무엇인지, 어떻게 사용하는지, 그리고 언제 사용해야 하는지에 대해 자세히 알아보자. 1. 커스텀 프로퍼티란?커스텀 프로퍼티는 애플리케이션에서 필요한 설정값들을 application.properties 또는 application.yml 파일에 정의하고, 이를 Java 코드에서 사용할 수 있도록 하는 Spring Boot의 기능이다. 간단한 예시로 시작해보자:# application.propertiesspring.application.name=d.. [프로젝트] Cockple - 배드민턴 모임 플랫폼 1. 개요프로젝트 동아리 UMC에서 2025.03 ~ 2025.08까지 스프링부트 챌린저로 활동을 진행했다. UMC는 방학기간동안 사람들을 모아 프로젝트를 진행하는데, '콕플'이라는 프로젝트에서 서버 개발자로 참여했다. 콕플은 지역, 급수, 일정 등 조건에 맞는 배드민턴 모임을 쉽고 간편하게 찾고 참여 및 모임 운영할 수 있는 전용 플랫폼이고, 나는 여기서 운동 API 및 채팅 API를 도맡아서 개발했다. 2. 일정2025.06.24 ~ 2025.08.22, 총 2달간 진행된 프로젝트이다. 개발 기간은 다음과 같지만, 기획 및 디자인은 1달 전부터 진행되었다. 3. 팀 구성- 기획 1명- 디자인 1명- 프론트엔드 4명- 백엔드 4명 4. 기술 스택Language & FrameworkJava 1.. [Spring] Spring 캐시(Cache) 핵심정리 개요채팅 시스템을 프로젝트에서 구현하면서 Redis를 프로젝트에 도입하게 되었다.Redis는 채팅방 구독 정보를 관리하기 위해 도입했지만, 캐싱도 가능하다고 글을 읽은 적이 있다. 캐싱을 적용한 곳은 채팅방 목록에서 마지막 메시지 조회 로직이었고,직렬화, 역직렬화 문제로 나름 애를 먹었지만 잘 도입할 수 있었다! 1. 캐시 어노테이션 3종 세트@Cacheable - 조회 시 캐싱@Cacheable(value = "userCache", key = "#userId")public User getUser(Long userId) { return userRepository.findById(userId); // 첫 번째만 실행, 이후 캐시 반환} @CachePut - 업데이트하면서 캐시 동기화@CachePut.. [Trouble Shooting] Redis에서 DTO로 역직렬화 문제 발생 문제Redis를 활용해 캐싱을 도전하던 중 다음과 같은 에러가 발생했다. 2025-08-21T14:45:41.579+09:00 ERROR 16688 --- [cockple.demo] [0.0-8080-exec-8] u.c.d.g.e.GlobalExceptionHandler : Unexpected exception: uri=/api/chats/parties, type=ClassCastException, message=class java.util.LinkedHashMap cannot be cast to class umc.cockple.demo.domain.chat.dto.ChatRoomListCacheDTO$LastMessageCache (java.util.LinkedHashMap is in module j.. [Trouble Shooting] Redis에서 Java 8 LocalDateTime 직렬화 문제 문제 채팅방 목록에서 마지막 메시지 업데이트 로직을 짜던 중. 관련 내용을 캐싱하면 좋겠다는 생각이 들었다.마침 구독 목록 관리를 위해 Redis를 도입했기에 캐싱을 시도하던 중 직렬화 문제가 발생했다. 2025-08-21T00:27:33.264Z ERROR 1 --- [cockple.demo] [.0-8080-exec-10] u.c.d.g.e.GlobalExceptionHandler : Unexpected exception: uri=/api/chats/direct, type=SerializationException, message=Could not write JSON: Java 8 date/time type `java.time.LocalDateTime` not supported by de.. 이전 1 2 3 4 ··· 17 다음