본문 바로가기

전체 글90

[SpringMVC] 스프링 MVC의 구조를 이해해보자 (2/3) V2: JSP 포워드 중복 제거 이전 포스팅에서 단순히 프론트 컨트롤러만 도입한 V1 을 만들어봤다. 이때는 단순히 프론트 컨트롤러를 도입하는 것에 의의를 두고 딱히 설계상 진보된 점은 없었다. 이번에는 V1에서 조금 더 진보된 형태인 V2를 만들어본다. 이번에는 V1에 화면을 그리는 책임을 가지는 오브젝트인 View를 도입해서 JSP를 포워드하는 코드의 중복을 없애보도록 하겠다. 아래의 코드 말이다. RequestDispatcher requestDispatcher = request.getRequestDispatcher(viewPath); requestDispatcher.forward(request, response); V2의 구조는 아래와 같다 이번에는 Controller가 View를 반환하는데, Co.. 2021. 7. 9.
[SpringMVC] 스프링 MVC의 구조를 이해해보자 (1/3) 애너테이션 기반의 스프링 MVC는 정말 편리하다. 얼마나 편리하나면 그 구조를 모르고 사용할때는 마치 마법처럼 느껴질 정도이다… 나는 그냥 문자열만 반환했는데 어떻게 뷰를 찾는건지, 나는 그냥 객체를 반환했는데 어떻게 Json으로 변환해서 HTTP 메시지 바디에 값을 입력하는지… 또 어떻게 컨트롤러의 파라미터에 맞춰서 필요한 컨트롤러를 동작시키는지… 이 과정이 어떻게 일어나는지 정확히 알려면 RequestMappingHandlerAdapter와 HttpMessageConverter, ArgumentResolver의 동작 방식과 구조를 알아야한다. 김영한님의 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 강의를 들으면서 스프링이 어떤 구조로 이런 다양한 변화에 맞게 컨트롤러를 호출하고 뷰를 반환하는지 .. 2021. 7. 9.
[토비의스프링] Ch.1-(2) 스프링 IoC, 싱글톤, DI 본 포스팅은 을 읽고 공부하면서 이해한 내용을 정리한 것입니다. 정확하고 자세한 내용은 반드시 원문 서적에서 확인바랍니다. 스프링의 IoC 이전 포스팅에서 코드를 리팩토링하면서 IoC를 적용하는 과정을 살펴봤다. 이렇게 그냥 IoC를 적용하는 것과 스프링을 이용하는 것에는 어떤 차이가 있을까? 스프링을 사용하면 아주 편리하게 IoC를 적용할 수 있음은 물론이고 스프링 컨테이너가 제공하는 여러 기능적 이점을 얻을 수 있다. 우선 기존의 코드에 스프링을 적용해보자. 스프링 적용 스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 Bean이라고 부른다. 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 Bean Factory라고 부른다. 보통 빈 팩토리보다는 이를 좀 더 확.. 2021. 7. 8.
[HTTP] REST API REST API가 무엇인지 알아본다. 비바 리퍼블리카 이응준 개발자님이 Naver DEVIEW에서 강연하신 내용을 듣고 요약했으며, 일부 예제는 김영한님의 HTTP 강의를 참고했다. 해당 자료에 대한 링크는 포스트 하단에 명시했다. REST API란 무엇인가 REST(REpresentational State Transfer)는 로이 필딩(Roy Fielding)이 '어떻게하면 웹을 망가뜨리지 않으면서 HTTP를 개선할 수 있을까'에 대한 고민을 하며 제안한 "분산 하이퍼미디어 시스템(ex.웹)을 위한 아키텍쳐 스타일"이다. 2000년에 자신의 박사 논문 에서 REST를 처음으로 제안하였다. 즉 REST API란 이 REST 아키텍쳐 스타일을 따르는 API를 말한다. 아키텍쳐 스타일은 제약 조건의 집합이다.. 2021. 7. 8.
[HTTP] HTTP 상태코드 HTTP 상태코드란 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주기 위해 정의한 기능이다. 즉 클라이언트는 HTTP 상태코드를 보고 내가 보낸 요청이 어떻게 처리되었는지 알 수 있다. 따라서 서버는 요청 결과에 알맞은 상태코드를 보내줘야한다. 대략적인 의미 1xx (Informational): 요청이 수신되어 처리중 (거의 사용하지 않음) 2xx (Successful): 요청 정상 처리 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 4xx (Client Error): 클라이언트 오류, 잘못된 요청으로 서버가 요청을 수행할 수 없음 5xx (Server Error): 서버 오류, 올바른 요청이나 서버 문제로 요청을 처리할 수 없음 클라이언트가 인식할 수 없는 상태코드를 서버가.. 2021. 7. 8.
[HTTP] GET과 POST의 차이 GET 리소스 조회를 위한 메서드. 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터 or 쿼리 스트링)를 통해서 전달한다. 다음과 같은 형태 GET /search?q=hello&hl=ko HTTP/1.1 Host: www.google.com 특징 리소스 조회가 목적이다. 데이터를 헤더에 쿼리 스트링으로 전달한다. 따라서 대용량 데이터를 보내기에 적절하지 않으며 보안에도 취약하다. POST 방식보다 빠르다. 브라우저에 캐싱이 가능하기 때문에 같은 요청의 경우 서버로 보내지 않고 캐싱된 정보를 보내준다. 이는 GET의 멱등성 때문이기도 하다. 멱등성이란 같은 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 말하는데, GET은 POST와 달리 멱등성을 가지고 있기 때문에 이같은 방식이 가능하다.. 2021. 7. 8.
검색창에 www.google.com을 검색하면 어떤 일이 일어날까? 웹의 전체적인 동작 과정을 이해하기 위해 공부한 내용을 정리한 글입니다. 전체적인 과정을 이해하는 것이 목적이므로 생략된 부분이 많습니다. 이론적이고 정확한 지식을 원하시는 분은 반드시 관련 전문 서적을 참조해주세요. 인터넷의 동작 과정 웹의 동작 과정을 이해하기 위해서는 우선 인터넷의 동작 과정부터 이해해야 합니다. '인터넷'하면 익스플로러나 크롬 아이콘의 이미지를 떠올리는 사람이 있다면 우선 웹과 인터넷의 개념을 분리할 필요가 있습니다. 인터넷과 웹의 관계는 너무 밀접해서 마치 인터넷과 웹이 같은 개념인 것처럼 느껴지지만 인터넷과 웹은 엄연히 다른 개념입니다. 인터넷은 1960년대에서 70년대 사이에 탄생했지만, 웹은 20여년 정도가 흐른 뒤인 1990년대에 탄생했습니다. 인터넷은 세상의 모든 컴퓨터.. 2021. 7. 8.
[모던 자바 인 액션] 동작 파라미터화 본 포스팅은 모던 자바 인 액션을 읽고 내용을 제 나름대로 정리한 것입니다. 자세한 내용은 반드시 해당 책에서 확인하시길 바랍니다. 객체 지향 패러다임이 각광을 받는 가장 큰 이유는 변화에 유연한 대응이 가능하다는 것이다. 요구 사항 변화에 유연하게 대응하도록 설계하는 것은 소프트웨어 유지 보수에 있어 매우 중요하다. 동작 파라미터화를 이용하면 자주 바뀌는 요구사항에 대해 효과적으로 대응할 수 있다. 이번 포스팅에서는 동작 파라미터화가 어떻게 변화에 유연하게 대응할 수 있는지를 살펴보고 Java 8의 람다 표현식이 동작 파라미터화 코드를 간단하게 표현할 수 있음을 확인한다. 모던 자바 인 액션 2장의 내용을 참고하였다. 동작 파라미터화는 메서드의 동작을 파라미터화해서 코드 블록의 실행을 나중으로 미루는 .. 2021. 7. 8.
[Java] 더블 디스패치(Double Dispatch) 6주차 스터디에서 메서드 디스패치에 대해 공부했다. 메서드 디스패치에는 동적 메서드 디스패치와 정적 메서드 디스패치가 있다. 그리고 메서드 디스패치를 활용한 더블 디스패치라는 기법이 있다. 더블 디스패치는 메서드 디스패치를 두 번 사용하여 유연성을 높이는 것인데, Visitor pattern에서 사용되는 기법이다. 여러 자료를 찾아보다가 토비님이 더블 디스패치에 대해 설명해주신 영상을 봤는데 한번에 와닿지는 않아서 포스팅으로 정리하면서 확실히 익혀보고자한다. 토비님의 영상은 여기! https://www.youtube.com/watch?v=s-tXAHub6vg&t=2732s 요구 사항 및 구현 자 우선 SNS 플랫폼에 맞게 포스팅을 뿌리는 서비스를 개발한다고 생각해보자. SNS라는 도메인과 Post라는 서.. 2021. 7. 8.