Spring Camp 2025에 다녀왔다. 이 행사는 KSUG(Korea Spring User Group)에서 주관하며, 다양한 주제의 세션과 활발한 커뮤니티 교류로 구성된 개발자 행사다.

이번 캠프에서는 정말 많은 개발자들의 이야기를 들을 수 있었고, 그중에서도 가장 인상 깊었던 말은 “시니어는 피드백을 받기 어렵다”는 말이었다. 이 말을 들으며 주니어 때에는 틀리는 것을 두려워하지 않고 기죽지 않는 자세가 중요하다는 것을 느꼈다. 블로그나 링크드인에 글을 올리는 것 등 내가 먼저 행동하고 용기를 내는 자세가 필요하다는 생각이 들었다.

또한, 조직 내에서 신뢰 자산을 쌓는 것이 얼마나 중요한지도 크게 와닿았다. 결국 신뢰를 쌓기 위해서는 소통 능력 같은 소프트 스킬뿐 아니라, 꾸준한 실력 향상도 반드시 필요하다고 느꼈다.

최근 나는 ‘앞으로 어떤 사람으로 성장해야 할까’에 대해 고민이 많았는데, 이번 캠프는 그 고민에 대한 실마리를 얻고, 더 열심히 공부해야겠다는 동기를 얻을 수 있었던 값진 시간이었다.

1. 인가 플랫폼 - HR SaaS는 왜 복잡할까?

주요 키워드

  • OpenFGA: ReBAC(Relation-Based Access Control), ABAC(Attribute-Based Access Control)
  • 통합 인가 플랫폼: 도메인과 플랫폼 독립 개발 가능, 인가 구현 난이도 감소

고려사항

  • 신뢰성 이벤트 스트리밍 패턴으로 분산 서비스 트랜잭션 보장
  • 통합 검색 플랫폼 구축으로 인가 복잡성 문제 해결
  • Server Sent Events(SSE)를 활용한 비동기 프로세스 구축
  • 양방향 의존 관계 해결을 위한 데이터 복제 전략

2. Talk - 개발자 커뮤니티

“멀리 가려면 함께 가야 한다”

커뮤니티 참여 동기

  • 기술적 갈증과 목마름
  • 동료 개발자들과의 교류 필요성
  • 성장에 대한 열망

코로나 전후 변화

  • 온라인 접근성 향상 vs 깊이 있는 관계 형성의 어려움
  • 디스코드 등 플랫폼 활용으로 보완

커뮤니티 활동 팁

  • 용기내서 먼저 다가가기
  • 지속적인 관계 유지 노력
  • 다양한 플랫폼 활용 (슬랙, 디스코드, 링크드인, 쓰레드)

커뮤니티와 업무 밸런스

  • 회사에서 신뢰 자산을 먼저 쌓기
  • 일을 잘하는 것이 커뮤니티 활동의 기반

지속 가능한 커뮤니티 운영

  • 운영자: 응원과 독려, 소속감 조성
  • 참가자: 실수를 두려워하지 않고 용기있게 참여
  • 핵심: 함께하는 것, 희생과 봉사정신

3. Talk - 함께 성장하기

조직에서 함께 성장하는 것이란?

  • 지속가능한 성장: 혼자 성장하는 것의 한계 극복
  • 도메인 지식 전파: 회사 도메인의 효과적 전파가 성장의 핵심

조직 문화 개선 접근법

  • 이상적이지 않은 조직이 당연함을 인정
  • 변화를 만들 기회로 인식: “바닥을 칠 때가 기여할 때”
  • 도망가지 말고 두드려보기
  • 커뮤니티 활용으로 부족함 보완

변화 도입 시 중요한 점

  • 신뢰 관계 구축: 기술 도입보다 사람과의 신뢰가 우선
  • 작은 성공부터: 작은 변화로 자신감 획득 후 확장
  • 조직 상황 판단: 현재 상황에 맞는 접근 방식 선택

주니어 개발자를 위한 조언

  • 팀 분위기를 바꾸고 싶다면 주도적으로 도전
  • 리더십은 지금부터: 시니어가 되어서가 아닌 지금부터 역량 개발
  • 소프트 스킬 개발: AI가 하드스킬을 대체하는 시대에 더욱 중요

심리적 안정감

  • 대체 가능성: 내가 없어도 다른 동료가 대응할 수 있는 환경
  • 리더의 역할: 의견 제시를 비난받지 않을 환경 조성
  • 관계 구축: 친근한 관계에서 나오는 진심 어린 피드백

4. MSA 트랜잭션 개발 가이드

MSA의 목적

  • 시스템을 독립적인 서비스로 분할
  • 각 팀의 독립적 작업 환경 구축
  • 중요: 서비스가 다른 서비스 테이블에 직접 접근 금지

트랜잭션 개발 가이드

1. 데이터 오너십 원칙

  • 다른 업무 참조 시 ServiceImpl 호출 방식 권장

2. 실패한 트랜잭션 처리

  • Pivot Transaction: 재시도/취소 결정 기준점
  • Pivot Transaction 이전 실패 → 트랜잭션 취소
  • Pivot Transaction 이후 실패 → 이벤트 처리
  • SAGA 패턴: 잦은 커밋이 필요한 경우 효과적

3. 트랜잭션 격리성 보완

  • Eventual Consistency: 변경 중 데이터 조회 이슈
  • Semantic Lock: 예약 중 등 중간 상태 도입
  • Pessimistic Offline Lock: 외부 락 테이블 활용

4. 신뢰할 수 있는 트랜잭션 구현

  • Transactional Outbox Pattern: 두 저장소 쓰기 문제 해결
  • 진짜 실패 vs 가짜 실패 구분
  • 멱등성: 유니크 값으로 중복 실행 방지

5. Talk - 기술 (객체지향 & 설계)

객체의 역할과 책임

  • 컨텍스트 우선: 어떤 상황에서 어떤 상호작용이 필요한지 먼저 고민
  • 시나리오 접근: 연극의 시나리오처럼 상호작용 설계
  • 객체가 먼저가 아닌, 역할과 책임에서 객체 도출

JPA 엔티티 vs 도메인 객체

분리가 필요한 경우

  • DB 스키마 변경이 도메인에 영향주지 않게 하려 할 때
  • 공유 데이터 사용 시
  • 레거시 시스템 연동 시

통합해도 되는 경우

  • 신규 프로젝트
  • 단순한 비즈니스 로직

설계 철학

  • 현재 알고 있는 문제를 해결하는 가장 단순한 설계
  • 미래 대비보다는 현재 상황에 최적화
  • 불필요한 복잡성 추가 금지

확장성 vs 오버엔지니어링

  • 창발적 아키텍처: 변화에 열려있는 설계
  • 과도한 사전 설계보다는 단순하게 시작
  • 팀의 일관성이 개인 철학보다 중요

AI 시대의 개발

  • 코드 협업의 의미는 여전히 중요
  • 현재에 집중하며 AI를 도구로 활용
  • 급격한 변화보다는 점진적 적응

요약

  1. 협업과 커뮤니티의 중요성: 개발자의 성장은 혼자가 아닌 함께할 때 가능
  2. 점진적 변화: 급진적 변화보다는 작은 성공을 통한 신뢰 구축
  3. 현실적 접근: 이상보다는 현재 상황에 맞는 실용적 해결책
  4. 지속 가능성: 개인과 조직 모두가 지속 가능한 성장 방향 모색
  5. 균형잡힌 사고: 기술적 완벽함과 팀워크 사이의 균형점 찾기