웹 프로그래밍 56

[ Spring ] 07. Spring의 IoC Container와 Application Context 계층 구조

IoC Container 기본적으로 스프링의 IoC 컨테이너는 스프링 애플리케이션에서 'Object 생성', '관계 설정', '오브젝트 사용 및 제거' 등의 역할을 수행하는 컨테이너를 의미한다. 스프링에서는 '빈 팩토리', '애플리케이션 컨텍스트'라고도 하고, 아주 간단한 표현으로 Application Context 인터페이스를 구현한 클래스 오브젝트라고도 한다. 편의상 일반적으로 IoC컨테이너를 애플리케이션 컨텍스트라고 칭하고, 스프링을 개발할 때 이 애플리케이션 컨텍스트를 계층 구조로 만드는 경우가 많다. 애플리케이션 컨텍스트의 계층구조는 부모역할을 하는 root-application context(루트 애플리케이션 컨텍스트)와,..

[ Spring ] 06. Spring MVC Framework와 Dispatcher-Servlet

Spring MVC MVC 패턴을 적용한 Spring framework Spring에는 개발자들이 일반적으로 사용할만한 기능과 운영 방식들이 편리하게 정의되어 있다. Spring MVC에는 스프링이 제공하는 모든 기능을 잘 활용하기 위해서 스프링이 내가 작성한 자바 bean(객체)을 관리할 수있도록 해야 한다. Spring Framework 내부에는 IOC 컨테이너가 존재해 내가 등록한 bean(객체)을 생성하고 관리해준다. -> 결합도(Coupling)을 낮출 수 있게 된다. 이를 위해 Dispatcher Servlet 이라는 Front-Controller 패턴의 Servlet을 가장 앞단에 둬서 컨테이너로 들어오는 모든 요청을 적절한 세부 컨트롤러로 작업을 위임해준다. 구성 DispatcherServ..

[ Spring ] 05. MVC패턴이란 무엇인가?

MVC 패턴 M, V, C가 나뉘어서 서버를 구성하는 모델을 모델2라고 하며 모델 1과 모델2의 차이도 있겠지만 여기서는 생략한다. M, V, C의 역할 Model(모델) 컨트롤러가 호출할 때, 요청에 맞는 역할을 수행한다. 비즈니스 로직을 구현하는 영역으로 응용프로그램에서 데이터를 처리하는 부분이다. 비즈니스 로직이란 업무에 필요한 데이터처리를 수행하는 응용프로그램의 일부이다. DB에 연결하고 데이터를 추출하거나 저장, 삭제, 업데이트, 변환 등의 작업을 수행한다. 상태 변화가 있을 때 컨트롤러와 뷰에 통보해 후속 조치 명령을 받을 수 있도록 한다. 애플리케이션의 상태(data)를 나타내고 일반적으로 POJO로 구성된다. Java Beans Contoller(컨트롤러) 일종의 조정자라고 할 수 있다.(..

[ Spring ] 04. POJO (Plain Old Java Object)에 관해

POJO Plain Old Java Object 오래된 방식의 간단한 자바 오브젝트 라는 말로서, Java EE 등 중량 프레임워크들을 사용하게 되면서 점점 무거운 객체를 만들게 된 것에 반발해서 생겨난 개념이다. 오래된 방식의 간단한 자바 오브젝트가 무엇일까? 쉽게 말하자면, 특정 '기술'에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 일컫는다. 예를들어, ORM(Object Relationship Mapping)이 새롭게 등장했을 때를 생각해보자. ORM 기술을 사용하고 싶다면 ORM을 지원하는 ORM 프레임워크를 사용해야 한다. (대표적으로 Hibernate라는 프레임워크가 있다.) 만약, 자바 개체가 ORM 기술을 사용하기 위해서 Hibernate프레임워크를 직접 의존하는 순간,..

[ Spring ] 03. JSP(Java Server Page)

JSP Java Server Page Java코드가 들어가 있는 HTML 코드 Life Cycle은 서블릿과 비슷하다. 서블릿은 자바소스코드 속에 HTML 코드가 들어가는 형태인데, JSP는 이와 반대로 HTML 소스코드 속에 자바 소스코드가 들어가는 구조를 갖춘 웹 어플리케이션 프로그래밍 기술이다. 클라이언트의 요청에 대해 동적 컨텐츠를 생성해서 응답결과를 만들어줄 때 사용하는 기술로 html문서에 화면을 작성하는 방법과 동일하게 작성하면 된다. 실행이 될 때 WAS 내부에 있는 JSP 컨테이너에 의해 서블릿으로 변환되서 실행이 되므로 자바코드를 사용할 수 있는 것이다. 스크립트 요소 스크립트릿 (Scriptlet) 자바코드를 작성할 수 있는 스크립트 요소 웹 브라우저로 보내는 것이 아니라 웹 서버에서..

[ Spring ] 02. Servlet(서블릿)을 파헤쳐보자.

Servlet 클라이언트의 요청을 처리하기 위한 기술. 또, 요청에 대한 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 간단히 말해서, 서블릿이란 자바를 사용해 웹을 만들기 위해 필요한 기술이다. 즉, 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송 해주어야 하는데, 이러한 역할을 하는 자바 프로그램 인 것이다. 클라이언트로부터 요청이 전달되면 서버에서 실행되며 DB연동이나 서버의 자원을 액세스하여 만들어진 결과를 다시 클라이언트로 응답한다. 이 클라이언트의 요청을 인식하고 실행하도록 하기 위해서는 서블릿은 정해진 규칙대로 작성되어야 하고, 서버가 서블릿을 찾아 실행될 수 있도록 정해진 위치에 작성되어야 한다. 정해진 위치? 표준화된 폴더 구조안에 있는 c..

[ Spring] 01. 객체지향 설계 과정과 원칙

객체지향 설계 과정 제공해야 할 기능을 찾고 세분화 한다. 그리고 그 기능을 알맞은 객체에 할당한다. 기능을 구현하는 데 필요한 데이터를 객체에 추가한다. 그 데이터를 이용하는 기능을 넣는다. 기능은 최대합 캡슐화하여 구현한다. 객체 간에 어떻게 메소드 요청을 주고받을 지 결정한다. 객체지향 설계 원칙 SOLID 라고 부르는 5가지 설계 원칙이 존재한다. SRP(Single Responsibility) - 단일 책임 원칙 클래스는 단 한개의 책임을 가져야 한다. 클래스는 변경하는 이유는 단 한개여야 한다. 이를 지키지 않으면 한 책임의 변경에 의해 다른 책임과 관련된 코드에 영향이 갈 수 있다. OCP(Open-Closed) - 개방 폐쇄 원칙 확장에는 열려있어야 하고, 변경에는 닫혀 있어야 한다. 기능..

[ Spring ] 00. OOP(객체지향 프로그래밍)

스프링 프레임워크에 대해 알아보기 전에 먼저, 객체지향에 대해서 먼저 살펴볼 것이다. OOP Object-Oriented Programming 객체지향 패러다임이 나오기 이전의 패러다임들부터 간단하게 살펴보자. 패러다임의 발전 과정을 보면 점점 개발자들이 편하게 개발할 수 있도록 개선되고 있다는 것을 알 수 있다. 가장 먼저, 순차적, 비 구조적 프로그래밍이 있다. 말 그대로 순차적으로 코딩하는 것이다. 필요한 게 있으면 계속 순서대로 추가해가며 구현하는 방식이다. 직관적이야 하겠지만 점점 규모가 커지면 어떻게 될까? 이러한 순차적, 비 구조적 프로그래밍에서는 goto문을 활용한다. 만약 이전에 작성했던 코드가 다시 필요하면 그 곳으로 이동하기 위한 것이다. 규모가 커지면 커질수록 goto문을 무분별하게..

[ WEB ] 08. 다양한 인증방식 (Authentication & Authorization)

Authentication & Authorization 인증방식 API KEY 서비스들이 거대해짐에 따라 기능들을 분리하기 시작했는데 이를 위해 Module이나 Application들간의 공유와 독립성을 보장하기 위한 기능들이 등장하기 시작했다. 그 중 제일 먼저 등장하고 가장 널리 보편적으로 쓰이는 기술이 API Key이다. 동작방식 사용자는 API Key를 발급받는다. (발급 받는 과정은 서비스들마다 다르다. 예를들어 공공기관 API 같은 경우에는 신청에 필요한 양식을 제출하면 관리자가 확인후 Key를 발급해준다.) 해당 API를 사용하기 위해 Key와 함께 요청을 보낸다. Application은 요청이 오면 Key를 통해 User정보를 확인하여 누구의 Key인지 권한이 무엇인지를 확인한다. 해당 K..

[ WEB ] 07. OAuth란?

OAuth Open Authentification 인터넷 사용자들이 비밀번호를 제공하지 않고, 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 개방형 표준 방법 이러한 메커니즘은 구글, 페이스북, 트위터 등이 사용하고 있으며 타사 애플리케이션 및 웹사이트의 계정에 대한 정보를 공유할 수 있도록 허용해준다. 용어 사용자 : 계정을 가지고 있는 개인 소비자 : OAuth를 사용해 서비스 제공자에게 접근하는 웹사이트 or 애플리케이션 서비스 제공자 : OAuth를 통해 접근을 지원하는 웹 애플리케이션 소비자 비밀번호 : 서비스 제공자에서 소비자가 자신임을 인증하기 위한 키 요청 토큰 : 소비자가 사용자에게 접근권한을 인증받기 위해 필요한 정보가 담겨있음 접근 토큰..

[ WEB ] 06. 웹 서버와 WAS의 차이

웹 서버와 WAS의 차이 웹 서버와 was의 차이점은 무엇일까? 서버 개발에 있어서 기초적인 개념이다. 먼저, 정적 페이지와 동적 페이지를 알아보자 Static Pages 바뀌지 않는 페이지 웹 서버는 파일 경로 이름을 받고, 경로와 일치하는 file contents를 반환함 항상 동일한 페이지를 반환함 image, html, css, javascript 파일과 같이 컴퓨터에 저장된 파일들 Dynamic Pages 인자에 따라 바뀌는 페이지 인자의 내용에 맞게 동적인 contents를 반환함 웹 서버에 의해 실행되는 프로그램을 통해 만들어진 결과물임 (Servlet : was 위에서 돌아가는 자바 프로그램) 개발자는 Servlet에 doGet() 메소드를 구현함 웹 서버와 WAS의 차이 웹 서버 개념에 ..

[ WEB ] 05. RESTful 하다는 것은?

RESTful 참고 : https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html RESTful 이란 RESTful은 일반적으로 REST라는 아키텍쳐를 구현하는 웹 서비스를 나타내기 위해 사용되는 용어이다. 'REST API'를 제공하는 웹 서비스를 'RESTful'하다고 할 수 있다. RESTful은 REST를 REST답게 쓰기 위한 방법으로, 누군가가 공식적으로 발표한 것이 아니다 즉, REST 원리를 따르는 시스템은 RESTful이란 용어로 지칭된다. RESTful 의 목적 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것 RESTful한 API를 구현하는 근본적인 목적이 성능 향상에 있는 것이 아니라 일관적인 ..

[ WEB ] 04. REST API란?

REST API 참고 : https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html 그러면 REST API는 무엇인가? API(Application Programming Interface) : 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것 REST API REST 기반으로 서비스API를 구현한 것 최근 OpenAPI, 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐) 등을 제공하는 업체 대부분은 REST API를 제공한다. REST API 특징 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유..

[ WEB ] 03. REST란?

REST 참고 : https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html REST : 웹 (HTTP)의 장점을 활용한 아키텍쳐 REpresentationaal State Transfer REST란 REST의 정의 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미. 즉, 자원(resource)의 표현(representation)에 의한 상태 전달 자원(resource)의 표현(representation) 자원 : 해당 소프트가 관리하는 모든 것 ex) 문서, 그림, 데이터, 소프트웨어 자체 등 자원의 표현 : 그 자원을 표현하기 위한 이름 ex) DB의 학생 정보가 자원일 때, 'students&#39..

[ WEB ] 02. Http Status Code

HTTP status code 클라우드 환경에서 HTTP API를 통신하는 것이 대부분이다. 이 때, 응답 상태 코드를 통해 성공/실패 여부를 확인할 수 있으므로 API 문서를 작성할 때 꼭 알아야 하는 것이 HTTP status code이다. 10x : 정보 확인 20x : 통신 성공 30x : 리다이렉트 40x : 클라이언트 오류 50x : 서버 오류 200번대 : 통신성공 상태코드 이름 의미 200 OK 요청 성공(GET) 201 Create 생성 성공(POST) 202 Accepted 요청 접수O, 리소스 처리X 204 No Contents 요청 성공O, 내용 없음 300번대 : 리다이렉트 상태코드 이름 의미 300 Multiple Choice 요청 URI에 여러 리소스가 존재 301 Move P..