본문 바로가기

더 나은 엔지니어가 되기 위해/지금은 안쓰는 자바

[부스트코스 웹 프로그래밍] 자바 웹 개발 기초

부스트코스 웹 프로그래밍 BE 영상을 보며 공부한 것을 간단히 정리한다.

1. 자바를 이용한 웹 개발 기초

  • 웹 서버와 WAS란?
    • 웹 서버
      • 클라이언트에에게 HTML 문서나 각종 리소스를 응답을 전달해주는 역할.
      • 서버 범위 중 클라이언트와 가장 맞닿아 있음.
      • ex. Nginx, Apache
    • WAS (Web application server)
      • 웹 어플리케이션이 동작하도록 지원하는 목적을 가짐.
      • 즉, 서비스 및 비즈니스 로직을 담고있는 서버.
      • ex. Tomcat
    • 보통 WAS 도 웹 서버 기능을 내장하지만, 규모가 커지면 이 둘을 분리.
    • 웹 서버는 주로 정적 컨텐츠를, WAS 는 동적 컨텐츠를 지원.
  • Servlet 과 JSP
    • Servlet
      • 웹에서 동작해야하는 로직을 담고있는 클래스(코드)
      • uri 매핑, 다른 로직에 전달, WAS 로 응답 전달 등의 기능을 함.
      • init -> service -> destroy 의 라이프 사이클을 가짐.
    • JSP
      • 응답 웹 페이지 구성을 하는 파일로, html 과 유사함.
      • 해당 JSP 파일 요청이 들어왔을 때, Servlet 클래스 및 인스턴스로 구현됨.
    • 둘 다 Tomcat 에 기반하여 작동.
    • 보통 Servlet 파일로 요청을 받고, JSP 파일로 Foward 함.
  • Scope
    • 서블릿에서 주어지는 객체들은 일련의 scope를 가지고 있음.
    • page < request < session < application 순 으로 scope 가 커짐.
    • 즉 scope 이 커질수록, 어떤 객체에서든 접근할 수 있음.
    • '데이터'를 저장할 때, Scope을 구분하여 사용.
  • Maven
    • 빌드 및 라이브러리 의존성 관리 등을 해주는 도구
    • 별도의 양식과 디렉토리 구성이 존재하며, 정해진 관습이 있음.
    • pom.xml 에서 빌드 및 의존성 설정.
  • JDBC
    • Java 기반의 웹 어플리케이션과 외부 DB 를 연동시켜주는 라이브러리
    • Connection , PreparedStatement 객체로 Java 코드로 SQL 쿼리문을 작성하여 실행 가능.
  • WEB API
    • 일종의 코드 디자인 가이드
    • 자원에 대한 행위는 HTTP Method 로 표현해야 한다.
      • POST(생성), GET(조회), DELETE(삭제), PUT(갱신)
    • URI 는 정보의 자원을 표현해야 한다.
      • ex. GET /members 는 멤버의 모든 정보를 달라는 요청임.
      • 자원은 보통 복수명사를 씀. (member (x) members (o))
    • 슬래시 구분자는 계층을 나타날 때 사용
      • URI 마지막 문자로 / 를 넣지 않음.
      • 필요한 경우 _ 사용 하지않고, - 사용.
      • 소문자만 사용
    • 상태 코드
      • 200 번대는 주로 요청-응답 성공한 경우.
      • 400 번대는 주로 클라이언트(요청) 쪽에 의한 오류의 경우.
      • 500 번대는 주로 서버(응답) 쪽에 의한 오류의 경우.

 

2. Maven 프로젝트 구성

/src
    /main
         /java
             /com.examples (group_id)
                 /App.java
         /resources
/pom.xml

이중 Maven 이 빌드에 참조하는 파일은 pom.xml 임.
다음과 같이 생김

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
                             http://maven.apache.org/xsd/maven-4.0.0.xsd">

<!--프로젝트 관련 내용-->                     
<modelVersion>4.0.0</modelVersion>
<groupId>com.examples</groupId>
<artifactId>diexam</artifactId>
<version>1.0-SNAPSHOT</version>
<name>diexam</name>
<url>http://www.example.com</url>

<!--pom.xml 내에서 쓸 변수들 정의-->
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>4.3.14.RELEASE</spring.version>
</properties>

<!--이 프로젝트에서 사용하는 외부 라이브러리 목록-->
<!--이는 maven repository 에 등록된 라이브러리들을 참고하여 원격으로 다운받음.-->
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
<dependency>

<!--이 프로젝트를 빌드할 때 사용하는 플러그인 목록-->
<build>
    <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
            <source>11</source>
            <target>11</target>
        </configuration>
    </plugin>
</build>

아직 나도 정확히는 모르겠지만, 대략 이런 식으로 구성되어 있다.
모든 내용을 다 알지는 못하지만, 하나씩 감만 잡아본다.