벌크헤드에 대해서 간단하게 알아보겠습니다 Bulk Head는 한 가지 작업에서 동시에 사용될 수 있는 자원을 제한하는 방식입니다. 서버 개발에서는 보통 한 API에서 최대 N개까지만 동시에 호출될 수 있다는 제약 조건을 걸게 됩니다. 톰캣 스레드(외부에서 요청을 받는 스레드)가 200개가 존재하고 있을 때, 한 API에서 총 199개까지만 호출될 수 있다고 하면, 1개는 무조건 다른 쪽에 배정될 테니 다른 기능이 최소한 어느 정도는 동작하는 것을 보장할 수 있습니다. 이 제한이 왜 필요한지 아직 전혀 감이 오지 않으시죠? 보통 다른 API 를 호출할 때, 몇 번 이상 호출하면 안 된다는 제약을 거는 것은 봤어도 우리 서비스에 동시에 몇 개 이상 호출이 되면 처리를 못하게 막는다는 것은 이상할 테니까요 이..
???: 송금을 했는데, 송금이 안된 것 같아요 돈이 안 줄어요!!! 개발자 : 어? 분명히 상대한테 돈은 갔다는 로그가 있는데... 일단 롤백부터 하고 올게요 로그를 보면서 상대에게 돈이 갈 때도 있고, 안 갈 때도 있네요 왜 갈 때도 있고, 안 갈 때도 있었을까... 바꾼 것은 테이블밖에 없는데, 테이블에 무슨 일이 났는지 확인해 봐야겠네요 어떤 일이 발생했을까요? 기존 로직과 쿼리입니다 A로부터 5000원을 차감하고, B에는 5000원을 추가합니다 어느 날 테이블을 보면서, 왜 column 명이 old_amount 지? 그냥 amount로 바꿔버려야지~ 하고 테이블을 바꾸기 시작합니다 기존 코드에서 amount라는 column을 추가하고 update를 할 때, amount와 old_amount 모두..
Circuit Breaker 목적은 무엇일까요? Circuit Breaker 패턴은 장애가 발생했을 때 장애가 전파되는 것을 막기 위한 패턴입니다. 원래라면, 서비스 A가 서비스 B를 호출하고, 서비스 B가 장애가 발생하면 서비스 A도 장애가 발생합니다. Circuit Breaker 패턴을 적용하면, 서비스 A가 서비스 B를 호출할 때 더 이상 호출하지 않도록 차단합니다. 차단하는 것을 통해서 서비스 A는 정상적으로 작동할 수 있도록 하는 목적을 가지고 있습니다. Circuit Breaker 패턴의 구성요소 Circuit Breaker 패턴은 크게 3가지로 구성되어 있습니다. Open Half Open Closed Open Open 상태는 Circuit Breaker가 차단되어 있는 상태입니다. Open..
Redis를 활용한 Lock 관리하기 1. Lock 이란? Lock 은 동시성 문제를 해결하기 위한 방법 중 하나입니다. 동시성 문제란, 여러 개의 프로세스나 스레드가 동일한 자원에 동시에 접근하려고 할 때 발생하는 문제를 의미합니다. 이러한 문제는 데이터의 일관성과 무결성을 해치는 원인이 되므로, 동시성 문제를 해결하기 위한 다양한 방법들이 제안되고 있습니다. 이번에는 Redis 를 활용한 Lock 관리 방법에 대해 알아보겠습니다. 단일 인스턴스를 활용한 Lock 관리 Redis는 단일 스레드로 동작하는 인메모리 데이터베이스이므로, 단일 인스턴스에서도 Lock을 관리할 수 있습니다. 가장 쉽게 생각할 수 있는 구조는 다음과 같습니다. if(redisTemplate.opsForValue().setIfAb..
토스에 출근한 첫날입니다. 원래 어제 정리를 해보려고 했으나, 시간도 없고 너무 피곤해서 오늘 아침에서야 정리를 하게 되었네요 어제를 보내고 나니 느낀 점이 3가지 있습니다. 1. 운동을 아침마다 하고, 오늘 무엇을 어떻게 해야 할지를 정리한다 아무 생각 없이 회사를 다니게 되면, 회사에서 시킨 일, 회사에서 놓쳤던 개념만을 학습하고 그 외의 공부는 할 수 없을 것 같았습니다 최소 1시간 이상 운동을 매일 하면서, 총 3가지 항목을 채워보려고 합니다. 오늘은 언제 무슨 일을 해야 할지 오늘 여유가 생긴 시간은 언제이고, 그때 어떤 개인 공부를 해야 할지 오늘은 가서 어떤 질문을 할지 이 3가지 핵심적인 부분을 게속해서 쌓아간다면 회사에서만이 아니더라도 훨씬 더 중요한 일들을 많이 해나갈 수 있을 것이라고..
코틀린을 왜 공부하기 시작했는데? 코틀린이 자바에 비해서 코드량이 엄청 줄어들어서 생산성이 엄청 높아진다는 말을 자주 들었습니다. 한번 해보고 싶었던 언어이기에, 사용해 보면서 자바와 비교했을 때, 어떤 점들이 편했는지 정리해보려고 합니다. 당연하지만, 사용해본지 1주일도 안 되었기 때문에, 틀린 내용도 많을 수 있습니다. https://solved.ac/problems/sprout solved.ac 알고리즘 문제해결 학습의 이정표 🚩 Baekjoon Online Judge 문제들의 난이도 및 티어 정보를 제공하는 사이트입니다. solved.ac solved ac 의 새싹 레벨 문제들을 전부 풀어보면서 학습을 진행했습니다. 편했던 점들 main 함수가 간단하다 java 라면? public class Cl..
원래 7월 초에 이 글을 쓰려고 했지만, 어쩌다 보니 8월까지 밀리게 됐네요 6개월 단위로는 어떤 일들을 해왔는지 기록을 남겨야 나중에 보았을 때, 가져가는 것이 있을 것 같아서 이렇게 글을 써보려고 합니다. 작년에는 어떤 어떤 일들이 있었지? 작년에는 노드로 웹개발을 거의 처음 시작하고, 개발 동아리를 몇 개 거치고, 프론트엔드 인턴쉽을 진행하고, 대학교를 다녔습니다. 그러다 보니 프론트엔드는 제 길이 아니라는 것을 명확하게 느끼고, 백엔드로 길을 확실히 정하게 되었습니다. 프론트엔드로 진행해 왔던 시간이 너무 아까웠지만, 백엔드가 더 적성에 맞다는 것을 알고 나니 바꾸지 않을 이유가 없었습니다. 백엔드를 노드로 하다 보니, 취업을 하기 정말 힘들 것 같다는 것을 확실히 느꼈습니다. 그때 우테코를 보게..
2023 토스 NEXT 개발자 챌린지에 최종 합격 발표 연락을 어제 받게 되었습니다. 아마 주변 분들은 다 아실 것 같지만, 정말 오랫동안 가고 싶어 하던 회사라서 알아보고 준비해 왔습니다 그 과정에서 2023 토스 NEXT 개발자 챌린지에 지원하게 되고, 감사하게도 결과로 최종 합격 전화를 받게 되었습니다 최종 합격은 토스에 Server Developer 포지션으로 합격하게 되었습니다. 지금까지 경력은 프론트엔드 인턴쉽 1회, 우아한테크코스에 올해 초부터 참여하고 과정을 진행하고 있었습니다. 2023 토스 NEXT 개발자 챌린지란? 1개월 내에 모든 채용 프로세스를 마무리하는 과정입니다. 각 포지션별로 진행 과정은 상이합니다. 제가 말씀드리는 부분은 Server Developer 과정입니다. 1. 코딩..
어떤 문제가 있었나요? 우아한테크코스에서 private 서브넷에 db 인스턴스를 두고, 보안을 위해 외부에서 접속을 차단하려고 했습니다. 이 과정에서 총 2가지의 문제점이 있었습니다. private 서브넷에 인스턴스가 인터넷에서 mysql을 설치할 수 없었습니다. public 서브넷에 있는 인스턴스에서 private 서브넷에 있는 인스턴스에 접속이 안되었습니다. 이 부분을 어떻게 해결했는지 알아보도록 하겠습니다. 아래의 모든 설명은 AWS 를 기준으로 합니다. private 서브넷에 인스턴스가 인터넷에서 mysql을 설치할 수 없었다. 해결 방법 public ip 자동할당을 해주지 않아서, 인터넷에 연결이 안 되었습니다. 이를 해결하기 위해 public ip 자동할당을 해주었습니다. 왜 public ip..
안녕하세요 우아한테크코스 카페인팀 누누입니다 이번에 카페인 팀에서 배포 아키텍처를 결정하게 되었던 과정에 대해서 정리를 해보고 싶어서 글을 쓰게 되었습니다. 아키텍처와 서버가 배포되는 과정을 보여드리면서 시작하도록 하겠습니다 서버가 배포되는 과정은 다음과 같습니다. 우아한테크코스 인스턴스에 대한 소개 우테코에서 선택할 수 있는 인스턴스는 총 2가지 종류입니다. 퍼블릭 서브넷에 있는 인스턴스 캠퍼스에서만 SSH 접근이 가능한 인스턴스입니다. 미리 열려있는 포트들만 허용이 되어 있습니다. 같은 서브넷에 있는 인스턴스끼리는 모든 포트가 허용되어 있습니다 프라이빗 서브넷에 있는 인스턴스 퍼블릭 서브넷에 있는 인스턴스를 통해서만 접근이 가능합니다. 같은 서브넷에 있는 인스턴스끼리는 모든 포트가 허용되어 있습니다...