본문 바로가기

분류

(54)
h2 DB에서 mysql로 변경하기 h2 DB에서 mysql로 변경하기 h2 DB를 기본적으로 사용하다가 RDS를 사용하기 위해서 mysql로 변경해야 하는 일이 생겨 변경 도중 오류가 발생하고 이를 해결하는 내용이다. 기존 yml 코드 spring: h2: console: enabled: true path: /h2-console datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sa password: 아주 문제없이 잘 작동되는 코드 변경 후 yml 코드 spring: jpa: generate-ddl: true hibernate: ddl-auto: create datasource: driver-class-name: com.mysql.cj.jdbc.D..
Spring JPA 개발 회고록 Spring JPA 개발 회고록넘블에서 팀 프로젝트를 진행하면서 JPA를 쓰면서 겪었던 일화들(이론과 실전은 다르다는 것을 깨달았다.) 백엔드 첫 협업이기도 하고 Spring JPA를 예전에 써보고 오랜만에 다시 써보면서 User와 Board 엔티티를 만들고 조회를 하면서 겪었던 일이다. JPA를 쓰면 누구나 한 번쯤은 만나보는 순환 참조와 N + 1 문제를 겪어보고 이를 해결하는 내용이다. Spring MVC를 만들고 Service까지 단위 테스트를 진행했는데 여기까지는 문제가 발생하지 않아 개발이 잘 되어가는 줄 알고 진행하던 중 Controller test에서  순환 참조 문제가 발생한다는 것을 알게 되었다. 양방향 연관관계에서 User와 Board를 만들고 Board를 작성하면 User안 Boar..
JVM Multi Thread JVM Multi Thread Multi Thread Was(Web Application Server)에서는 많은 수의 동시 사용자를 처리하기 위해 수십 ~ 수백 개의 Thread를 사용한다. 두 개 이상의 Thread가 같은 자원을 이용할 때 필연적으로 Thread 간에 경합이 발생하고 경우에 따라서는 Dead Lock이 발생할 수도 있다. Thread 경합 때문에 다양한 문제가 발생할 수 있으며, 이런 문제를 분석하기 위해서는 Thread Dump를 이용하기도 한다. Thread 동기화 여러 Thread가 공유 자원을 사용할 때 정합성을 보장하려면 동기화 장치로 한 번에 하나의 Thread만 공유 자원에 접근할 수 있게 해야 한다. Java에서는 Monitor를 이용해 Thread를 동기화한다. Ja..
인덱스(index) 알아보기 인덱스(index) 인덱스(index)란? 인덱스는 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상하기 위한 자료구조이다. 컬럼에 인덱스를 생성하면, 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장한다. B-Tree 모든 리프 노드들이 같은 레벨을 가질 수 있도록 자동으로 균형을 맞추는 트리이다. 최상위 노드를 루트 노드라고 한다. 중간에 위치한 노드들을 브랜치 노드라고 한다. 맨 말단에 위치한 노드를 리프 노드라고 한다. 직접 B-Tree 만들어보는 사이트 https://www.cs.usfca.edu/~galles/visualization/BTree.html B+Tree B+tree는 B-tree의 확장 개념이다. 브랜치 노드에 ..
Memory(RAM) 알아보기 Memory(RAM) 알아보기 Memory란? Memory는 전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치, RAM(Random Access Memory) 메모리 계층 레지스터 : CPU 안에 있는 작은 메모리로 속도가 가장 빠르지만 용량은 가장 적다. 캐시 : L1, L2 캐시를 말하며 속도가 빠르고 기억 용량이 작다. 주기억장치 : RAM을 말하고 속도가 보통에 기억 용량도 보통이다. 보조기억장치 : HDD, SDD를 말하며 속도가 낮고, 기억 용량이 많다. 계층이 올라갈수록 가격이 비싸지며 용량은 작아지지만 속도는 빨라지는 특징을 가지고 있다. Cache Memory란? 캐시는 데이터를 미리 복사해 놓는 임시 저장소이자 속도가 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기..
팩토리 패턴 정리 팩토리 패턴 정리 팩토리 패턴이란? 팩토리 패턴은 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에게 객체 생성에 관한 구채적인 내용을 결정하는 패턴이다. 즉 객체를 생성하는 인터페이스를 정의 함으로써, 어떤 인스턴스를 생성할지는 하위 클래스에서 결정하는 패턴이다. 상위 클래스와 하위 클래스가 분리되기 때문에 느슨한 결합을 가지며 상위 클래스에서는 인스턴스 생성 방식에 대해 전혀 알 필요가 없기 때문에 더 많은 유연성을 갖게 된다.(상위는 추상 클래스로 시작 하위는 상위 클래스를 확장하는 구상 클래스) 객체 생성 로직이 따로 분리되어 있기 때문에 코드를 수정할 때 다른 부분에 영향을 주지 않아 유지 보..
TCP/IP 4계층 모델 TCP/IP 4 계층 모델 인터넷 프로토콜 스위트(Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합이고, 이를 OSI 7 계층이나 TCP/IP 4 계층이라 말한다. 이 글은 TCP/IP 4계층을 설명한 글이다. TCP/IP 4 계층 구조 애플리케이션 계층 전송 계층 인터넷 계층 네트워크 인터페이스 계층 (네트워크 접근 계층) 애플리케이션 계층 FTP, HTTP, SSH, SMTP, DNS 등 응용 프로그램이 사용되는 프로토콜 계층이며 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 계층이다. (사용자 응용프로그램 인터페이스를 담당) ex) 크롬 전송 계층 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며 통신 노..
GC(garbage collection) 알아보기 GC 알아보기 GC(garbage collection)이란? Garbage Collection은 보통 메모리의 압박이 있을 때 수행하게 된다. 어떤 이유에서든지 메모리가 필요하면 수행된다는 의미다. GC는 새로운 Object의 할당을 위해 한정된 Heap 공간을 재활용하려는 목적으로 수행된다. Heap영역을 재활용하기 위해 Root Set에서 참조되지 않는 Object를 없애 가용한 공간을 만드는 작업이라고 할 수 있다. 재활용을 위해 수행된 메모리의 해지는 할당한 그 자리에서 이루어지기 때문에 Garbage가 빠져나간 자리는 듬성듬성 비어있다. 이 경우 메모리의 개별 Free Space의 크기보다 큰 Object에게 공간을 할당할 경우 재활용의 의미가 사라진다. GC 작동원리 객체를 생성할 때마다 스택..