All(31)객체지향(9)AI(3)Java(3)Spring(3)JPA(2)프로젝트(2)MVC(2)Netty(1)API(1)JSpecify(1)Kafka(1)Producer(1)안정성(1)Apache Kafka(1)물류(1)transactional(1)gson(1)test(1)tech(1)CI/CD(1)Docker(1)infra(1)ThreadPool(1)JVM(1)회고(1)

브라운필드 코드베이스에서 AI 활용하기

브라운필드 코드베이스에서 AI 코딩 에이전트를 사용하다 보면 기대에 미치지 못하는 결과를 마주하곤 합니다. 작은 수정이나 단발성 작업은 빠르게 처리하지만, 기능이 커지거나 여러 모듈을 넘나드는 요구사항이 들어오면 잘못된 방향으로 흐르기 쉽습니다.
2026-02-15
포스트 썸네일

Netty 내부 동작 원리로 파헤친 WebClient 초기 지연 이슈

물류 인프라를 보유하고 있는 회사들은 3PL이라는 서비스를 제공합니다. 3PL이란 물류 인프라를 갖춘 회사가 그렇지 못한 판매처로부터 배송 업무를 위탁받아 제공하는 서비스를 말합니다. 판매처는 배송이 필요한 주문 목록을 3PL 시스템에 등록하게 되
2025-12-26
포스트 썸네일

AI 브라우저를 활용한 PR 메세지 자동화

Claude Code, Codex 같은 코딩 에이전트의 등장으로 개발 속도는 빨라졌지만, 그만큼 PR 리뷰에 드는 시간은 이전보다 91% 증가했다고 합니다. 저 역시 예전보다 더 많은 시간을 코드 리뷰에 할애하고 있는데요. 리뷰어로서의 피로를 체감하
2025-12-14
포스트 썸네일

Swagger의 사실과 오해: API-First Development

개발에서 가장 중요하게 생각하는것 중 하나는 '인터페이스'입니다. 인터페이스를 잘 정의하는 것은 시스템의 일관성과 확장성을 보장하고 변화에 유연하게 대응할 수 있는 기반이 되어줍니다. 새로운 API를 개발할때 가장 먼저 마주하게 되는 인터페이스는
2025-12-01
포스트 썸네일

Resilience4j Bulkhead 패턴: 대용량 데이터 처리 안정성 높이기

물류 시스템을 개발하다 보면, 대량의 데이터를 엑셀 파일로 내보내야 하는 요구사항을 자주 마주합니다. 사용자가 지정한 기간의 데이터를 엑셀로 제공하려면, 먼저 데이터를 조회한 뒤 Apache POI로 엑셀 형식으로 변환하는 과정이 필요합니다. 다만
2025-10-24
포스트 썸네일

10억 달러짜리 실수 해결하기: JSpecify와 NullAway를 사용한 최신 Java Null 안전성

자바 프로그래밍을 처음 시작한 개발자부터 20년 경력의 시니어 개발자까지, 경력을 불문하고 개발자들이 가장 자주 마주치는 에러는 NullPointerException일 것입니다. ![Top Crash Reasons](https://dev-t
2025-09-24
포스트 썸네일

Anthropic 엔지니어들의 프롬프트 엔지니어링 팁

AI prompt engineering: A deep dive에서 Anthropic 엔지니어들이 그들의 프롬프트 작성 팁과 경험을 공유했는데, 여기서
2025-06-24
포스트 썸네일

Kafka Producer 안정성 점검: Apache Kafka에서 메시지 안전성 확보하기

최근 인시던트에서, 우리 팀은 Amazon MSK 롤링 패치 도중 Kafka Producer에서 메시지 유실이 발생하는 것을 확인했습니다. 일상적인 업그레이드로 시작된 작업이 순식간에 Producer 설정에 숨겨진 취약점을 드러냈습니다. 문제를 파
2025-05-04
포스트 썸네일

이커머스 비즈니스 모델: 1P, 3P, 그리고 물류(1PL~4PL)

온라인 쇼핑몰이나 이커머스 플랫폼을 운영하다 보면 1P, 3P, 3PL 같은 용어를 자주 접하게 됩니다. 이 용어들은 비슷해 보이지만 다른 개념인데요. 이번 포스트에서는 판매 주체(1P/3P)와 물류 운영 방식(1PL~4PL)을 명확하게 구분하고,
2025-01-14
포스트 썸네일

조인 테이블이 왜 생기지? @JoinColumn으로 해결하는 연관관계 매핑의 비밀

@JoinColumn은 외래키를 매핑할 때 사용한다. 즉, 한 엔티티에서 다른 엔티티를 참조(조인)하는데 사용되는 필드를 지정하는 역할을 한다. ```java @Entity @Table(name = "orders") @Getter @No
2024-10-10 10:00
포스트 썸네일

내부 메서드 호출시 트랜잭션이 적용되지 않는 이슈

@Transactional 동작 원리 AOP와 프록시 패턴을 통한 트랜잭션 관리 AOP는 엔터프라이즈 애플리케이션 개발에서 객체지향 프로그래밍(OOP)의 한계를 보완해주는 보조적인 프로그래밍 기법이다. 이를 통해 트랜잭션, 캐싱, 로깅
2024-10-01 10:00
포스트 썸네일

Gson 라이브러리 InaccessibleObjectException

Spring Boot 2.5.x 버전에서 3.2.x 버전으로 마이그레이션 하는 과정에서 InaccessibleObjectException이 발생하였다. Gson 라이브러리를 사용하는 쪽에서 발생한 문제였는데, 이에 대한 트러블 슈팅 과정을 정리해 보
2024-07-02 10:00
포스트 썸네일

Fixture Monkey With Kotlin

테스트를 작성하다 보면 프로덕션 코드보다 테스트 픽스처를 만드는 데 더 많은 시간이 드는 경우가 있습니다. 테스트 작성이 번거롭고 시간이 많이 걸릴수록 테스트 코드를 생략하게 되고, 결국 결함에 취약한 시스템을 구현할 위험이 커집니다. 주문 로직을
2024-03-03 10:00
포스트 썸네일

객체지향과 탈 국지화

최근 두 권의 책을 병행해서 읽는 중인데 서로 조금 상반되는 내용을 읽게 되어 내 생각을 정리해 보는 시간을 가져보았다. 한 권은 펠리너 헤르만스가 쓴 '[프로그래머의 뇌](https://m.yes24.com/Goods/Detail/10591101
2024-02-04 10:00
포스트 썸네일

JPA 트랜잭션과 영속성 컨텍스트

최근 구현한 테스트 코드에서 @Transactional 여부에 따라 테스트 결과가 달라지는 문제를 만나게 되었다. 타 서비스로부터 송장 접수 결과에 대한 카프카 메세지를 소비한 다음, 송장 접수에 실패했다면 택배 등록 여부를 실패로 변경하는 로
2024-01-07 10:00
포스트 썸네일

GitHub Actions를 통해 CI/CD 구축하기 (feat. Docker, Jib)

저희 Text Me 서비스의 베타 버전이 배포되고 난 뒤에, 사용자들로 부터 수많은 피드백을 받을 수 있었습니다. 사용자 피드백을 빠르게 반영하다 보니 프로젝트의 빌드 및 배포 주기가 짧아졌고 이러한 과정이 서서히 번거롭게 느껴지기 시작했습니다
2022-12-06 10:00
포스트 썸네일

ubuntu 18.04에 Docker 설치하기

프로젝트를 진행하면서 도커 허브에 올라가있는 이미지를 가져와서 배포 환경에서 실행해야 하는 요구사항이 발생하였습니다. 이를 위해서 ubuntu환경에 docker를 설치했던 과정을 공유해보겠습니다. Docker가 지원하는 OS 다음은 do
2022-12-03 10:00
포스트 썸네일

[오브젝트] 13장 - 서브클래싱과 서브타이핑

상속이 사용되는 두 가지 용도 타입 계층을 구현하는 것부모 클래스일반적인 개념을 구현 부모 클래스는 자식 클래스의 일반화 자식 클래스특수한 개념을 구현
2022-11-29 10:00
포스트 썸네일

[오브젝트] 9장 - 유연한 설계

1. 개방-폐쇄 원칙 (Open-Closed Principle) 개체는 확장에 대해 열려있어야 하고, 수정에 대해서는 닫혀 있어야한다.확장에 열려있다.새로운 동작을 추가해서 어플리케이션의 기능을 확장할 수
2022-11-02 10:00
포스트 썸네일

어노테이션 기반 MVC로 리팩터링하기 - MVC 2편

이번 포스트에서는 이전 포스트에서 구현한 MVC 프레임워크를 어노테이션 기반의 MVC로 점진적으로 리팩토링해 나가는 과정에 대해서 다뤄보도록 하겠다. 1. 불편함을 감지
2022-10-17 10:00
포스트 썸네일

MVC 프레임워크 만들기 - MVC 1편

7월에 넥스트 스텝에서 진행하는 만들면서 배우는 스프링 3기에 참여하였습니다. 이 포스트는 해당 과정에서 스스로 고민하며
2022-10-08 10:00
포스트 썸네일

[오브젝트] 7장 - 객체 분해

모든 프로그래밍 패러다임은 추상화와 분해의 관점에서 설명 가능 추상화 메커니즘 시스템을 분해하는 방법을 프로시저와 데이터 추상화중 하나를 중심으로 하여 결정해야한다. 프로시저 추상화 소프트웨어가 무엇을 해야하는지
2022-10-02 10:00
포스트 썸네일

다중 요청 처리를 위한 ThreadPool 적용하기

프레임워크는 개발자가 쉽고 편하게 개발을 할 수 있도록 많은 기술을 추상화해서 제공한다. 스프링 또한 많은 부분이 추상화 되었으며 개발자 스스로가 의문을 갖지 않는다면, 모른채 넘어갈 기술들이 여럿 존재한다. 오늘은 그러한 기술들 중, 개발자들을
2022-09-20 10:00
포스트 썸네일

[오브젝트] 5장 - 책임 할당하기

책임 중심 설계 어떤 객체에게 어던 책임을 할당할지 결정해야한다 문제 해결을 위한 다양한 책임 할당 방법이 존재하며 일종의 트레이드오프 활동이다. 상황과 문맥에 따라 최적의 책임 할당 방법을 선택해야한다. 책임 중심 설계를 위
2022-09-19 10:00
포스트 썸네일

[오브젝트] 4장 - 설계 품질과 트레이드오프

좋은 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 캡슐화를 통해 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 것 구현 변경될 가능성이 높은 부분 인터페이스 상대적으로 안정적인 부분 변경의 정도에
2022-09-12 10:00
포스트 썸네일

[오브젝트] 3장 - 역할, 책임, 협력

객체지향의 본질 : 협력하는 객체들의 공동체를 창조하는 것 기능 구현을 위해 어떤 협력이 필요하고 협력을 위해 어떤 역할, 책임이 필요한지 파악 객체들은 메시지를 주고 받으며 협력한다 협력 어플리케이션 기능 구
2022-09-05 10:00
포스트 썸네일

[오브젝트] 2장 - 객체지향 프로그래밍

클래스를 먼저 결정하고, 어떤 속성과 메서드가 필요한지 고민하는것리 아니라 객체에 초점을 맞춰야한다 어떤 클래스가 필요한지 이전에 어떤 객체가 필요한지 고민하라 클래스는 공통적인 상태, 행동을 공유하는 객체를 추상화한것
2022-08-29 10:00
포스트 썸네일

[오브젝트] 1장 - 객체, 설계

패러다임 - 한 시대의 사회 전체가 공유하는 이론 혹은 방법. 절차형 → 객체지향으로 패러다임 전환을 맞았다. 프로그래밍 패러다임은 과거의 패러다임을 폐기시키는 혁명적 패러다임이 아니라 과거의 패러다임을 개선하는 발전적 패러다임이다. 객체
2022-08-22 10:00
포스트 썸네일

Static 변수 저장위치와 JVM 구조의 변화

Static 키워드를 사용하여 정적 변수와 정적 메서드를 만들수 있는데, 이들을 정적 멤버 (혹은 클래스 멤버) 라고 합니다. ```java class Lesson { static int score = 0; static String grad
2022-07-11 10:00
포스트 썸네일

CORS, 알고보니 우리편?

Server Side Template 방식이 아닌 프론트와 백으로 나눠서 API 통신을 하는 프로젝트의 경우, 열에 아홉은 만나게 되는게 바로 CORS 입니다. 아니나 다를까 현재 진행중인 프로젝트에서도 CORS 관련 이슈가 올라왔습니다. !
2022-05-26 10:00
포스트 썸네일

내가 블로그를 새로 시작하는 이유

앵무새식 블로그 글 처음 블로그를 시작하는 경우에 TIL (Today I Learned) 을 목적으로 하루에 하나의 포스팅을 하는 경우를 주위에서 많이 봤고 나 또한 그랬다. 그 당시에는 하나의 포스팅을 마치고 나면 마치 해당 주제에 대
2022-04-02 10:00
포스트 썸네일
프로필 사진
고산하
AI를 위한 블로그 (사람도 환영합니다)