
실험일지 1 - JPA (양방향 연관관계, mappedBy, JoinColumn, ToString)
2024. 1. 24. 16:55
실험실
JPA와 연관관계의 특징에 대해서는. 책과 강의, 그리고 프로젝트를통해서 많이 공부할 수 있었다. 하지만, 모두 정답만, 모두 알려진 방법만 따라서 그 형식식대로만 코드를 작성하지 않았나 싶은 생각이 들었다. 그래서 틀린 내용을 보아도 왜 틀린건지 그 이유를 가져오는 능력이 부족한 것 같아 그런 노력의 일환으로 실험일지를 시작하게 되었다. 지속적으로 궁금한 내용이 생길 때마다 테스트해보는 식으로 글이 업데이트 될 것 같다. 첫 실험일지로는 연관관계의 주인이 뒤바뀐 경우를 생각해보는 연습을 해보려고 한다. 양방향 연관관계 양방향 연관관계의 경우 항상 말하는 내용이 있다. @ManyToOne, @OneToMany 로 이루어져 있고, 단방향인 관계가 2개로 구성되어 있음 객체 관계에서는 항상 이 점을 유의해야..

[스프링 입문을 위한 자바 객체지향의 원리와 이해] 스터디 회고
2023. 7. 17. 21:46
기타
기존의 내가 알던 자바 지금까지 자바에 대한 공부는 자바의 정석, 실습과 프로젝트, 그리고 코딩테스트 준비가 전부였다.. 파이썬으로 공부를 했왔을 때는 크게 공부를 할 부분이 없었다. 파이썬은 데이터 분석을 공부하면서 자주 사용했다. 통계적 지식이나, 다양한 분석 기법을 사용하기 위해 라이브러리 사용에 집중하는 시간이 많아, 오류가 발생하지 않는 이상 언어에 그렇게 생각을 들일 필요가 없었다. 하지만 자바를 공부해보면서 이런 기존의 생각들을 바꾸는 데에 시간이 많이 걸렸다. 참조 형식, 객체에 대한 이해, 언어가 어떻게 동작하는 지 운영체제에 대한 학습 등 폭넓게 언어를 바라보고 이해해야 한다는 것을 공부하면서 알게 되었다. 그리고 그러한 이해뿐만 아니라 작동하는 방식을 공부하고 자유롭게 사용할 수 있어..
상속 관계 매핑을 넘어..
2023. 3. 24. 14:35
Spring
고급 매핑 전략으로 책에서 소개가 될 만큼 상속관계는 관계형 데이터베이스에서 사용하면 이점이 많은 전략이다. 하지만, 어떤 부분에서는 상속관계도 부족한 점이 없지않아 있다고 생각한다. 이는 뒤에서 설명해보려고 한다! 우선, 상속 관계 매핑 전략에 대해 조금 알아본 이후 내가 채택한 방법을 생각해보자. 관계형 DB는 원래 상속이라는 개념이 없다. 하지만 슈퍼타입과 서브타입 관계라는 모델링 개념이 있어 이를 사용한다. 그래서 ORM에서는 객체의 상속 구조와 데이터베이스의 슈퍼타입 서브타입 관계를 매핑하는 것을 상속 관계 매핑라고 한다. 상속 관계는 대표적으로 3가지 전략이 있다. 간략이 요점들만 설명하고 넘어가겠다 조인전략 엔티티 각각을 모두 테이블로 만들고 자식이 부모 테이블의 기본 키를 받아 사용하는 전..

파이썬 코딩테스트 팁
2023. 3. 23. 10:09
Algorithm
입력 받기 import sys input = sys.stdin.readline 2차원 배열 입력 [list(map(int,input())) for _ in range(n)] 출력 print(len(ans),*ans,sep='\n') : 1개씩 출력 ''".join(list) : 모두 붙여서 출력, 시간복잡도 n 리스트 내에서 앞뒤로 비교해야 하는 경우 변수를 만들어 사용하기 or zip 활용하기 (슬라이싱 곁들임) for문 활용법 두개의 값 출력 L = [[1,2],[3,4],[5,6],[7,8]] for i,j in L: 문자열을 돌리는 for문에서 중간에 문자열을 편집해버리면(ex : pop) 문자열이 변경되며 out of range가 나올 수 있기 때문에 유의해야 한다. enumerate 인덱스와 ..

JPA 영속성 컨텍스트와 엔티티 생명주기
2023. 3. 6. 14:49
Spring
JPA 영속성 컨텍스트(Persistance Context) 영속성 컨텍스트는 인스턴스로 존재하는 엔티티를 관리하고 DB에 접근하는 논리적인 영역을 의미한다. 여기서 주의해야할 점은, DB에 내용이 바로 저장되는 게 아니라 저장될 준비를 하는 곳이다! 영속성 컨텍스트는 엔티티를 관리하고 필요에 따라 DB의 데이터를 저장, 조회, 수정, 삭제할 수 있다. 이를 담당하는 객체 EntityManager 엔티티 매니저(Entity Manager) 엔티티 매니저는 영속성 컨택스트에서 엔티티를 관리한다. JPA에서 제공하는 인터페이스로 스프링 빈으로 등록되어 있다. 엔티티 캐시를 가지고 있다. 영속성 컨텍스트의 영역 1차 캐시 저장소 영속성 컨텍스트가 관리하는 엔티티 정보 보관소, 이 보관소에 들어 있는 것이 '영..
[프로그래머스] Lv.2 n진수 게임
2023. 2. 10. 14:50
Algorithm
문제 이해 : 6분 문제 풀이 : 25분 def solution(n, t, m, p): change = '' for i in range(t*m): change += str(jinsu(i,n)) return change[p-1:t*m:m] def jinsu(num, jin): rev_base = '' if num == 0: return 0 while num > 0: num, mod = divmod(num, jin) if jin > 10 and 10
[프로그래머스] Lv.2 압축
2023. 2. 9. 13:13
Algorithm
문제 이해 : 4분 + 4분 문제 풀이 : 45분(실패) 틀린 풀이 def solution(msg): d = {} for i in range(26): d[chr(i+65)] = i+1 answer = [] tmp = '' for i in range(len(msg)): tmp += msg[i] while True: for j in msg[i+1:]: print(tmp) if tmp in d: if d[tmp] in answer: tmp += j else: # yes answer.append(d[tmp]) tmp += j else: # no d[tmp] = len(d)+1 tmp = '' break break print(d) return answer 생각한 과정 1. 문자가 하나인 경우는 무조건 딕셔너리에 ..
[프로그래머스] Lv.2 k진수에서 소수 구하기
2023. 2. 9. 12:59
Algorithm
문제 이해 : 4분 문제 풀이 : 20분 생각한 과정 1. k진수로 만들어주는 함수 제작 2. 소수를 판정해주는 함수 제작 3. 0을 구간으로 나누어줘야 한다. 생각대로 되었던 풀이었다! 앞선 프로그래머스 튜플 오답노트를 바로 써먹을 수 있어 너무 좋았다 ㅎㅎ import math def solution(n, k): n_jin = jinsu(n,k) answer = 0 tmp_list = [] for i in n_jin: if i != '1' and i != '': tmp_list.append(i) for i in tmp_list: if is_prime(i): answer += 1 return answer def jinsu(n, k): rev_base = '' while n > 0: n, mod = di..