개발자라면 누구나 고민합니다. "이 API에 데이터를 다 몰아넣을까(Fat), 아니면 기능별로 잘게 쪼개서 호출하게 할까(Lean)?"이 고민의 핵심은 결합도(Coupling)와 응집도(Cohesion), 그리고 사용자 경험(UX) 사이의 균형 잡기입니다.1. '네이버'급 대규모 서비스: Decoupling(디커플링)이 생명네이버 같은 MSA(마이크로서비스 아키텍처) 환경에서는 Atomic API(원자적 API) 설계를 지향합니다.Loose Coupling (낮은 결합도): "쇼핑 API"와 "리뷰 API"가 서로 남남이어야 합니다. 그래야 리뷰 서버가 터져도 쇼핑은 돌아갑니다. 이걸 'Fault Tolerance(결함 허용)'라고 부르죠.Scalability (확장성): 특정 API만 트래픽이 튈 때..
1. 문제 상황 (The Problem)프론트에서 JSON으로 분명히 true를 보냈는데, 서버 DTO에서는 자꾸 false만 찍히는 기괴한 현상.JSON: {"isTermsAgreed": true}Java DTO: private boolean isTermsAgreed; (Lombok @Getter 사용)Log: isTermsAgreed=false (하...)2. 원인 분석 (Why?)범인은 자바의 Bean 규약과 Jackson 라이브러리의 지나친 친절함 때문입니다.자바의 관례: 일반적인 필드는 getFieldName()이지만, boolean 타입은 게터 이름이 isFieldName()이 됩니다.Lombok의 동작: 필드명이 isTermsAgreed라면, 롬복은 게터를 getIsTermsAgreed()가..
🌐 1. 도메인 연결 & HTTPS 적용, 왜 하는 건가요?사용자가 우리 서비스를 이용할 때 22.142.142.133같 은 복잡한 숫자를 외우게 할 수는 없겠죠?도메인 연결: 22.142.142.133은 이제부터 api.myservice.com이야라고 약속하는 것입니다.HTTPS(SSL) 적용: 통신 내용을 암호화하는 '자물쇠'를 다는 것입니다.요즘 브라우저(Chrome 등)는 HTTPS가 아니면 "안전하지 않은 사이트"라고 경고를 띄워 사용자들을 쫓아냅니다.프론트엔드(Vercel)는 기본이 HTTPS라, 백엔드도 똑같이 HTTPS여야만 서로 데이터를 주고받을 수 있습니다.🗺️ 2. 전체 작업 순서 (로드맵)이 과정은 크게 4단계로 진행됩니다. ① 1단계: 신분증 만들기 (ACM 인증서 발급)AW..
JPA를 처음 접하실 때 @ManyToOne, @OneToMany 같은 연관관계 매핑 어노테이션 때문에 많이 헷갈리실 텐데요. 이 복잡한 개념이 등장한 근본적인 이유부터 살펴보겠슴다.이유는 '자바 객체'와 '관계형 데이터베이스(RDB) 테이블'의 구조가 태생부터 완전히 다르기 때문입니다. 이를 전문 용어로 '객체와 관계형 데이터베이스의 패러다임 불일치'라고 부릅니다.1. 객체와 테이블, 어떤 점이 다를까요?객체 (Object)의 세계: "참조(Reference)"객체는 다른 객체와 관계를 맺을 때 참조를 사용합니다.예를 들어, 댓글(Comment) 객체가 게시글(Post) 객체의 정보를 알기 위해서는 comment.getPost()처럼 참조를 통해 접근해야 합니다.기본적으로 단방향입니다. 게시글 객체 안..
개발자로 취업하거나 사이드 프로젝트를 시작하면 "우리 팀은 애자일하게 스크럼 방식으로 스프린트를 돌면서 지라로 일할 거예요"라는 외계어를 듣게 됩니다...o...오늘은 이 막막한 단어들을 초등학생도 이해할 수 있게, 아주 쉽고 디테일하게 쪼개서 설명해 보겠습니다.1단계: 마인드셋 뜯어고치기 (애자일, 스크럼, 스프린트)이 세 가지는 프로그램 이름이 아닙니다. '일하는 방식(철학)'입니다. 식당을 개업한다고 상상해 봅시다.1. 애자일 (Agile): "일단 빨리 내놓고, 손님 반응 보면서 고치자!"과거의 방식(워터폴): 완벽한 인테리어, 완벽한 100가지 메뉴판을 다 만들 때까지 1년 동안 식당 문을 닫아둡니다. 1년 뒤 오픈했는데 손님들이 맛없다고 하면 망하는 겁니다.애자일 방식: 일단 책상 몇 개 놓고..