보안에는 키라는 개념이 있다. 키를 사용해 평문을 암호문으로 암호화하고 키를 사용해 암호문을 평문으로 복호화한다. 암호화 방식에는 크게 대칭키 암호화 방식과 공개키(비대칭키) 암호화 방식이 있다. 이들을 알아보자. 대칭키 암호화 방식 대칭키 암호화 방식은 암호화와 복호화에 사용되는 키가 동일한 암호화 방식을 말한다. 암호화와 복호화에 쓰는 키가 동일하기 때문에 대칭키를 사용한다고 말한다. 대칭키를 가진 사람은 암호화와 복호화를 할 수 있다. 대표적인 알고리즘으로 DES, 3DES, AES, SEED 등이 있다. 장점 공개키 암호화 방식에 비해 속도가 빠르다. 단점 키 배송 문제가 발생한다. (키를 어떻게 상대방에게 전달할 것인가?) 사람이 증가할수록 관리해야 할 키가 증가한다. 이로인해 키 관리가 어렵게..
@RequestMapping @RequestMapping 애노테이션은 요청 url을 특정 컨트롤러로 맵핑한다. 기본 매핑 package hello.springmvc.basic; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController public class TestController { /** * 기본 요청 * 둘 다 허용한다 /hello-basic, /hello-basic/ * HTTP 메서드 모두 허용 GET, POST, HEAD, P..
프론트 컨트롤러스프링 MVC의 Dispatcher Servlet은 프론트 컨트롤러(Front Controller) 패턴으로 구현되어 있다. 기존의 MVC 패턴을 사용하면 공통 코드가 여러 컨트롤러에 산재되는데 프론트 컨트롤러 패턴을 적용하면 프론트 컨트롤러가 요청에 맞는 컨트롤러를 찾아서 호출함으로써 공통 코드를 한군데 모을 수 있다. DispatcherServlet스프링 MVC의 기본 서블릿이다. HttpServlet을 상속 받고 있다.DispatcherServlet → FrameworkServlet → HttpServletBean → HttpServlet스프링 MVC를 사용하려면 DispatcherServlet을 등록해야한다. 스프링 부트 구동시 DispatcherServlet을 자동 등록하며 모든 ..
간단한 회원관리 웹 애플리케이션을 만들어보면서 MVC 패턴이 왜 도입됬는지 알아보자. 회원 정보를 저장하고 조회하는 기능을 구현한다. 프로젝트 구성은 아래의 글의 구성과 같다. https://gunjoon.tistory.com/136 Spring Boot에서 Servlet 사용하기 프로젝트 구성 IDE : Intellj JDK 1.8 Maven Project (groupId = hello, artifactId = servlet, packaging = jar) Spring Boot 2.4.x Dependency (Spring Web, Lombok) HelloServlet 전통적인 스프링 웹 애플리케이션은 web.xml에 서블릿을 등록 gunjoon.tistory.com Member - 회원 도메인 객체 p..
프로젝트 구성 IDE : Intellj JDK 1.8 Maven Project (groupId = hello, artifactId = servlet, packaging = jar) Spring Boot 2.4.x Dependency (Spring Web, Lombok) HelloServlet 전통적인 스프링 웹 애플리케이션은 web.xml에 서블릿을 등록했다. 하지만 톰캣 7(서블릿 3.0)부터 자바 애노테이션으로 서블릿을 등록할 수 있다. (톰캣이 @WebServlet이 적용된 클래스를 검색해 서블릿으로 등록한다.) 1. @ServletComponentScan 추가 프로젝트의 ServletApplicaion 클래스에 @ServletComponentScan 애노테이션을 추가한다. SpringBoot에서 ..
서블릿 등장 배경 웹 클라이언트와 웹서버(또는 WAS)는 HTTP로 통신한다. 요청 메세지로부터 응답 메세지를 만들려면 웹서버는 다음의 처리 과정을 거쳐야 한다. 처리 과정이 복잡하기에 프로그래머는 비즈니스 로직에만 집중할 수 있도록 만들어줄 필요가 있다. 이를 위해 서블릿이 등장했다. 프로그래머는 서블릿 클래스만을 작성해 비즈니스 로직에 집중하고 서블릿을 지원하는 WAS(ex 톰캣)가 위 작업을 대신한다. 서블릿 서블릿이란 클라이언트 요청을 처리하고 그 결과를 반환하는 Servlet 클래스의 규현 규칙을 지킨 자바 웹 프로그래밍 기술이다. /hello 경로로 요청 WAS는 요청을 받으면 HTTP 요청 메시지를 기반으로 Request 객체와 HTTP 응답을 위한 Response 객체 생성 서블릿 컨테이너..
스프링 컨테이너 스프링은 스프링 컨테이너에 있는 객체를 관리한다. 스프링 컨테이너에 속한 객체를 빈(Bean) 객체라 하는데 스프링은 빈으로 등록된 모든 객체를 스프링 컨테이너에 생성하고 의존성을 주입한다. 스프링 컨테이너 생성 과정 1. 스프링 컨테이너 생성 스프링 컨테이너(ApplicationContext) 객체를 생성해 스프링 컨테이너를 생성한다. 이때 생성자로 스프링 설정 정보를 전달한다. 어노테이션 기반의 자바 설정 클래스 또는 XML 등 다양한 형식의 설정 정보를 넘겨줄 수 있다. ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); 2. 스프링 빈 등록, 의존 주입 전달받은 설정 정보를 기반으로 스프링..
스프링 입문을 위한 자바 객체 지향의 원리와 이해라는 책에서 스프링의 핵심은 스프링 삼각형이라 나온다. 여기서 스프링 삼각형이란 POJO를 기반으로 한 IoC/DI, AOP, PSA라는 3가지 프로그래밍 모델을 뜻한다. DI (의존성 주입) 객체는 다른 객체와 의존 관계를 맺을 수 있다. 예를 들어 A와 B객체가 있다고 해보자 A객체가 변할 때 B객체에도 영향을 미친다면 B객체는 A객체에 의존하고 있으며 둘은 의존 관계이다. 그리고 객체가 다른 객체에 의존할 때 즉 의존성을 가지고 있을 때 외부에서 의존성을 주입하는 것이 의존성 주입(Dependency Injection)이다. 아래 두 코드를 비교해보자. public class Car { Tire tire; public Car() { tire = new..