목록Spring/Spring 개념 (10)
yeon's blog
HTTP 요청 파라미터 - 쿼리 파라미터, HTML Form 클라이언트에서 서버로 요청 데이터를 전달할 때는 주로 다음 3가지 방법을 사용한다. 1. GET - 쿼리 파라미터 ?username=hello&age=20 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함하여 전달 검색, 필터, 페이징 등에서 많이 사용하는 방식 2. POST - HTML Form Content-Type: application/x-www-form-urlencoded 메시지 바디에 쿼리 파라미터 형식으로 전달: username=hello&age=20 HTML Form 사용 3. HTTP message body에 데이터를 직접 담아서 요청 HTTP API에서 주로 사용 JSON, XML, TEXT 등 데이터 형식은 주로 J..
HTTP 요청 - 기본, 헤더 정보 조회 애노테이션 기반의 스프링 컨트롤러는 다양한 파라미터를 지원한다. HTTP 요청 헤더 정보를 조회하기 위한 코드를 작성한 후, @Slf4j 로깅 라이브러리를 이용해 각 요청에 대한 로그를 남겨 확인해보았다. *로그 관련 글 첨부 https://hyeyeon-ii.tistory.com/66 RequestHeaderController 전체코드 package hello.springmvc.basic.request; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.spri..
HTTP 요청 매핑 관련 애노테이션을 정리해보자 ‼️ 요청 매핑 @RequestMapping 클라이언트 요청에 정보를 어떤 Controller가 처리할지 매핑하기 위한 애노테이션 @RequestMapping에 URL을 포함하여 해당 Controller 클래스에 명시하여 사용한다. 웹 브라우저에서 해당 URL이 호출되면 Controller 내부의 메서드가 호출된다. @RequestMapping("/mapping/users") public class MappingClassController { ... } 웹 브라우저에서 `http://localhost:8080/mapping/users` URL이 호출되면 → MappingClassController 내부의 메서드가 호출된다는 것이다. @Controller @..

System.out.print() System.out.print()로 콘솔을 남기게 되면 문제가 있다. print() 메서드는 syncrhonized로 동기화가 되어있어, 기록을 남길 때마다 lock이 걸려 엄청난 성능 저하를 불러 일으키게 된다. 개발 단계에서 이를 사용한 후 방치해두면 I/O 요청이 발생할 때마다 쓸데없는 리소스를 잡아먹게 될 것이다. 로그(Log) 로그(Log)는 기록을 남기는 것으로, 로깅을 하면 앱 개발시 발생하는 문제점을 모니터링하거나 추적하는 데 용이하다. 또한 해당 데이터를 분석해 통계를 낼 수도 있다. 하지만 로그를 잘못 사용하면 문제가 생길 수도 있기 때문에, 효율적으로 로깅하는 방법을 이해해야 한다. 참고로 로그 관련 라이브러리도 많고, 깊게 들어가면 끝이 없기 때문에..

지난 포스트에 이어 Spring Security의 인증 처리 과정에 대해 알아보려 한다. 4. Spring Security 인증 처리 과정 1) 클라이언트(유저)가 로그인을 요청한다. → Http Request 수신 2-1) AuthenticationFilter에서 인증을 처리한다. Servlet Filter에 의해서 Security Filter로 Security 작업이 위임되고 (AuthenticationFilter가 요청을 가로챔), 여러 Security Filter 중에서 UsernamePasswordAuthenticationFilter에서 인증을 처리한다. 2-2) UsernameAuthenticationToken 발급 AuthenticationFilter는 HttpServletRequest에서 ..

1. Spring Security 개념 스프링 기반의 애플리케이션의 보안(인증과 권한)을 담당하는 프레임워크 스프링 시큐리티는 필터(Filter) 기반으로 동작하기 때문에 스프링 MVC와 분리되어 관리 및 동작한다. 필터(Filter)는 Dispatcher Servlet으로 가기 전에 적용되므로 가장 먼저 URL 요청을 받지만, Interceptor는 Dispatcher와 Controller 사이에 위치한다. 그래서 이 둘은 적용 시기에 차이점이 있다. Client (request) -> Filter -> DispatcherServlet -> Interceptor -> Controller Spring Security 3.2버전 부터는 자바 config 설정으로 간단하게 설정할 수 있다. (XML 설정 X..

패키지 구조에 정답이 있다고 생각하진 않지만, 기본적으로 사용하는 구조는 계층형과 도메인형이라고 생각한다. 계층형 구조 아래와 같이 계층별로 클래스를 모아두는 방법이다. (Controller는 Controller끼리, Service는 Service끼리) 계층형 구조는 프로젝트에 대한 이해가 낮아도 전체적인 구조를 빠르게 파악할 수 있는 장점이 있지만, 디렉터리에 클래스들이 너무 많이 모이게 되는 문제점이 있다. 도메인형 구조 아래와 같이 하나의 도메인 아래 관련 controller, service, repository 등 패키지를 각각 만들어 넣는 방법이다. 도메인형 구조의 경우 관련된 코드들이 응집해 있다는 장점이 있지만, 프로젝트에 대한 이해도가 낮을 경우 전체적인 구조를 파악하기 어렵다.

SRP: 단일 책임 원칙(single responsibility principle) 하나의 클래스는 하나의 책임만 가져야 한다는 원칙. 💡 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것! OCP: 개방-폐쇄 원칙 (Open/closed principle) 확장에는 열려있으나 변경에는 닫혀 있어야 한다는 원칙. 소스코드 변경은 없고 다형성을 이용하여 객체 생성 코드만 늘어나게 한다. 💡 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다 → Config LSP: 리스코프 치환 원칙 (Liskov substitution principle) 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다는 원칙 💡 LSP를 이해하기 위해..

1. Annotation 사전적 의미로 주석이라는 뜻 자바에서는 특별한 의미, 기능을 수행하도록 하는 기술 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 자동으로 getter, setter를 생성하기도 함 2. Annotation 종류 @Component 개발자가 생성한 class를 Spring의 Bean으로 등록할 때 사용하는 Annotation @ComponentScan @Component, @Service, @Repository, @Controller, @Configuration이 붙은 클래스 Bean들을 찾아 Context에 bean을 등록해주는 Annotation @Bean 개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용하는 Annotati..

🌱 Spring 🌱 Java 기반의 프레임 워크 Java 언어의 큰 특징인 객체 지향 언어를 살림 즉, 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 🌱 Spring Framework 특징 🌱 1. 제어의 역전(IoC, Invertion of Control) 제어의 역전: 객체의 제어권을 프레임워크의 컨테이너에게 넘기는 것 스프링 컨테이너에 Bean(객체) 등록시, 스프링 컨테이너에서 객체의 라이프 사이클(생성, 소멸)을 컨트롤 해준다. 즉, 객체에 대한 제어권이 스프링 컨테이너로 역전되는 것! 2. 의존성 주입(DI, Dependency Injection) 의존성 주입: 클래스간 의존성을 클래스 외부에서 주입하는 것 Spring에는 DI 컨테이너가 존재하여, 객체들 간의 의..