전체 글

전체 글

    SOP(Same Origin Policy)와 CORS(Cross Origin Resource Sharing)의 차이

    SOP(Same Origin Policy) 같은 출처에서만 리소스를 공유할 수 있다. 즉, 자신의 프로젝트 내에 있는 리소스만 공유가 가능하다는 정책이다. 에선 클라이언트에 head 요청 헤더에 origin을 담아 서버에 보내고 다시 클라이언트로 가져온 값과 비교를 해야하는데, 비교 결과가 같으면 Same Origin( 프로토콜, 포트, 호스트 모두 일치해야 Same Origin ) 다르면 Cross Origin으로 판단하고 불러오질 못한다. CORS(Cross Origin Resource Sharing) 교차 출처 리소스 공유라는 뜻이다. 예를들어 내 프로젝트에서 다른 프로젝트의 자원을 요청하는 것을 말한다. CORS는 html 태그인 link(css), img, script, iframe 등에서는 기..

    @Transactional 사용 시 자기 호출(Self-Invocation) 이슈 - 실습으로 배우는 JPA 3편

    코드는 깃헙에 있습니다. 자기 호출 이슈는 보통 개발자가 @Transactional의 기능을 조작하려고 할 때 발생하는 이슈입니다. 그럼 우선 자기 호출이란 뭔지 알아봐야겠지요. 자기 호출이란? @Transactional은 스프링 AOP를 기반으로 만들어진 어노테이션 입니다. AOP는 다이나믹 프록시 혹은 CGLib(Spring Boot와 JPA Hibernate는 Default가 CGLib)으로 생성된 프록시 객체를 사용하는 기술입니다. 왜 프록시 객체를 사용할까요? @Transactional이 붙으면 트랜잭션을 시작하고 마지막에 롤백 혹은 커밋에 대한 명령어로 메소드를 감싸기 위해 프록시 객체를 만들어서 메소드를 새롭게 만든다라고 보면 됩니다. public Proxy { public void exte..

    findAll()에 관한 N+1 테스트 - 실습으로 배우는 JPA 2편

    JPA에 익숙해지기 위해 N+1을 발생시키고 그 과정에서 영속성 컨텍스트와 @Transactional 동작 방식을 이해하는 글 입니다. EAGER는 보통 실무에서 쓰이지는 않지만 JPA 이해 과정에서 사용한 점 양해 부탁드립니다. 실습 예제는 여기에 있습니다. 서론 '학교'와 '학생'은 1:N의 관계에 있습니다. 그러므로 '학교'는 기본키, '학생'은 외래키로 활용되며 아래와 같이 Entity를 만들 수 있습니다. @Before로 데이터 세팅 @Before public void setup() { List schools = new ArrayList(); for(int i=1; i a.getSchool().getName()) .collect(Collectors.toList()); } @Test @Displa..

    개인적으로 사용하는 Eclipse와 Intellij에서 사용하는 디버깅 방식

    Eclipse 디버깅 모드 시 ctrl + shift + D 를 하면 display 기능을 이용해 개발자도구를 이용해 자바스크립트를 조작하듯이 코드를 실행할 수 있다. Intellij 디버깅 모드 시 Alt + F8 누르면 Evaluate가 켜지는데 거기서 Shift + Enter를 누르면 여러줄을 입력할 수 있어서 반복문 같은 디버깅도 수월하게 확인할 수 있다. 개인적으로 Watch 화면에서 보는 것보다 계속 보던 Console 창에서 보는 것을 더 선호해서 쓰는 방법이다.