HoonK의 개발개발

낙관적 락, 비관적 락, 분산 락: 언제 무엇을 사용해야 할까

개요 프로젝트에서 동시성 문제를 해결하기 위해 낙관적 락을 적용한 적이 있었다. 하지만 서비스가 확장되면서 단일 서버 환경에서 멀티 서버 환경으로 전환까지 고려해야 했고, 기존의 락 전략만으로는 충분하지 않았다. 이때 비관적 락과 분산 락이라는 개념을 접하게 되었고, 각 락의 특징과 적절한 사용 시나리오에 대해 정리해보고자 한다. 락(Lock)이란...

OptimisticLockingFailureException: 낙관적 락은 어떻게 발생하는가?

개요 프로젝트를 진행하면서 OptimisticLockingFailureException이 발생했을 때, 이를 처리하는 방법만 알고 있었다. 하지만 “왜 발생하는가?”, “어떤 흐름으로 발생하는가?”에 대한 궁금증이 생겼고, 이를 해결하기 위해 낙관적 락의 동작 원리를 깊이 있게 파헤쳐보았다. 낙관적 락(Optimistic Lock)이란? 낙관적 ...

코틀린 언어를 공부하며: 주요 차이점과 코틀린의 장점

개요 백엔드 개발자로 전향하면서 자바를 시작했다. 약 6~7개월 동안 같이 자바 공부하던 멤버와 함께 Kotlin in Action 책 스터디를 하면서 자바와 같은 JVM 기반 언어임에도 불구하고 많은 차이점이 있어서 한 편으로는 놀라웠고 재밌었다. 코틀린 공부를 하며 느낀 코틀린의 주요 차이점과 코틀린이 제공하는 장점들을 살펴보며 해당 글을 작성했...

[이코테/JAVA] 이코테 - 음료수 얼려 먹기

음료수 얼려먹기 문제 N X M 크기의 얼음들이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램을 작성하시오. 다음의 4 X 5 얼음...

[이코테/JAVA] 이코테 - 문자열 재정렬

문자열 재정렬 문제 알파벳 대문자와 숫자(0~9)로만 구성된 문자열이 입력으로 주어집니다. 이때 모든 알파벳을 오름차순으로 정렬하여 이어서 출력한 뒤에, 그 뒤에 모든 숫자를 더한 값을 이어서 출력합니다. 예를 들어 K1KA5CB7이라는 값이 들어오면 ABCKK13을 출력합니다. 풀이 해당 문자열을 반복문을 사용하여 알파벳과 숫...

[이코테/JAVA] 이코테 - 왕실의 나이트

왕실의 나이트 문제 행복 왕국의 왕실 정원은 체스판과 같은 8x8 좌표 평면이다. 왕실 정원의 특정한 한 칸에 나이트가 서 있다. 나이트는 매우 충성스러운 신하로서 매일 무술을 연마한다. 나이트는 말을 타고 있기 때문에 이동할 때는 L자 형태로만 이동할 수 있으며, 정원 밖으로는 나갈 수 없다. 나이트는 특정한 위치에서 다음과 같은 2가지 경우로 ...

[29CM 클론코딩 프로젝트] 트러블슈팅-1

쇼핑몰 클론코딩 프로젝트 트러블슈팅 29CM 쇼핑몰을 클론코딩하면서 많은 트러블슈팅이 있었다. 주문을 구현을 하면서 다음과 같은 문제가 발생하였다. 상품 주문 문제 장바구니에서 상품을 선택하고 주문 선택하여 결제 페이지에 진입한 후 장바구니 창에서 수량을 고의적으로 수량을 늘려 저장을 하게 되면, 결제 페이지에서 가격 정보가 업데이트되...

[29CM 클론코딩 프로젝트] 코드 리팩토링

코드 리팩토링 자바를 공부하고 첫 프로젝트를 마무리하였다. 29CM 쇼핑몰 클론 프로젝트를 하면서 장바구니와 주문(결제 포함) 역할을 맡아 진행하였다. 배경 프로젝트를 마무리한 후 코드를 다시 보니 단일 책임 원칙을 무시하고 개발을 진행한 것을 발견하였다. 그래서 클래스를 분리하고 중복 코드를 제거하는 리팩토링 작업을 진행하였다. 리팩토링 전 ...