한화시스템 BEYOND SW 캠프 19기 - 9주차 회고

후라이드·2025년 9월 13일

회고록

목록 보기
10/28
post-thumbnail

✨BEYOND SW 캠프 19기 9주차 회고

벌써 9월도 절반 가까이 되어가고 있고, 날씨도 이젠 더위가 꺾여서

밤/낮으로 선선한게 확실히 가을이라고 부를 수 있는 계절이 온 것 같다.

이번 주 부터 본격적으로 Mybatis와 SpringBoot를 배우면서, 두 번째 프로젝트의

DDD 설계부터 하기 시작했는데, 2달간 열심히 달려온 탓인가….

한 주의 시작인 월요일부터 몸이 맛탱이가 갔다. 😷

바뀐 자리가 에어컨을 직빵으로 맞는 자리여서 그런지 모르겠지만…

아무튼 조퇴 하고 병원 가서 약을 먹으니 다음날 부턴 다시

정상 커디션으로 돌아왔다. 학원 다니면서 최대한 건강을 챙기겠다고,

엘베는 타지도 않고 계단만 사용한데다가, 점심을 먹고나면 늘 산책하고,

집에 가면 운동도 했는데 뭔가 억울했지만, 이렇게 운동을 해와서 하루만에

나을 수 있었던 것이라고 생각하기로 했다~ ㅋㅋㅋ 😵‍💫

📕 새롭게 얻은 지식

DDD 설계

이번 프로젝트의 시작은 DDD 설계부터 시작을 하게 되었는데,

지난번 프로젝트 때 DB를 설계 하기 위해서 ERD 설계를 했던 기억이 떠올랐다.

도메인 이벤트를 조원들과 잔뜩 작성해보고, 몇 번의 피드백을 받아 정리를

하고, 커맨드, 애그리것 등등을 붙이고, 애그리것이 유사한 메모들을 각각의

컨텍스트로 분류하는 작업까지 진행했다.

DDD(Domain-Driven Design)란?

도메인의 개념을 중심으로 시스템을 설계하는 방법론. 단순히 데이터 구조만이

아니라, 업무 규칙과 의미, 협력하는 객체들을 코드와 모델에 녹여내는 것이 핵심.

  • Domain Event
    • 도메인에서 이미 발생한 사실(Fact)
    • 과거 시제로 표현 (주문됨, 회원가입 완료됨)
    • 시스템 내 다른 로직/컨텍스트를 트리거
  • Command
    • 사용자가 시스템에 요청하는 명령
    • 미래 지향 (주문하기, 회원탈퇴 요청)
    • 반드시 성공하지 않을 수도 있음 (도메인 규칙 검증 후 실패 가능)
  • External System
    • 외부 연동되는 서비스나 시스템
    • 예: 결제 서비스, 외부 인증 서버
  • Actor
    • 시스템과 상호작용하는 주체(사람 또는 다른 시스템)
    • 예: 사용자, 관리자
  • Aggregate
    • 도메인 객체들의 묶음 (엔티티 + 밸류 객체 집합)
    • 불변성과 트랜잭션 경계를 보장
    • 예: 주문 애그리거트(Order → 주문 엔티티 + 주문항목 VO)
  • Policy
    • 특정 이벤트 발생 시 어떤 커맨드를 실행할지 정의한 규칙
    • 일종의 "업무 규칙" 혹은 "이벤트-액션 매핑"
    • 예: 주문됨 → 결제 요청하기
  • Hot Spot
    • 불명확한 부분, 논의가 필요한 문제, 리스크
    • 예: "반품 정책은 아직 확정되지 않음"
  • Read Model
    • 조회/리포트용 모델 (CQRS에서 Query 쪽)
    • 데이터 집계, 뷰 전용 스키마
    • 예: 주문 내역 조회 화면

Mybatis

저번주부터 Spring과 SpringBoot를 배운 이후 Mybatis를 배우게 되었다.

Mybatis는 자바에서 사용되는 데이터베이스 연동 프레임워크로, SQL 중심이라는

특징이 있다. 전에 배웠던 JDBC보다 간단하게 쿼리를 실행할 수 있었고,

실행결과를 자바 객체와 자동으로 매핑해주는 기능을 제공해주는 것을 배웠다.

또한 if, choose, foreach 같은 태그를 활용하여 상황에 맞는 동적 SQL도

작성해보면서, Mybatis 에 조금 더 가까워질 수 있었다.

Mybatis란?

  • 자바에서 많이 사용하는 데이터베이스 연동 프레임워크 중 하나
  • JDBC를 직접 쓰는 것보다 훨씬 간단하게 SQL을 실행할 수 있도록 도와줌

특징

  1. SQL 중심
    • ORM(JPA 등)처럼 객체-테이블 매핑을 자동화하지 않고, 개발자가 작성한 SQL 문을 그대로 사용 가능
  2. 매핑 기능
    • SQL 실행 결과(ResultSet)를 자바 객체(VO, DTO, Domain 객체)와 자동 매핑
    • XML 또는 애노테이션 기반으로 SQL과 객체를 연결
  3. 동적 SQL 지원
    • <if>, <choose>, <foreach> 같은 태그로 상황에 따라 SQL을 동적으로 생성 가능
  4. 유연성
    • 복잡한 쿼리를 직접 제어 가능, 기존 SQL 자산을 그대로 활용할 수 있음
  • 장점
    • SQL을 직접 제어 → 복잡한 쿼리에 강함
    • JDBC보다 코드가 간결
    • XML/어노테이션을 통해 SQL과 자바 객체 매핑 구조를 명확하게 관리
  • 단점
    • SQL을 직접 작성해야 함 → 유지보수 시 쿼리 관리 부담
    • 자동화된 매핑(JPA 같은 ORM)보다는 생산성이 떨어질 수 있음

🏆 좋았던 점

팀 프로젝트와 친해짐

학생 시절에 팀 프로젝트를 해보긴 했어도, 이렇게 프로젝트의 기초부터

디테일하게 작업을 해 본적이 없다보니 따라가기기 마냥 쉽지는 않았다.

그래도 저번 DB 프로젝트부터, 이번 백엔드 프로젝트를 진행하다 보니,

프로젝트 설계라던가, Git을 통한 협업 등등 아무것도 모르고 코드만 짜면

되는줄 알았던 개발자는 탈출 한 것 같다..ㅋㅋ

📋 아쉬운 점

SQLD 낙방

8월에 봤던 SQLD 결과가 나왔는데 너무 아쉽게 낙방하고 말았다…. 😭

아무래도 공부가 조금 부족했던 것 같다. 생각보다 잘 모르겠는 개념도

많았던 걸 생각해보면 다음번에는 공부 하는 시간을 늘려야 할 것 같다…

📌 앞으로의 목표

정처기 실기 & SQLD 합격하기

정처기 실기도 11월, 다음에 있을 SQLD도 11월 중순인데다가, 그때쯤이면

데브옵스 프로젝트도 진행중일 것 같아서 지금부터 미리미리 준비를

해야겠다… 정말…바쁘고 정신 없겠지만 확실하게 준비해서 모두 좋은 결과를

가져갈 수 있으면 좋겠다… 🎉

profile
라이언을 좋아하는 초보 개발자의 보금자리

0개의 댓글