
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와 조인을 통해 조회한다.자바는 객체 지향 언어로 서비스 로직에서 다루는 데이터가 객체의 형태를 ..
예외 처리는 어떻게 해야 할까?try-catchtry { // 예외 발생할 일이 없는 로직 - 1 // 예외가 발생할 수도 있는 로직 // 예외 발생할 일이 없는 로직 - 2 : 예외 터지면 실행 X} catch(예외 클래스 e) {} Q. exception이 여러 개인 경우 어떻게 함? public class RoomService { @Autowired RoomRepository roomRepository; public Room getRoom(int id) { try{ return roomRepository.getRoom(id); } catch (NoSuchElementException e){ return new NullRoom(); ..
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. 웹 애플리케이션 서버의 부하를 방지한다.
언제쯤, 자연스럽게 코드에 반영할 수 있을까.. 학부 시절 처음으로 SOLID 원칙에 대해 배우게 되면서 큰 흥미를 느꼈다. 그 이후로 여러 기회를 통해 SOLID 원칙을 공부하고 학습해 보았지만, 이를 실제 코드에 자연스럽게 적용하는 것은 쉽지 않았다. 하지만 반복을 통해, 체득하다 보니 정확히 정의를 뱉어낼 수는 없더라도 코드 작성 중에 어렴풋이 아 이런 식으로 짜야 하는데?라는 생각이 들게 되었다.오늘은 다시 한번 학습을 하는 기념으로 코드와 함께 정리를 해보려고 한다. SRP (Single Responsibility Principle) 단일 책임 원칙한 클래스는 하나의 책임만 가져야 한다.하나의 모듈은 오직 하나의 액터에 대해서만 책임져야 한다. SRP를 지키지 않은 코드// 사용자 정보를 관리하..