March 14, 2024
저번 글에서 살펴본 건 데드락 문제였다. 락에 대한 더 자세한 내용은 저번 글을 한 번 읽고 오면 좋다. 이번에 찾은 문제는 race condition 문제이다. 프로젝트에 횟수를 세는 속성이 많다. 먼저 프로젝트를 간단히 설명하자면 작성자는 게시글로 을 만들고 투표할 수 있는 두 가지 선택지를 만든다. 그리고 다른 사용자들은 토픽에 투표, 댓글을 달 수…
March 13, 2024
아래 환경 기반 내용입니다. MySQL 8.0.33 Storage Engine: InnoDB (default) Transaction Isolation Level: REPEATABLE READ (default) Spring Data JPA 3.1 Hibernate 6.2 프로젝트를 개발하다가 갑자기 데드락을 만나게 되면서, 프로젝트의 데드락이나 race c…
March 01, 2024
최근 프로젝트 코드를 작성하면서, 일대일 단방향 매핑을 할 필요가 있었다. 아직 개발 단계라 Hibernate가 만들어주는 DDL을 사용하고 있었는데, 사용 시 외래키 제약사항을 자동으로 걸어주는걸 확인할 수 있었다. 예를 들어 아래처럼 과 엔티티가 일대일 관계로 있다고 해보자. 외래키 가 테이블에 포함될 것이다. 그리고 생성되는 DDL을 보면 …
February 28, 2024
과 에 대한 걸 살펴보기 전에 먼저 배경 지식을 잠깐 알아보자. JPA에 관한 책에서 엔티티의 NOT NULL 컬럼을 구현하는 세 가지 방법으로, 어노테이션 어노테이션 어노테이션 위 방법들을 소개하면서 을 권장했다. 그 이유는 무엇일까? - Java(Jakarta) Bean Validation 우선 은 JPA 명세에 포함된 어노테이션은 아니고, J…
December 15, 2023
개발하고 있는 프로젝트에서 문자열의 글자수를 셀 때, 이모지는 글자수를 2로 세달라는 요구사항이 있다. 이모지가 일반 한글, 영어 같은 문자보다 좀 더 공간을 차지하기 때문에 디자인적 이유다. 그럼 이걸 자바에서 어떻게 처리할 수 있을까? Grapheme Clusters 우선 이 요구사항이 오기 전에, 이모지든 어떤 문자든 우리가 인식할 수 있는 글자수로…
October 03, 2023
저번주 금요일로 12주간 진행한 인턴을 끝마치게 되었다. 생각지도 못했던 곳에서, 좋은 사람들과 인턴을 하게 되어 즐거웠고, 정말로 인생의 터닝포인트가 될 듯 하다. 그 전까지는 국내 IT 기업말고는 다른 선택지를 생각하지 않았다. 이 인턴 경험 덕분에 시야를 넓힐 수 있었다. 또 기술 스택이나 분야에 대해 좀 더 자유롭게 생각하게 되었다. 너무 재밌었고…
October 02, 2023
Entity 구조 현재 프로젝트의 entity 구조는 아래와 같다. 를 상속받아 현재는 만 있지만, 요구사항 상 후에 를 상속하는 다른 클래스들도 생길 가능성이 있어 그를 고려한 설계를 했다. 문제는, 이를 클라이언트의 요청을 어떻게 받을 지였다. 위 choices의 값으로 여러 타입이 올 수 있기 때문이다. 그 전에는 항상 정해진 타입의 고정 형태로만 …
March 12, 2023
읽게 된 동기 처음으로 프로젝트에서 테스트 코드를 작성해보면서 관련 책을 읽으려고 찾아봤다. 그 중에서 이 책이 제목은 TDD에 관한 제목이지만, 목차를 봤을 때 꼭 TDD가 아니더라도 테스트 코드 작성을 처음 해보려는 사람들이 읽기에 좋아 보였다. (그리고 실제로 그렇다) TDD도 역시 궁금했고, 테스트 코드에 대한 기초 내용도 알고 싶어서 읽게 되었다…
February 13, 2023
느낀 점 학교다닐 때 안드로이드 수업을 못들었어서 코틀린을 배운 적이 없었다. 그런데 요즘 코틀린 + 스프링을 많이 한다고 하길래 궁금했다. 그래서 문법을 조금만 읽어보고 나머지는 나중에 읽으려고 이 책을 도서관에서 빌렸는데... 그냥 궁금해서 끝까지 다 읽었다. 예제 코드는 웬만하면 다 따라하면서 읽었다. 좀 뒤쪽으로 갈 수록 복잡해지는 게 있는 데 한…
February 05, 2023
저번 글에서 Exception의 기본 개념을 알아봤으니 어떻게 하면 잘 활용할 수 있을 지 알아보자. 를 이용하자 자바 라이브러리에는 를 호출해 직접 닫아줘야 하는 자원이 많다. , , 등 자원이 닫힘을 보장하기 위해 try-finally를 많이 사용했다. 블럭을 사용하면 try-catch 문과 함께 예외의 발생여부에 상관없이 실행되어야할 코드를 포함…