데이터 중심 애플리케이션 설계 1장
·
카테고리 없음
신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션오늘날 많은 애플리케이션은 Compute-Intensive보다 Data-Intensive한 성격을 가진다.여기서 Data-Intensive하다는 것은 단순히 데이터가 많다는 의미가 아니다. CPU의 순수한 연산 능력보다 데이터의 양, 복잡도, 변화 속도를 어떻게 다룰 것인지가 더 큰 문제인 애플리케이션​을 의미한다.그래서 현대의 애플리케이션은 보통 하나의 도구만으로 만들어지지 않는다.데이터를 저장하고 다시 조회하기 위한 Database값비싼 연산 결과를 저장해 읽기 속도를 높이는 Cache데이터를 검색하기 위한 Search Index비동기적으로 다른 프로세스에 메시지를 전달하기 위한 Stream Processing누적된 데이터를 주기적으로 처리하..
분명 락을 걸었는데 왜 같은 사용자가 두 번 신청됐을까?
·
Spring
안녕하세요. SOPT makers 크루팀에서 5기부터 7기까지 모임 서비스를 담당했던 백엔드 개발자 이동훈입니다. 대학생 벤처 창업 IT 동아리 SOPT에는 3,000명이 넘는 회원이 있습니다. 활동 중인 회원과 수료 회원은 모임 기능을 통해 스터디나 친목 모임을 열고, 다른 사람이 만든 모임에도 참여할 수 있습니다. 평소에는 조용히 동작하는 기능이지만, 솝커톤이나 네트워킹 데이처럼 인기 있는 행사가 열리면 상황이 달라집니다. 신청이 시작되는 순간 요청이 몰리고, 정원은 순식간에 찹니다. SOPT와 티켓팅을 합쳐 ‘솝케팅’이라고 부를 정도였습니다. 이 글은 그때 운영 중에 마주한 동시성 문제와, 시간이 흐른 뒤 아래 첫 해결책을 다시 검토한 기록입니다. 내가 언제 2명이 됐지? SOPT 모임 신청 동시..
[회고] 2025 회고록
·
Retrospect
Intro. 올 한 해를 되돌아보면, 나의 부족함을 마주하고 겸손을 배운 시간이었다.감사하게도 인턴십과 직장인과 함께하는 IT 연합 동아리 활동을 통해 현업자들과 호흡하며 프로덕트를 개선할 기회를 얻었다.사실 그전까지는 내 지식에 대해 꽤 자만하고 있던 편이었다. 하지만 실전에 부딪혀 보니, 그동안 내가 안다고 자부했던 지식들이 빙산의 일각에 불과하다는 것을 깨닫게 되었다.실무는 단순히 기능 구현이 전부가 아니었다. 성능과 비용, 유지보수성, 그리고 팀의 상황까지… 수많은 요소를 저울질하며 최선의 선택을 내려야 했다. 정답이 없는 상황에서 끊임없이 트레이드오프를 고민하고 결정하는 과정, 그것이 엔지니어의 역량임을 비로소 배웠다.그 과정이 쉽지는 않았지만, 덕분에 나는 조금 더 넓은 시야를 가진 엔지니어로..
[회고] 2024년 회고록 - 3 : 무드메이트 시즌 2, 청춘의 설렘을 '무드'로 다시 잇다
·
Retrospect
2024년 회고록 2편 바로가기 4월~5월무드로 다시 피어난 청춘의 이야기 크리스마스 주간 동안 진행된 무드메이트 시즌 1에서 많은 분들이 서비스를 이용해 주신 덕분에, 매일매일 행복한 한 주를 보낼 수 있었다.가장 행복했던 순간을 꼽자면, 서비스가 끝나고 일주일 정도 후에 어느 사용자 분께서 감사 편지를 주셨던 순간이다.그분은 크리스마스에 우울하게 시간을 보낼 뻔했지만, 우리 서비스를 통해 상대 무디분과 바닷가에서 즐거운 데이트를 할 수 있었다며 장문의 편지로 감사의 마음을 전해주셨다. 그렇게 되었으면 좋겠다는 마음으로 출시한 서비스였지만, 정작 내가 만든 서비스를 통해 사랑이 이어지는 모습을 보니 놀라움과 뿌듯함이 교차했다.그래서 해당 편지를 10번은 더 읽어본 것 같다. 이때 나는 한 가지 인생..
[회고] 2024년 회고록 - 2 : NOW SOPT, 새로운 세상을 만나다
·
Retrospect
2024년 회고록 1편 바로가기  3월~7월SOPT와 함께 성장의 꽃을 피우다SOPT 활동은 2024년 내 삶의 가장 빛나는 순간이자, 잊을 수 없는 추억이 되었다. SOPT는 단순히 배우고 성장하는 공간을 넘어, 나를 진심으로 이해하고 응원해주는 사람들과의 만남을 선물해 주었다. 그들과 함께 나눈 시간은 단순한 경험이 아니라, 내 삶의 방향을 바꿔준 커다란 전환점이었다 ☺️ SOPT 활동을 돌아보며 뭉클한 마음이 드는 건, 그만큼 이 동아리가 내게 소중하고 고마운 존재였기 때문인 것 같다. 그래서, 지금 이 글을 읽고 있는 대학생이라면 망설이지 말고 SOPT에 도전해 보길 바란다! 이곳에서의 경험은 단순한 활동 그 이상으로, 당신의 삶에 큰 변화를 가져다줄 것이다. 자 이제, 본격적으로 회고를 시작해보..
[회고] 2024년 회고록 - 1 : 도약의 발판
·
Retrospect
더 큰 도약을 위해서 들어가며2024년은 나의 20대 중 최고의 한 해로 기억될 것 같다.매일을 후회 없이 살기 위해 노력했고, 덕분에 후회 없는 하루하루를 보낼 수 있었다. 물론, 후회 없는 나날을 보냈지만 행복한 일만 있었던 것은 아니다.때로는 너무 힘들어 지치는 순간도 있었고, 마음이 무너질 때도 있었다. 그럼에도 불구하고, 그런 경험들이 결국 나를 더 단단하게 만들었고, 나아갈 힘이 되어주었다.지난 한 해 동안의 경험들은 내게 소중한 자산이 되었다.실패를 두려워하지 않고 도전했던 순간들, 힘들어도 포기하지 않았던 시간들, 그리고 그 과정에서 만난 소중한 인연들까지 모두...2025년에는 어떤 일이 펼쳐질까? 두려움도 있지만 25살의 내가 이뤄낼 성과가 더 기대된다.그만큼 내가 내 길을 잘 헤쳐나갈..
[우테코 7기 프리코스] 3주차 회고
·
woowacourse-pre
들어가며 3주차 과제를 제출한 후 꽤 시간이 지났지만 회고록을 작성해본다. 이번 3주차 과제는 “로또”였다. 이전 기수에서도 동일한 문제로 3주차 과제가 진행되었고, 이번 7기에서도 같은 미션이 주어졌다.1주차 미션에서는 OCP(Open-Closed Principle)와 SRP(Single Responsibility Principle)를 준수한 도메인 설계에 중점을 두었다. 2주차에서는 1주차 내용에 더해 원시값 포장과 일급 컬렉션을 적용하는 데 집중했다. 이번 3주차에서는 앞선 두 주차의 내용을 바탕으로 싱글톤 패턴을 적용하는 데 중점을 두고 미션을 수행하였다. 3주차에서는 잘못된 입력 시 해당 부분부터 재입력하는 로직이 추가되었는데, InputView에서 모든 유효성 검증 로직을 처리하게 되면서 레이..
[우테코 7기 프리코스] 2주차 회고
·
woowacourse-pre
들어가며 2주차 과제를 제출한 후 이제야 회고록을 작성해본다. 이번 2주차 과제는 “자동차 경주”였다. 이전 기수에서도 2주 차에 동일한 문제로 과제가 나왔고, 이번 7기에서도 같은 미션이 주어졌다.지난번 미션을 구현할 때는 OCP(Open-Closed Principle)와 SRP(Single Responsibility Principle)를 지킨 도메인 설계에 초점을 맞췄었다. 이번에는 여기에 더해 원시값 포장과 일급 컬렉션을 적용하는 데 중점을 두고 미션을 진행하였다. 미션을 다 구현하고 나서는 스스로 나름 만족스러운 코드라고 생각했다. 그러나 스터디 팀원들의 코드 리뷰를 받고 나니, 내가 놓친 부분과 개선할 여지가 많았음을 깨달았다. 아쉬움이 남기도 했지만, 동시에 이런 피드백 덕분에 더 성장할 수 ..
[우테코 7기 프리코스] 1주차 회고
·
woowacourse-pre
들어가며 1주차 과제가 드디어 끝이났다! 이번 1주차 과제는 문자열 덧셈 계산기였다. 1주차 과제라서 지난 기수에 출제되었던 문제가 다시 나올 줄 알았는데, 예상과 달리 새로운 문제였다. 처음엔 조금 당황했지만, 한편으로는 새로운 문제를 풀어볼 수 있어 설레는 마음이 들었다. 😊 이번 미션을 구현하면서는 OCP(Open-Closed Principle)와 SRP(Single Responsibility Principle)를 준수한 도메인 설계에 초점을 맞추고자 했다. 프리코스에 참여하면서 확장 가능한 설계를 시도해봐야 겠다고 생각했는데, 이번 과제가 “덧셈 계산기”를 만드는 것이었다. 이를 접하자마자 자연스럽게 이런 고민이 떠올랐다. “나눗셈 계산기”, “뺄셈 계산기”, “곱셈 계산기”로 변경해야 한다면 ..
[Design Pattern] 팩토리 메서드 패턴(Factory Method Pattern)
·
Design Pattern
Factory Method - 시작객체 생성을 공장(Factory) 클래스로 캡슐화 처리해서 대신 생성하게 하는 생성 디자인 패턴이다.좀 더 자세하게 설명하자면, 클라이언트에서 직접 new 연산자를 통해 제품 객체를 생성하는 것이 아니라 대신 제품 객체를 생성할 공장 클래스를 만들고, 이를 상속하는 서브 공장 클래스의 메서드에서 여러 가지 제품 객체 생성을 각각 책임지는 것을 말한다.이 패턴을 이용하는 이유는 객체간의 결합도를 낮출 수 있고, 유지보수에 용이해지기 때문이다.💡 공장한테 요청하면 서브 공장 클래스의 메서드에서 제품을 생성한다는 말을 표현한 건 알겠는데, 그냥 한 공장에서 다 만들면 안돼? 왜 서브 공장이 필요한데?라는 물음이 생길 수 있다.이를 이해하기 위해서는 먼저 Factory Met..