JPA
[CANCER-FINE] 팩토리 메서드 패턴을 활용해 탄탄한 Entity 구성하는 방법
1. 배경JPA를 사용하여 엔티티를 작성할 때 우리는 보통 정형화된 방식으로 작성합니다. 예를 들어 아래와 같은 형태가 일반적입니다.@Entity@Table( name = "board", indexes = [Index(name = "idx_fts", columnList = "title, content", unique = false)]) class Board( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long? = null @Column(nullable = false) var title: String, @Column(columnDefinition = "TEXT", nullabl..

테스트코드 내 StackOverflow 발생 원인과 해결 과정
1. 문제 발생서비스 레이어의 테스트 코드를 작성하고 실행했을 때, 예상치 못한 StackOverflowError가 발생했습니다.테스트 코드는 다음과 같았습니다.@ExtendWith(MockitoExtension::class)class BoardServiceTest { @Mock private lateinit var boardRepository: BoardRepository @Mock private lateinit var userRepository: UserRepository @Mock private lateinit var chatGptService: ChatGptService @Mock private lateinit var sessionUtil: Sessio..

Boolean true == "true"가 가능할까요?
최근 제출을 목적으로 풀스택으로 웹 시스템을 개발했다. 그렇게 제출 2시간 전, 마지막 테스트를 하고 있던 와중, 어마어마한(?) 버그를 발견하게 되었다...... 바로 체크박스 check / uncheck가 ajax로 유지되지 않는다는 것...!원래는 잘 동작했던 기능이었기에, 도대체 뭐가 문제지 하고 식은땀이 주르르르르르르륵 났던 것 같다...결과적으론 버그를 찾아서 해결했지만,,정말 식겁한 순간이었던 것 같다...ㅠㅠㅠㅠㅠ 다시는 이런 문제를 일으키지 않기 위해 블로그에 가볍게 정리해보려고 한다. 1. 배경구현하고자한 내용을 간단히 설명하자면, 위 사진처럼 체크 박스 이벤트에 의해 DB에 체크여부를 저장하는 로직을 구현해야 했었다.체크를 클릭하면, DB에 is_checked 칼럼이 true, unc..
![[Gasip Project] 왜 Column Name이 중복이라고 뜨죠? _ DuplicateMappingException](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQzii3%2FbtszJHM3iYh%2F6kks1pixViKAax4ll1Ri01%2Fimg.png)
[Gasip Project] 왜 Column Name이 중복이라고 뜨죠? _ DuplicateMappingException
오늘도 어김없이 찾아온 Error 메시지.(그만) 자세히 읽어보니 아래 친절히 알려주는 에러 메시지님. Failed to initialize JPA EntityManagerFactory: Table [prof] contains physical column name [major_id] referred to by multiple logical column names: [major_ID], [majorId] 예? 아니 제가 뭘요...? 제가 한 설정이라곤 1. 테이블에 맞게 엔티티 클래스 생성 2. Major 테이블 : Prof(프로페서) 테이블 = 1 : 1 매핑 Prof 테이블이 major_ID를 FK로 갖고 있으므로, @OneToOne&@JoinColumn을 prof 테이블에 달아줬다. 난 잘못한게 없는..

Lock & JPA Lock..중간에 겐세이 놓으시면 안됩니다.
아무것도 모르는 날 위해 Lock과 JPA Lock에 대해 공부해보자. (그 전에 트랜잭션부터 알아보자) 트랜잭션이란, DB 상태를 변환시키는 하나의 논리적인 기능을 수행하는 작업 단위로, 하나의 트랜잭션은 구분될 수 없다. 이처럼 트랜잭션의 가장 큰 특징은 작업의 원자성을 보장하는 것이다. LOCK 1. Lock이란? (what) Lock이란, 트랜잭션 처리의 순차성(즉, 데이터 일관성)을 보장하기 위한 매커니즘. 결국 LOCK도 다양한 트랜잭션 격리 수준의 일부이다. 즉, 사용자 A가 Data에 접근 할 때 데이터에 Lock을 걸어 나머지 사용자들이 이 데이터에 접근하지 못하도록 하는 것. 2. 그러면 Lock이 왜 필요해?? (why?) [배경] 우리는 어플리케이션을 사용하다 보면 Database에..