Java의 특징 WORA(Write Once, Run Anywhere), 플랫폼에 독립적이다. Java로 작성된 프로그램은 JVM (자바를 실행하기 위한 소프트웨어) 위에서 실행된다. OS에서 직접 실행하는 것이 아니기 때문에 자바 코드는 JVM만 있다면 어디서든 실행할 수 있다. 객체지향 언어이다. OOP의 특징인 상속, 캡슐화, 다형성이 잘 적용된 순수한 객체지향 언어이며, C++ 처럼 포인터를 사용하지도 않기 때문에 배우기 쉽다. 메모리를 자동으로 관리해준다. C언어에서는 malloc()으로 메모리를 할당하면 반드시 free()를 호출해서 개발자가 직접 메모리를 반환해주어야 했다. Java에서는 GC(Garbage Collection)가 new를 통해 생성되어 메모리를 할당받은 객체를 일정 주기로 ..
Authentication Archtecture SecurityContextHolder: 인증된 유저의 상세 정보가 저장된 스프링 시큐리티의 영역 ThreadLocal(스레드 단위로 할당 가능한 변수)을 사용하여 정보를 저장하여, SecurityContext가 요청을 처리하는 메서드의 파라미터로 들어가지 않더라도 항상 같은 스레드에서 사용할 수 있다. 현재 인증 요청을 처리한 뒤 스레드를 삭제하면 ThreadLocal은 안전한 방법이며, FilterChainProxy를 사용하면 SecurityContext가 항상 지워진다. SecurityContext: 현재 인증된 유저의 인증 정보(Authentication)를 포함하며, SecurityContextHolder로부터 가져올 수 있다. //Sample C..
Servlet Application Security Archtecture Servlet에서의 Spring Security은 Servlet Filter를 기반으로 한다. Filter Chain FilterChain: 필터 인스턴스와 서블릿의 집합 Spring MVC에서 Servlet은 DispatcherServlet 하나로 HttpServletRequest와 HttpServletResponse를 처리할 수 있지만, 필터 체인을 통해 다운스트림 필터 인스턴스 또는 서블릿의 호출을 막거나, HttpServletRequest 또는 HttpServletResponse를 수정할 수 있다. 필터는 다운스트림 필터 인스턴스와 서블릿에만 영향을 미치기 때문에 각 필터가 호출되는 순서는 매우 중요하다. public voi..
정규화 정규화란 RDB 설계에서 이상 현상을 해결하고, 중복을 최소화한 데이터 구조를 설계하는 방법이다. 1~5차 정규형까지 있으며, 4차 정규형부터는 역효과가 발생할 수 있기 때문에 일반적으로는 3차 정규형까지만 사용한다. 이상 현상이란? 잘못된 테이블 설계로 인해 갱신 이상, 삽입 이상, 삭제 이상 문제가 발생할 수 있다. 학번 이름 나이 성별 강의 코드 강의명 전화번호 1001 김철수 21 남 A12 Database 010-1234-1234 1002 이유리 21 여 A13 OS 010-3562-5674 1003 신짱구 23 남 A14 Data Structure 010-2345-6789 1003 신짱구 23 남 A15 Web Programming 010-2345-6789 1004 맹구 22 남 A16..
@OneToMany 필드를 작성하면서, 엔티티는 고유하기 때문에 Set을 사용해야할 것 같다는 생각이 들었다. 하지만 생각해보니 이제껏 강의나 다른 사람의 코드를 봤을 때는 대부분이 List를 사용하는 것을 보았는데 어떤 이유 때문에 List를 사용하는 것인지 의문이 들어 찾아보게 되었다. Why? JPA에서 지연 로딩을 적용했을 경우 프록시 객체를 반환하는데, 이때 OneToMany의 Set에 데이터를 추가하게되면 중복 검사를 진행하게되어 프록시가 강제로 초기화되는 문제가 발생한다. 그렇게 되면 지연 로딩의 장점을 활용할 수 없게되어 성능이 떨어질 수 있기 때문에 중복 검사를 하지않는 List를 많이 사용한다고 한다.
WAS 웹 애플리케이션 서버라고 부르며, 동적 컨텐츠를 처리하는 서버이다. 자바에서는 대표적으로 톰캣을 가장 많이 사용하며, 톰캣은 자바 코드로 작성된 Open Source WAS로 정적 컨텐츠를 처리하는 Apache Web Server와 동적 컨텐츠를 처리하기 위한 Servlet Container로 구성되어 있다. Servlet Servlet은 클라이언트의 요청과 서버의 응답을 처리하기 위한 자바 객체로 Servlet Container에 의해 생성되고 관리된다. 브라우저가 요청을 보내면 다음 서블릿 객체를 찾고, 없다면 생성하고, 존재한다면 새로운 스레드에 기존 서블릿을 할당하여 사용한다. 서블릿 객체는 서블릿 클래스 내부의 service() 메서드를 통해 실행되는데 service()는 내부적으로 GE..