본문 바로가기

Spring22

JPA 4 - 값 타입, JPQL JPA의 데이터 타입 분류 엔티티 타입 - 데이터가 변해도 지속적으로 추적이 가능 값 타입- 값만 존재하므로 변경시 추적 불가 기본값 타입 - int,double과 같은 자바 기본 타입 / Integer, Long과 같은 래퍼 클래스 / String 임베디드 타입 - 복합 값 타입 컬렉션 값 타입 기본값 타입 생명주기를 엔티티에 의존, 엔티티가 삭제되면 해당 엔티티에 속해있는 기본값 타입들도 삭제 공유 X ex) 특정 엔티티의 기본값 타입의 변경이 다른 엔티티의 기본값 타입의 변경으로 부수효과 발생 가능성 자바의 기본 타입은 공유되지 않음 int a = 20; int b = a; a = 50; System.out.println("a = " + a) System.out.println("b = " + b) .. 2023. 7. 3.
JPA 3 - 영속성 컨텍스트, 연관관계 매핑, 즉시로딩/지연로딩 JPA의 핵심 객체지향 프로그래밍과 관계형데이터베이스는 데이터를 다루는 패러다임이 다르다. 이들을 보다 편리하게 매핑하기 위해 만들어진 ORM 객체 지향 프로그래밍과 RDB 간의 관계를 기반으로 객체와 테이블 간의 매핑을 수행 영속성 컨텍스트를 통해 엔티티를 관리 객체 그래프 탐색과 트랜잭션 관리 등을 지원. 1.영속성 컨텍스트 객체와 관계형 데이터베이스를 매핑하는 과정에서 엔티티를 저장하는 환경 persist(entity) 는 즉 DB가 아닌 영속성 컨텍스트에 엔티티를 저장한다. entity는 비영속 - 영속 - 준영속 - 삭제의 생명주기를 가진다. 비영속 - 객체가 생성된 상태 영속 - 영속성 컨텍스트에 저장된 상태, persist(entity)는 DB에 저장되어있지 않음 준영속 - 엔티티가 영속성 .. 2023. 7. 1.
JPA 2 - 연관관계 매핑, 지연로딩 오늘은 뭔가 평소보다 제대로 집중하기 힘들었다. 이번 주 평가시험에서 배포를 실패했는데 그게 마음에 걸렸는지 자꾸 신경쓰였다. 배포에 대해서는 따로 생각을 정리하면 될 걸 계속 마음이 쓰이다보니 완전히 몰입해서 공부한다는 느낌을 받기 어려웠다. 스스로에게 매우 아쉽지만 단순히 아쉬움에서 그치지 않고 반성하며 내일은 오늘보다 좀 더 나은 하루로 만들 것이다. 금요일 계획 본격적으로 캠프에서 지급해준 강의를 수강 JPA의 영속성 컨텍스트, 연관관계, 프록시에 해당하는 세 부분을 중점적으로 복습 06.30 완료 토요일 계획 캠프 강의 수강(스프링 시큐리티 부분부터) JPA 복습 및 다음 강의 07.01 스프링 시큐리티 부분이 생각보다 쉽지 않다. 아무래도 일요일 날 시큐리티 부분 다시 복습해야 할 필요가 있다.. 2023. 6. 30.
JPA 1 - 영속성 컨텍스트, 연관관계 매핑 주특기 주차 과제를 진행하면서 JPA에 대한 기초적인 이해가 부족함을 많이 느꼈다. 좌절하기보다는 다른 때보다 더 열심히 해서 충분히 숙달하는 것을 목표로 잡았다. 오늘은 영속성 컨텍스트의 특징과 장점, 그리고 연관관계의 주인의 개념적인 이해까지. 2023. 6. 29.
DB 접근 1 - DB 접근 이해 DB 접근 기술의 핵심 원리인 커넥션풀,트랜잭션 추상화, 예외 추상화에 대해서 살짝 맛만 본 느낌으로 공부했다.. 조금 더 깊게 들어가고 싶은데 당장 JPA의 기초부터 봐야할 거 같아서 아쉽지만 여기서 멈추고 내일부터 JPA의 기초부터 새로 시작할 생각이다. 캠프 기간동안 시간이 날 때마다, MVC 2, DB 접근기술에 대해서 공부하고 아마도 캠프가 끝이 날 때 본격적으로 다시 코드작성과 함께 할 수 있을 듯 하다.. 아쉽지만 주어진 시간을 최대한 활용하는 게 내가 할 수 있는 거니까 이에 최선을 다하고 싶다. 2023. 6. 28.
MVC 5 - (검증오류), 로그인, 필터, 인터셉터, 예외처리 코드를 직접 따라치면서 공부하고 싶지만 남아있는 시간 상 꽤 힘든 계획일 거 같다고 생각했다. 전체적인 흐름을 이해하면서 프로젝트를 진행할 때 해당 기능과 관련된 문제들이 생긴다면 따로 또 찾아가면서 공부하는 방식으로 부족함을 채워야 할 것 같다. 아쉽지만 기존의 모든 코드를 따라치면서 하는 학습은 캠프 종료 기간 후로 미루고 지금은 각 기능들의 원리와 어떤 종류의 기능이 있는지 알아가는 방식으로 학습방향성을 정했다. 메세지, 컨버터, 파일업로드 부분은 아쉽지만 잠깐 미루고 5가지 항목을 우선적으로 공부하였다. 이후 데이터 접근 기술에 대해서도 공부해야하기에 최대한 효율적으로 하고자 노력했다. 실제 프로젝트에 가기전 까지 시간이 남는다면 내가 이해가 부족했던 부분의 강의를 부분적으로 코드를 작성하면서 공.. 2023. 6. 27.
MVC 4 - 검증 및 오류 처리 기존에는 데이터에 직접 들어올 수 없는 값이 들어오면 바로 오류페이지로 넘어갔다. 이 경우는 사용자에게 불편을 초래하기 때문에 오류가 있을 경우 해당 오류의 이유와 이를 쉽게 고쳐서 다시 서비스를 이용할 수 있도록 하게끔 프로그래밍을 해야한다. 따라서 기존의 오류페이지가 아닌 데이터를 입력하는 페이지에서 사용자가 다시 데이터 입력을 시도할 수 있도록 프로그래밍 하고 이 검증 로직을 발전시키는 것이 이번 챕터의 목표. V1 Map errors = new HashMap(); 컨트롤러에 error와 error에 관한 메세지를 처리하기 위한 Map 형식의 errors를 만든다. if (!StringUtils.hasText(item.getItemName())) { errors.put("itemName", "상품 .. 2023. 6. 25.
MVC 3 - Spring MVC Dispatcher Servlet 오버라이딩 된 메서드 service 호출 (frontcontroller) doDispatch() 를 이전에 작성한 V5와 비교해보자. Object handler = getHandler(request); // v5 핸들러 조회 MyHandlerAdapter adapter = getHandlerAdapter(handler); // 핸들러 어댑터 조회 ModelView mv = adapter.handle(request, response, handler); // 핸들러 어댑터 실행, 핸들러 어댑터를 통해 핸들러 실행, ModelView 반환 MyView view = viewResolver(viewName); // 뷰 리졸버 view.render(mv.getModel(), req.. 2023. 6. 23.
MVC 2 - FrontController과 프레임워크의 확장 보다 가독성을 위해 버전들 사이에서 중복되는 코드들은 제거하고 핵심적으로 바뀌는 부분들을 코드블럭에 담았다. 이를 참고 v1: 프론트 컨트롤러를 도입 기존 구조를 최대한 유지하면서 프론트 컨트롤러를 도입 기존의 controller에서 반복되는 코드의 제거와 직관성을 위해 모든 controller에서 실행되는 공통의 로직들을 frontController로 가져온다. @WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*") public class FrontControllerServletV1 extends HttpServlet { private Map controllerMap = new HashMap(); pub.. 2023. 6. 22.
MVC 1 - 서블릿, JSP 웹 서버, WAS 웹 서버 HTTP 기반으로 동작, 정적 리소스 제공 인터넷에서 클라이언트로부터 HTTP 요청을 받아들이고, 해당 요청에 대한 응답을 제공하는 소프트웨어 클라이언트와의 통신을 관리하고 요청된 리소스를 찾아서 클라이언트에게 전달 클라이언트는 웹 서버에 HTTP 요청을 보내고, 서버는 요청된 리소스를 찾아서 클라이언트에게 응답 이 과정에서 웹 서버는 HTTP 프로토콜을 히해하고 처리할 수 있는 기능 웹 애플리케이션 서버 (WAS) HTTP 기반으로 동작, 웹 서버의 기능을 포함해서 프로그램 코드의 애플리케이션 로직 수행. 즉 동적 HTML, JSON이 주로 쓰이는 HTTP API, 서블릿, JSP, 스프링 MVC 등 둘의 경계는 현재 모호, 다만 웹 애플리케이션 서버는 애플리케이션 코드를 실.. 2023. 6. 21.