공부한 것을 정리한 글을 Github에 올리고 있습니다. 블로그에 글을 굉장히 오랜만에 쓰는 것 같습니다. 공부한 것을 정리하고 정리한 글을 저장하는 저장소로 블로그에서 Github 저장소로 변경했습니다. https://github.com/hyunzxn/TIL GitHub - hyunzxn/TIL: 공부한 거 기록 공부한 거 기록. Contribute to hyunzxn/TIL development by creating an account on GitHub. github.com 감사합니다. 카테고리 없음 2023.11.13
Querydsl로 Update 쿼리 날렸는데 테스트에 실패하는 경우 - 영속성 컨텍스트와 관련하여 1. 들어가며 간단한 게시판 구현 프로젝트를 하고 있습니다. 이번 포스팅에서 다뤄볼 주제는 게시글에 대한 좋아요 카운트 업데이트에 대한 테스트코드를 작성할 때 제가 만난 에러에 관한 것입니다. 구글링을 이것저것 하다보니 (전 ChatGPT를 한 번도 써보지 않았습니다! 그렇게 좋다고 하던데..구글링이 익숙해서일까요 ㅎㅎ) 이것도 결국 영속성 컨텍스트와 관련한 이슈였습니다. 영속성 컨텍스트는 정말 JPA를 쓸 때 철저하게 알아야 하는 개념인 것 같습니다. 2. 사용된 코드 전체 코드는 제 깃허브에서 확인하실 수 있습니다. 이 포스팅에서는 사용한 코드만 보여드리도록 하겠습니다. [HeartRepositoryImpl] [테스트코드] 테스트코드는 통과된 최종적으로 완성된 상태의 코드입니다. 3. 어떤 이슈가 있.. TIL 2023.03.23
JPA - N+1 문제 JPA를 사용하다보면 꼭 등장하는 문제가 있습니다. 바로 N+1 문제인데요. N+1 문제는 성능과도 밀접한 연관이 있기 때문에 주의해야되는 문제입니다. 이번 포스팅에서는 N+1 문제에 대해 한 번 정리해보고자 합니다. N+1 문제란? N+1 문제를 간단하게 정리해보자면 원래 진짜 목적이 되는 쿼리를 날릴 때 외부효과의 성격으로 원치 않던 쿼리가 추가적으로 날아가는 것을 의미합니다. 다음은 예시 코드입니다. 이해를 위해 FetchType을 EAGER로 하였습니다. 실무에서는 EAGER 사용은 자제하고 LAZY로 사용하는 것이 좋습니다. 예제코드이기 때문에 Setter를 열어줬습니다. 실무에서는 Setter를 자제하는 것이 좋습니다. [Member Entity 코드] @Entity @Setter @Gette.. TIL 2023.02.27
컨텍스트 스위칭 - 컨텍스트 스위칭이란? CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 것 - 그렇다면 컨텍스트란? 프로세스나 스레드의 상태 -> CPU, 메모리 등등 - 컨텍스트 스위칭이 왜 필요한가? 여러 프로세스나 스레드를 동시에 실행시키기 위해서 필요하다. - 컨텍스트 스위칭은 언제 발생하는가? 1. 주어진 타임슬라이스(time slice)를 다 사용했을 경우 2. IO 작업을 해야되는 경우 3. 다른 프로세스나 스레드에서 사용하고 있는 리소스를 기다려야 하는 경우 등등 - 컨텍스트 스위칭을 총괄하는 역할은 누가 하는가? (누구에 의해 실행되는가?) OS의 커널이 담당한다. -> 커널이란? 각종 리소스를 관리/감독하는 역할 - 컨텍스트 스위칭 종류와 공통점 & 차이점 1. 다른 프.. CS 공부/운영체제 2023.02.23
이진탐색트리(Binary Search Tree) 1. 개념 모든 노드의 왼쪽 서브 트리는 해당 노드의 값보다 작고 오른쪽 서브 트리는 해당 노드의 값보다 크다. 2. 순회 순회란? 이진탐색트리에 있는 모든 노드들을 한 번씩 방문하는 것. 이진탐색트리에서는 주로 중위선회(Inorder Traversal)를 사용한다. - 중위선회 루트 노드부터 시작해서 일단은 왼쪽 노드를 따라서 간다. 더 이상 왼쪽 노드가 존재하지 않는 시점의 노드까지 간 후 해당 노드를 출력한다. 그리고 그 노드의 오른쪽 노드로 옮겨간다. 만약 이 때 옮겨갈 오른쪽 노드가 존재하지 않는다면 한 단계 위 레벨의 노드로 움직인다. 그리고 맨 처음 한 것과 같이 왼쪽에 있는 맨 마지막 노드로 옮겨간다. 그리고 또 오른쪽 노드로 움직인다. 이것을 계속해서 반복한다. 3. 노드의 후임자(Suc.. CS 공부/자료구조 2023.02.13
트리(Tree), 이진트리(Binary Tree) 1. 트리(Tree) 개념 - 노드들의 집합 - 노드: 값과 각 노드들을 가리키는 레퍼런스로 구성되어 있음 트리 관련 용어 1. 간선(edge) - 노드와 노드를 연결하는 선 - 구현 관점에서는 레퍼런스를 의미 2. 루트 노드 - 최상단에 위차한 노드 3. 자녀 노드 - 어떤 노드 밑에 연결된 노드 - 모든 노드는 0개 이상의 자녀 노드를 가진다. 4. 부모 노드 - 자녀 노드를 가지는 노드 5. 형제 노드 - 같은 부모 노드를 가지는 노드 6. 조상 노드 - 부모 노드를 따라 루트 노드까지 올라가며 만나는 모든 노드 7. 자손 노드 - 자녀 노드를 따라 내려가며 만나는 모든 노드 8. 내부 노드 - 자녀 노드를 가지는 노드 9. 외부 노드(단말 노드, 리프 노드) - 자녀 노드를 가지지 않는 노드 10.. CS 공부/자료구조 2023.02.07
Set과 HashSet 1. Set 특징 - 순서를 보장하지 않는다. - 중복을 허용하지 않는다. - 데이터 조회가 List보다 빠르다. 언제쓰는 것이 좋은가? - 중복을 허용하지 않을 때 - 데이터 존재 여부를 확인할 때 구현체 - Hash Set - Linked Hash Set - Tree Set 2. Hash Set 특징 - Hash Table을 사용 - key를 통해 바로 데이터에 접근하는 것이 가능하기 때문에 데이터 조회 속도가 빠르다. Java: Hash Set - 자바에서 Hash Set은 내부적으로 Hash Map을 이용해서 구현되어있다. - Set에 넣고 싶은 데이터를 key에 넣고 value 자리에는 임의의 dummy 데이터를 넣는다. - Set에 데이터가 있는지 없는지를 확인하기 위해서는 containsKe.. CS 공부/자료구조 2023.02.07
맵(map)과 해시 테이블(hash table) 1. Map key-value 쌍을 저장하는 ADT key는 중복 불가, value는 중복 가능 언제 주로 사용하는가 1대1로 대응되는 정보를 저장할 때 ex) 이름 - 전화번호 특정 정보에 대한 카운팅을 할 때 ex) 이름 - 득표 수 구현체 Hash Table Tree 기반 자료구조 2. Hash Table (Hash Map) 배열과 해시 함수를 이용해서 Map을 구현한 자료구조 해시 함수란? 임의의 크기를 가지는 type의 데이터를 고정된 크기를 가지는 type의 데이터로 변환하는 함수 Hash Table에서 해시 함수는 주로 임의의 데이터를 정수로 변환하는 역할을 담당함 특정 데이터를 해시 함수에 넣어서 나온 정수값을 '해시(hash)'라고 부른다. 데이터에 접근하는 시간이 상수 시간으로 매우 빠.. CS 공부/자료구조 2023.02.06
Spring Security & JWT Tutorial 1. 들어가며 어떤 서비스가 됐든 회원가입, 로그인 기능은 필수라고 할 수 있을텐데요. 흔히 말하는 인증, 인가 개념이 이 때 사용되는데 이것을 하는 방법은 다양합니다. 그 중 Spring Security 를 사용하면 인증, 인가 뿐 아니라 다양한 보안 조치를 Spring으로 만든 애플리케이션에 적용할 수 있습니다. 개인적으로 Spring Security가 많이 어렵게 느껴지긴 했습니다. 설정할 것들도 많고 알아야 할 개념들도 많았기 때문입니다. 게다가 자료도 스프링 MVC, JPA에 비하여 너무 적었습니다 ㅠㅠ (스프링 시큐리티 제대로 강의를 찍으면 부자가 될 지도..! 실력자 분들 츄라이 츄라이) 이번 포스팅에서는 여전히 많이 부족하지만 Spring Security와 JWT를 사용하여 사용자 인증을 .. TIL 2023.02.01
JPA, H2 DB - Entity 테이블 자동 생성 안 되는 문제 1. 들어가며 JPA를 이용하면 ddl-auto 옵션에 따라 데이터베이스에 테이블을 자동으로 생성할 수가 있습니다. 이번 포스팅에서는 H2 데이터베이스를 이용하며 테이블 자동 생성과 관련하여 제가 만난 에러에 대해 정리해보겠습니다. 2. org.hibernate.tool.schema.spi.CommandAcceptanceException 우선 제가 만든 엔티티는 다음과 같습니다. @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Str.. Error 지식 2023.01.27