SY 개발일지
article thumbnail
[loop:Pak] Round-5 DB 구조 변경, 인덱스와 캐싱을 이용하여 조회 성능 늘리기
loop:Pak L2 Backend(2025) 2025. 8. 13. 00:33

개요이번 주차의 대주제는 "성능 최적화" 이다.회사의 팀내 서비스는 모든 사용자들의 수가 탈퇴한 회원까지 다 합쳐도 500명 채 되지 않는 서비스이다 보니 사실 성능이 그다지 중요하지는 않다. 하지만 최적화는 하면 할수록 생각을 더 많이하게 하는 것이기 때문에 열심히 해보고자 한다.우선 요구사항은 다음과 같다.Structure상품 목록/상세 조회 시 좋아요 수를 조회 및 좋아요 순 정렬이 가능하도록 구조 개선을 진행한다.좋아요 적용/해제 진행 시 상품 좋아요 수 또한 정상적으로 동기화되도록 진행한다. 인덱스상품 목록 API에서 brandId 기반 검색, 좋아요 순 정렬 등을 처리한다.조회 필터, 정렬 조건별 유즈케이스를 분석하여 인덱스를 적용하고 전 후 성능비교를 진행한다. (Optional 카디널리티 ..

[loop:Pak] Round4 - WIL
loop:Pak L2 Backend(2025) 2025. 8. 9. 13:28

이번주에는 동시성에 대해 배웠다.사실 내가 회사에서 제공하는 서비스들은 동시성을 고려하지 않아도 된다. 유저가 적기도 하고, 특정 시간에만 잠깐 사용하는 서비스 위주로 구현하고 있기 때문이다.그런데 이번에 멘토링중 이야기하셨던 것이 사람이 따닥하는 것 뿐만 아니라 네트워크 문제 등으로 인해 동시성 문제가 발생할 수 있다고 하셨다. 포인트 같은 경우에도 동일한 유저가 같은 상품을 다른 기기로 동시에 주문하여 보유 포인트보다 더 많은 상품을 살 수 있는 경우가 거의 없지만, 요청은 1-2초정도 차이가 나도 서버에 동시에 도착할 수 있다고 하신게 기억에 남는다.그래서 나도 돈과 관련이 있거나 아니면 뭔가 이력이 중요할 때 이러한 식으로 동시성 문제를 고려하며 코드를 작성해볼까하는 생각이 들었다. 아무튼 이번주..

[loop:Pak] Round4 - 비관적 락, 낙관적 락 걸기
loop:Pak L2 Backend(2025) 2025. 8. 8. 12:53

한 번쯤 이런 생각 해본 적 있을 것이다“주문을 한 번만 눌렀는데, 상품이 두 개 왔으면...”소비자 입장에서는 꽤 기분 좋은(?) 일이지만, 개발자나 서비스 운영자 입장에서는 절대 웃을 수 없는 심각한 시스템 오류이다. 이런 문제는 종종 동시성 문제(Concurrency Issue)로 인해 발생한다. 이번 글에서는 동시성 문제란 무엇인지, 그리고 이를 해결하는 대표적인 방법인 낙관적 락(Optimistic Lock), 비관적 락(Pessimistic Lock)에 대해 알아보고자 한다.동시성 문제란?동시성 문제란 여러 요청이 같은 데이터에 동시에 접근하거나 수정하려고 하면서 발생하는 문제이다. 그런데 컴퓨터는 한 번에 하나씩 처리하는 거 아닌가?맞다. 실제로는 동시에 처리되는 게 아니라 아주 빠른 시간 ..

[loop:Pak] Round2 - WIL
loop:Pak L2 Backend(2025) 2025. 7. 24. 23:03

이번 주차는 설계에 대해 배웠다. 사실 회사에서 우리 팀에 백엔드에 대해 자세히 아시는 분이 많이 없어 시퀀스 다이어그램, 클래스 다이어그램 등은 거의 그리지 않고, 로직에 대한 플로우차트 정도만 그리고 있다.하지만, 이번 강의를 듣고, 만약 5개월간 프로젝트를 한다면 그중 4개월은 설계이고 나머지 1개월 동안은 설계한 것을 구현하는 시간이라는 것을 알게 되었다. 즉, 설계를 다같이 하고, 설계대로 구현하는 것을 개발자가 하는 것이다. (사실 이 부분이 이번 주차에서 가장 크게 와닿은 부분이었다.)만일 그렇게 한다면 설계문서만 봐도 개발자든, 비개발자든 모두 같은 로직으로 이해할 수 있을 것이라 생각이 든다. (너무너무 좋은 방법이고 배우고 싶은 방법이라, 나도 회사에서 이러한 식으로 해보자고 건의할 생..

article thumbnail
[loop:Pak] Round2 - 간단한 설계 문서 만들기
loop:Pak L2 Backend(2025) 2025. 7. 23. 22:42

* 해당 포스팅에 나오는 내용과 코드들은 아직 학습중이기 때문에 완벽하지 않음을 알려드립니다.* loop:Pak L2 Backend에서 공부하며 배운 것들과 생각한 것들을 정리한 내용입니다.개요요즘 회사에서 새로운 프로젝트를 들어가기 위한 프로젝트 설계작업을 거의 하루종일 하고 있다. 그러면서 만들고자 하는 서비스를 사용하게 될 사람들에게 무엇이 필요한지 물어보고 이를 해결하기 위해 어떤 정보들이 있는지, 그리고 어떤 식으로 정보를 전달하면 좋을 지에 대해 고민하고 있다.이에 맞춰 loop:Pak 에서도 설계 관련 강의를 듣게 되었다.그래서 이번 기회에 설계에 대해 배우고 회사 업무에 적용할 수 있는 문서 작성법에 대해 알아보고자 한다.모든 프로세스는 주문하기 기능을 위주로 작성해보도록 하겠다.요구사항 ..

[loop:Pak] Round1 - WIL
loop:Pak L2 Backend(2025) 2025. 7. 18. 00:09

* loop:Pak L2 Backend에서 공부하며 배운 것들과 생각한 것들을 정리한 내용입니다.회고이번 주에는 TDD로 간단한 로직을 작성해보았는데, 아직 사실 감이 안 온다.특히 회원가입 로직 작성할 때는 기존에 비밀번호 검증이나 이런 과정을 건너뛰고 진짜 userId가 중복되는 지만 확인할 때의 코드의 간소함이란,, ㅎㅎ주차가 늘어나면서 살이 붙을 테니 걱정하지 않고 TDD에 치중을 두며, 테스트를 먼저 작성하고, 해당 테스트가 제대로 동작할 수 있는 비지니스 로직을 작성하는 데에 더 집중해야 겠다.또 TDD의 장점이라고 한다면, 생각보다 postman이나 swagger로 여러 경우의 수를 나누어 API 통신을 하지 않고, E2E 테스트가 통과되는 지 만으로 일일이 수작업으로 테스트했던 것들을 시간..

[loop:Pak] Round1 - TDD 이해하기
loop:Pak L2 Backend(2025) 2025. 7. 17. 22:42

* 해당 포스팅에 나오는 내용과 코드들은 아직 학습중이기 때문에 완벽하지 않음을 알려드립니다.* loop:Pak L2 Backend에서 공부하며 배운 것들과 생각한 것들을 정리한 내용입니다. 개요Spring을 공부하며 다들 TDD 는 한번씩 들어봤을 것이다. 나도 TDD 를 들어봤고, 한번쯤 공부해보고 업무에 적용해보고자 하였지만 배울 수 있는 기회가 적어 그러지 못했다. 또한 업무를 하면서도 현재 코드를 유지보수 하는 데에 그치고만 있다.이번에 TDD 를 처음 배웠고, 내가 짠 테스트 코드를 코드리뷰 받을 수 있다는 것에 설레있다. (많이 까일준비 완 ㅎ) 그래서 이번엔 TDD에 대해 정리해보고, 내가 마주한 에러와 해결 방안에 대해서 점진적으로 기록해보고자 한다.TDD란 ?TDD란, (Test-Dri..

article thumbnail
[Redis] Redis에 RefreshToken 저장하기 - 설치, Spring boot 적용
프로젝트 2024. 9. 22. 15:20

프로젝트를 진행하며 RefreshToken을 과연 어디에 저장을 해야 효율적인가에 대해 고민을 하게 되었습니다. 이전의 프로젝트에서는 단순히 MySQL 데이터베이스에 저장을 하였습니다.그래서 만료일과 액세스 토큰, 그리고 리프레스 토큰값을 저장해둔 후 액세스 토큰이 만료가 되었을 시, 액세스 토큰값과 리프레스 토큰값을 이용하여 재발급 로직을 실행하였습니다. 하지만, 이렇게하면 데이터베이스에 쓰레기 데이터가 너무 많이 남는다는 단점과 사용자의 액세스 토큰이 만료가 될 때마다 데이터베이스에 접근해야 한다는 단점이 있습니다. 그만큼 사용자가 많아질수록 데이터베이스에 접근을 많이하여 성능도 좋지 않겠죠. 그래서 많은 사람들이 사용하는 Redis를 이용하여 RefreshToken을 저장하는 것을 생각하게 되었습니..

article thumbnail
[하나금융티아이 채용 회고] SSAFY 전형 후기
취업준비 2024. 9. 20. 21:42

그동안 취업준비로 인하여 블로그에 글을 못썼었습니다... (프로젝트도 멈췄음)저의 경우에는 SSAFY 9기 출신인데, 하나금융티아이 SSAFY 전형에 참여했습니다. 채용 과정은 하나금융티아이 공채와 같았습니다.서류전형 → 필기전형 → 1차면접 → 2차면접 → 채용검진 → 최종입사 서류전형서류전형의 경우 다른 기업과 같이 자소서와 함께 인적 사항을 적었습니다.자소서의 경우 3문항으로 이루어져 있으며, 공채와 문항이 비슷한 것 같았습니다.필기전형필기전형은 코딩테스트와 인성검사로 이루어져 있었습니다.코딩테스트는 총 6문제로 이루어져 있으며 백준 골드 5 정도의 난이도로 다소 쉽다고 느껴졌었습니다. (어떤 문제였는지는 정확히 기억이 안나지만 알고리즘 스터디를 진행하며 풀었던 문제 수준이었습니다.)또한 SQL  ..