CORS Cross-Origin Resource Sharing의 약자로 서로 다른 출처에서 리소스를 공유한다는 뜻이다. 기본적으로 브라우저는 악의적인 웹사이트나 앱에서 사용자의 브라우저를 통해 다른 도메인에 있는 정보에 접근하여 보안상의 위협이 될 수 있기 때문에 교차 출처의 HTTP 요청을 제한한다. 언제 사용하지? 서버 사이드 렌더링의 경우 유저 A의 브라우저에서 B라는 도메인 사이트에 접속하면 B에서 바로 웹 페이지를 제공한다. 이렇게되면 요청을 보낸 B에서 응답이 발생하여 동일한 출처를 가지기 때문에 CORS 설정이 따로 필요하지않다. 하지만 클라이언트 사이드 렌더링의 경우 B라는 도메인에 접속하면 B에서 페이지를 받고 C 서버로부터 데이터를 받아서 페이지를 렌더링하기 때문에 서로 다른 출처를 가..
CSRF cross site request forgery의 약자로 악의적인 사이트에서 위조된 요청을 통해 공격하는 것을 뜻한다. 예를 들어 유저 A가 N 은행 사이트에 로그인해서 인증된 상태일 때, 악의적인 사이트 X에서 N 사이트에 대해 유저 A의 브라우저로 비밀번호 변경 요청을 보낸다면? 실제 유저 A의 N 사이트 비밀번호와 아이디를 얻어 X 사이트의 해커가 유저 A의 계정으로 로그인을 할 수 있게된다. 이런식으로 인증된 유저의 브라우저를 통해서 공격하는 방식이 바로 CSRF이다. XSS Cross-Site Scripting의 약자로 악의적인 사이트에서 강제로 스크립트 코드를 실행해서 유저의 정보를 탈취하는 공격을 뜻한다. 예를 들어 유저 A가 X 사이트에 접근했을 때 X 사이트에서 스크립트를 실행해..
문제 아래 Controller에 대한 테스트 코드를 작성하는 도중 인증 정보가 없어서 NPE가 발생하는 문제가 생겼다. @PostMapping("/new") public ResponseEntity studySave(@RequestBody @Valid RequestStudyGroupDto dto, @AuthenticationPrincipal CustomUserDetails user){ StudyGroupDto studyGroupDto = studyService.createStudyGroup(dto, user.getId()); return ResponseEntity.status(HttpStatus.CREATED).body(studyGroupDto); } 해결 이전에 인증 과정을 통과하기 위해서 @WithMo..
계층형 모델 인스턴스에서 다른 인스턴스의 속성 값을 통해 상위와 하위를 구분할 수 있는 테이블 예시 직원 아이디 이름 상사 아이디 1001 김철수 null 1002 신짱구 1001 상사의 아이디를 통해 '짱구'의 상사가 '철수'임을 알 수 있다. 계층형 쿼리 계층형 모델에서 계층을 통해 데이터를 가공해서 조회하기 위한 쿼리 예시 SELECT D.*, LEVEL FROM DEPT2 D START WITH PDEPT IS NULL CONNECT BY PRIOR DCODE = PDEPT; 쿼리 결과 DCODE DNAME PDEPT AREA LEVEL 1 0001 사장실 null 포항본사 1 2 1000 경영지원 0001 서울지사 2 3 1001 재무관리 1000 서울지사 3 4 1002 총무팀 1000 서울지..
JVM의 동작 방식 자바 프로그램을 실행하면 OS로부터 JVM의 Runtime Data Area에 메모리가 할당된다. 이후 Class Loader에 의해 .class 파일이 동적으로 메모리에 올라가게 되고 Execution Engine에 의해 명령어 단위로 바이트 코드를 해석한다. Java의 메모리 구조 Java의 메모리 구조는 크게 메서드, 힙, 스택 세 가지 영역으로 나눌 수 있다. 이 중에서 메서드와 힙 영역은 프로세스 단위로 할당되어 스레드 간에 공유가 이루어지는 GC의 타겟 영역이다. 메서드 영역 클래스 정보, 메서드 정보, 정적 변수, 상수를 저장한다. 실행 시점에 모두 알고있는 정보이기 때문에 실행 시점에 메모리에 바로 로드된다. 힙 객체와 배열을 저장한다. 프로세스 실행 중에 동적으로 생성..
Java의 특징 WORA(Write Once, Run Anywhere), 플랫폼에 독립적이다. Java로 작성된 프로그램은 JVM (자바를 실행하기 위한 소프트웨어) 위에서 실행된다. OS에서 직접 실행하는 것이 아니기 때문에 자바 코드는 JVM만 있다면 어디서든 실행할 수 있다. 객체지향 언어이다. OOP의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향 언어이며, C++ 처럼 포인터를 사용하지도 않기 때문에 배우기 쉽다. 메모리를 자동으로 관리해준다. C언어에서는 malloc()으로 메모리를 할당하면 반드시 free()를 호출해서 개발자가 직접 메모리를 반환해주어야 했다. Java에서는 GC(Garbage Collection)가 new를 통해 생성되어 메모리를 할당받은 객체를 일정 주기로 ..