전체 글 (26) 썸네일형 리스트형 동시성 문제 해결하기 (2) - 분산 락 분산 락(Distributed Lock) 이란?분산 락은 여러 대의 컴퓨터나 서버가 동시에 같은 자원을 사용하려고 할 때, 서로 충돌하지 않고 차례로 사용할 수 있게 해주는 방법이다. 분산 락을 가진 요청만 공유 자원에 접근할 수 있고, 여러 요청들 중 동시간에 단 한 요청만 락을 획득할 수 있도록 보장하면 동시성 문제를 해결할 수 있다.분산 락을 구현하기 위해서는 ‘동시간에 한 요청만 락을 획득하도록 보장한다.’를 지키면 된다. 일반적으로 Redis, Zookeeper 등의 분산 락의 구현에 주로 사용되는 외부 인프라를 사용하거나, 기존에 사용하던 데이터베이스에서 구현이 가능하다면 데이터베이스를 활용하기도 한다. 이번 글에서는 MySQL과 Redis를 활용하는 방법에 대해서 알아보았다. 예제 코드는 1.. 동시성 문제 해결하기 (1) - Java 동시성 문제란?동시성 문제란 여러 사용자들이 동시에 동일한 공유 자원에 대한 요청을 할 때 발생하는 문제들을 말한다. 각 요청들이 마음대로 공유 자원에 접근하도록 둔다면, 어떤 요청은 쥐도새도 모르게 사라질 수도 있고 자원이 존재해서는 안 되는 상태가 될 수도 있다.야구를 예시로 들어보자. 타자와 공이 거의 동시에 1루에 도착한 경합 상황이다. 이 때 심판이 “타자가 1루 베이스에 닿았으니 살았고, 동시에 공도 1루수가 잡았으니 1아웃으로 친다.”라는 판정을 내렸다. 황희 정승의 “네 말도 맞고 네 말도 맞다.”도 아니고 말이 안 되는 상황이다. 심판은 반드시 둘 중 누가 빨랐는지를 판단하여 1아웃 판정을 하든, 무사 주자 1루 판정을 해야만 한다. 즉, 1루라는 공유 자원에 타자와 공이 동시에 요청을 .. [우아한 테크코스] 로드맵 검색 기능 개선기 우테코에서 진행했던 프로젝트에서 검색 기능을 개선하는 일을 맡았던 적이 있다. 검색 속도가 느려서 성능을 개선하는 것이 아니라, 사용자의 편의성을 위한 개선이었다. 기존 검색 기능은 검색어가 포함된 경우를 최신순으로 반환하고 있었는데 검색어와 좀 더 유사한 결과를 먼저 반환하도록 개선하면 어떻겠느냐는 안건이었다. 확실히 사용자에게 편의성을 더 제공해줄 수 있고, 개인적으로도 도전적인 주제인 거 같아서 내가 하겠다고 했었다. 결론적으로는 오랜 시간을 쓰고도 기능개선에 실패했지만 그 과정이 의미가 있었기에 글을 써 보려 한다. 무엇보다 의미 있는 경험이라고 생각하면서도 다른 사람들에게 전달할 때 제대로 설명하지 못 하는 경우가 너무 많아서 한 번 정리하는 게 낫겠다 싶기도 했다.우선 그 당시에 떠올렸었던 방.. [Java] Garbage Collection & Garbage Collector Java에서는 개발자가 따로 메모리 관리에 신경써도 되지 않는다는 장점은 많이들 알고 있다. 이것이 가능한 이유는 JVM의 Garbage Collector가 Garbage Collection(GC)이라는 기법으로 알아서 메모리 관리를 해주기 때문이다. 이 글에서는 GC에 대한 개념과 JVM에서 GC를 구현한 다양한 모델들에 대해 정리해보았다. 메모리 관리를 하지 않아도 되는 것이 장점이지만 GC와 JVM의 특성을 잘 알면 어떻게 해야 더 메모리를 잘 관리할 수 있는지, 어떻게 GC 튜닝을 할지 쉽게 이해할 수 있다. Garbage Collection이란?GC는 메모리 관리 기법 중 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기법이다. 필요없게 된 영역이란 더 .. [Java] JVM이란? 자바는 운영체제에 독립적으로 실행이 가능한 고수준의 객체지향 프로그래밍 언어입니다. 자바의 아버지인 제임스 고슬링에 따르면 다음과 같은 특징을 지닙니다.간단하다 (Simple)객체 지향적이다 (Object Oriented)분산처리를 지원한다 (Distributed)멀티쓰레드를 지원한다 (Multithreaded)동적 로딩을 지원한다 (Dynamic)실행환경에 대해 중립적이다 (Architecture neutral)이식성이 높다 (Portable)고성능 (High Performance)신뢰성이 높다 (Robust)보안성을 갖는다 (Secure)이 특징들 중 많은 부분이 JVM(Java Virtual Machine, 가바 가상 머신)으로 인해 가능합니다. 이 글에서는 JVM의 구조와 역할에 대해서 정리해보고.. [최종불합] 2024 팀네이버 Tech 신입 공채 후기 2024 팀네이버 Tech 신입 공채에 지원한 경험을 공유하기 위해 후기를 적습니다. 원래 회고도 글쓰기도 적는데 너무 오래 걸려서 매번 계획만 하고 실행에 옮기는 일이 드뭅니다. 하지만 이번 공채를 준비하면서 다른 분들이 남긴 후기들을 여러 번 보며 도움을 받았기에 저도 정보를 찾아볼 다른 분들을 위해 글을 써 봅니다. 각 전형별로 어떻게 준비했는지, 무슨 생각을 하면서 보냈는지 기억나는대로 적겠지만, 전형 방식은 얼마든지 달라질 수 있다고 생각해서 ‘그냥 이 사람은 이렇게 준비했구나’ 하는 정도로만 봐주시면 감사하겠습니다. 2024 팀네이버 Tech 신입 공채 일정접수 기간 : 3.5 ~ 3.18서류 전형 : 3.19 ~ 4.4서류 결과 발표 : 4.9기술역량 인터뷰 : 4.16 ~ 4.26기술역량.. 코끼리끼리 프로젝트 코드 의존성 분리 스토리 진행하고 있는 프로젝트인 코끼리끼리에서 성능 개선의 일환으로 코드에서의 의존성 리팩터링을 진행했다. 프로젝트는 크게 Member, Roadmap, GoalRoom 3개의 도메인으로 구성되어 있는데, 초기 설계 단계에서는 의존성이 어떻게 흐르는지 크게 신경쓰지 않고 구현을 했었다. 그러다 우테코에서 의존성 리팩토링 미션을 진행해보기도 하였고, [우아한테크세미나]에서 조영호님의 우아한테크세미나를 본 뒤 언젠가 코끼리끼리 프로젝트도 의존성 분리를 진행하지 않을까 싶었는데 이번에 하게 되었다. 의존성의 방향은 GoalRoom이 Member와 Roadmap을, Roadmap이 Member를 의존하도록 정했고, 각 큰 도메인을 하나씩 맡아 자신이 생각하는 방식대로 하위 도메인들의 의존성 리팩터링을 진행한 뒤 코드 .. 자바 레벨에서의 동시성 사람들은 컴퓨터를 사용하면서 여러 가지를 동시에 할 수 있는 것을 당연하게 생각한다. 예를 들면 인터넷 쇼핑을 하면서 백그라운드에서는 유튜브를 통해 음악을 들을 수도 있고, 카카오톡을 주고 받는 것처럼 말이다. 컴퓨터는 이런저런 일들을 처리해주는 와중에도 사용자가 마우스를 움직이면 즉시 커서를 이동해주고 클릭에도 반응한다. 이를 가능하게 해주는 소프트웨어를 concurrent software라고 한다. 자바는 만들어질 당시부터 기본적으로 동시성을 지원하도록 설계가 되었다. 이와 관련된 개념들을 소개하기 전에 ‘프로세스’와 ‘스레드’를 먼저 간단히 이해해보자. 프로세스와 스레드 프로세스 프로그램이 실행되는 데 필요한 모든 것들이 저장되어 있는 자료구조 Text, Program Counter and Regi.. 이전 1 2 3 4 다음