본문 바로가기

스프링

(4)
JPA 기본 시리즈 - 1. 영속성 관리 기본을 다지기 위해 JPA 기본 시리즈를 작성합니다. 김영한님의 ORM 서적을 참고한 글이며 비슷한 글이 다른 블로그에도 많이 있지만 읽는 것만으로는 이해가 가지않아 내용을 정리하면서 이 내용을 포스팅해보도록 하겠습니다. JPA? JPA는 ORM 기술(객체지향 모델링)을 자바 진영의 스프링 프레임워크에서 사용하기 위해 고안됐다. Java Persistence Api Persistence는 앞으로도 많이 쓰이게 될 용어인데 '영속화'라는 뜻이다. 영속화 라니.. 왜 이런 어려운 말을 쓸까? 나름의 이유는 있다. 브라우저에서 웹 서버, DB까지 여러 곳에서 '저장'을 사용한다 캐쉬, 스토리지, 컨텍스트, config, adapter 등록 등등 여러 '저장'의 형태가 있다. 그 중에서도 특히 DB에 저장하는 ..
Spring MVC - DTO, VO, DAO 에 대한 간단 명료한 정리. DTO, VO, DAO.. 모두 Object, 즉 객체이다. 특별한 목적을 가지고 생성되는 객체이다. DTO는 계층형 구조를 가진 웹 서버에서, Trasfer의 역할을, VO는 불변하는 값을 표현하기위한 역할, DAO는 DB 접근과 관련한 역할을 수행한다. 비슷하게 보이지만 객체는 상태와 행동을 가진 어떤 것이며, '이 객체들은 서로 소통하며 각자의 역할을 수행한다.' 결국 다 이 셋은 확실하게 구분되는 개념이다. 서비스를 개발한다고 생각해보자, 다음의 두가지 요구 사항이있다. 1) 회원가입할 때 주소 입력. 2) 기숙사 입학생의 가산점 계산을 위해 기숙사와 본가와의 거리를 구하는 객체가 존재(계산의 어려움때문에 '동' 기준으로 획일화) 엔티이에 이 두가지 기능을 구현한다고 생각해보자. 먼저 1번의 경우..
Spring MVC - 포워드와 리다이렉트 forward , redirect 포워드와 리다이렉트 개념은 헷갈릴 여지가 있다. 사용자 입장에서 봤을 때 결국 request를 주고 response를 받는거니까 큰 차이를 못느낄수 있다. 하지만, 포워드와 리다이렉트는 정말 중요한 개념으로 글쓰기 중복, 회원 중복 가입등의 오류가 생길 수 있다.. 물론 DB차원에서 LOCK이 있다면 문제없겠지만,, 리다이렉트와 포워드는 http 헤더를 확인해보면 status값이 다르다 리다이렉트의 경우에는 303.. 기타 위치보기이다, 즉 다른 위치로 옮겨갔으니까 그 위치를 찾아보라고 클라이언트에 직접 조회권을 넘겨주는 것. 그림으로 설명하는 편이 빠르다. 사용자가 리퀘스트를 날리면 서블릿이 이를 받아서, 컨트롤러로 던지고, 컨트롤러에서 여러 비지니스 로직을 거쳐서 view형태로 렌더링해서 respon..
JPA - 양방향 연관관계에서 '연관관계의 주인' Mappedby JPA는 과거 RDBMS 의존적인 객체지향 프로그래밍 방식에서 탈피하기위해 고안된 방법이다. 테이블, 테이블의 관계를 객체와 객체의 관계로 표현하는 방법이다. 테이블 -> 객체, 테이블 연관관계 -> 객체 연관관계로 단순 치환하게 되면 문제가 발생할 수 밖에 없다. 김영한님이 곧 잘 들어주시는 예시다 멤버는 자신이 속한 팀에대한 정보를, 팀은 자신의 팀에 대한 정보를, 각각 멤버 변수로 가지고 있다. 그리고 양방향 객체 관계라고 되어있지만, 사실은 멤버는 팀을, 팀은 멤버를 바라보는 단방향 연관관계 두개라고 보면된다. 여기서 패러다임의 차이가 발생한다. 테이블의 경우에는 TEAM은 굳이 members를 가지고 있을 필요가 없다. 조인을 걸어서 조건으로 그냥 MEMBER를 구할 수 있고, 그게 RDBMS의..