프로젝트

프로젝트

장애 없는 코드를 만드려면 어떻게 해야할까?

이번주 금요일에 정말 장애와 함께 한 날인데요 크고 작은 총 3번의 장애가 날뻔한 것과, 잘못된 데이터가 내려가는 문제가 있었고, 슬랙 채널에서 승건 님을 포함한 거의 가장 높은 3명을 쭈르륵 만났습니다 가장 처음에 승건님을 만난 것은 어드민 페이지에서 특정 필드가 누락되어, 서빙되는 데이터가 잘못된 부분입니다. 이 부분은 그래도 제가 배포한 부분이랑은 관련이 바로 있지 않아 간접적으로 엮여있어서 좀 덜 신경 쓰였지만, 이후에 2번은 제 배포와 직접 연관이 되어있어 회고를 하기 위해서 글을 작성합니다. 제 사수분이 작성한 코드에서 카프카 토픽을 잘못된 곳에 집어 넣어서, 서비스에서 사용하는 카프카에 데이터를 추가한 것이 아니라, 로그 카프카에 데이터를 추가하면서 Unknown Topic 이 발생했었습니다..

프로젝트

장애 사례로부터 배우는 안전한 db 마이그레이션 방법(dual write)

???: 송금을 했는데, 송금이 안된 것 같아요 돈이 안 줄어요!!! 개발자 : 어? 분명히 상대한테 돈은 갔다는 로그가 있는데... 일단 롤백부터 하고 올게요 로그를 보면서 상대에게 돈이 갈 때도 있고, 안 갈 때도 있네요 왜 갈 때도 있고, 안 갈 때도 있었을까... 바꾼 것은 테이블밖에 없는데, 테이블에 무슨 일이 났는지 확인해 봐야겠네요 어떤 일이 발생했을까요? 기존 로직과 쿼리입니다 A로부터 5000원을 차감하고, B에는 5000원을 추가합니다 어느 날 테이블을 보면서, 왜 column 명이 old_amount 지? 그냥 amount로 바꿔버려야지~ 하고 테이블을 바꾸기 시작합니다 기존 코드에서 amount라는 column을 추가하고 update를 할 때, amount와 old_amount 모두..

프로젝트

카페인팀 서버 아키텍처를 설명해드리겠습니다

안녕하세요 우아한테크코스 카페인팀 누누입니다 이번에 카페인 팀에서 배포 아키텍처를 결정하게 되었던 과정에 대해서 정리를 해보고 싶어서 글을 쓰게 되었습니다. 아키텍처와 서버가 배포되는 과정을 보여드리면서 시작하도록 하겠습니다 서버가 배포되는 과정은 다음과 같습니다. 우아한테크코스 인스턴스에 대한 소개 우테코에서 선택할 수 있는 인스턴스는 총 2가지 종류입니다. 퍼블릭 서브넷에 있는 인스턴스 캠퍼스에서만 SSH 접근이 가능한 인스턴스입니다. 미리 열려있는 포트들만 허용이 되어 있습니다. 같은 서브넷에 있는 인스턴스끼리는 모든 포트가 허용되어 있습니다 프라이빗 서브넷에 있는 인스턴스 퍼블릭 서브넷에 있는 인스턴스를 통해서만 접근이 가능합니다. 같은 서브넷에 있는 인스턴스끼리는 모든 포트가 허용되어 있습니다...

프로젝트

프로젝트 git branch 전략 어떤 것이 있을까?

현재 상황은 어떤데? 현재 우아한테크코스에서는 프론트 코드와 백엔드 코드가 같은 레포지토리를 사용하고 있습니다. 프론트와 백엔드가 같이 작업하기에, 의도치 않은 충돌이 자주 생길 수 있는 구조이기에, 이를 git branch 전략으로 충돌을 줄이고자 합니다 Git Branch 전략이란? git을 사용해서 소프트웨어 개발을 관리하는 방법입니다. 여러 개발자가 동시에 작업하고 코드를 통합할 때 생기는 충돌을 효율적으로 조정하기 위한 방법입니다. 왜 git branch 전략이 중요한데? 아래에 있는 4가지를 제외하고도 훨씬 많은 장점이 있을 수 있습니다. 1. 동시 작업이 편하다 여러 사람이 독립적으로 작업하고, 커밋을 할 때, 자신의 브랜치에서 변경 사항을 커밋하게 됩니다. 브랜치가 병합될 때만 충돌을 해결..

프로젝트

쿠키로 Jwt RefreshToken 관리하기! (내 쿠키는 어디갔지?)

어떤 문제가 있었는가? 이럴 거면 왜 RefreshToken을 사용하는 거지? 과거의 로그인 과정에서 로그인을 진행하면, ResponseBody로 AccessToken과, RefreshToken 이 넘어가게 됩니다. 클라이언트는 이를 모두 LocalStorage에 저장해 두고, 필요에 따라 헤더에 추가하는 방식으로 로그인을 진행했습니다 무언가의 이유로 토큰의 탈취가 일어난다면, 같은 저장소에 저장이 되고 있기 때문에, 동시에 탈취가 진행될 수 있었습니다 그렇다면 AccessToken 만을 통해 관리해도 되지 않나? 왜 귀찮게 Refresh 하는 과정이 있는 거지?? 내가 해커라면? 1. 로컬 스토리지에 몰래 접근한다 2. AccessToken과 RefreshToken을 모두 가져간다 3. 다른 사람의 역..

프로젝트

ElasticCache 에 SpringDataRedis 에서 키 동기화 문제

문제 상황 아래 적힌 에러를 발생시키며 라이브 서버에서 계속 서버가 죽는 상황이 있었습니다 Caused by: org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR unknown command 'CONFIG', with args beginning with: 'GET' 'notify-keyspace-events' SpringDataRedis의 특징 SpringDataRedis에서는 CrudRepository에 있는 findBy*** 의 메서드를 지원하기 위한 방법으로 검색을 위한 데이터를 가지고 있는 S..

프로젝트

사이드 프로젝트 리팩터링에 관한 이야기

왜 리팩터링을 시작했을까? 우아한테크코스 과정을 진행하면서 간단한 애프리케이션은 많이 사용해 봤지만, 모두 너무 작은 규모의 프로젝트였는데요 짧다면 짧고, 길다면 긴 기간동안 작성했던 프로젝트를 과거 코드부터 출발해서 변경해 나가는 과정을 직접 겪어보고 싶었습니다 이 프로젝트를 선택하게 된 이유는 외부 API 호출 기능이 많았기에, 테스트를 하기 위해서는 필수적으로 추상화나, 모킹이 들어가야 했습니다. 이때 잘 설계를 하게 된다면 추상화의 장점을 정확하게 볼 수 있다고 생각했는데요 기존 프로젝트에는 어떤 기능이 있을까? 1. GPT 를 통해서 꼬리질문을 만들어주는 기능 2. 가입을 하는 과정에서 이메일 인증을 하는 기능 3. 닉네임을 외부 api를 통해서 가져오는 기능 4. Security 로 로그인 관..

프로젝트

이펙티브 기술면접 서비스 회고

여기에서 코드를 보실 수 있습니다 https://effective-tech-interview.com/ 이펙티브 기술면접 Chat GPT로 연습하는 개발자 면접! 프론트엔드, 백엔드 면접 막막하다면, 10초만에 맞춤 질문 뽑아드려요. 답변이 어려운 꼬리 질문까지 한번에! effective-tech-interview.com 프로젝트를 하는 동아리 "디프만"에서 만난 사람들끼리 해커톤을 나가게 되면서 프로젝트를 시작했습니다 해커톤에서 우수상을 받고, 프로젝트 개발을 이어서 진행하고 있었습니다 개발을 위한 개발을 하면 안된다는 생각을 정말 확실하게 갖게 되었는데요 이 프로젝트에서 후회가 되는 부분은 회원가입입니다 오늘은 회원가입에 대한 이야기를 하려고 합니다 저희 서비스는 1. 앱을 실행하면, 회원가입이 바로 ..

be-student
'프로젝트' 카테고리의 글 목록