추석 연휴와 한글날 여유가 생겼는데, 이 연휴를 어떻게 하면 더 의미 있게 보낼 수 있을까라는 고민을 하다 보니 개발자 취업이나, 간단한 질문들을 받아주는 것으로 사용하면 어쩔까 하는 생각이 들었습니다 같은 학교만 볼 수 있는 커뮤니티나, 공개적으로 볼 수 있는 커뮤니티에 올려보고, 거기서 사람들의 질문을 받아봤습니다 학교 커뮤니티에서는 총 12명에게 질문 답변을 진행했습니다 공개적으로 볼 수 있는 커뮤니티의 경우에도 13명에게 질문 답변을 진행했습니다 우테코에서 이력서 피드백을 요청했던 1명도 있었습니다 총 26명과 질문 답변을 진행해 보고 거기에서 나왔던 질문들을 기록해 두고, 어떤 빈도로 질문이 나왔는지 정리해 두면 나중에도 도움이 될 것 같아서 미리 정리를 해두려고 합니다 질문 답변을 끝내고 나니..
문제 상황 같은 형태의 테이블 2개를 하나의 테이블로 합쳤을 때, Auto Increment 때문에 생길 수 있는 문제에 대해서 정리를 해보려고 합니다 편의를 위해서 정말 간단한 엔티티로 설명을 드리도록 하겠습니다 @NoArgsConstructor @AllArgsConstructor @Getter @Entity @Table(name = "transaction_data") public class TransactionData { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "name") private String name; public TransactionData(String name) { thi..
벌크헤드에 대해서 간단하게 알아보겠습니다 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. 코딩..