전체 글
-
[JPA] PK Mapping개발/Java 2023. 2. 12. 15:39
PK 매핑 @Id 를 통해서 기본키를 매핑한다. 별도의 추가 어노테이션이 없다면 값을 직접 할당해야한다. @GeneratedValue 를 통해서 값을 자동으로 할당해줄 수 있다. 이 어노테이션에서 속성 값으로 strategy 를 설정해줄 수 있다. IDENTITY 전략 GenerationType.IDENTITY 의 경우 DB에 생성을 위임한다. DB INSERT 시점에서 값을 설정한다. 즉, DB에 트랜잭션이 반영된 후에 ID 값을 알 수 있다. 하지만 영속성 컨텍스트에서 이를 관리하기 위해서는 PK 값이 존재해야 한다. 따라서, commit 시점이 아닌 persist 시점에 쿼리를 전달한다. JDBC 내부적으로 INSERT 시점에 반환 값을 확인할 수 있어 SELECT 쿼리가 발생하지는 않는다. CRE..
-
네이밍 컨벤션 정하기스터디 & 프로젝트/Mineme 프로젝트 2023. 2. 10. 23:22
필요성 매 번 프로젝트를 진행하면서 겪은 문제는 "이름 정하기" 였다. 모든 개발자들이 고민하는 문제다. 어떻게 하면 가독성 좋고 깔끔한 방식의 명칭을 정할 수 있을지 고민한다. 여러 번의 팀 프로젝트를 진행했지만 늘 백 엔드 개발을 거의 혼자 진행하다보니 협업의 관점에서 이런 컨벤션을 명확하게 작성한 적이 없었다. 늘 API 명세, DB 스키마 작성 정도 수준에서 마무리 했던 것 같다. 하지만 이번에 새로운 사이드 프로젝트를 진행하면서 백 엔드 개발 협업을 진행하기로 했다. 이제 우리 팀의 네이밍 컨벤션을 정해야 한다. 나의 습관 나도 무작정 네이밍 컨벤션을 쓰지는 않았다. 명칭 작성은 무조건 카멜케이스로 작성했다. 상수명은 대문자와 언더바 만을 사용했다. 하지만 습관에 의지한 상태였다. 주로 MVC ..
-
[Spring Boot] Github OAuth 적용하기스터디 & 프로젝트/Init Cloud 팀 프로젝트 2023. 1. 31. 22:39
Spring Boot를 활용해서 깃허브 앱을 만들 필요가 있었다. 그런데 이 앱을 OAuth App으로 만들어야 하는지, Github App으로 만들어야 하는지 아니면 개인키로 인증 받아 권한만 받아와야하는지 조금 헷갈렸다. 그래서 우선 Github OAuth를 적용하고 후에 인증 방식에 활용하기로 했다. 앱, 클라이언트 ID 및 비밀 값 생성 우선 깃허브 개인 또는 조직 설정에서 개발자 설정을 찾는다. 개발자 설정에서 앱 유형을 선택하고 설정 페이지에서 앱을 생성하자. 나는 각 앱 유형에 대한 이해가 아직 부족해서 우선 깃 허브 앱을 선택했다. 우선 URL 설정이 필요하다. 깃허브 앱이 동작할 URL과 OAuth 요청으로 리디렉션될 콜백 URL을 지정해야 한다. OAuth를 통해 얻은 접근 권한으로 어..
-
[JPA] Persistence Context개발/Java 2023. 1. 14. 00:47
EntityManager 엔티티 매니저 팩토리는 매 요청마다 엔티티 매니저를 생성한다. 엔티티 매니저는 내부적으로 DB 커넥션을 만들어 DB를 이용한다. 영속성 컨텍스트 영속성 컨텍스트는 논리적인 개념이다. 엔티티를 영구적으로 저장하고 객체로 이용할 수 있게 하는 환경. 이를 이용해서 엔티티를 영속성 컨텍스트에 영속적으로 저장한다. J2SE 환경에서 각 엔티티 매니저는 개별적인 영속성 컨텍스트를 가진다. J2EE, 스프링과 같은 컨테이너 환경에서는 여러 엔티티 매니저가 하나의 영속성 컨텍스트를 가진다. 엔티티의 생명주기 비영속 - new , transient 영속성 컨텍스트와 전혀 관계 없는 새로운 상태 최초 객체를 생성한 상태 값을 set() 하였지만 영속성 컨텍스트에 아직 저장하지 않음. 영속 - m..
-
[JPA] JPA개발/Java 2023. 1. 1. 16:47
JPA는 Java Persistence API의 약자로 Java의 ORM 표준이다. 기존의 JDBC와 Java 앱 사이에서 사용되는 API다. 기존의 RDB, SQL과 객체지향적 코드 사이에는 문제점이 있다. RDB 같은 경우 SQL을 통해 DB에 접근하여 데이터를 관리할 수 있다. 하지만 객체지향적 언어에서 사용되는 상속 관계 등을 명확하게 표현할 수 없다. 또, 참조되는 객체 사이에서는 그 이동이 자유로워야 한다. 하지만 RDB를 통해 가져온 데이터에서는 매번 Join을 통해 새롭게 데이터를 추가해야한다. 이런 상황에서 여러 상황에서 쓰이는 쿼리를 매번 작성하는 것이 번거롭기에 JPA가 등장했다. JPA는 지연 로딩, 즉시 로딩을 지원하며 상황에 따라 필요한 객체를 필요 시점에 맞게 불러올 수 있다...