반응형

전체 글 111

내가 직접 만든 캘린더, 그리고 그 시작

캘린더를 만들게 된 계기개발을 하다 보면 늘 필요한 도구들이 있다. 그중에서도 **캘린더(Calendar)**는 업무와 일상 모두에서 필수적인 도구다. 하지만 시중에 있는 캘린더 앱은 대부분 기능이 과하거나, 내가 원하는 방식과는 거리가 있었다. 그래서 직접 만들기로 결심했다.가장 큰 계기는 개인화된 근무 일정 관리였다. 일반 캘린더는 회의나 약속을 기록하기엔 좋지만, 나처럼 주주야야휴휴 같은 특수한 근무 패턴을 직관적으로 관리하기엔 부족했다. 매번 수동으로 등록하는 것도 번거롭고, 내가 원하는 뷰를 제공하는 앱은 없었다. 그래서 ‘없으면 만들자’라는 마음으로 시작했다.내가 원했던 기능들근무 패턴 자동화반복되는 근무 사이클(주간, 야간, 휴무)을 미리 정의해 두면, 캘린더가 자동으로 해당 패턴을 표시해준..

바이브코딩 해본 후기

최근 몇 달간 나는 새로운 개발 습관을 실험해봤다. 바로 바이브코딩(Vibecoding) 이다. 간단히 말해, 코드를 작성하고 문제를 해결하는 과정에서 AI 도구(ChatGPT, Cursor)를 적극 활용하는 방식이다. 단순한 검색을 넘어, 코드 리뷰어이자 협업 파트너처럼 AI를 옆에 두고 코딩을 진행하는 경험이었다.바이브코딩을 시작한 이유개발을 하다 보면 새로운 기술을 빠르게 익혀야 하거나, 사소하지만 시간을 많이 잡아먹는 문제에 부딪히곤 한다. 이때 AI가 제공하는 즉각적인 코드 예시, 에러 분석, 리팩토링 제안은 큰 도움이 된다. 실제로 ChatGPT와 Cursor를 통해 많은 시행착오를 줄였고, 반복적인 구글링 시간을 절약할 수 있었다.특히 구글 검색 대비 장점은, 맥락을 이어가는 대화가 가능하다..

Spring Boot 예외 처리 실전 가이드: @ControllerAdvice로 통합하기

"에러는 언제나 발생한다. 중요한 건 예쁘게, 일관되게, 의미 있게 처리하는 것."문제 상황: 예외는 늘 예상치 못하게 찾아온다실무에서 API 개발을 하다 보면, 가장 골치 아픈 것 중 하나가 바로 예외 처리다.처음엔 간단한 try-catch나 throw new RuntimeException() 정도로 시작하지만, 프로젝트 규모가 커지고 클라이언트가 붙기 시작하면 얘기가 달라진다.어떤 API는 500 에러를 내고,어떤 API는 그냥 null 리턴하고,어떤 API는 메시지도 없이 400만 띄운다.결국 클라이언트 개발자는 혼란스럽고, 서버 로그엔 에러 메시지가 뒤섞여 보기 어려워진다.나도 과거에 그런 문제를 겪었고, 그때부터 Spring Boot에서의 예외 처리를 통합적으로 설계하는 법을 정리하게 됐다.내가..

Spring 2025.08.04

ChatGPT로 API 명세서 자동화하기 (Swagger보다 빠르게)

"개발자의 시간을 아끼는 진짜 문서 자동화 방법, ChatGPT로 시작해보자"문제 상황: API 명세서 작성, 늘 뒤로 미뤄지는 이유API 문서 작성은 대부분 개발자에게 ‘하면 좋은 일’이 아니라 ‘귀찮은 일’이다.Swagger도 있고 Spring REST Docs도 있지만, 막상 손을 대려면 생각보다 준비할 게 많다.Swagger는 편하긴 하지만 문서화의 유연성이 떨어지고,REST Docs는 예쁘지만 세팅부터 문서화까지 손이 많이 간다.결국 팀에서 "나중에 쓰자"며 README에 메서드 설명 몇 줄 달고 끝나는 경우가 많다.나도 그랬다. 그런데 그게 쌓이면 나중에 진짜 큰 문제가 생긴다.클라이언트랑 사소한 필드 하나 때문에 실랑이 벌이고, 예외 응답 안 맞아서 디버깅하는 데 반나절 쓰기도 했다.그래서 ..

AI 2025.07.30

ChatGPT로 실무 코드 리팩토링하는 법

"복잡한 로직, 반복 코드, 고민할 시간 줄이고 바로 리팩토링하기"문제 상황: 리팩토링은 늘 뒷전이다개발자로 일하면서 가장 귀찮지만 중요한 작업 중 하나가 바로 "리팩토링"이다.처음 기능을 만들 땐 빨리 동작만 하게 만들기 바쁘다 보니, 나중에 보면 코드가 엉망이 되어 있다. 변수명은 중구난방, 로직은 길고, 중복도 가득하고...“나중에 정리하자” 하고 넘어가지만, 실은 그 ‘나중’은 영영 오지 않기도 한다.나도 그런 경험이 많았다. 실제로 컨트롤러 메서드 안에 서비스 로직을 절반 이상 때려 넣고, 그대로 배포한 적도 있었다. 나중에 기능이 하나 더 붙으면서 그 코드를 손보는데, 도저히 뭘 건드려야 할지 감도 안 잡히더라.그래서 그때부터 ChatGPT를 코드 리뷰 파트너처럼 활용하기 시작했다. 혼자 고민..

AI 2025.07.29

Java 백엔드 실무 면접 질문 & 모범 답변 정리

안녕하세요, 오늘은 Java 백엔드 실무 면접을 준비하시는 분들을 위해 제가 실제 경험한 면접 질문들과 그에 대한 모범 답변을 정리해보려고 합니다. 저도 면접을 준비하면서 블로그나 깃허브 등을 많이 참고했었는데, 실제로 실무에서 많이 나오는 질문과 그 의도를 이해하는 게 무엇보다 중요하더라고요. 이 글이 여러분의 면접 준비에 작은 도움이 되길 바라며, Java, Spring Boot, JPA, REST API, Redis, JWT 인증 같은 키워드 중심으로 정리해볼게요.1. Java 백엔드 실무 면접에서 자주 나오는 질문들Q1. Java에서 HashMap과 ConcurrentHashMap의 차이점은?의도: 멀티스레드 환경에 대한 이해도를 보려는 질문이에요.모범 답변:HashMap은 쓰레드에 안전하지 않아..

ETC 2025.07.28

개발자가 ChatGPT를 활용해서 업무 시간 줄이는 법

개발자라면 누구나 한 번쯤은 이런 생각을 해봤을 거예요."오늘 이거… 내가 안 해도 될 수는 없을까?"요즘은 진짜로, 내가 안 해도 될 일들이 점점 많아지고 있어요. 바로 ChatGPT 덕분이죠. 처음엔 그저 코딩 도우미 정도로만 생각했는데, 어느새 하루 업무의 절반 이상을 이 친구에게 맡기고 있는 나를 발견하게 됐습니다. 이 글에서는 제가 실제로 ChatGPT를 활용해 업무 시간을 줄인 방법을 공유해보려고 해요. 단순히 코드 짜주는 걸 넘어서, 문서화, 테스트, 커뮤니케이션까지 확장된 활용법들을 소개해볼게요.1. 반복적인 업무? ChatGPT에게 넘기자개발 일을 하다 보면 반복적인 업무가 정말 많죠. 예를 들면:API 명세서에 맞는 컨트롤러 메서드 작성서비스/레포지토리 템플릿 반복 생성공통 예외 처리 ..

AI 2025.07.25

ChatGPT로 테스트 코드 자동 생성하기, 실무에 이렇게 활용했습니다

최근 개발자 커뮤니티를 보면 "테스트 코드 어떻게 작성해야 할까요?"라는 질문이 정말 자주 보입니다. 사실 저도 초창기에는 테스트 코드 작성이 너무 어렵게 느껴졌고, 귀찮기도 했습니다. 그런데 요즘은 ChatGPT 덕분에 테스트 코드 작성이 꽤 편해졌어요. 실무에서 직접 사용해본 경험을 바탕으로, ChatGPT로 테스트 코드를 자동 생성하는 방법과 팁들을 공유해보려고 합니다.문제 상황: 테스트 코드를 쓰기 귀찮거나, 시간이 없다우리 모두 알죠. 테스트 코드는 중요하다는 걸. 그런데 바쁜 일정에 치이다 보면 테스트 코드는 늘 후순위로 밀립니다. 특히 기존 레거시 코드에 테스트를 붙이려고 할 때는 어디서부터 손을 대야 할지도 모르겠고, 의욕이 뚝 떨어지죠.그리고 또 하나. JUnit, Mockito, Web..

AI 2025.07.24

RestTemplate vs WebClient 무엇을 써야 할까?

Spring Boot 개발을 하다 보면, 외부 API를 호출해야 하는 일이 정말 자주 생기죠. 이때 사용할 수 있는 대표적인 HTTP 클라이언트가 바로 RestTemplate과 WebClient입니다. 그런데 둘 중 뭘 써야 할지 고민해본 적 없으신가요? 저도 처음엔 "RestTemplate도 잘 되는데 굳이 WebClient로 바꿔야 하나?" 싶었거든요.이번 글에서는 실제로 제가 겪은 실무 경험을 바탕으로, RestTemplate과 WebClient를 비교해보고 어떤 상황에서 어떤 걸 쓰는 게 좋은지 정리해볼게요. 이 글이 여러분의 선택에 조금이라도 도움이 되었으면 좋겠습니다!문제 상황: API 호출, 어떤 방식으로 할까?몇 달 전, 외부 인증 서버와 통신해야 하는 기능을 개발하게 되었어요. 이 기능은..

Spring 2025.07.23

공간 복잡도 쉽게 이해하기

문제 상황개발을 하다 보면, 시간 복잡도에만 신경 쓰는 경우가 많다.나도 예전에 알고리즘 문제를 풀 때 항상 실행 시간이 얼마나 걸리는지만 봤지, 메모리를 얼마나 쓰는지는 잘 생각하지 않았다.근데 한 번은 프로덕션 서버에서 대용량 데이터를 처리하는 로직을 짜다가, 아무리 성능이 빨라도 메모리 사용량이 터져서 OOM(Out Of Memory) 이 나버린 적이 있었다.그때 느꼈다.아무리 시간이 빨라도, 메모리를 무지막지하게 쓰면 서비스가 뻗어버린다는 걸.그래서 오늘은 공간 복잡도가 무엇인지, 왜 중요한지, 어떻게 계산하는지 얘기해 보려고 한다.내가 처음 공부할 때 이해하기 어려웠던 부분을 최대한 풀어 써볼게.내가 시도한 방법처음에 공간 복잡도를 배우려고 했을 때, 정의만 보면 좀 딱딱했다."공간 복잡도(Sp..

알고리즘 2025.07.13

시간복잡도, 내가 이해한 만큼 풀어쓴 이야기

문제 상황내가 개발을 시작하고 어느 정도 코드를 짜기 시작했을 때, 종종 이런 말을 들었다.“그 코드의 시간복잡도는 어떻게 돼?”솔직히 말하면, 처음에는 이 말이 너무 어렵게 느껴졌다.시간복잡도가 뭔데? 그냥 코드가 빠르면 빠른 거고 느리면 느린 거 아닌가?그러다가 어느 순간부터, “왜 내 프로그램은 데이터가 많아지면 급격하게 느려질까?” 하는 의문이 들었다.그때부터 조금씩 시간복잡도의 필요성을 깨닫게 됐다.시간복잡도는 프로그램이 처리해야 하는 데이터의 양이 커질수록, 걸리는 시간이 얼마나 늘어나는지를 설명해주는 개념이다.예를 들어, 내가 좋아하는 마트에 줄을 선다고 해보자.줄이 2명일 땐 금방 계산대에 간다.근데 줄이 200명이 되면?줄이 길어질수록 대기 시간도 비례해서 늘어나게 된다.이 늘어나는 속도..

알고리즘 2025.07.09

MCP 서버란? LLM이 더 똑똑해지도록 돕는 외부 브레인

요즘 Large Language Model(LLM), 예를 들어 GPT나 Claude 같은 모델들을 보면 정말 놀라울 정도로 많은 정보를 알고 있습니다. 그런데 가만히 살펴보면 이 모델들이 모든 지식을 자기 내부에만 담고 있지는 않습니다. 필요한 순간에 외부에서 최신 정보를 실시간으로 가져와 답변에 활용하기도 하는데요. 이때 외부 데이터를 제공하는 중간 역할을 하는 서버가 바로 MCP 서버입니다.MCP 서버의 정의아주 간단히 말씀드리면,MCP 서버는 LLM이 필요한 데이터나 문서, 지식을 꺼내 쓸 수 있도록 연결해주는 외부 정보 서버입니다.LLM 자체는 훈련 데이터를 기반으로 학습되지만, 세상 모든 최신 정보나 사내 시스템 데이터, 특정 API 결과까지 전부 알고 있지는 않습니다. 그래서 "MCP 서버에..

ETC 2025.07.02

커서(Cursor)를 써보고 나서, 진심으로 감탄했다

최근 새롭게 배정받은 프로젝트에서 신규 기능을 개발하게 되었다. 간단한 CRUD 작업이었지만, 이번엔 예전처럼 일일이 파일을 만들고 코드를 타이핑하는 방식이 아닌, 새로운 도구를 사용해보기로 마음먹었다. 그 도구가 바로 "커서(Cursor)"였다.문제 상황 : 반복적인 파일 생성과 코드 작성에 지친 나회사에서 작업하는 대부분의 서비스는 Spring Boot 기반이고, 구조도 뻔하다. Controller - Service - Repository로 이어지는 전형적인 구조. 기능 하나 만들자고 매번 이 세 가지 파일을 만들고, 인터페이스부터 구현체까지 반복해서 타이핑하자니 슬슬 피로가 쌓이기 시작했다. "이런 건 자동화할 수 없을까?"라는 생각을 하던 차에, 커서(Cursor)에 대한 이야기를 듣게 되었다.내..

ETC 2025.06.26

실무에서 자주 사용하는 인텔리제이 단축키 정리

개발하면서 매번 단축키를 검색하거나 메뉴를 뒤적이는 게 번거롭다고 느낀 적 있으신가요?저 역시 그랬습니다. 그래서 실무에서 자주 사용하는 인텔리제이 단축키만 모아서 한 눈에 정리해봤습니다.저처럼 Java와 Spring Boot 기반의 백엔드 개발을 하시는 분이라면, 이 단축키들만 알아도 개발 속도가 꽤 빨라질 거예요.특히 파일 이동, 북마크, 에디터 탐색, 디버깅까지 커버되니 꼭 한 번 정리해두고 손에 익혀보시길 추천합니다.📁 파일 변경 및 탭 제어 관련 단축키단축키 설명F5파일 복사F6파일 이동Shift + F6파일 이름 변경Ctrl + F4현재 탭 닫기Ctrl + E최근 사용한 파일 목록 조회💡 Tip: Ctrl + E는 여러 파일을 동시에 작업할 때 정말 유용합니다. 직전에 편집하던 파일을 빠르..

ETC 2025.06.16

Kotlin의 Sequence는 무엇이고, 왜 써야 할까요?

코틀린으로 개발을 하다 보면 Sequence라는 타입을 종종 만나게 됩니다.처음에는 익숙한 List나 Stream만 써도 충분한데, 갑자기 등장한 이 친구는 도대체 어떤 역할을 할까요? 그리고 왜 사용하는 걸까요?이 글에서는 Sequence의 개념부터, Stream과의 차이점, 실제로 왜 속도가 빨라지는지도 함께 정리해보겠습니다.Sequence란?간단히 말하면 Sequence는 "지연 계산(Lazy Evaluation)을 지원하는 컬렉션 처리 방식"입니다. 일반적인 리스트 연산은 **즉시 계산(Eager Evaluation)**을 하는 반면, Sequence는 계산을 나중으로 미루는 특성이 있습니다.val list = listOf(1, 2, 3, 4, 5)val result = list .map {..

kotlin 2025.05.28

[Spring] Proxy vs proxyselector

이번에 프록시에 대해 정리하면서, 단순한 개념 설명을 넘어서서 실무에서 Proxy와 ProxySelector를 어떻게 선택하고 적용할지에 대한 전략까지 정리해봤습니다.Java/Kotlin 기반의 Spring 프로젝트에서 HTTP 요청을 외부 프록시 서버를 거쳐야 하는 환경이라면 필수적으로 알아야 하는 내용입니다.Proxy vs ProxySelector 실무 기준 비교 분석개발 경력 5년 차인 제 입장에서 이 둘의 차이는 단순한 API 수준의 차이가 아닙니다. 프록시를 어떻게, 얼마나 유연하게 적용할 수 있는가에 대한 아키텍처적 결정 요소라고 생각합니다.Proxy – 단순하고 명시적인 설정 방식java.net.Proxy는 개별 요청에 대해 직접 프록시를 지정할 수 있습니다. 테스트나 제한된 상황에서 매우 ..

카테고리 없음 2025.04.25

[Spring] Restclient > proxy guide

이번에 팀 프로젝트에서 외부 공공 API를 연동하면서 Spring 6에서 새롭게 도입된 RestClient를 사용해볼 일이 있었다.기존에 쓰던 RestTemplate이나 WebClient랑 비교해도 꽤 직관적이고 깔끔해서 앞으로 메인으로 써볼 만하겠다는 생각이 들었는데, 프록시 환경에서 설정하는 과정에서 몇 가지 삽질이 있었다.이 글에서는 RestClient의 기본 설정부터, 프록시(proxy) 환경에서 어떻게 세팅하는지에 대해 내가 겪은 내용과 함께 정리해본다.RestClient에 대해 간단히 정리하면Spring 6부터 등장한 RestClient는 기존의 RestTemplate보다 더 직관적이고 builder 기반으로 작성할 수 있는 HTTP 클라이언트다.내부적으로는 HttpComponentsClien..

Spring 2025.04.24

[TDD] TDD는 단순 테스트 코드가 아니었다

최근에 TDD를 다시 보게 되면서, 혼자 끄적이던 생각과 고민이 조금씩 정리가 되었습니다.사실 처음에는 TDD를 그냥 '테스트 코드 먼저 작성하는 방식' 정도로만 알고 있었는데요,이번에 프로젝트를 진행하면서 "테스트가 코드의 방향을 결정할 수도 있다"는 걸 체감하게 되었습니다.TDD는 단순히 테스트를 먼저 짜는 게 아니더라구요보통은 기능을 먼저 구현하고 테스트 코드를 나중에 붙이는 경우가 많잖아요? 그런데 TDD는 반대입니다.테스트 코드를 먼저 작성하고, 그 테스트를 통과할 수 있는 최소한의 코드를 작성한 뒤, 마지막에 리팩토링을 진행합니다.이게 단순히 순서만 바뀌는 게 아니라, "어떻게 코드를 짤 것인가" 자체가 달라집니다. 단계 설명Red실패하는 테스트를 먼저 작성합니다Green테스트를 통과시키기 위..

ETC 2025.04.17

[k6] k6 사용법 & 실무 활용 방법

k6 사용법 & 실무 활용 방법 정리최근 서비스 성능 테스트를 진행할 일이 있어서 k6라는 도구를 사용하게 됐는데, 생각보다 사용법이 굉장히 직관적이고 깔끔해서 정리해두면 좋을 것 같아서 글로 남겨본다.특히 Web API나 REST 기반 서비스라면 JMeter보다 훨씬 간단하게 부하 테스트를 해볼 수 있어서 입문자나 실무 개발자에게 추천할 만한 도구다.k6 설치 방법로컬 기준 (Mac / Homebrew)brew install k6그 외 윈도우나 리눅스는 아래 공식 사이트 참고하면 바로 설치 가능하다.https://k6.io/docs/getting-started/installation/k6 기본 예제 스크립트k6는 JavaScript 기반으로 스크립트를 작성하게 되어 있다. 기본적인 GET 요청 부하 테..

ETC 2025.04.14

[Java] Java 8 vs Java 21 - JVM & GC 변화와 메모리 관리 방식 정리

최근 Java 8에서 Java 21로 업그레이드하면서 JVM 내부 구조나 GC 동작 방식에 많은 변화가 있었다.버전 업그레이드를 진행하면서 단순히 버전 숫자만 올라간 것이 아니라, 메모리 관리 방식, GC 동작 원리, 그리고 이에 따른 서비스 성능에도 다양한 영향을 미치게 되었다.이번 글에서는 Java 8과 Java 21을 기준으로 GC와 JVM 메모리 구조의 변화, 그리고 이러한 변화가 실무에 어떤 영향을 주는지 정리해본다.Java 8 vs Java 21 핵심 변화 정리항목 Java 8 Java 21 변화 포인트기본 GCParallel GCG1 GC안정성 중심으로 변경추가 GC없음ZGC, Shenandoah초저지연 GC 등장PermGen 영역존재삭제, Metaspace로 통합OutOfMemory 리스크..

java 2025.04.12
반응형