본문 바로가기

전체 글

(87)
면접만 3번 본 라인플러스 이직기 라인플러스로 이직하게 되었다.지난 회고에서 슬슬 이직준비를 해야겠다고 다짐했었는데 첫번째로 시도한 회사에 합격해버려서 이직준비는 끝이났다. 결론부터 말하자면 라이브 스트리밍 관련 조직에 최종합격했고, 면접을 3번봤고.. 1차/2차 면접 각각 합격/탈락메일을 다 받아봤다. 서류처음에는 비디오 서버와 관련된 팀에 지원했다. 애플리케이션 레이어에서 B2C 플랫폼 서비스 백엔드만을 개발하다보니 약간의 네이티브한? 기술을 다루는 팀에 매력을 느꼈다. 뭔가 더 전문성이 있어보이는 백엔드 개발자가 될 수 있다는 느낌이랄까.. 포트폴리오(기술이력서)는 이미 만들어져 있었다. 새롭게 추가될 내용이 있을 때마다 주기적으로 업데이트 해왔다. 3년 이상의 경력을 요하는 공고였는데 현재 2년 조금 넘기도 했고, 기술스택도 사뭇..
[Spring + SDK] 스프링 환경에서 SDK Bean을 관리하기 위한 방법 팀에서 개발중인 서버들이 많아져 공통기능들을 하나로 묶고싶은 니즈가 생겼다.아직 개발중이라 이른감이 있긴 한데 그동안 고민했던 내용을 정리해보겠다. 여러 서버에서 사용하기 위한 기능을 통합하기 위한 방법은 크게 두가지가 있다.1. 모노레포 + 멀티모듈을 통한 코드 관리2. SDK를 통한 독립적 관리 사용 서비스들을 한 레포에 묶을 수만 있으면 1번이 편할 것 같긴한데, 이미 독립적인 레포로 구성되어있는 서비스 코드들을 새로 멀티모듈로 구성할 생각을하면 벌써 가슴이 답답하다. 따라서 2번을 선택하기로 했다. 공통 SDK를 개발하고 사용하기 위해선 이를 저장할 저장소가 필요하다.다행히도 사내에서는 Nexus라는 오픈소스를 래핑한 서비스가 있어서 이를 이용하면 됐기에 별다른 고민없이 이를 사용했다.Nexus ..
주니어 백엔드 개발자 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 콜 데이터 베이스를 이용해 데이터를 가공하고 서빙하는 서비스를 개발함에 있어서 트랜잭션 관리는 아주 중요한 영역이다. 성능 이슈는 그렇다 쳐도 데이터 정합성을 해치는 상황이 발생하면 안되기 때문이다. 회..