목록전체 (129)
지나공 : 지식을 나누는 공간
이번 포스팅에서 공부할 것은, 프록시 들어가기 프록시의 개념과 특징 프록시 확인하기 즉시로딩(EAGER)과 지연로딩(LAZY) N+1의 문제 들어가기 Team 과 Member가 1:N으로 매핑될 때를 생각해보자. member를 가져올 때 연관관계가 있다고 해서 항상 team도 가져온다면, 최적화가 되지 않은 상황이 될 것이다. 하지만 언젠가 member를 가져오면서 그 멤버가 속한 team의 정보도 사용해야 할 때도 있을 것이다. 이 경우에는 한 번에 둘 다 가져와야 하고, 또 가져오려니 항상 가져오면 낭비가 심하고. 이 부분에 대한 JPA의 해결을 오늘 공부할 예정이다. 프록시란? 먼저, em.find() vs em.getReference() 에 대하여 find()는 데이터베이스를 통해 실제 엔티티를 ..
탐색(Search)? DFS/BFS? -> 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정이 탐색 -> 탐색의 대표적인 예로 그래프 탐색 알고리즘은 DFS와 BFS가 있다. 이번 포스팅에서 알아볼 것 스택의 자료구조와 구현 큐의 자료구조와 구현 재귀함수(의미, 구현, 팩토리얼 구현으로 알아보는 재귀함수) 유클리드 호제법 with 재귀함수 DFS 동작과 구현 BFS 동작과 구현 스택(Stack) -> 마지막에 들어간 데이터가 먼저 빠져나오는 구조 -> LIFO (Last In First Out) 스택코드 구현 삽입(5) -> 삽입(2) -> 삽입(3) -> 삽입(7) -> 삭제() -> 삽입(1) -> 삽입(4) -> 삭제() 큐(Queue) -> 처음에 들어간 데이터가 먼저 빠져나오는 구조 -> FI..
필수 어노테이션정리 @Entity -> JPA를 사용해서 데이터베이스의 테이블과 매핑할 클래스에 필수로 명시해야 하는 어노테이션 제약사항 1. 파라미터가 없는 protected나 public의 기본생성자가 필수로 있어야 함 (Entity를 JpaRepository에서 가져올 때 기본생성자를 사용하므로) 2. 필드에 final 클래스, enum, interface, inner 클래스를 사용할 수 없음 속성 name : 엔티티 이름을 지정하는 속성, 기본값은 클래스이름 @Table -> 해당 엔티티와 매핑할 테이블을 지정하는 어노테이션 속성 name : 매핑할 테이블 이름을 지정, 기본값은 엔티티 이름 (아래 사진에서 ORDERS라고 지정했지만 안 써도 테이블명이 ORDERS다.) catalog : 데이터베..
이것이 코딩테스트다. chapter 4 구현 실전 문제 풀이 구현 문제는 어떤 문제? 머릿 속에 있는 알고리즘을 소스코드로 바꾸는 과정으로, 어떤 문제든 간에 해당이 될 수 있는 매우 넓은 범위의 유형이다. 구현 문제를 풀 때 생각할 점들 - 파이썬 기준 1초에 2000만 번의 연산 수행을 가정할 때 크게 무리가 없음 - 시간제한이 1초이고, 데이터 개수가 100만 개인 문제에서 N= 1,000,000이면 시간복잡도가 NlogN=20,000,000이므로 이정도의 데이터를 혀용한다고 생각하고 문제를 풀면 무리가 없을 것임 이제, 문제를 풀어보자. 1. 상하좌우 문제 문제) 여행가 A는 N*N의 크기의 정사각형 공간 위에 서 있다. 이 공간은 1*1 크기의 정사각형으로 나누어져 있다. 가장 왼 쪽 위 좌표는..
JPA의 기능에는 데이터베이스 스키마 자동생성 기능이 있다. 이는 DDL을 어플리케이션 실행 시점에 자동으로 생성해주는 기능이다. 테이블 중심에서 객체 중심으로 코딩이 가능하게 하는 기능이고, 데이터베이스 dialect에 따라 적절하게 DDL을 생성한다. 예를 들어 MySql이냐 Oracle이냐에 따라 varchar인지 varchar2인지가 달라진다. dialect에 따라 맞게 DDL을 생성한다. 그리고 이렇게 생성된 DDL은 개발 장비에서만 사용하고, 운영 서버에서는 사용하지 않거나 적절히 다듬어 쓴다. 사용법은 resources - META-INF - persistence.xml에서 hibernate.hbm2ddl.auto의 옵션을 설정하면 된다. - create : 기존 테이블을 삭제한 뒤 다시 생..
그리디 알고리즘이란? 현재 시점에서의 최적의 선택을 하는 알고리즘입니다. 전체 시점에서는 그게 가장 좋은 답이 아닐 수 있습니다. 매 시점마다 당장 그 시점에서의 최선의 답을 찾는 방식이기 때문입니다. 아래 그림에서 거치는 노드의 숫자 합이 가장 큰 선택을 해야 한다고 합시다. 우리 입장에선 전체 노드가 보이기 때문에 당연히 왼쪽처럼 선택을 해야 숫자 합이 0+3+100 = 103이 되므로 최적의 선택이 된다는 걸 압니다. 하지만 그리디한 선택은 당시에 위치하는 노드에서 바라볼 때 가장 큰 숫자로 가는 것이므로 오른쪽 그림처럼 선택하게 됩니다. 그리디한 선택을 한 결과(0+10+8 = 18)는 실제 최적의 답(103)보다 좋지 않은 답일 수 있습니다. 즉, 그리디 알고리즘에서 모든 선택이 최적의 선택과 ..
김영한 님의 자바 ORM 표준 JPA 프로그래밍 강의를 듣고 정리했습니다. JPA에서 가장 중요한 것이 '객체와 관계형 데이터베이스 매핑하는 것', 그리고 영속성 컨텍스트입니다. 영속성 컨텍스트를 알아기 전에 먼저 짚어야 할 개념들이 있습니다. EntityManagerFactory, EntityManager ? 데이터 요청이 들어올 때마다 EntityManagerFactory는 EntityManager를 생성하고, 이 EntityManager는 데이터베이스커넥션을 활용해서 DB에 접근하여 요청사항을 처리합니다. EntityManager 사용 EntityManager를 사용해 봅시다. resources 폴더 안에 있는 persistence.xml 파일에서 persistence-unit name은 JPA를 ..
JPA란? - Java Persistence API, 자바 진영의 ORM 기술 표준 - 인터페이스의 모음으로 Hibernate, EclipseLink, DataNucleus의 구현체 ORM이란? Object-relational mapping, 객체 관계 매핑으로, 객체는 객체대로 설계하고 관계형데이터베이스는 관계형데이터베이스로 설계하면 orm 프레임워크가 중간에서 매핑하는 방식임. JPA와 CRUD - 마치 java 컬렉션에 넣은 채 쓰는 듯한 편리함! - 저장 : jpa.persist(member) //영구저장한다는 의미 - 조회 : Member member = jpa.find(memberId) - 수정 : member.setName("변경할 이름") - 삭제 : jpa.remove(member) 패러..
Learn Git Branch의 내용을 참고하였습니다. HEAD HEAD는 현재 체크아웃된 커밋을 의미합니다. 즉, 현재 작업 중인 커밋으로 HEAD는 항상 작업트리의 가장 최근 커밋을 가리킵니다. 따라서, 작업트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는 것으로 시작합니다. 왼쪽 사진은 master 뒤에 HEAD가 있는 상태이고, 여기서 git checkout C1을 하면 오른쪽처럼 C1에 HEAD가 있게 됩니다. Relative Ref - 상대참조 상대참조를 통해 브랜치에서 출발하여 다른 지점에 도달하고 거기서 작업을 할 수 있습니다. ^연산자 ^는 한 번에 한 커밋 위로 움직이는 연산자(HEAD가 한 커밋 위로 이동)이고, ~은 한 번에 여러 커밋 위로 올라가는 연산자입니다. 예를..
김영한 님의 자바 orm 표준 jpa 프로그래밍 기본편 강의를 통해 공부한 내용입니다. ORM이란, Object(객체)와 Relation(관계)를 Mapping(연결)한다는 개념으로, ORM을 이용한 개발은 객체와 데이터베이스 변형에 유연하게 대처할 수 있도록 한다. 객체 지향 프로그래밍 입장에서 관계형 데이터베이스의 제약을 받지 않으면서 관계형 데이터베이스 자체를 객체처럼 쉽게 표현하고 사용하기 위한 개념이다. SQL 중심적인 개발의 문제점 : CRUD 의 무한한 반복으로 지루한 코드 생성 객체와 관계형 데이터베이스의 차이 : 상속, 연관관계, 데이터타입, 데이터 식별 방법 -> 객체는 FK로 참조가 불가능하지만 테이블은 연관관계를 통해 참조가 가능하다. [jpa없이 java에서 sql을 직접 다루면 ..