본문 바로가기

Spring_SpringBoot/이론

(22)
[ WEB ] [ WAS ] 개인적으로 HTTP요청이 들어오면 WEB에는 정적인 콘텐츠, WAS는 동적인 컨텐츠를 가져오는 것은 안다.대략적으로 알지 말고 쫌 자세히 알아보자. 다음은 클라이언트와 서버와의 통신 이해를 위한 그림이다.  1. WEB웹 서버는 요청이 정적 페이지면 자신이 처리하고, 동적 페이지에 관한 메세지가 있으면 웹 어플리케이션 서버에위임하게 된다. 데이터의 수정, 삭제 등의 조작이 필요할 땐 웹 애플리케이션 서버는 데이터 베이스 서버와 연동하여데이터를 수정하고, 요청의 결과를 html파일로 만들어서 웹 서버에 반환한다. → Tomcat으로만 하면 문제인 이유Tomcat WAS자체에서도 정적인 콘텐츠(HTML, CSS, JavaScript, 이미지 파일 등)를 서빙한다. HTTP 프로토콜을통해 클라이언트 요청을 처..
[ SOLID ] VS [ 싱글톤 ] 싱글톤을 사용하면서 궁금한 사항이 생겼는데 싱글톤 패턴을 생성하면 SOLID에 위배되는 거 아냐?? 일단 SOLID 정리하자. 1. Single Responsibility Principle (SRP)단일 책임 원칙은 클래스나 모듈이 하나의 책임만 가져야 한다는 원칙이다. 이를 통해 변경 이유가 하나로 제한되고코드의 응집도가 높아진다. 2. Open/Closed Principle (OCP)개방/폐쇄 원칙은 소프트웨어 개체(클래스, 모듈, 함수 등)가 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다는원칙이다. 즉, 기존 코드를 변경하지 않고 기능을 추가할 수 있어야 한다. 3. Liskov Substitution Principle (LSP)리스코프 치환 원칙은 서브타입은 언제나 자신의 기반 타입으로 ..
[ URI 요청(GET) ] SpringSecurity관련해서 url요청으로 테스트하고 있는데 URI요청에 대해서 정리해야겠다. 문제점 : Spring Security 통해서 /savemoney/mypage에 로그인 할 때 필터링을 걸었다. 그런데 로그인이 되지              않았는데도 SpringSecurity가 실행이 되지 않고 해당 페이지가 보였다. 결국 문제는 브라우저의 캐시               때문이다...              아무리 내가 savemoney/mypage를 해도 브라우저 자체 캐시로 그 전에 입력했던 saveMoney/mypage로              치환해서 요청을 한 것이다. 그럼 front단인 node.js는 "saveMoney/mypage" 로 요청을 받고 Apache는      ..
[ 세션 클러스터링(Session Clustering) ] 세션 클러스터링은 WAS가 두 대 이상 설치되어 있을을 경우 동일한 세션으로 세션관리를 하는 것을 의미한다.동일한 세션으로 여러 곳에서 사용할 수 있게 관리하는 것. 동시 접속자가 많은 경우 하나의 WAS만으로는 모든 처리가 불가능하기 때문에 WAS를 묶어 분산처리 한다.이 때 WAS는 한 곳에 세션을 몰아주거나 세션 서버를 따로 두어 관리하게 된다. 방식1. WAS가 두 대 이상일 때동시 접속자가 많은 경우 하나의 WAS만으로는 모든 처리가 불가능하기 때문에 WAS를 묶어분산처리 한다. 이 때 WAS는 한 곳에 세션을 몰아주거나 세션 서버를 따로 두어 관리하게 된다. 2. 서버 단계에서 볼 때 아파치 서버를 두고 톰캣 서버를 연통시켜서 사용하는 방법이다. 아파치를 통해 세션을 공유한다. 2-1) Hor..
@Autowired, @Inject, @Resource Spring을 쓰면서 Autowired를 썼는데 가끔 Inject, Resource가 있다. 차이점을 알아보자. 1) @AutowiredSpring에서 지원하는 어노테이션이다. 의존성을 주입하는 순서가 타입 → 이름 → @Qualifier → 실패 순서다. 2) @ResourceJava에서 지원하는 어노테이션이다. 특정 프레임 워크에 종속적이지 않다. 의존성을 주입하는 순서가 이름 → 타입  → @Qualifier → 실패 순서다.  3) @InjectJava에서 지원하는 어노테이션이다. 특정 프레임 워크에 종속적이지 않다.타입 → @Qualifier → 이름 → 실패이다.
[ AccessDeniedHandler ] VS [ AuthenticationEntryPoint ] Spring Security SpringSecurity 개발하면서 두 개의 차이점을 알아봐야겠다. 1) AccessDeniedHandler 사용자가 인증되었지만 권한이 부족할 때 호출된다. 예를 들면 다음과 같다.어떤 사용자가 자격 정지를 당했다. 그러면 DB에 있는 아이디 컬럼과 비밀번호 컬럼이 있어서 인증은 됐다.그러나 자격 컬럼에서 자격 정지를 당했다. 그러면 보통 403에러를 내면서 접근 금지 Response를 리턴한다. 2) AuthenticationEntryPoint인증이 되지 않았을 때 호출된다. 예를 들면 다음과 같다.myPage를 들어가기 위해서는 로그인이 되어 있어야 한다. 그러나 로그인을 안 한 사용자가 접속한다고 하면당연히 막아주어야 한다. 그러면 보통 401에러를 내면서 접근 권한 없음 Response를 리턴..
애노테이션(Annotation) - Component, Bean 애노테이션(annotation)은 사전적 의미로는 주석을 의미한다. 일반적인 주석과 다르게 애노테이션은 코드를 작성할 수 있다. 즉, 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것이 애노테이션이다. 애노테이션은 주석이기 때문에 다이나믹하게 실행되는 코드는 들어가지 않는다.즉, 런타임 중에 알아내야하는 값은 못들어간다.→ Annotation을 통해 @Autowired를 통해서 의존성을 찾지 못한다는 에러를 많이 봤을 것이다.    런타임 도중에 해석할 수 없으므로 코드가 실행되기 전에 에러를 내버리는 것이다. Annotation은 의미가 있는 것도 없는 것도 있다.예를 들어 Overriding같은 경우는 특별한 기능은 없다. 그러나 개발자의 편의상 제공하는 어노테이..
Spring-Security 프로젝트 중 Spring - Security 개발을 했다. 심도있게 알아보고 적용하자. 1 ) Spring SecuritySpring Security는 Spring 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 '인증'과 '권한'에 대한 부분을 Filter 흐름에 따라 처리하고 있다. Spring Security는 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다.→ ex) 로그인을 하지 않았는데 mypage 페이지의 문제가 생기는 경우 2 ) Spring Security Architecture 3 ) 인증(Authorization)과 인가(Aut..