Spring MVC Spring MVC: Spring에서 제공하는 웹 모듈. 웹 프레임워크의 한 종류로 MVC는 Model-View-Controller의 약자이다. Spring MVC는 클라이언트의 요청을 편리하게 처리해주는 프레임워크이며 서블릿 기반으로 동작한다. MVC 패턴을 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 실행되는 비즈니스 로직을 서로 영향 없이 유지보수할 수 있도록 개발할 수 있다. Model Spring MVC 기반의 웹 애플리케이션이 클라이언트의 요청을 전달받으면 요청 사항을 처리하기 위한 작업을 한다. 이렇게 처리한 작업의 결과 데이터를 클라이언트에게 응답으로 돌려줘야 하는데, 이때 클라이언트에게 응답을 돌려주는 작업의 처리 결과 데이터..
CGLIB CGLIB(Code Generator Library): 코드 생성 라이브러리로서 런타임에 동적으로 자바 클래스의 프록시를 생성해주는 기능을 제공한다. 인터페이스가 아닌 클래스에 대해서 동적 프록시를 생성할 수 있다. CGLIB는 Spring AOP를 공부하면서 들었던 개념이었다. Spirng에서 AOP를 적용할 때 런타임시 프록시를 생성한다. 이때 인터페이스 기반은 JDK Dynamic Proxy로 클래스 기반은 CGLIB를 사용한다. Spring Boot에서는 CGLIB를 사용하고 있다. CGLIB는 타겟에 대한 정보를 직접적으로 제공 받아 바이트 코드를 조작하여 프록시를 생성한다. 때문에 리플렉션을 사용하는 JDK Dynamic Proxy에 비해 성능이 좋다. 또한 CGLIB는 메소드가 처..
Annotation Annotations, a form of metadata, provide data about a program that is not part of the program itself. Annotations have no direct effect on the operation of the code they annotate. -https://docs.oracle.com/javase/tutorial/java/annotations/- Annotation: 사전적 의미로는 주석이라는 의미이다. 자바에서는 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다. 즉, 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종이다. 따라서 단순 주석 기능을 하는 것이 아닌 특별..
IP란? IP(Internet Protocol): 인터넷이 통하는 네트워크에서 어떤 정보를 빠르게 수신하고 송신하는 통신에 대한 규약 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다. 비신뢰성: 인터넷 망의 문제가 생기면 중간에 패킷이 사라질 수 있으며, 패킷이 순서대로 오지 않을 수도 있다. IPv4 VS IPv6 IPv4는 널리 사용되는 IP 주소로, 32비트의 값을 가진다. 보통 8비트씩 끊어 이를 0~255의 10진수 숫자로 나타내며, 각 숫자는 점(.)으로 구분한다. IPv6는 주소체계를 128비트 크기로 확장한 차세대 인터넷 프로토콜 주소이다. 16비트씩 8자리로 각 자리는 콜론으로 구분한다. 네트워크 속도, 보안적인 부분뿐만 아니라 여러 면에서 뛰어나지만 기존의 주..
서블릿이란? Servlet: 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 측 프로그램 혹은 그 사양. 자바를 사용하여 웹을 만들기 위해 필요한 기술이다. 클라이언트가 요청을 하면 그에 대한 응답을 줘야하는데, 이러한 역할을 하는 자바 프로그램이다. 서블릿은 자바로 구현 된 CGI라고 흔히 말하기도 한다. CGI(Common Gateway Interface(CGI): 서버와 애플리케이션 간에 데이터를 주고 받는 방식 과거 서버에서는 정적인 자료(HTML)만 주고 받을 수 있었다. 클라이언트가 자료를 요청하면 서버는 미리 만들어진 자료를 저장하고 있다가 반환했다. 하지만 인터넷 사용자가 많아지면서 사용자는 정적인 자료가 아닌 자신에게 맞는 자료를 요구하기 시작해 만들어진 것이 서블릿. 사용자 요구에 맞..
PSA(Portable Service Abstraction) PSA는 잘 만든 인터페이스이다. 💡PSA(Portable Service Abstraction): 하나의 추상화로 여러 서비스를 묶어둔 것, 환경의 변화와 관계없이 일관된 방식으로 기술에 접근할 수 있는 환경을 제공하려는 추상화 구조를 말한다. 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것을 서비스 추상화(Service Abstraction)이라 한다. 이러한 서비스 추상화로 제공되는 기술을 다른 기술 스택으로 간편하게 바꿀 수 있는 확장성을 갖고 있는 것이 PSA이다. 예를 들어 @Cacheable 애노테이션을 보면 된다. 비즈니스 로직의 특정 메서드의 결과를 캐싱하고 싶을 때 @Cacheable 애노테이..
AOP(Aspect Oriented Programming) 💡AOP(Aspect Oriented Programming): 관점 지향 프로그래밍이라는 의미로, 어떤 로직을 기준으로 핵심적인 관점, 공통적인 관점(부가적인 관점)으로 나누어서 보고 그 관점을 기준으로 모듈화하겠다는 의미이다. 애플리케이션 전반에 걸쳐 공통적으로 사용되는 기능들에 대한 관심사를 바로 공통 관심 사항(Cross-cutting concern)이라 부르며, 애플리케이션의 주목적을 달성하기 위한 핵심 로직에 대한 관심사를 핵심 관심 사항(Core concern)이라 부른다. 위 사진을 예로 들자면, 커피 주문 애플리케이션에서 커피 메뉴 등록, 커피 주문, 커피 주문 변경 등등 기능들이 핵심 관심 사항이고, 공통적으로 처리해야 할 부분인..
Spring Security의 구조 사용자가 로그인 정보와 함께 인증을 요청한다. AuthenticationFilter가 요청을 가로 챈 뒤, UsernamePasswordAuthenticationTocken의 인증용 객체를 생성한다. AuthenticationManger의 구현체인 ProviderManager에게 생성한 인증 토큰을 전달한다. AuthenticationManager는 등록된 AuthenticationProvider를 조회하여 인증을 시도한다. 실제 DB에서 사용자 인증정보를 가져오는 UserDeatailService에 사용자 정보를 전달한다. 넘겨받은 사용자 정보를 토대로 DB에서 찾은 사용자 정보인 UserDatails 객체를 만든다. AuthenticationProvider는 Use..
Spring Security란? Spring Security: Spring MVC 기반 애플리케이션의 인증(Authentication)과 인가(Authorization or 권한 부여) 기능을 지원하는 보안 프레임워크. Spring 기반 애플리케이션 보안을 위한 사실상의 표준이다. Authentication(인증): 해당 사용자가 본인이 맞는지 확인하는 절차 인증을 정상적으로 수행하기 위해 사용자를 식별하기 위한 정보가 필요하다. 이를 Credential이라 부른다. ex) 신분증 Authorization (인가, 권한 부여): 인증된 사용자가 요청된 자원에 접근가능한가를 결정하는 절차 반드시 인증 과정 이후에 수행되어야 한다. 권한은 일반적으로 역할(Role)형태로 부여된다. ex) 사원증, 사무실에 ..
OOP Study 에서 Spring Study로 방향성을 변경한 후, 처음으로 발표한 내용이다. Spring의 기초에는 스프링의 핵심기술인 IoC/DI, AOP, PSA 내용을 빼먹을 수 없겠지만, 다음 챕터에서 정리할 내용이기에 스프링 모듈쪽을 중심으로 정리했다. Spring의 기초 Spring의 모듈 구성 Spring Core Container 스프링 프레임워크 의존성 주입 IoC(Inversion of Control) 컨테이너 및 애플리케이션 컨텍스트 핵심 기능을 제공한다. 모듈 설명 spring-core - 스프링 모듈이 사용하는 핵심 유틸리티 - 프레임 워크의 기반을 제공 spring-beans - BeanFactory 인터페이스를 통한 구현을 포함 - 의존성 주입을 제공함 - Spring Be..