Backend

Servlet과 JSP의 차이

  • Servlet
    • Container가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것.
    • Java 코드 안에 HTML코드가 들어간다.
    • Servlet이 수정되면 Java코드를 다시 컴파일 한 후 동적인 페이지를 처리해야 하기에 개발 생산성이 저하된다.
  • JSP (Java Server Page)
    • HTML기반에 Java 코드를 블록화하여 삽입한 것
    • JSP가 수정되면 재배포할 필요없이 WAS(웹 애플리케이션 서버)가 알아서 처리한다.

Java에서 DB 연결하는 방법

  • JDBC
    • Java Data Base Connection의 약자로 Java언어를 통해 데이터 베이스에 접근할 수 있는 프로그래밍을 의미
  • Connection Pool
    • 프로그래머가 소스에서 직접 DB에 연결하는 것이 아니라, 연결은 WAS(웹 애플리케이션 서버)가 하고 사용자는 WAS가 연결한 커넥션을 이용하는 방법.

Get과 Post 방식

  • Get 방식
    • 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 “이름”과 “값”이 결합된 스트링 형태로 전달
    • URL상에 서버로 보내는 데이터가 포함된다.
    • 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다
    • 길이에 제한이 있다. 즉 전송 데이터의 한계가 있다.
    • Post 방식보다 상대적으로 전송 속도가 빠르다.
  • Post 방식
    • 일정 크기 이상의 데이터를 보내야 할 때 사용한다
    • HTTP 메시지 안에 데이터를 담아 서버로 전송
    • 서버로 보내기 전에 인코딩하고, 전송 후에는 서버에서 다시 디코딩 작업을 한다
    • 주소창에 전송하는 데이터의 정보가 노출되지 않아 Get방식에 비해 보안성이 높다
    • 속도가 Get방식보다 느리다
  • 둘의 차이점
    • Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용한다
      • 정보에 대한 식별의 역할. 따라서 정보 링크용으로는 GET형식을 사용
    • Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용한다.
      • 로그인과 같은 경우
    • Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩돠어 URL에 붙는다.
    • Post방식은 전달되는 데이터가 보이지 않는다.
    • Get방식은 전달되는 데이터의 길이에 제한이 있으므로 많은 데이터를 전달하기 위해서는 Post방식을 사용하는 것이 바람직하다.
  • 세션과 쿠키 사용 이유
    • 현재 우리가 인터넷에서 사용하고 있는 HTTP 프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현제 페이지 간의 관계가 지속되지 않는다. 이에 따라 HTTP프로토콜을 이용하게 되는 웹 사이트에서는 웹 페이지에 특정 방문자가 머무르고 있는 동안 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.
  • Session
    • 특정 웹 사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한 번의 방문을 의미한다
    • 서버는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 떄 까지 인증상태를 유지한다.
      • 세션 ID를 쿠키를 사용하여 저장하고 가지고 있는다.
      • 따라서 세션도 쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버측에서 관리.
    • Session에 관련된 데이터는 Server에 저장된다
    • 따라서 쿠키에 비해 보안성이 좋다.
  • Cookie
    • 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
    • 쿠키는 인터넷 사용자가 특정 웹 서버에 접속할 때 생성되는 개인 정보를 담은 임시 파일로 서버가 아닌 클라이언트에 저장되어 다음에 해당 웹 서버를 방문할 경우 쿠키를 통해 사용자에 대한 정보를 파악할 수 있다.
    • 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효시간동안 브라우저가 종료되어도 파일로 저장되기 때문에 인증이 유지된다.
    • 쿠키는 클라이언트 PC에 저장되는 정보이기 때문에 다른 사용자에 의해 임의로 변경이 가능하다. 따라서 정보 유출이 가능하므로 보안성이 낮다.
  • 보안성이 낮은데도 세션대신 쿠키를 사용하는 이유
    • 모든 정보를 세션에 저장하면 서버의 메모리를 과도하게 사용하게 되어 서버에 무리가 가기 때문

HTTP Keep-Alive

  • HTTP는 connection less방식으로 연결을 매번 끊고 새로 생성하기에 많은 비용을 소비한다. 따라서 이를 보완하기 위해 Keep-Alive 기능을 지원한다
  • Keep-Alive는 연결된 소켓에 IN/OUT의 access가 마지막으로 종료된 시점부터 정해진 시간까지 access가 없더라도 대기하는 구조이다. 즉 정의된 시간 내에 access가 이루어지면 계속 연결된 상태를 유지할 수 있다.

MVC 패턴

  • MVC패턴은 디자인 패턴, 즉 어떠한 것을 개발하거나 유지보수 할 떄 좀 더 쉽고 편리하게 사용할 수 있도록 만든 특정한 방법들 중 하나이다.
  • MVC는 Model, View, Controller의 약자입니다.
    • Model
      • 애플리케이션의 정보, 데이터를 나타낸다.
      • 데이터베이스나 상수, 변수 등을 뜻한다.
      • 또한 이러한 Data, 정보들의 가공을 책임지는 컴포넌트를 말한다.
      • 모델은 사용자가 편집하길 원하는 모든 데이터를 가지고 있어야 하고, 뷰나 컨트롤러에 대해서 어떤 정보도 알지 말아야 하며, 변경이 일어나면(모델 내부에서의 변경이라든지 누군가가 모델을 변경하도록 요청한다던지) 변경 통지에 대한 처리방법을 구현해야 한다.
    • View
      • 사용자 인터페이스 요소를 나타낸다.
      • 데이터 및 객체의 입력, 그리고 출력을 담당한다. 즉 데이터를 기반으로 사용자들이 볼 수 있는 화면이다.
      • 뷰는 모델이 가지고 있는 정보를 따로 저장해선 안되고, 모델이나 컨트롤러와 같이 다른 구성요소를 몰라야 하며, 변경이 일어나면 변경 통지에 대한 처리방법을 구현해야만 한다.
    • Controller
      • 데이터와 사용자 인터페이스 요소들을 잇는 다리 역할을 한다. 즉 사용자가 데이터를 클릭하고 수정하는 것에 대한 이벤트들을 처리하는 부분을 뜻한다.
      • 컨트롤러는 모델이나 뷰에 대해서 알고있어야 하고, 모델이나 뷰의 변경을 모니터링 해야 한다.
  • MVC 패턴은 사용자가 보는 페이지, 데이터처리, 그리고 이를 중간에서 제어하는 컨트롤, 이 3가지가 서로 분리되어 각자의 역할에 집중할수 있게끔 하기에 유지보수성이나 확장성, 유연성이 증가하며 중복코딩의 문제점도 사라지게 된다.

Framework

  • 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스 프레임과 인터페이스 프레임의 집합
  • 프레임워크는 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성된다.
  • 프레임워크는 개발자가 따라야 할 가이드라인을 가지고, 개발할 수 있는 범위가 정해져 있으며 개발자를 위한 다양한 도구들이 지원된다.
  • 프레임워크 컴포넌트들을 재사용이 가능하다.
  • 라이브러리와의 차이점
    • 라이브러리는 단순 활용가능한 도구들의 집합이다.
    • 라이브러리는 자주 사용하는 로직을 재사용할 수 있도록 고안된 소프트웨어이다.
    • 프레임워크는 전체적인 애플리케이션 흐름을 스스로가 쥐고 있으며 그 안에서 필요한 코드를 짜 넣는다.
    • 즉 프레임워크는 가져다가 사용한다기 보다 그 안에 들어가서 사용한다는 느낌으로 접근할 수 있다.
    • 하지만 라이브러리는 사용자가 전체적인 흐름을 만들며 라이브러리를 가져다 쓰는 것이다.

Spring Framework

  • 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크
  • 특징
    • 크기와 부하의 측면에서 경량 컨테이너이다.
      • 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리하기에 일종의 컨테이너라 할 수 있다.
    • 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크이기에 특정한 인터페이스를 구현하거나 상속받을 필요가 없이 기존에 존재하는 라이브러리를 쓸수 있기에 용이하고 객체가 가볍다.
      • POJO는 setter, getter 메소드로 이루어진 Value Obejct성 Java Beans을 말한다.
    • 스프링은 제어 역행(IoC : Inversion of Control)을 지원한다.
      • IoC는 인스턴스 생성부터 소멸까지 개발자가 아닌 Servlet과 가은 bean을 관리해주는 컨테이너가 대신 관리해 준다는 것이다.
    • 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원한다.
      • 관점 지향 프로그래밍은 기존 OOP에서 기능별로 클래스를 분리했음에도 불구하고 여전히 로그, 트랜잭션, 자원해제 처럼 공통적으로 반복되는 중복 코드가 발생하는 단점을 해결하고자 나온 방식이다.
      • 개발 코드에서는 메인 로직에 집중하고 실행 시 메인 로직 앞 뒤 원하는 시점에 해당 중복 코드를 수행하게 함으로서 중복 코드를 줄일 수 있는 방식이다.
    • 스프링은 의존성 주입(DI : Dependency Injection)을 지원한다.
      • DI는 개발 코드 내부에서 객체를 생성하는 것이 아니라 별도의 공간에서 객체를 생성하고 데이터간의 의존성을 주입해 개발 코드에서는 이를 가져다 씀으로써 의존성을 줄이는 방식이다.

MVC 패턴

  • MVC는 Model, View, Controller의 약자로 소프트웨어 디자인 패턴의 하나
  • MVC 패턴에는 모델 1과 모델 2가 있지만 최근 웹 개발은 대부분 모델2를 사용
  • MVC 패턴을 사용하면 사용자 인터페이스와 비즈니스 로직을 분리하여 개발할 수 있다.
  • 화면과 데이터처리를 분리하여 재사용이 가능해진다.

Spring MVC 구조 (모델 2)

  • View : 사용자가 보는 화면 또는 결과를 의미한다.
  • Controller : 사용자가 웹브라우저를 통해서 어떠한 요청을 하면 그 요청을 처리할 컨트롤러를 호출하게 된다. 컨트롤러는 사용자의 요청을 처리하기 위한 비즈니스 로직을 호출하고 그 결괏값을 사용자에게 전달해 주는 역할을 한다.
  • Service : 사용자의 요청을 처리하기 위한 비즈니스 로직이 수행된다. 일반적으로 서비스 영역은 서비스 인터페이스와 이 인터페이스의 구현체(Impl)로 나뉜다.
    • 느슨한 결합을 유지하여 각 기능간의 의존관계를 최소화하기 위해
    • 이를 통해 기능의 변화에도 최소한의 수정으로 개발할 수 있다.
    • 모듈화를 통해 재사용성을 높힐 수 있다.
    • 스프링의 IoC/DI 기능을 이용한 빈 관리기능을 사용할 수 있다.
  • DAO : Data Access Object의 약자로 데이터베이스에 접속해서 비즈니스 로직 실행에 필요한 쿼리를 호출한다.
  • DB : 데이터베이스(Database)를 의미한다. 데이터베이스에는 애플리케이션에서 발생한 모든 정보가 저장되어 있다.

DAO와 DTO

  • DAO (Data Access Object) : 데이터베이스의 데이터 접근을 위한 객체이다. DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다
  • DTO (Data Transfer Object) : 컨트롤러나 뷰, 레이어 등 각 계층간 데이터 교환을 위한 객체를 말한다. VO(Value Obejct)라고 말하기도 한다.

Tomcat과 Apache

  • Tomcat은 멀티 스레드, Apache는 멀티 프로세스

태그:

카테고리:

업데이트: