[SpringBoot] 동시성 제어와 Lock에 대해서
·
Developer/SpringBoot
SpringBoot0. 들어가며 최근 실시간 쿠폰 발급과 조회에 대해서 스터디 겸 코드로 아주 간단하게 구현해 보았습니다. 간단한 요구사항에도 불구하고, 동시성에 대해서 되게 생각해야 될 점들이 많았습니다. 구현하면서 동시성과 관련된 여러 영상과 블로그들을 참고하면서 Lock과 동시성 제어에 대해서 너무나도 재밌게 공부했던 것 같습니다. 너무 많은 정보가 머릿 속에 있다 보니 정리가 잘 되어있지 않은 것 같아 이번 글을 통해서 제 스스로도 정리하고, 관심 있어하시는 분들께도 조금이나마 도움을 드리고자 합니다. 그럼 시작해 보도록 하겠습니다! 1. 내용 정리 구현 상황을 간단하게 드리도록 하겠습니다. 우선, 쿠폰을 발급하는 순서와는 상관없이 1,000명의 유저에 대해서 정확히 100명에게만 쿠폰을 발급하는..
[Infra] 배포 전략에 대하여 (feat. 당근마켓)
·
Developer/Infra
Infra0. 들어가며최근 여자친구와 카페를 갔다가 서로의 당근 판매 물품을 구경하던 도중 조금 재밌는 사실을 발견했습니다. 그것은 바로 같은 최신 버전의 당근 마켓 어플에서 동네를 변경하는 탭이 서로 다른 모습을 보이고 있다는 점이었습니다. 최근에 우연히 인프런에서 배포 관련한 무료 강의를 들었어서 그런 지 정말 이 현상이 재밌게 느껴졌습니다. 역시 같은 것을 보더라도 많이 알고 있으면 더 많은 것을 볼 수 있나 봅니다 ㅎㅎㅎ. 그래서 저도 보자마자 "아 이게 카나리 배포를 통해서 A/B 테스트하고 있는 것 같은데 ?"라는 생각을 하게 됐습니다. 다른 사람의 당근 어플을 볼 기회가 없어서 몰랐는데, 정말 우연히 발견하여 뭔가 신기했습니다. 그래서 이번 글에서는 이 경험을 바탕으로 여러 배포 전략에 알..
[Infra] CDN에 대해서 (with. AWS CloudFront)
·
Developer/Infra
Infra0. 들어가며 최근 지인들과 카톡방에서 CDN에 대한 이야기를 나눴습니다. 안건은 "CDN은 사용자 입력을 처리할 수 있는가?"였습니다. 그래도 나름 SSA 자격증도 취득했는데, 해당 질문에 바로 즉답할 수 없었습니다. CDN의 종류에는 Cloudflare, AWS Cloud Front가 있고, 국가 단위로 별도의 서버가 존재하여 지리적 거리에 대한 통신 리소스를 줄여주는 즉, 정적 파일들에 대한 캐싱을 처리해 주는 역할을 해주는 것으로 알고 있는데, 사용자 입력을 처리할 수 있나..?라는 생각이 들었습니다. 정답은 결국 "Edge Function을 활용하여 사용자 입력을 처리할 수 있다"로 귀결되었습니다. CDN과 관련된 질문에 바로 즉답할 수 없는 제 모습이 미워서 다시 정리하려고 글을 ..
[SQL] LEFT JOIN에 대해서
·
Developer/DB
SQL0. 들어가며 SQL을 공부하면서 INNER JOIN만 활용해 왔습니다. 인프런 강의를 듣다가 LEFT JOIN이 실무에서 많이 사용된다는 말을 들었고, 우연히 프로그래머스 SQL 문제에서 LEFT JOIN을 활용하는 문제가 나와서 글로 정리해보려고 합니다! 프로그래머스 문제 링크는 다음과 같습니다.https://school.programmers.co.kr/learn/courses/30/lessons/273712 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 우선, INNER JOIN과 LEFT JOIN의 차이를 알고, LEFT JOIN이 실무에서 어떻게 사용되는지, 어떤 상황에서 사용해야 하는지에 대해..
[SQL] RANK(), DENSE_RANK(), ROW_NUMBER() 함수에 대해서
·
Developer/DB
SQL0. 들어가며 최근 쏘마 코테를 보면서 윈도우 함수와 랭크 관련 함수를 정리해야겠다고 마음먹었습니다. 공부하면서 해당 내용들을 같이 보면 좋을 것 같아서 이렇게 글을 작성해 봅니다! 윈도우 함수와 랭크 함수는 현실에서도 종종 사용될 수 있다고 생각합니다. 예를 들어, 각 학급 당 석차가 1등인 학생을 찾아야 되는 경우 또는 각 학년 당 각 과목 석차 Top 3인 학생들을 찾아야 하는 경우 등 다양한 상황이 있을 것입니다. 이렇게 보면 윈도우 함수와 랭크 함수는 데이터 분석 관점에서 되게 유용한 정보를 뽑아낼 수 있는 함수들이라고 생각합니다. 흔히 순위라고 하면 Redis Sorted Set과 같은 자료구조를 생각할 수도 있겠지만, 관계형 데이터베이스에서는 이를 어떻게 구현할지 같이 익혀보면 좋을 ..
[Java] 순열과 조합을 구현하기 위한 Next Permutation 알고리즘에 대해서
·
Developer/Java
Java0. 들어가며문제 링크: https://www.acmicpc.net/problem/10972 최근 알고리즘 문제를 풀다가 "백준 10972 다음 순열"이라는 문제를 접하게 되었습니다. 처음 문제를 봤을 때는 “순열이면 그냥 재귀(Back Tracking)로 다 만들어서 다음 걸 찾으면 되는 거 아닌가?”라고 생각했습니다. 결과는 "시간 초과"였습니다. 당연하게도 그냥 다음 순열만 구하면 되는 건데, 재귀를 통해서 전체 순열을 모두 찾게 된다면 O(N!)이라는 시간 복잡도를 가지게 되며, 해당 문제에서 N의 범위는 10,000이므로 시간 초과가 되는 것은 당연한 결과였습니다. 결국 못 풀겠어서 여러 블로그를 찾아보게 되었습니다. 그러다가 이 문제를 풀기 위한 "Next Permutation"알고..
[Java] 자료형 변환 parseInt()와 valueOf()에 대해서
·
Developer/Java
Java0. 들어가며 IDE 환경에서 코딩 테스트 문제를 풀다가, 숫자로 이루어진 문자열을 정수형으로 변환해 주는 valueOf() 메서드에 대해 IntelliJ가 경고를 띄워준 적이 있습니다. IDE가 parseInt()로 바꿀 수 있다고 추천해주더라고요..! “어? 둘 다 같은 거 아닌가?”, “어차피 int로 변환하는 건데 뭐가 다른 거지?”라는 생각이 들었습니다. 처음에는 단순 스타일 차이라고 생각했지만, 내부 구현 코드까지 살펴보니 명확한 차이가 존재한다는 것을 알게 되었습니다. 기업 코딩 테스트의 경우 대부분 프로그래머스 환경을 사용합니다. 프로그래머스에서는 IDE처럼 별도의 경고나 조언을 제공하지 않기 때문에, 이런 차이를 인지하지 못한 채 넘어가기 쉽습니다. 게다가 숫자로 이루어진 문자열을..
[SQL] 코딩 테스트를 위한 SQL 필수 함수 정리
·
Developer/DB
SQL0. 들어가며 금융권 코딩테스트 또는 공기업 코딩테스트를 보게 되면 알고리즘 문제 말고도 항상 SQL 문제가 2문제 정도 끼어 있습니다. 알고리즘 문제는 스터디를 통해서 매일 풀지만, SQL에 대한 문제들은 항상 코테 2~3일 전날부터 풀곤 하는 제 모습... 매번 같은 함수에 대해서 찾아보는 시간을 줄이고자 이렇게 글로 작성해 봅니다! 이번 "농협경제지주" 코딩테스트를 준비하면서 정리한 함수들을 소개해보려고 합니다:> 개인적으로 필수함수라고 생각하고, 이 함수들만 알고 있다면(기본적인 쿼리문을 작성할 수 있다는 가정 하에...) 프로그래머스 SQL Kit 문제들은 어렵지 않게 풀 수 있을 거라고 생각합니다.당연히 저는 SQL Kit 문제들을 다 풀어봤기에 당당하게 말씀드려봅니다. 그럼 렛츠꼬~1..
[Git] Invalid username or token. Password authentication is not supported for Git operations 오류 해결 방법
·
Developer/Git
Git0. 들어가며 Springboot와 관련된 내용들을 테스트하고, 실험하는 개인 Repository가 있습니다. 대댓글 계층에 대해서 테스트해보고, 새롭게 생성한 파일들을 add -> push 하는 과정에서 발생한 문제에 대해서 글을 작성해보려고 합니다. 그렇게 큰 문제는 아니지만, 이 문제를 한 3~4번 경험했고, 그때마다 매번 구글링을 통해서 해결했는데요. 다음번에도 같은 문제가 발생했을 때, 구글링을 하지 않아도 스스로 해결하고 싶어 이렇게 정리하게 되었습니다.1. 문제 상황add -> push 하는 과정에서 발생한 오류 내용은 다음과 같습니다.Username for 'https://github.com': bumnotePassword for 'https://bumnote@github.com':r..
[SpringBoot] @Value 어노테이션에 대해서
·
Developer/SpringBoot
SpringBoot0. 들어가며 최근 SSAFY 자율 프로젝트를 하다가 남은 GMS(Gateway Management Service) 토큰을 활용하기 위해서 WebClient 비동기 방식으로 직접 Open AI를 연결하여 AI 기능을 수행하는 Client를 구현한 경험이 있습니다. 클라이언트를 직접 구현하던 중, 분명 설정 파일에 값은 잘 들어가 있는데 WebClient의 "GMS_BASE_URL"이 null로 설정되는 이상한 문제를 겪었습니다. 오류 내용은 다음과 같았습니다. 2025-12-05T19:37:33.398+09:00 ERROR 80129 --- [spots] [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service(..