Spring (17) 썸네일형 리스트형 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.. 더보기 토비의 스프링 vol.2 4장 @MVC 4장 스프링 @mvc 4.4 JSP 뷰와 form 태그 스프링 MVC 뷰 기술과 작성 방법은 매우 다양하다. 하지만 컨트롤러를 통해 준비된 모델 오브젝트를 활용해서 클라이언트가 보게 될 콘텐트를 작성한다는 면에서는 모두 동일하다. 이 절에서는 주로 폼을 이용한 뷰를 작성할 때 필요한 스프링 지원 기능에 대해 설명한다. 폼을 다룰 수 있는 뷰 기술 중 JSP/JSTL 만 설명한다. 4.4.1 EL과 SPRING 태그 라이브러리를 이용한 단순한 모델 출력 JSP EL(Expression Language) EL(Expression Language)은 자바 빈의 프로퍼티 값을 JSP의 표현식 이나 액션 태그 jsp:useBean를 사용하는것 보다 쉽고 간결하게 꺼낼수 있게 하는 기술이다. 또한 static 메소.. 더보기 객체 지향 설계와 스프링 이 포스팅은 인프런 스프링 핵심 원리 - 기본편 강의를 정리한 내용입니다. 다시 스프링으로 스프링 이야기에 왜 객체 지향 이야기가 나오는가? 스프링은 다음 기술로 다형성 + OCP, DIP를 가능하게 지원 DI(Dependency Injection): 의존관계, 의존성 주입 DI 컨테이너 제공 : 자바 객체들을 컨테이너 안에 넣어서 의존관계를 주입해준다! 클라이언트 코드의 변경 없이 기능 확장 쉽게 부품을 교체하듯이 개발 다시 스프링으로 스프링이 없던 시절로 옛날 어떤 개발자가 좋은 객체 지향 개발을 하려고 OCP, DIP 원칙을 지키면서 개발을 해 보니, 너무 할일이 많았다. 배보다 배꼽이 크다. 그래서 프레임워크로 만들어버림 순수하게 자바로 OCP, DIP 원칙들을 지키면서 개발을 해보면, 결국 스프.. 더보기 SOLID - 좋은 객체지향 설계의 5가지 원칙 이 포스팅은 인프런 스프링 핵심 원리 - 기본편 강의를 정리한 내용입니다. SOLID 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP: 단일 책임 원칙(single responsibility principle) OCP: 개방-폐쇄 원칙 (Open/closed principle) LSP: 리스코프 치환 원칙 (Liskov substitution principle) ISP: 인터페이스 분리 원칙 (Interface segregation principle) DIP: 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과.. 더보기 좋은 객체 지향 프로그래밍이란? 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다. (협력) 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프 트웨어 개발에 많이 사용된다. 유연하고 변경이 용이한 프로그래밍이라는 것은 레고 블럭 조립하듯이 키보드, 마우스 갈아 끼우듯이 컴퓨터 부품 갈아 끼우듯이 컴포넌트를 쉽고 유연하게 변경하면서 개발할 수 있는 방법입니다. 다형성 다형성을 실세계로 비유하기 위해 실세계를 역할과 구현으로 구분을 해보겠습니다. 역할과 구현 예시 운전자와 자동차 : 운전자는 자동차의 인터페이스를 가지고 자동차를 운전한다. .. 더보기 토비의 스프링 #5. 서비스 추상화 5장 서비스추상화 5.1 사용자 레벨 관리 기능 추가 비즈니스 로직 추가 사용자의 레벨은 BASIC, SILVER, GOLD 세 가지 중 하나다. 사용자가 처음 가입하면 BASIC 레벨이 되며, 이후 활동에 따라서 한 단계식 업그레이드 될 수 있다. 가입 후 50회 이상 로그인을 하면 BASIC에서 SILVER 레벨이 된다. SILVER 레벨이면서 30번 이상 추천을 받으면 GOLD 레벨이 된다. 사용자 레벨의 변경 작업은 일정한 주기를 가지고 일괄적으로 진행된다. 변경 작업 전에는 조건을 충족하더라도 레벨의 변경이 일어나지 않는다. 5.1.1 필드 추가 (실습 진행) Level Enum User 필드 추가 UserDaoTest 테스트 수정 UserDaoJdbc 수정 5.1.2 사용자 수정 기능 추가(실.. 더보기 토비의 스프링 #4. 예외 4.1 사라진 SQLEXCEPTION 4.1.1 초난감 예외처리 예외 블랙홀 // #1 catch (SQLException e){ } // #2 catch (SQLException e){ System.out.println(e); e.printStackTrace; } 무의미하고 무책임한 throws // #3 public void method () throws Exception{ } 4.1.2 예외의 종류와 특징 Error java.lang.Error 시스템의 에러 Exception과 체크 예외 개발자들이 만든 애플리케이션 코드의 작업 중에 예외상황이 발생했을 경우에 사용 Exception은 다시 체크 예외와 언체크 예외로 나누어짐 전자는 Exception 클래스의 서브 클래스이면서 RuntimeExcep.. 더보기 토비의 스프링 #2 테스트, #3 템플릿 2장 테스트 스프링이 개발자에게 제공하는 가장 중요한 가치가 무엇이냐고 질문한다면 나는 주저하지 않고 객체지향과 테스트라고 대답할 것이다. p145 애플리케이션은 계속 변하고 복잡해져 간다. 그 변화에 대응하는 첫 번째 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이라면, 두 번째 전략은 만들어진 코드를 확신할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 자신감을 주는 테스트 기술이다. p145 2.1 UserDaoTest 다시보기 2.1.1 테스트의 유용성 테스트란 결국 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지를 확인해서 만든 코드를 확신 할 수 있게 해주는 작업이다. 2.1.2 UserDaoTest의 특징 public clas.. 더보기 이전 1 2 3 다음