본문 바로가기

전체 글

(83)
Real MySQL 1장 ~ 3장 1장 소개 1.1 MySQL 소개 스웨덴 TcX회사의 라이브러리에서 시작 => 썬 마이크로시스템즈 => 오라클로 인수됨 라이센스 정책은 5.5 이전에는 엔터프라이즈와 커뮤니티 에디션으로 나뉘지만 둘의 소스코드는 동일했었다. 그 후부터는 기능과 소스코드가 달라졌다. 핵심기능은 동일 5.5, 5.7, 8.0 버전에 이르기까지 오라클에 인수된이후 10년간 많은 변화가 있었다! 1.2 왜 MySQL인가? 오라클 DB에 비교해서 MySQL의 경쟁력은 가격과 비용이다. 최근에는 대형 은행 시스템에서도 MySQL 서버를 사용하고 있을 정도로 MySQL이 안정성 측면에서도 많이 발전했다. 페이스북에서 가진 데이터를 모두 오라클 DB에 저장하면 페이스북은 망할것이다 ㅎㅎ DBMS를 선택할 때 고려할 사항 안정성 성능과 .. 더보기
함수형 언어의 타입시스템 코틀린의 타입 시스템을 다루지 않는다. 특정 언어의 타입 시스템보다는 함수형 프로그래밍에 초점을 맞춘 포괄적인 관점의 타입 시스템을 설명한다. 타입 시스템의 종류와 특징 함수형 프로그래밍에서는 어떤 타입 시스템을 기반으로 하는지 대수적 타입의 개념과 종류 함수형 프로그래밍에서 대수적 데이터 타입 타입 변수, 값 생성자, 타입 생성, 타입 매개변수 타입 클래스 : 행위를 가진 타입 재귀적 자료구조와 장점 타입 시스템 타입 시스템의 종류와 특징 훌륭한 타입 시스템은 런타임에 발생할 수 있는 오류를 컴파일 타임에 발생시킨다. 또한 IDE를 비롯한 다양한 도구에게 프로그램에 대한 정보를 제공한다. 동적 타입 시스템 정적 타입 시스템 동적 타입 시스템 런 타임에 데이터의 타입이 결정되는 시스템 변수를 만들거나 값.. 더보기
Servlet ? Servlet 이란? 자바를 사용하여 웹페이지를 동적으로 생성하거나 데이터를 처리하는 서버측 프로그램 또는 기술(사양)을 의미한다. 서블릿이 없는 상황에서 아래와 같이 HTML Form 데이터를 서버로 전송하고 이를 처리하는 서버 프로그램을 만든다고 생각해보자. 이 때 서버에서 처리해야 하는 업무는 다음과 같이 매우 많다. 서블릿을 사용하지 않는다면 이러한 모든 처리를 직접 구현해야한다. 그러나 서블릿을 사용한다면 비즈니스 로직에만 집중 할 수 있다. @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extends HttpServlet { @Override protected void service(Htt.. 더보기
Fetch join, N+1 문제 N+1 N+1 문제란 ? 특정 엔티티를 DB에서 조회를 할 때 나가는 “1” 번의 쿼리와 연관된 객체를 함께 조회하는 “N”번의 예상하지 못한 쿼리가 나가는 문제이다. 이 때문에 DB에 과부하가 발생할 수 있다. N+1 문제를 이해하기 위해서는 FetchType 에 대해 이해할 필요가 있다. N+1 문제는 특정 FetchType (LAZY, EAGER)에서만 발생하는 문제가 아니다. FetchType : LAZY and EAGER EAGER EAGER로 세팅이 되면 엔티티를 조회할 때 해당 연관관계를 바로 가져오는 것을 의미한다. ManyToOne 연관관계와 OneToOne 연관관계일 때 Default FetchType이 Eager로 세팅이 됨 //Member와 Team은 다대일 관계이다. @Entity.. 더보기
JPA - 프록시 프록시 프록시 기초 em.find() vs em.getReference() em.find() : 데이터베이스를 통해서 실제 엔티티 객체 조회 em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시 특징 실제 클래스를 상속 받아서 만들어짐 실제 클래스와 겉 모양이 같다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 됨(이론상) 프록시 객체는 실제 객체의 참조(target)를 보관 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출 프록시 객체의 초기화 Member member = em.getReference(Member.class, "id1"); member.getName(); 코드 실행 결과 Team team = new .. 더보기
JPA - @MappedSuperclass @MappedSuperclass - 매핑 정보 상속 공통 매핑 정보가 필요할 때 사용(id, name) 주로 BaseEntity를 abstract class로 만들어 사용 상속관계 매핑X 엔티티X, 테이블과 매핑X 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공 조회, 검색 불가(em.find(BaseEntity) 불가) 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장 테이블과 관계 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통 으로 적용하는 정보를 모을 때 사용 참고: @Entity 클래스는 엔티티나 @MappedSuperclass로 지 정한 클래스만 상속 가능 Ref : 김영한님 inflearn 강의 더보기
JPA - 다양한 연관관계 매핑 연관관계 매핑시 고려사항 3가지 다중성 단방향, 양방향 연관관계의 중요성 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany 단방향, 양방향 테이블 외래 키 하나로 양쪽 조인 가능 사실 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 한쪽만 참조하면 단방향 양쪽이 서로 참조하면 양방향 연관관계의 주인 테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 객체 양방향 관계는 A→B, B→A 처럼 참조가 2군데 객체 양방향 관계는 참조가 2군데 있음, 둘중 테이블의 외래 키를 관리할 곳을 지정해야 함 연관관계의 주인: 외래 키를 관리하는 참조 주인의 반대편: 외래 키에 영향을 주지 않음, 단순 조회만 가능 다대일 [ N.. 더보기
JPA - 양방향 연관관계와 연관관계의 주인 객체와 테이블 사이의 연관관계 차이 Team, Member의 예시에서 Member → Team, Team → Member 로의 연관관계도 필요하다면 객체, 테이블 설계에서 어떻게 다를까? 테이블 연관관계 테이블 연관관계는 외래키 하나로 해결이 된다. (Team→Member, Member→Team) 양쪽으로 조인이 가능하다. 그러나 객체의 관점에서 바라보면 다르다. 객체 연관관계 Member에서 team에 대한 참조를 갖는것은 물론, Team에서도 Member list에 대한 참조를 선언해줘야 한다. 연관관계의 주인과 mappedBy 객체와 테이블이 관계를 맺는 차이 객체와 테이블이 관계를 맺는 차이를 정리하면 다음과 같다. 객체 연관관계 = 2개 회원 → 팀 연관관계 1개 (단방향) 팀 → 회원 연관관계.. 더보기