WooLam

락, 캐시, 메시지 큐, 비동기 처리 언제 써야 할까?

들어가며 백엔드 공부를 하다 보면 한 번쯤은 이런 고민을 하게 된다. “이 상황에서 락을 써야 하나?” “캐시를 붙이는 게 맞나?” “MQ까지 도입해야 할까?” “이거 비동기로 돌리는 게 더 나은 거 아닌가?” 처음에는 개념은 알겠는데 언제 써야 하는지 감이 잘 안 잡혔다. 그래서 실제 상황 기준으로 정리를 해봤다. 락(Lock)은 ...

Spring: 개발자의 자신감, 테스트

“테스트란 내가 짠 코드가 내 뒤통수를 치지 않게 막아주는 가장 저렴하고 확실한 보험이다.” 토비의 스프링 2장은 단순히 테스트 프레임워크 사용법을 넘어 개발자가 자신의 코드를 확신하고 지속적으로 개선하기 위한 ‘테스트 정신’ 을 다룹니다. 1. 테스트의 유용성: 확신을 가지고 코딩하기 대부분의 개발자가 테스트를 귀찮아하는 이유는 “눈앞의 기...

Spring Proxy: 핵심 로직을 투명하게 감싸는 '기술적 안경'

“한 줄 요약: 프록시는 원본 객체를 수정하지 않고도 런타임에 부가 기능을 동적으로 주입해주는 투명한 비서다.” 1. 프록시의 정의 IT 관점에서 프록시는 타겟 객체(Target Object) 에 대한 호출을 중간에 가로채서(Intercept) 전처리/후처리 로직을 실행한 뒤 타겟에게 요청을 위임하는 대리 객체입니다. 핵심 메커니즘 Jo...

실무적 선택의 기로: ID 전략부터 서비스 레이어 설계까지

“한 줄 요약: 개발은 정답 찾기가 아니라 타당한 근거를 바탕으로 최적의 선택지를 고르는 과정이다.” 1. 실무에서 마주하는 기술적 선택지 Q1. PK(ID) 타입: Long vs UUID 무엇이 일반적인가? 결론부터 말하면 비즈니스 요구사항과 DB 전략에 따라 다릅니다. Long (Bigint): 가장 일반적입니다. DB 내부적으로 인...

API 문서 자동화: Javadoc과 Swagger로 구축하는 소통의 '캐시(Cache)'

“한 줄 요약: 문서화는 더 이상 노동이 아니다. 코드와 동기화된 문서는 팀의 연산 비용을 줄이는 최고의 최적화다.” 1. Javadoc vs Swagger: 무엇이 다른가? 두 도구 모두 문서화를 지원하지만 ‘누구에게 무엇을 보여줄 것인가’ 에 따라 역할이 나뉩니다. Javadoc (내부용): Java 소스 코드에서 HTML 문서를 생...

개발자의 기본기: 코드 이전에 갖춰야 할 '기록'과 '소통'의 기술

“한 줄 요약: 뛰어난 코드는 기술력에서 나오지만, 위대한 제품은 개발자의 ‘기본자세’와 ‘협업’에서 나온다.” 1. 왜 개발자에게 ‘코드 이전’의 역량이 필요한가? 현대 소프트웨어 개발은 더 이상 개인의 천재성에 의존하는 작업이 아닙니다. 프로젝트의 규모가 커질수록 ‘개인의 생산성’ 보다 ‘팀의 협업 효율’ 이 프로젝트의 성패를 좌우하기 때문...

재귀의 늪에서 탈출하기: 메모이제이션(Memoization)

“한 줄 요약: 이미 계산한 값은 기록해두자. 기억력은 곧 성능이다.” 1. 메모이제이션(Memoization)이란? 재귀 함수가 동일한 계산을 반복해야 할 때 이전에 계산한 결과를 메모리에 기록(Caching) 해 두었다가 다시 사용하는 기법입니다. 핵심: ‘중복 계산’을 제거하여 실행 속도를 비약적으로 향상시킨다. 조건: 동일한 입력에...

안정 계수 정렬(Stable Counting Sort)의 원리와 역방향 순회

“한 줄 요약: 비교 없이 위치를 계산하여 정렬하되, 입력 순서를 끝까지 지켜내는 알고리즘” 1. 계수 정렬(Counting Sort)이란? 일반적인 정렬(Quick, Merge 등)이 데이터끼리 크기를 직접 비교하는 것과 달리 계수 정렬은 각 숫자가 몇 번 등장했는지를 카운팅하여 위치를 찾아주는 알고리즘입니다. 핵심 원리: 데이터의 값을 ...

프로그램의 안전망: 예외 처리(Exception Handling)의 모든 것

“한 줄 요약: 좋은 프로그램은 문제가 없는 프로그램이 아니라 문제가 생겼을 때 무너지지 않는 프로그램이다.” 1. 왜 예외 처리가 필요한가? 개발자는 항상 ‘정상적인 상황’을 가정하고 코드를 짜지만 현실은 다릅니다. 사용자는 숫자가 필요한 곳에 문자를 입력하고("12a") 네트워크는 갑자기 끊기며 읽어야 할 파일은 사라지기도 합니다. 핵심 ...