전체 글 24

[JPA] JPA를 제대로 이해하기 위한 영속성 컨텍스트 심층 분석 (flush, merge)

1. 영속성 컨텍스트의 정의 및 역할** 영속성 컨텍스트란? 영속성 컨텍스트란, 엔티티를 영구 저장하는 환경을 뜻한다. JPA에서는 데이터베이스와의 작업을 처리하기 위해서 엔티티 매니저(Entity Manager)를 사용하는데, 이 엔티티 매니저가 관리하는 범위가 바로 영속성 컨텍스트이다. 엔티티 매니저는 엔티티가 영속성 컨텍스트 환경에 저장되고 나면, JPA는 이 엔티티의 생명주기를 관리한다. 엔티티는 데이터베이스에 저장될 때 항상 ID 값으로 구분되어 저장하는데, JPA는 이 ID값을 사용해서 엔티티의 동일성을  보장한다. 즉 엔티티를 여러 번 조회하더라도, ID값이 같다면 해당 엔티티들은 모두 동일한 주소를 가지는 인스턴스가 된다. 이 매커니즘은 데이터의 일관성을 유지하는데 중요한 역할을 한다.  ..

Spring 2024.11.12

[JPA] Cascade.REMOVE와 orphanRemoval의 차이점

먼저 고아 객체가 뭔지 알아보자. 고아 객체고아 객체란, 특정 객체가 메모리 상에 존재하지만, 어떤 참조 변수나 포인터에서도 접근할 수 없는 상태가 되어 더 이상 유용하게 사용할 수 없는 객체를 말한다.예를 들어, 리뷰를 달 수 있는 사이트에서 한 회원이 리뷰를 작성했다고 가정하자. 그리고 만약 회원이 얼마 지나지 않아 그 사이트에서 탈퇴해 없어진 상태가 됐을 때, 그 회원이 작성했었던 리뷰는 더이상 접근할 수 없는 상태가 되는데, 이런 경우를 고아 객체라고 한다.  @Entity@Getter@NoArgsConstructorpublic class Team { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private S..

Spring 2024.11.09

[JPA] JPA Entity를 팩토리 메서드로 생성하는 이유

최근에 JPA를 사용해서 회원가입 기능을 포함한 웹사이트를 개발해보았다. 오늘은 내가 받았던 피드백을 바탕으로, 어떻게 정적 팩토리 메서드가 코드를 리팩토링 해주는지에 대해 알아보려고 한다. 먼저 정적 팩토리 메서드(static factory method)란 인스턴스 생성을 위한 정적 메서드를 뜻하는데, 기본적으로 new 키워드를 사용해서 직접 객체를 생성하는 대신, 클래스 내에 정의된 정적 메서드를 통해 객체의 인스턴스를 반환받는 방식을 의미한다.  한번 예시로 정확하게 어떤 것을 의미하는지 알아보자. 회원가입 기능을 구현하기 위해서 기본적인 코드를 작성했다고 가정하자.Controller에서 사용자 정보를 검증하는 로직을 거쳐서 해당 정보를 Service에 전달해 줬을 것이고, Service 내부에서는..

Spring 2024.10.29

083024 TIL

오늘은 프로젝트 발표날 :) 발표가 어땠냐고 물어볼 때 한마디로 표현하자면... 즐겼다. ㅋㅋ 팀에서 1명만 대표로 발표를 하면 됐어서 발표에 대한 부담감은 전혀 없었지만 그래도 같이 발표를 준비하면서 리허설을 많이 했던게 큰 역할을 했던 거 같았다. 오늘은 프로젝트를 진행하면서 겪었던 어려움과, 그 어려움을 어떻게 해결했는지를 좀 적어보려고 한다. 1. 소통 먼저 이 부트캠프의 본 일정 시작일은 이번주 월요일이었던 만큼 사전캠프때와는 다른 스케쥴, 다른 사람들과 함께 길지 않은 시간, 1주일동안 같이 한 프로젝트를 위해서 협업을 한다는 것 자체가 새로운 경험이었던 것 같다. 사람들마다 아는 지식이 다르고, 적극성의 정도가 다르고, 표현하는 방식이나 물어보는 방법이나 열정이 다 다른 상황에서 마법처럼 소..

082924 TIL

1. 오늘 한 일 (프로젝트: 팀 소개 홈페이지 제작 2) 최종 와이어프레임 수정 내용[헤더] Interaction 연관성 부여, 미구현 기능 삭제[배너] 이미지 수정 + 말풍선 interaction (방명록 페이지로 연결), 팀 소개 글 추가[Main1] 전체 디자인 일관성 유지, 사용자 편의 글 작성(프로필 사진을 클릭해 보세요)[Main2] 질문 Interaction: 클릭 시 상세 답변 표시[Comment] 방명록 페이지 분리 최종 홈페이지    내일은 팀 프로젝트 최종본 - 맞닥뜨렸던 문제와 해결 방안 올리겠습니다.

082824 TIL

1. 오늘 한 일 (프로젝트: 팀 소개 홈페이지 제작)- 팀 회의(프로젝트 중간 점검, 튜터님 피드백 반영 후 수정방향 및 개선사항 토의, 디자인 최적화) 진행- 깃허브 branch 사용으로 팀원별 개발 환경 분리 초기 디자인  튜터님 1차 피드백프로젝트 진행에 맞춰 구체적인 개발 일정 작성하기와이어 프레임에는 최대한 자세하게 모든 기능을 작성하기모든 상호작용들에는 정당한 인과 / 상관관계가 있어야 함예: 버튼을 눌러서 이동한 페이지의 경우, 그 버튼이 가리키는 정보가 반드시 이동한 페이지의 내용과 밀접한 관련이 있어야만 한다. 한 페이지에 모든 정보를 담으려고 하면 Merge 시 코드 충돌이 심하게 일어날 수 있음 팀 회의 개선 사항프로필 사진을 눌렀을 때 각 팀원 블로그 주소로 이동될 수 있도록 링크..

[MySQL] With recursive / With 구문

코딩테스트 문제를 풀어보다가 한번도 만나 보지 못한 예제를 만났다.바로 이 예제였는데, https://school.programmers.co.kr/learn/courses/30/lessons/59413 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 처음에 이 문제를 봤을 때 상당히 쉽다고 생각했었다. 어? 이 문제, 그냥 Date format 사용해서 DateTime에서 시간 값만 빼서 사용하고, 그 값을 기준으로 COUNT 값을 찍으면 되지 않을까? 라고만 생각했는데, 그렇게 풀었더니 오류가 나왔다.SELECT CAST(DATE_FORMAT(DATETIME..

웹개발 A to Z (5) - 웹사이트 배포

오늘은 웹개발 강의의 마지막 주제인 배포를 해보는 날이다! 먼저 4주차 내용때 배운 것들을 복습하는 차원에서 다시 한번 복습해보도록 하자.Firebase라는 서버에 내 데이터를 저장하고, 저장되어 있는 데이터를 하나씩 읽어온 후 html 코드로 치환하여 카드 형태로 나 웹사이트에 출력되게 하는 예제를 다시 학습해보자.그리고 오늘은 추가로 다른 코드 변화 없이, Github Pages로 배포하는 방법만 간단하게 알아보도록 하자.  먼저 지난번에 만들어놨던 영화 소개 홈페이지를 다시 가져와서 작업하자.먼저 Firebase라는 서버를 사용하기 위해서는 세팅 작업이 필요하다. 그 세팅 작업에 필요한 코드는 다음과 같다.   script type="module">    // Firebase SDK 라이브러리 가져..

SQL 실무 기초 (5) - 오류 대처, Pivot Table, 다양한 SQL 심화 문법

벌써 마지막 주차인 5주차..! 이제 어딜 가서도 SQL의 기본은 안다고 말할 수 있을 것 같다.오늘은 바로 본론으로 들어가보자. ===========================먼저 예상치 못한 데이터 결과값이 나오는 상황을 몇가지 살펴보고, 각 상황에 맞춰 대응하는 방법을 알아보자. 1. 조회한 데이터에 아무런 값이 없는 경우 지난번에 조금 다뤄본 내용이긴 하지만, 예를 들어 food_orders라는 테이블의 rating이라는 컬럼 값에 1~5 숫자값이 아닌 'Not Given'이라는 문자열 값이 저장되어 있는 경우가 있다고 하자.  내가 원했던 SQL 출력값은 한식 레스토랑의 평균 평점이었는데, 몇몇 한식당의 평점이 집계가 되지 않은 상황이어서 Not Given 값을 가지고 있었고, AVG 키워드를..