Category Uncategorized

웹 에디터와 이미지 저장 위치는 서비스 출시 전에 결정한다

상용 서비스를 목표로 바이브 코딩을 진행하다 보면, 가장 가볍게 다뤄지는데 가장 큰 비용을 만드는 결정이 두 개 있다. 웹 에디터를 어떻게 만들 것인가, 그리고 게시물의 이미지·영상을 어디에 저장할 것인가다. 결론부터 말하면 세 가지를 출시 전에 결정해야 한다. 에디터 코드의 분리…

Java 채팅 프로그램 — 설계와 클라이언트 구현

지금까지 학습한 소켓 통신, 멀티스레드, 자원 정리를 모두 활용해 실제 채팅 프로그램을 만들어보자. 단순한 에코 서버를 넘어, 여러 사용자가 실시간으로 대화를 주고받는 프로그램이다 요구사항 서버에 접속한 모든 사용자는 서로 대화할 수 있어야 한다. 지원하는 명령어는 다음과 같다 명령어 형식 설명…

Java 동시성 컬렉션 (2) – Concurrent Collection

Java 동시성 컬렉션에서 Collections.synchronizedXxx()를 살펴보았다. 이번에는 그 한계를 극복한 java.util.concurrent 패키지와 고성능 동시성 컬렉션들을 알아보자 왜 별도의 동시성 컬렉션이 필요할까? Collections.synchronized의 문제 Concurrent 컬렉션의 해결책 동시성 컬렉션 개요 java.util.concurrent 패키지 핵심 특징 제공되는 컬렉션 종류 타입 일반 컬렉션 Concurrent 컬렉션…

jOOQ UPDATE와 DELET

데이터 수정과 삭제는 신중해야 하는 작업이다. jOOQ는 동적 필드 업데이트부터 WHERE 절 없는 위험한 쿼리를 방지하는 안전장치까지 제공해준다 UPDATE 3가지 방식 DAO를 통한 전체 필드 업데이트 JPA의 save()처럼 POJO 전체를 업데이트 – 변경 여부와 관계없이 모든 컬럼이 SET 절에 포함된다…

SQL 쿼리의 논리적 실행 순서

SQL 쿼리를 작성하는 순서 (SELECT, FROM, WHERE 등)와 데이터베이스가 쿼리를 실제로 처리하는 논리적인 실행 순서는 다르다. 이 순서를 이해하는 것은 오류를 피하고 효율적으로 쿼리를 작성하는 데 매우 중요하다 SQL 쿼리의 논리적 실행 순서 (7단계) 예제로 따라가는 실행 순서 문제 단계별…

동시성 컬렉션

동시성 컬렉션이 필요한 이유 – 스레드 안전성 문제 java.util 패키지의 ArrayList, LinkedList, HashSet, HashMap과 같은 일반적인 컬렉션들은 스레드 세이프(Thread Safe)하지 않다. 즉, 여러 스레드가 동시에 접근할 때 데이터 손상이나 예상치 못한 결과를 초래할 수 있다 SimpleList SimpleListMain BasicList의 add() 메서드…