항해99 플러스 Lite 백엔드 과정 후기
·
IT/WIL
SI 1년 차, 어떻게 백엔드 역량을 키우고 이직까지 성공했을까?이직을 준비하던 SI 1년 차 개발자였던 저는, 늘 비슷한 운영 프로젝트와 프론트엔드 위주의 업무 속에서 백엔드 역량을 키울 방법을 고민했습니다. 그때 만난 것이 바로 항해99 Lite. 혼자지만 혼자가 아니었던 이 부트캠프는, 제 개발 커리어에 터닝포인트가 되어주었습니다.1. 시작하게 된 계기SI 기업에서 근무하며 개발자 커리어에 대한 고민이 많았습니다.반복적인 운영 프로젝트, 개발자가 아니어도 할 수 있는 업무, 그리고 백엔드 역량을 키우고 싶어도 대부분 프론트엔드 위주의 프로젝트가 진행되는 상황이 이어졌습니다. 백엔드 실력을 체계적으로 키울 방법을 찾던 중 항해99 Lite를 알게 되었습니다. 기존 부트캠프와 달리 1인 중심 프로젝트로..
[항해 플러스 Lite] 7주차 회고 - Redis를 사용한 대기열 및 랭킹 조회
·
IT/WIL
이번 주 학습 내용Redis를 이용하여 일일 랭킹 관리Redis를 이용하여 비동기 선착순 쿠폰 작업Redis를 이용한 일일 랭킹 관리주문을 완료하면 일일 랭킹을 Redis에 저장하게 하는 기능을 완성했습니다. 이 기능은 주문을 완료하면 ApplicationEventPublisher을 통해 이벤트를 발행하여, 상품의 랭킹 count를 증가시켰습니다. 지금와서 보니 @Async코드를 주면 비동기로 진행할 수 있었을 텐데 주지않아, 커밋 이후에 실행되게만 되어있어, @Async를 주어 이벤트를 비동기로 할 수 있도록 변경해야겠습니다.또한, TTL을 잘 못주어 "다만, 3일 뒤 삭제 로직은 일배치 작업으로 1회만 수행하거나 TTL을 설정하는 것이 더 좋을 것 같습니다." 피드백을 받아, 이 부분도 함께 수정해야..
[항해 플러스 Lite] 6주차 회고 - Redis Distributed Lock, Cache
·
IT/WIL
이번 주 학습 내용Redis를 이용한 분산락Redis를 이용한 캐싱Spring에서 사용하는 Redis 명령어import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.stereotype.Service;import java.util.List;import java.util.Map;import java.util.Set;import java.util.concurrent.TimeUnit;@Servicepublic class RedisService { private final StringRedisTemplate stringRedisTemplate; // 생성자 주입 public RedisServic..
[항해 플러스 Lite] 5주차 회고 - 서버 구축 DB Lock
·
IT/WIL
이번 주 학습 내용원자적 업데이트, 낙관적 락, 비관적 락에 대한 이해비관적 락, 낙관적 락, 원자적 업데이트비관적 락 : 일단 잠근다.비관적 락은 "내가 데이터를 사용하는 동안 다른 누군가가 데이터를 수정하려고 할 거야!"라고 가정하고, 데이터에 접근하는 순간부터 베타적인 잠금을 걸어버리는 방식입니다.@Lock(LockModeType.PESSIMISTIC_WRITE)@Query("select p from Product p where p.id = :id")Optional findByWithLock(@Param("id") Long productId);동작 방식사용자 A가 상품의 재고 데이터를 수정하기 위해 접근합니다.데이터베이스는 해당 데이터 행(row)에 잠금을 겁니다. (SELECT ... FOR UP..
[항해 플러스 Lite] 4주차 회고 - 서버 구축 DB 설계
·
IT/WIL
이번 주 학습 내용Master/Replica 구조, 복제 지연 문제 해결법파티셔닝 & 샤딩CQRS & Outbox 패턴파티셔닝 & 샤딩서비스 데이터가 커지면, 인덱스/쿼리 느려짐트래픽 집중, 디스크 CPU 한계이런문제들이 발생합니다. 이것을 해결하기 위한 방법으로 테이블을 분할해서 해결하는 방법이 있습니다.파티셔닝 (Partitioning)정의하나의 테이블을 내부적으로 여러 조각으로 분리외부에서는 하나의 테이블처럼 보임사용 예시대용량 로그, 기반별 데이터(월별, 일별 통계)장점인덱스/데이터 범위 축소 → 쿼리 속도 향상파티션 단위 백업/삭제/보관 용이파티션끼리 분산되어 락 격쟁 감소단점파티션 키 설계 잘못하면 "핫스팟" 발생쿼리에 파티션 키 없으면 오히려 느려질 가능성 존재"핫스팟(hotspot)"이란 ..
[항해 플러스 Lite] 3주차 회고 - 클린 아키텍처
·
IT/WIL
이번 주 학습내용레이어드 아키텍처 설계 및 구현클린 아키텍처 설계 및 구현SOLID 원칙레이어드 아키텍처/product├─controller│ ProductController.java│├─docs│ ProductDocs.java│├─dto│ ProductRequestDto.java│ ProductResponseDto.java│├─model│ Product.java│├─repository│ ProductRepository.java│ ProductRepositoryCustom.java│ ProductRepositoryImpl.java│└─service ProductService.java평소에 사용하는 레이어드 아키텍처입니다...
[항해 플러스 Lite] 2주차 회고 - 서버 구축 설계
·
IT/WIL
이번주 학습 내용서버 설계 (ERD, Sequence Diagram, Class Diagram, Infra archtecture)서버 설계Sequence Diagram문서를 작성할 때 제일 먼저 하면 좋다고 합니다. 실제로 진행하며 어떤 로직이 필요할지 서비스의 전체적인 흐름을 정리할 수 있었습니다.ERD테이블의 한글 설명을 테이블별로 표형태로 보여 주었으면 하는 아쉬움이 있습니다.이번 코드 리뷰 때 피드백 받은 내용입니다. 모양과 크기 때문에 한글 설명을 따로 안넣었는데 역시 문서의 중요성은 정보 전달이라는 것을 다시 한번 깨닫게 되었습니다.Class DiagramInfra archtecture사용자 - 방화벽 - 로드벨런서 - Web서버 - 방화벽 - WAS서버 - DB서버방화벽과, Web 서버는 따..
[항해 플러스 Lite] 1주차 회고 - TDD
·
IT/WIL
이번 주 학습 내용테스트 코드 작성동시성 처리테스트 코드는 어디서 중요할까?테스트 코드 작성Red-Green-Refactor요구 사항은 정말 간단하다고 생각이 되었지만, 처음 테스트 코드 작성을 하는 저에게는 어떻게 해야할 지 막막했습니다.먼저 충전, 사용, 조회, 내역 조회 모두 대상이 될 User를 찾아와야 한다는 것을 시작으로 Red-Green-Refactor 방법으로 테스트코드 작성을 시작했습니다. 처음에는 Red-Green-Refactor를 잘 몰랐습니다. 테스트 코드를 짜는데 왜 실패해야 하는 코드를 작성해야 하지??라는 생각을 하며 진행하다보니 어느 순간 실제로 테스트 해야할 기능은 테스트가 되지않는 의미없는 테스트 코드를 작성하고 있는 저를 보게 되었습니다. Red 단계는 실수로 의미없는 ..
[Violation] 'setTimeout' handler took Xms
·
IT/TIL
문제 발생자바 5 환경에서 진행 중인 프로젝트에서, 화면 이벤트 없이 DB 데이터를 계속 조회하여 wordCloud를 갱신하고 화면에 나타내야 하는 상황이었습니다. 원래는 소켓을 통한 데이터 조회를 사용하려 했으나, 해당 프로젝트의 낮은 자바 버전으로 인해 소켓을 사용하기 어려웠습니다. 그래서 대신 setTimeout을 이용해 일정 시간마다 DB 데이터를 조회하고, 갱신된 데이터를 바탕으로 wordCloud를 그려주는 방식으로 해결했습니다.개발이 완료된 후 테스트를 진행하였고, 데이터가 일정 시간마다 잘 반환되며 화면에 wordCloud가 갱신되는 것을 확인할 수 있었습니다. 그러나 문제가 발생했습니다. 다른 탭을 열어서 비활성화된 탭이 다시 활성화되면 개발자 도구에 [Violation] 'setTime..
[TDD] 테스트 가능한 코드의 본질과 필요성 이해
·
IT/TIL
저는 현재 SI회사 1년 재직 중 입니다.프로젝트를 기간 내에 완성하면 또 다른 프로젝트 또는 새로운 일감이 내려오는 기능 완성의 목적으로 개발을 하기때문에 테스트 코드 작성 경험이 없습니다. 아직은 경험하지 못했지만, 현업에서 테스트 코드가 있었다면 어땠을지 작성해보겠습니다.TDD 도입이 왜 중요할까?테스트 코드의 필요성테스트 코드는 개발자 코드를 검증하는 중요한 역할을 합니다. 또한 새로 투입된 인원이 테스트 코드를 통해 기능을 빠르게 파악할 수 있다는 장점이 있습니다. 저는 이전에 새로운 프로젝트에 투입될 때, 시스템이 어떻게 동작하는지 이해하기 위해 주로 로그를 찍어보며 진행했습니다. 이렇게 진행하다 보니 서비스 흐름에서 놓친 부분이 무엇인지, 결과가 어떻게 나와야 정상인지 확인하는 데 시간이 오..