전체 글

전체 글

    Spring - 예외처리

    서블릿 예외처리 예외가 발생할 경우 ex) RuntimeException... response.sendError()로 예외를 전달 할 경우 --> 당장 예외가 발생하는 것이 아니라 서블릿 컨테이너에 전달, 응답전에 컨테이너가 확인 어플리케이션 내에서 예외처리가 되지 않을경우(try~catch) WAS까지 예외 전달 되어 예외페이지 출력된다 예외페이지 등록 예외페이지 등록 web.xml 404 /error-page/404.html java @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factor..

    Spring-filter interceptor

    서블릿 필터 필터내에서 특정 조건을 만족하지 못한다면 해당 필터에서 끝을 내고 컨트롤러를 호출하지 않도록 제어하는 역할이다 체인 형식으로 여러개의 필터를 순차적으로 등록하여 사용할수 있다 로그인관련에서 사용 흐름 Http 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 호출 Interface Filter인터페이스를 상속받아서 구현을 한다 public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { //초기화시 호출 } @Override public void doFilter(ServletRequest request, ServletResponse..

    JPA- JPQL

    경로표현식 상태필드: 단순 값 저장 필드 (m.username), 추가 탐색 불가 단일값 연관필드: XXXToOne연관, 추가 탐색 가능(member.team.teamname), 묵시적 inner join발생 컬렉션 값 연관 필드: XXXToMany연관, 추가 탐색 불가, 묵시적 inner join 발생 직접 명시적 조인으로 사용 페치조인 JPQL에서 성능 최적화를 위해 제공되는 기능 연관된 엔티티나 컬렉션을 같이 조회하는 기능 fetch전략을 LAZY로 설정을 해두더라도 가지고 올때 한번에 조회를 한다 다대일 페치조인 jpql select m from Member m join fetch m.team sql로 변환시 select m.*, t.* from Member m inner join team t o..

    JPA-JPQL

    JPQL 엔티티 객체를 조회하는 객체지향 쿼리이다 테이블 대상이 아닌 객체를 대상으로 쿼리를 실행한다 간단한 예시를 보면 아래 sql문은 테이블 전체를 조회하는 반면 jpql은 Member객체를 조회하는 것을 볼 수있다 실행이 될때는 결국 sql문을 변환되어 실행이 된다 이때 어느 한 데이터베이스에 종속 된 것이 아니기 때문에 방언만 변경을 해주면 해당 데이터베이스에 맞게 변환하여 실행한다 sql select * from Member m jpql select m from Member m 기본 규칙 엔티티나 속성에 관해서는 대소문자를 구별하지만 select, from 과 같은 키워드 문법에 대해서는 대소문자를 구별하지 않는다 from 절에는 클래스 명이 아닌 엔티티 명을 지정한다(@Entity(name="..

    Spring - 로그인 처리 세션쿠키

    쿠키 쿠키 종류 영속 쿠키: 브라우저가 종료되어도 설정된 만료 날짜 까지 유지 세션쿠키: 브라우저 종료시 까지만 유지 사용되는 곳 주로 로그인처리와 같은 사용자 상태를 유지하는 곳에서 사용이 된다 Cookie idCookie = new Cookie("memberId", memberId); HttpServletResponse.addCookie(idCookie); 쿠키는 위와 같이 얻어서 웹 응답 값에 포함 시켜서 응답을 보낸다 웹브라우저는 그 후 모든 요청에 쿠키 정보를 자동으로 포함하여 보낸다 Cookie cookie = new Cookie(cookieName, null); cookie.setMaxAge(0); response.addCookie(cookie); 쿠키를 없애고 싶으면 동일한 이름을 가진 쿠..

    JPA-값타입

    JPA-값타입

    기본값 타입 자바 기본타입 - int, double Wrapper 클래스 - Integer, Long String 생명주기를 엔티티에 의존하고 절대로 공유하면 안된다--> 다른 객체에서 값을 변경했는데 같이 변경될 수 잇음 임베디드 타입 새로운 값 타입을 정의하여 사용하는 것이다 C, C++에서 구조체를 정의하여 사용하는 것과 비슷하다고 생각된다 @Embeddable public class Address { private String city; private String street; private String zipcode; } @Embedded private Address address; 위 코드와 같이 임베디드 타입은 선언부에 @Embeddable, 사용하는 곳에 @Embedded을 표시해 주어야 ..

    JPA-프록시

    프록시 실제 클래스를 상속받아서 만들어진 가짜 객체 객체를 DB에서 찾을 때와는 다르게 em.persist()가 아닌 em.getReference()를 이용해서 조회를 한다 메서드명에서 보는거와 같이 무언가(실제 객체)를 참조를 하고 있는 객체이다 프록시 객체는 getXXX()처럼 실제로 처음 사용이 될때 값이 초기화가 된다 이미 영속성 컨텍스트에 찾는 객체가 있으면 실제 엔티티 반환된다 초기화 과정 getXXX()처럼 실제로 사용 영속성 컨텍스트에 초기화 요청 DB조회 실제 Entity생성 실제 객체를 참조하고 있는 target.getXXX()실행 org.hibernate.Hibernate.initialize(프록시객체);을 이용하여 강제로 직접 초기화 할 수 있다 즉시로딩 지연로딩 설정 방법 @XXX..

    Spring-MVC4 에러검증2

    에러 검증 Bean Validation 이전에 사용했던 Validator를 상속받아 사용했던 특정 검증기와는 다르게 검증 어노테이션을 이용하여 검증을 하는 방식이다 설정 xml 설정방법 스프링 관련 설정 : @EnableWebMvc어노테이션을 사용하면 OptionalValidatorFactoryBean을 글로벌 validator로 등록 dependency 설정: maven javax.validation validation-api 2.0.1.Final org.hibernate hibernate-validator 7.0.2.Final dependency 설정: gradle implementation 'javax.validation:validation-api:2.0.1.Final' 참고 http..

    JPA-고급매핑2

    복합키와 식별 관계 매핑 식별관계: 부모테이블의 pk를 자식테이블의 pk겸 fk로 사용되는 경우 비식별관계: 부모테이블의 pk를 자식테이블의 fk로 사용되고 개별 pk가 존재하는 경우 @IdClass 식별자 클래스 조건 식별자 클래스 속성명과 사용하는 클래스 속성명이 같아야 한다 Serializable 인터페이스 구현 - 왜 구현을 해야하는지 아직은 잘 모르겠음 추가 공부 기본생성자, equals, hashCode 구현 public으로 클래스 지정 @EmbeddedId IdClass와 다르게 식별자 클래스 자체를 기본키로 매핑을 한다 --> 보다 더 객체 지향스러운 느낌 식별자 클래스 조건 @Embeddable어노테이션 사용 Serializable 인터페이스 구현 - 왜 구현을 해야하는지 아직은 잘 모르..

    JPA 고급매핑1

    상속관계 매핑 객체의 상속구조를 DB의 슈퍼타입 서브타입관계로 매핑을 하는 것이다 조인 전략 단일 테이블 전략 개별 테이블 전략 조인전략 @Inheritance(strategy = InheritanceType.JOINED) @DiscriminatorColumn//생략가능 @Inheritance 어노테이션을 이용하여 join전략으로 전략을 선택을 하면 된다 @DiscriminatorColumn 어노테이션은 자식 테이블을 구별을 할 수 있도록 도와주는데 default값은 DTYPE으로 컬럼명이 정해진다 자식 테이블 구분 컬럼 값을 직접 지정을 하고 싶으면 @DiscriminatorValue("값")을 자식 객체에 지정을 해주면 해당 값으로 칼럼 값이 지정이 된다 default로는 객체 명 사용 자식 테이블의..