본문 바로가기

전체 글88

mvc 1 - 스프링 MVC 스프링 MVC의 동작 원리에 대해 알아보자. FrontController Pattern으로 만든 수제 MVC와 실제 구현 되어 있는 MVC 구조는 동일하다. DispacherServlet 서블릿 등록 DispacherServlet도 부모 클래스에서 HttpServlet을 상속 받아서 사용하고 서블릿으로 동작한다. 1. 스프링 부트는 DispacherServlet을 서블릿으로 자동으로 등록하면서 모든 경로에 대해서 매핑한다. - 더 자세한 경로가 우선순위가 높기 때문에 기존에 등록한 서블릿도 함께 동작한다. 2. 서블릿이 호출되면 HttpServlet이 제공하는 service()가 호출된다. 스프링 MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service()를 오버.. 2022. 2. 24.
mvc2 - 필터, 인터셉터, 예외처리 서블릿 필터 로그인 되어 있는 사용자만 이용 가능한 URL이 있다고 생각해보자. 우리의 로그인 로직을 보면 @GetMapping public String items(Model model) { //로그인 여부 체크 List items = itemRepository.findAll(); model.addAttribute("items", items); return "items/items"; } @GetMapping("/{itemId}") public String item(@PathVariable long itemId, Model model) { //로그인 여부 체크 Item item = itemRepository.findById(itemId); model.addAttribute("item", item); ret.. 2022. 2. 21.
mvc1- 서블릿, JSP, MVC 서블릿 서블릿 만으로 웹 애플리케이션을 만든다고 하면 HTML 폼을 자바 코드에 직접 넣어줘야 한다. @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {.. 2022. 2. 19.
HTTP 웹 기본지식-3 헤더 HTTP 헤더 용도 - HTTP 전송에 필요한 모든 부가정보 - 표준 헤더가 매우 많다. - 필요시 임의의 헤더 추가도 가능하다. 우선 과거에 쓰이던 HTTP 규약부터 알아보자 RFC2616(과거) 헤더 분류 - General 헤더: 메시지 전체에 적용되는 정보, 예)Connection: close - Request 헤더: 요청 정보, 예)User-Agent:Mozilla/5.0 - Response 헤더: 응답 정보, 예)Server: Apache - Entity 헤더: 엔티티 바디 정보, 예)Content-Type: text/html, Content-Length: 3423 HTTP BODY - 메시지 본문은 엔티티 본문을 전달하는데 사용 - 엔티티 본문은 요청이나 응답에서 전달할 실제 데이터 - 엔티티.. 2022. 2. 17.
mvc2 - Bean Validation Bean Validation 검증 기능을 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 일반적인 로직이다. 이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고 표준화 한 것이 바로 Bean Validdation이다. Bean Validation을 잘 활용하면 애노테이션 하나로 검증 로직을 편리하게 사용할 수 있다. Bean Validation이란 javax 기술 표준으로 구현체가 아니다. 따라서 검증 애노테이션과 인터페이스의 모음이다. 이를 구현한 기술 중 일반적으로 사용하는 구현체는 하이버네이트 Validator다. Bean Validation을 사용하기 위해 의존관계를 추가해줘야 한다. implementation 'org.springframework... 2022. 2. 17.
mvc2 - 쿠키, 세션 로그인 향후 web을 다른 기술로 바꾸어도 도메인은 그대로 유지할 수 있어야 한다. 이렇게 하려면 web은 domain을 알고 있지만 domain은 web을 모르도록 설계해야 한다. 이것은 web은 domain을 의존하지만 domain은 web을 의존하지 않는다고 표현한다. 쿠키 쿠키 방식만을 이용한 로그인을 구현해보면 @Slf4j @Controller @RequiredArgsConstructor public class LoginController { private final LoginService loginService; @GetMapping("/login") public String loginForm(@ModelAttribute("loginForm") LoginForm form){ return "login/.. 2022. 2. 14.
HTTP 웹 기본지식 - 2 HTTP 메서드 API URI 고민 URI는 리소스만 식별해야 한다. 리소스와 해당 리소스를 대상으로 하는 행위를 분리 리소스는 명사(URI), 행위는 동사다(Method). HTTP 메서드 종류 1. GET: 리소스 조회 2. POST: 요청 데이터 처리, 주로 등록에 사용 3. PUT: 리소스를 대체, 해당 리소스가 없으면 생성 4. PATCH: 리소스 부분 변경 5. DELETE: 리소스 삭제 6. 기타메서드: HEAD, OPTIONS, CONNECT, TRACE 등등 1. GET 리소스 조회 서버에 전달하고 싶은 데이터는 query를 통해서 전달 메시지 바디를 사용할 수는 있지만 범용적이지 않아 사용하지 않는 것이 좋다. 2. POST 요청 데이터 처리 메시지 바디를 통해 서버로 요청 데이터 전달.. 2022. 2. 12.
MVC-2 message, validation 메시지 화면에 보이는 문구가 마음에 안든다고 전부 고쳐달라 하면 어떻게 해야할까? HTML파일에 메시지가 하드코딩 돼 있기 때문에 상품명, 가격, 수량 같은 label에 있는 단어를 변경하려면 화면들을 다 찾아가면서 변경해야 한다. 다양한 메시지를 한 곳에서 관리하는 기능을 메시지 기능이라고 한다. 예를 들어 messages.properties라는 메시지 관리 파일을 만들고 item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 각 HTML들은 해당 데이터를 key 값으로 불러서 사용한다. 국제화 메시지 파일을 나라별로 별도로 관리하면 서비스를 국제화 할 수 있다. 국가를 인식하는 HTTP 'accept-language' 헤더 값을 .. 2022. 2. 11.
HTTP 웹 기본지식 - 1 IP IP 패킷을 이용해서 데이터를 전송한다. 패킷에는 출발 IP와 목적 IP가 적혀 있다. 하지만 IP 프로토콜 만으로는 한계가 있다. 1. 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 2. 비신뢰성: 패킷의 손실이나 일정하지 않은 패킷 전달 순서의 문제 3. 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 여러개일 때 따라서 IP를 보완하기 위한 TCP, UDP가 존재한다. TCP에는 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 등이 포함돼 있다. TCP(Transmission Control Protocol) 1. 연결지향- TCP 3 way handshake ACK가 없으면 메시지를 보내지 않는다. 또한, 3번 ACK와 함께 메시지를.. 2022. 2. 4.
스프링 기본편 복습 - 2 빈에 등록해야 할 것들이 많아지면 귀찮고 누락 할 가능성이 커진다. 따라서 스프링은 자동으로 스프링 빈을 등록하는 컴포넌트 스캔을 제공하고, 의존관계 자동 주입을 해주는 @Autowired도 제공한다. 컴포넌트 스캔을 사용하기 위해서 @ComponentScan를 붙여주면 된다. 탐색 위치와 기본 스캔 대상 탐색할 패키지의 시작 위치 지정을 할 수 있지만 관례적으로 패키지 위치를 지정하지 않고 설정 정보 클래스의 위치를 프로젝트 최상단에 둔다. 지정을 하려면 basePackages: 탐색할 패키지의 시작 위치를 지정 basePackageClasses: 지정한 클래스의 패키지를 탐색 시작 위로 지정 디폴트는 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치 컴포넌트 스캔 기본 대상 @.. 2022. 1. 28.
당근 엔티티 구성 2022. 1. 23.
스프링 기본편 복습 - 1 스프링 부트 톰캣 같은 웹 서버를 내장하고 있기 때문에 별도의 웹 서버를 설치하지 않아도 된다. 빌드 구성을 위한 starter 종속성 제공, 외부 라이브러리 자동 구성(버전 자동 맞춤) 운영 환경에서 모니터링 기본 구성, 관례에 의한 간결한 설정 스프링의 핵심 자바 언어 기반의 프레임워크로 객체 지향 언어가 가진 특징을 살려내는 프레임워크, 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 객체 지향 프로그래밍 객체들의 모임으로 각각의 객체는 메시지를 주고받고 데이터를 처리한다. 프로그램을 유연하고 변경에 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 객체 지향이란 객체의 역할과 구현을 분리하는것을 의미한다. 역할과 구현으로 구분하면 단순, 유연해지며 변경도 편리해진다... 2022. 1. 23.