본문 바로가기

전체 글

(85)
주니어 백엔드 개발자 2024년 회고 어느덧 입사한지 2년이 넘었다.  항상 새해에는 많은걸 다짐하는데, 막상 이뤄내는건 많지 않은 것 같다.지난 2023년 회고에서 한 2024년 다짐들을 모두 이룬 것 같지는 않지만 2023년 만큼 2024년도 백엔드 개발자로서 나름 많이 성장했기 때문에 회고를 쓰며 되돌아보는 시간을 가지려 한다. 배운 신규 기술스택Spring Batch와 Kafka를 새로 배우며 프로젝트에 적용하는 경험을 했다. 1. Spring Batch기존 배치작업들은 Mysql SP + Event 의 구조로 개발이 되어있었다. 하지만 코드 형상관리, 디버깅 및 에러 모니터링등에 너무 큰 불편함이 있어서 Spring Batch를 이용해 신규 배치서버를 구축했다. 정수원님의 인프런 강의를 참고해 공부를 시작했다.https://www...
[Spring AOP] Custom AOP와 @Transactional Order에 관하여 최근 특정 요청이 중복되어 처리되는 이슈가 발생했다. 어떤 요청의 중복 처리 요청은 우선적으로 클라이언트에서 막아주면 좋지만, 서버는 모든 상황을 대비해야 하기에 이를 사전에 대비해야한다. 배경우리팀은 특정 요청의 중복처리를 방지하기 위해 Redisson 분산락을 활용한다. 서비스 특성상, 어떤 로직이 처리되는 도중 들어오는 중복된 요청은 무시해도 되는 상황이 많기 때문에 다음과 같은 속성을 이용한다. RLock lock = redissonClient.getLock(key);lock.tryLock(0, 60L, TimeUnit.SECONDS)* wait = 0 (이미 다른 곳에서 해당 lock을 점유했다면 대기하지 않고 false 반환)* lease = 60 (lock을 획득한 이후엔 60초 이후 자동 ..
[Spring + Kafka] 대용량 스트림 메시지 구독 설계 수많은 스트림 데이터를 안정적으로 구독하기 위한 시스템 설계 방법은 정말 다양하다.이 글에서는 대용량 결제 데이터 스트림을 처리하기 위해 우리가 설계를 했는지 서술하겠당  Listener vs Consumer Kafka를 사용하기 위해 다음 라이브러리를 사용했다.https://mvnrepository.com/artifact/org.springframework.kafka/spring-kafka 해당 라이브러리는 @KafkaListener 라는 강력한 어노테이션을 지원해준다. 일반적으로 Spring 환경에서 Kafka 토픽을 구독하기 위해선 두 가지 방법을 떠올릴 수 있다. 1. @KafkaListener 사용2. 주기적인 스케쥴링을 통한 Consumer.poll 사용 @KafkaListener가 제공해주는..
[Spring Batch] Job Instance 추가시, 데드락 문제 해결 최근 배치 관련 작업을 위해 Spring Batch를 통해 개발하고 있는데 예상치 못한 오류를 맞이했다. com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction : PreparedStatementCallback; SQL [INSERT INTO BATCH_JOB_INSTANCE(JOB_INSTANCE_ID, JOB_NAME, JOB_KEY, VERSION) VALUES (?, ?, ?, ?) ]; Deadlock found when trying to get lock; try restarting transaction in class..
[MySQL] DB 재시작과 auto_increment의 관계성 우리 팀은 수 많은 데이터베이스 서비스중 MySQL을 사용한다. 현재 개발하고 있는 서비스에서 사용하고 있는 DB는 꽤 오래전에 구축되었는데, MySQL 5.7 버전을 사용한다. 개발하면서 MySQL 5.7 버전에서는 쓸 수 없는 기능들로 많이 고생했기 때문에 최근 8.0 버전으로 업그레이드를 진행했다. 개발대역에서 자체적으로 5.7에서 8버전으로의 업그레이드를 진행했었는데, 서비스 상의 큰 이슈도 없었고 업그레이드 하는 시간도 많은 시간을 요구하지 않았기에 QA 대역에서 그대로 진행했다. 그런데 문제가 생겼다. AUTO_INCREMENT 의 COUNTER AUTO_INCREMENT(이하 AI)는 테이블의 pk 컬럼에 적용했을 때 꽤 편리한 속성이다. 데이터베이스 엔진이 자체적으로 PK를 카운팅하며 in..
[Spring JPA] 한 트랜잭션 내부에서의 외부 API 콜과 엮인 영속성 문제 이 카테고리를 만든 이유 이 카테고리에서 첫 글인 만큼 카테고리의 이유는 여기에 한번만 적겠다. 회사에서 개발하면서 모르는 지식들을 지피티형이나 구글링을 통해 서칭하는데, 가끔 [어 이거 옛날에 한번 검색했던 기억이 나는데?]라는 생각과 함께 나의 수준에 탄식을 하는 일이 있었다. 그래서 올해부터는 머리를 탁 치고 깨달았던 개발 관련 지식을 이 카테고리에 정리할 계획이다. 회고 말고는 쓸 주제도 명확하게 정하기 힘들었는데 다행이다. 사실 올해 마지막 글이 될 수도 있음 한 트랜잭션 내부에서의 외부 API 콜 데이터 베이스를 이용해 데이터를 가공하고 서빙하는 서비스를 개발함에 있어서 트랜잭션 관리는 아주 중요한 영역이다. 성능 이슈는 그렇다 쳐도 데이터 정합성을 해치는 상황이 발생하면 안되기 때문이다. 회..
주니어 백엔드 개발자 2023년 회고 상반기 회고를 쓴지 얼마 안된 것 같은데, 정신없이 지내다보니 벌써 2023년이 지나버렸다. 지난 상반기 회고는 두서없이 생각나는 내용을 마구잡이로 써서 아쉬움이 좀 있었다. (그렇다고 고치지도 않음)따라서 상반기를 포함해 종합적인 2023년 전체 회고글을 쓰려고 한다. 1. 넥슨에서의 플랫폼 개발자지난 1년간 B2C/B2B 서비스 프로젝트에 참여했다.입사해서 가장 처음으로 개발에 참여했던 서비스인 피파온라인 개인화 서비스 유어필드를 시작으로 현재는 넥슨 크리에이터즈 개발에 참여하고 있다. 회사에서 운영중인 실제 게임 트래픽에 비해선 현저히 작은 트래픽을 운영하긴 하지만, 여러 게임 유저들의 피드백을 수용하고 대 유저 서비스를 개발하는 점이 좋다.  흔히 말하는 네카라쿠배당토 같은 서비스 기업에서는 플랫..
코딩테스트를 준비하는 효율적인 방법 IT관련 대기업, 금융권 및 유니콘 기업에 취업하기 위한 코딩테스트 준비는 선택이 아닌 필수가 되었다. 대부분의 기업의 채용 프로세스는 서류 - 코딩테스트 - 면접 순으로 이루어지기 때문에 코딩테스트에 통과하지 못한다면 면접을 볼 수 있는 기회조차 없는 것이 일반적이다. 이 글에서 코딩테스트 준비를 시작하는 학생들에게 가늘고 길게 공부할 수 있는 방법을 제시할 것이다. 그리고 이 방법은 내가 작년부터 코딩테스트를 위해 경험한 내용을 기반으로 한다. 나름 긴 시간동안 꾸준히 문제해결과 알고리즘 공부를 해왔고, 채용 단계에서 PS유형의 코딩테스트에서는 한 곳 빼고 모두 합격했었다. 글을 읽는 사람들에게 나름의 신뢰도를 제시해야 하기에 부끄럽지만 나의 백준 프로필을 근거로 올린다. https://www.acm..