
JPA의 등장배경자바와 DB의 관점 차이번호이름가격1돈까스10,000원2김밥4,000원3치킨마요8,500원번호주문날짜주문자음식번호10112/15kim110212/16lee310312/25kim2위 테이블에 대한 설계를 해보자.DBJAVAInteger 번호Date 주문날짜Varchar 주문자integer 음식번호Integer 번호Date 주문날짜String 주문자Food 음식 자바는 계층 관계, DB는 동등 관계의 관점이다.자바는 참조를 통해 연관관계를 맺고, 연관관계를 맺은 객체의 정보를 조회하기 위해 참조한 객체에 접근한다.DB는 연관된 테이블과 FK를 통해 연관관계를 맺고, 해당 테이블의 정보 조회는 FK와 조인을 통해 조회한다.자바는 객체 지향 언어로 서비스 로직에서 다루는 데이터가 객체의 형태를 ..
DB모델링을 하다 보면 자연스럽게 다대다 관계를 마주하게 된다. 이제는 습관적으로 테이블을 나누고 있지만, 그냥 써버리면 안되나? 라는 질문을 받았을 때 명확하게 답변하기 위해, 어떠한 대답을 해야할 지 생각해보았다. 테이블 간 연관관계우선 다대다 관계에 대한 이야기를 하기에 앞서, 3가지의 연관관계를 대표적인 예시로 설명해 보려고 한다.주문, 상품, 회원, 장바구니일대일 (1 : 1)주문(1) - 장바구니(1)장바구니 하나는 주문 하나를 생성한다.일대다 (1 : N)유저(1) - 주문(N)한 명의 유저가 여러개의 주문을 만들 수 있다.다대다 (M : N)주문(N) - 상품(M)주문은 여러 상품을 담을 수 있고, 같은 상품도 여러 번 주문 될 수 있다. 다대다 관계 (M:N)그래서 왜?유지보수 및 확장성..

DTO(Data Transfer Object)데이터 전송용 객체 = 엔티티의 사본 보통 개발을 하면 직접 엔티티를 사용해서 데이터를 주고 받는 것이 아니라, DTO를 사용하게 된다. 그냥 엔티티 통째로 주고 받으면 되는데, 왜 굳이 DTO를 사용할까? 1. 스프링 3계층 (Controller, Service, Repository)간의 전송시 데이터 변환 위험이 있다. 2. 클라이언트가 필요 없는 데이터를 포함할 수 있다.시스템 활용 데이터(ex. 생성, 수정시간) 같이 클라이언트에 필요없는 데이터들을 포함한 경우, 네트워크 비용만 올라가고, 보안에 좋지 않다.3. 클라이언트가 필요한 데이터를 포함하지 않을 수 있다.ex) 생년월일을 저장하는데, 나이를 출력해야 하는 경우 (연산이 필요한 데이터)ex) ..
스프링에서 롬복에 대한 설정을 추가 하던 중 발생한 문제를 해결하면서 학습한 내용을 정리한 글이다.GradleAnt 와 Maven의 장점을 합친 빌드 도구.대표적인 장점 3가지는 다음과 같다.1. 점진적 빌드한번 빌드를 해놓으면 수정이 일어났을 때, 기존에 빌드된 부분 제외하고 수정한 부분만 빌드한다. 2. 데몬 프로세스빌드 결과물을 데몬에 저장해둠. 3. 빌드 캐시dependecies 키워드implementation프로젝트의 컴파일과 런타임 시점 모두에 필요한 경우 사용프로젝트 빌드 시점에 해당 라이브러리를 컴파일에 사용하고, 빌드된 결과물에도 포함한다.compileOnly컴파일 타임에만 사용되는 경우프로젝트의 빌드 시점에 해당 라이브러리를 컴파일에 사용하고, 빌드된 결과물에는 포함하지 않는다. 컴파일..
전에 스프링 빈 등록과 관련된 글을 작성한 적이 있다.오늘은 그때 사용한 컴포넌트에 대한 내용을 적어보려 한다. @Component해당 클래스를 스프링 빈으로 등록한다. @ComponentScan 원래는 설정 파일을 xml에 다 작성해야 했는데, 스프링과 스프링부트는 xml을 최소화 하고자 했다.@ComponentScan은 @Component를 스캔하여 빈으로 등록해주는 역할을 한다. @Autowired스프링 컨테이너에서 필요한 타입을 찾아 의존성을 주입해준다. import org.springframework.stereotype.Component;@Componentpublic class Person { House house; public Person(House house) { t..

두 가지 질문에서 시작된 글.웹서버와 WAS는 완전 별개인가요?왜 굳이 정적/동적 페이지 처리 역할이 나누어져 있나요?평소에 WAS에 대해 그렇게까지 깊게 생각해 본 적이 없다 보니, 느낌적으로는 알지만 입으로 설명을 못한다는 것을 깨달았다.WAS = Web Server + Web Container과거는 명확하게 분리되어 있었지만, 최근에는, WAS안에 포함되는 형태이다. 결론1. 하나의 서버에서 기능을 분리한것이기 때문에, 완전 별개는 아니다. WAS내부에 웹서버가 있다.2. 웹 애플리케이션 서버의 부하를 방지한다.

AOP AOP( Aspect-Oriented Programming )는 프로그램 구조에 대한 또 다른 사고 방식을 제공하여 OOP(Object-Oriented Programming)를 보완한다. OOP에서 모듈성의 핵심 단위는 클래스인 반면 AOP에서는 모듈성의 단위가 aspect 이다. Aspect는 여러 유형과 개체를 가로지르는 트랜잭션 관리와 같은 문제의 모듈화를 가능하게 한다. Spring AOP Spring AOP는 순수한 Java로 구현되며, 특별한 컴파일 과정이 필요하지 않다. AOP에 대한 Spring AOP의 접근 방식은 대부분의 다른 AOP 프레임워크와 다르다. 가장 완벽한 AOP 구현을 제공하는 것이 아니라, AOP 구현과 Spring IoC 간의 긴밀한 통합을 제공하여 엔터프라이즈 ..

JPA JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준이다. (ORM(Object-relational mapping)은 객체와 RDB를 매핑해주는 것을 말한다. 객체는 객체대로 설계하고 RDB는 RDB대로 설계 한 뒤 ORM 프레임워크가 중간에서 매핑해준다.) JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있고, 개발 생산성을 크게 높일 수 있다. JPA는 애플리케이션과 JDBC 사이에서 동작한다. JPA로 구현한 Member @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private S..