개발 지식
-
프로젝트 생성 시 gradle 오류개발 지식/기타 2023. 11. 30. 16:16
구글링해보니 프로젝트에 세팅된 jdk 버전과 gradle 설정 jdk의 버전이 맞지 않아서 발생한 문제였다 이 부분을 변경해주면 된다. 참고 자료 https://velog.io/@m2nja201/build.gradle-%EC%98%A4%EB%A5%98-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1-%EC%8B%9C-gradle-%EC%98%A4%EB%A5%98-spring-boot-intelliJ [build.gradle 오류] 프로젝트 생성 시 gradle 오류 (spring boot, intelliJ) 1. 🚨 문제 발생 A problem occurred configuring root project 'practice'. > Could not res..
-
환경변수개발 지식/기타 2023. 11. 30. 14:36
환경 변수란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임이다. - 핵심은 환경 변수가 필요한 정보를 손쉽게 접근/처리할 수 있게 해주는 역할을 한다는 점이다. 동작 예시 - 우리가 어떤 언어를 다운받고 환경 변수 PATH를 설정해주는 것도 이와 같이 사용하기 위해서다. 참고 자료 https://gliver.tistory.com/43 환경 변수(PATH)란? 목차 환경 변수란? 환경 변수 PATH 환경 변수란? 환경 변수(Environment Variable)란 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는, 동적인 값들의 모임이다. 프로세스(Process)는 컴퓨터에서 실 gliver.tistory.com
-
맥 터미널에서 심볼릭 링크 만들기개발 지식/기타 2023. 11. 30. 14:05
상황 맥 터미널에서 brew install openjdk@17 명령어로 openjdk 17버전을 다운로드 하였는데 다음과 같은 로그가 떴다. 하나씩 살펴보면 - 방금 다운로드한 openjdk를 시스템이 찾게 하기 위해서는 위의 명령어로 해당 경로에 심볼릭 링크를 생성할 수 있다는 의미이다. 심볼릭 링크: 리눅스에서 다른 파일이나 폴더를 가리키는 파일을 의미한다. - keg-only란 뒤에 나온 설명처럼 /opt/homebrew 경로에 대해 심볼릭 링크 과정이 생략되었다는 뜻이고, 그 이유는 다른 버전으로 대체될 수 있는 버전이기 때문이라는 설명이다. - 여기서 formula는 Homebrew에서 패키지의 설치 및 빌드 정보를 담고 있는 Ruby 스크립트 파일을 의미한다. - 이 버전을 우선적으로 사용하려..
-
[JPA] 영속성 전이(CASCADE)와 고아 객체 정리개발 지식/JPA 2023. 11. 30. 10:27
영속성 전이 시 주의할 점 @OneToMany(mappedBy = "member", cascade = CascadeType.ALL) private List postList = new ArrayList(); - persist를 하는 경우에 영속성 전이를 제대로 동작시키기 위해서는 연관관계 주인쪽 세팅뿐만 아니라 member.getPostList().add(post) 이런 식으로 양방향 세팅을 해야한다. - 영속성 전이의 부모와 자식 관계는 말 그대로 영속성이 전이되는 것만 해당하고 연관관계의 주인은 db에 연관관계가 있는 객체들을 저장할 때 반드시 연관관계를 세팅해야 하는 쪽을 의미하므로 둘은 전혀 다른 개념이다.(연관관계의 주인이 아닌 쪽은 읽기만 가능) CascadeType.REMOVE vs 고아 객체..
-
[JPA] Referential integrity constraint violation개발 지식/JPA 2023. 11. 29. 22:56
- 현재 member가 삭제되면 해당 member의 post들도 삭제가 될 수 있게 CascadeType.REMOVE를 적용해둔 상태이다. - 해당 코드에서 em.flush() 코드를 제거하면 정상작동하는데 delete 쿼리를 확인하고 싶어서 추가하였을 때 Referential integrity constraint violation 에러가 발생하였다. - 참조 무결성 제약 조건이란 참조할 수 없는 외래키 값을 가질 수 없다는 조건이다. 즉, member를 삭제하였더니 post가 참조하고 있는 member가 참조할 수 없는 상황이 되어서 발생한 것 같다. - 혹시 영속성 전이가 일어나지 않은 것 아닐까 하는 생각에 post1이 영속성 컨텍스트에 있는지 확인해봤다. System.out.println(em.g..
-
[JPA] em.merge(entity)는 내부 코드 들여다보기개발 지식/JPA 2023. 11. 29. 11:53
- SimpleJpaRepository의 save() 메서드의 em.merge(entity)는 어떻게 동작하는지 궁금해서 디버깅을 통해 내부 코드를 살펴보자. - 준영속 상태의 엔티티를 save하는 메서드를 실행하고 위의 부분에 브레이크포인트를 걸고 내부로 들어가보자 - 대충 읽어보면 공유된 엔티티 매니저 프록시가 em에 할당되었음을 알 수 있다. (정확한 원리는 다음에!) em.merge(entity)에서 내부로 들어가게 되면 SharedEntityManagerCreator의 private static class인 SharedEntityManagerInvocationHandler의 invoke() 메서드로 이동하게 된다. SharedEntityManagerInvocationHandler의 invoke ..
-
[JPA] JpaRepository 관련 코드 들여다보기개발 지식/JPA 2023. 11. 28. 23:36
- spring data jpa를 이용하여 데이터 엑세스 계층 코드를 작성할 때 보통 다음과 같이 JpaRepository 를 확장하여 인터페이스를 만든다. public interface MemberRepository extends JpaRepository { } - 서비스 계층에서 엔티티를 저장할 때 다음과 같이 save 메서드를 호출한다. memberRepository.save(member); - 위의 save 메서드는 CrudRepository 인터페이스에 있는 메서드로 실제 어떤 구현체의 메서드가 실행되는지 확인하기 위해서는 디버깅 과정이 필요하다. (상속관계: JpaRepository -> PagingAndSortingRepository -> CrudRepository) 테스트 예제 코드 - 해..