본문 바로가기

김영한59

프록시와 연관관계 (즉시로딩, 지연로딩) 내가 이해한 방향 프록시는 가짜 객체다. 실제 클래스를 상속 받아서 만들어지고 실제 클래스와 겉모양이 같다. 프록시 객체는 실제 객체의 참조(target)을 보관하고 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다. 프록시의 특징 프록시 객체는 원본 엔티티를 상속받음, 따라서 타입 체크시 주의해야함 (== 비 교 실패, 대신 instance of 사용) 영속성 컨텍스트에 찾는 엔티티가 이미 있으면 em.getReference()를 호출해도 실제 엔티티 반환 영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일 때, 프록시를 초기화하면 문제 발생 (하이버네이트는 org.hibernate.LazyInitializationException 예외를 터트림) 즉시로딩과 지연로딩 즉시로딩은 fe.. 2022. 7. 2.
상속관계 매핑 객체는 상속관계가 있지만 관계형 데이터베이스는 상속관계라는 개념이 없다. 따라서 슈퍼타입과 서브타입의 관계를 매핑하는 방법을 사용한다. 슈퍼타입 서브타입 논리 모델을 실제 모델로 구현하는 방법 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 조인 전략 장점 테이블 정규화 외래 키 참조 무결성 제약조건 활용가능 저장공간 효율화 단점 조회시 조인을 많이 사용, 성능 저하 조회 쿼리가 복잡함 데이터 저장시 INSERT SQL 2번 호출 단일 테이블 전략 장점 조인이 필요 없으므로 일반적으로 조회 성능이 빠름 조회 쿼리가 단순함 단점 자식 엔티티가 매핑한 컬럼은 모두 null 허용 단일 테이블에 모든 것을 저장하므로 테이블이.. 2022. 6. 29.
파일 업로드 파일을 업로드 하려면 파일은 문자가 아니라 바이너리 데이터를 전송해야 한다. 문자를 전송하는 이 방식으로 파일을 전송하기는 어렵다. 이 문제를 해결하기 위해 HTTP는 multipart/form-data 라는 전송 방식을 제공한다. 첫 예제에서는 서블릿을 이용한 파일 업로드를 구현함. application.properties logging.level.org.apache.coyote.http11=debug 이 옵션을 사용하면 HTTP 요청 메시지를 확인할 수 있다. 멀티파트 사용 옵션 spring.servlet.multipart.max-file-size=1MB : 파일의 최대 용량 제한 가능 spring.servlet.mulitpart.enabled=true (기본) : false로 설정하면 멀티파트 데이.. 2022. 6. 26.
스프링 타입 컨버터 애플리케이션을 개발하다 보면 문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것처럼 타입을 변환해야 하는 경우가 상당히 많다. TypeConverter 이때 타입 컨버터를 이용하여 타입을 바꿀 수 있다. @Slf4j public class IntegerToStringConverter implements Converter { @Override public String convert(Integer source) { log.info("convert source = {}", source); return String.valueOf(source); } } 하지만, 이렇게 타입 컨버터를 하나하나 직접 사용하면, 개발자가 직접 컨버팅 하는 것과 큰 차이가 없다. ConversionService 이렇게 타.. 2022. 6. 25.
로그인 처리 - 필터, 인터셉터 서블릿 필터 필터는 서블릿이 지원하는 수문장과 같다. 웹의 공통 관심사항을 처리하는데 쓰이는데 이는 스프링에서 AOP로도 가능하지만, 서블릿 필터와 인터셉터를 이용하는 것을 추천한다. 관심사항은 모든 고객의 요청을 로그를 찍거나 로그인 여부를 확인하는 필터 등 다양하다. 필터를 통과하면 서블릿 페이지로 이동하고, 통과하지 못하면 서블릿 페이지를 보여주지않는다. 필터는 체인형식으로 여러개를 이을 수 있다. 참고) 실무에서 HTTP 요청시 같은 요청의 로그에 모두 같은 식별자를 자동으로 남기는 방법은 logback mdc 검색. 스프링 인터셉터 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 스프링 인터셉터가 더 많은 기능을 제공하고 더 좋다. 인터셉터는 스프링 MVC 구조에 특화된 필터 기능을 제공한.. 2022. 6. 18.
로그인 처리 - 쿠키와 세션 스프링 프레임워크 기말고사 프로젝트를 진행하면서 쿠키를 사용해서 로그인을 유지할 수 있었다. 그런데 쿠키에는 심각한 보안문제가 있다. 보안문제 쿠키값은 임의로 변경 가능 쿠키에 보관된 정보는 훔쳐갈 수 있음 해커가 쿠키를 훔쳐가면 평생 사용 가능 대안 쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다. 그리고 서버에서 토큰을 관리한다. 토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야 한다. 해커가 토큰을 털어가도 시간이 지나면 사용할 수 없도록 서버에서 해당 토큰의 만료시간을 짧게(예: 30분) 유지한다. 이러한 보안책들을 한번에 해결할 수 있는 방법이 서버 세션이다. 세션 ID를 추정이 .. 2022. 6. 17.