Java로 게시판을 만들어보다 정리

개발빼-엠·2023년 1월 30일

Java

목록 보기
8/8
post-thumbnail

웹서버?

“웹 브라우저 클라이언트로부터 HTTP 요청을 받아드리고 HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램”

정적 컨텐츠를 제공하는 서버(HTML, CSS, javascript, 이미지, 파일 등 즉시 응답가능한 컨텐츠)

대표적인 웹 서버: Apache

WAS(web application server)?

“인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어로서, 주로 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행”

데이터베이스의 조회나 다양한 로직 처리가 필요한 동적 컨텐츠를 제공한다.

대표적인 WAS 종류: Tomcat

Tomcat

finder 폴더에서 command + option + c 폴더 경로 복사

cd /Users/bang-yeeun/Downloads/apache-tomcat-9.0.64/bin

// Tomcat 서버 실행
./startup.sh

// Tomcat 서버 끔
./shutdown.sh

서블릿?

자바 웹 서버로 웹 페이지를 제공할 때, 동적인 데이터를 제공하는 것을 도와준다.

서블릿의 사용 이유

서블릿을 사용하지 않고 직접 HTTP 통신으로 오고가는 문자열을 파싱해 서블릿과 같은 기능을 구현해도 무방하지만, 편리하게 사용할 수 있는 서블릿이 있기 때문이다.

  • 서블릿은 웹서버 내부에서 동작하는 작은 자바 프로그램이다.
  • 서블릿은 웹클라이언트에게 요청을 받고 그에 응답을 해준다.
    • 주로 HTTP를 통한다.
  • javax.servletGenericServlet 혹은 javax.servlet.http.HttpServlet을 상속받아서 인터페이스를 구현 가능하다.

서블릿의 라이프사이클

  1. 서블릿은 생성 이후에 init() 메소드를 통해 초기화된다.
  2. 클라이언트가 서비스 service()로 보낸 요청들을 처리한다.
  3. 서블릿은 사용 중지된 후, destroy()를 이용해 제거된다.

EL(Expression Language)

자바 빈의 프로퍼티, 값을 JSP표현식이나 액션태그를 사용하는 것 보다 쉽고 간결하게 꺼낼 수 있게 하는 기술

${}
#{}

<c:import> vs <jsp:include>

jsp:include → 내 서버 내의 jsp 파일만 가능

c:import → 외부 jsp 파일 접근 가능

<c:import> 는 유연성 및 기능 향상 제공

웹 서버뿐만 아니라 다른 웹 애플리케이션, 컨텐스트의 콘텐츠를 지정할 수 있다.

성능 향상은 미미하다.

<jsp:include>보다 무겁기 때문에 필요하지 않다면 <jsp:include>를 사용하는 게 좋다고 말하는 사람도 있다.

JSP

서블릿의 화면처리 어려움을 해결하기 위해 나왔으며 HTML과 데이터를 조합하기 위해 다음과 같은 주요 기능적 특징을 가진다.

  • HTML 페이지에 자바코드를 직접 사용
  • 서블릿 컨테이너에 의해 관리되는 내장객체들의 라이프사이클을 이용한 페이지간 속성관리
  • 커스텀 태그 기술을 사용한 코드의 태그화
  • EL(Expression Language)를 통한 데이터 표현
  1. jsp 소스 코드 작성 → 웹 애플리케이션 배포
  2. 사용자 요청시 컨테이너는 해당 jsp의 클래스 변환 여부 확인
  3. 변환되지 않았다면 xxx_jsp.java 파일 생성 및 .class로 컴파일
  4. jsplnit() 메서트를 통해 서블릿 실행
  5. _jspService() 메서드를 통해 사용자 요청 처리
  6. 이후 요청에 대해 메모리상의 서블릿으로 서블릿과 같이 서비스
  7. 컨테이너 종료 혹은 관리도구에의해 서블릿 jspDestroy() 호출로 종료

jsp사용은 서블릿에 손을 대지 않겠다는 것이고 결과물은 결국 서블릿이다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.*" errorPage="error.jsp"%>

JSP 폴더 구조

  • webapp: jsp, html, css 파일 작성
    • META-INF
      • 읽어야하는 자원에 대한 정보를 가지고 있는 파일을 배치한다.
      • Connection Pool을 이용하는 경우, 미리 연결해야할 DB에 대한 정보를 설정해줘야 한다.
    • WEB-INF(web information)
      • 웹과 관련된 정보를 의미한다. 프로젝트의 환경 설정 파일을 배치해야 한다.
      • Web.xml 파일(dynamic web project 생성시 체크박스클릭으로 생성가능)이 반드시 위치해야 한다.
      • WEB-INF 디렉토리 하단에 .jsp 파일을 넣으면 url로 해당 jsp파일에 직접 접근할 수 없다. 브라우저에서 url로 jsp 파일 등을 직접 요청하는 것을 제한하는 것이 보통이기 때문에 jsp파일들은 실무에서 WEB-INF폴더 안에 있다고 보면된다.
      • 반면, jsp파일 외에 브라우저가 반드시 참조해야 하는 css, 이미지등은 바로 참조가 가능하도록 Content Root 바로 하위 static 폴더를 만들어 관리한다.

웹과 관련 없는 데이터는 META-INF에 두자.

커넥션 풀(Connection Pool)?

WAS가 실행 될 때 DB연결을 위해 미리 일정수의 connetion 객체를 만들어 Pool에 담아 뒀다 사용자의 요청이 발생하면 Pool에서 생성되어 있는 Connection객체를 넘겨주고 사용자가 사요이 끝나면 Connection 객체를 다시 Pool에 반환하여 보관하는 기법이다.

  • java에서 DB Connection을 맺는 과정이 부하가 많이 걸리는 작업인데 이러한 문제를 해결하기 위해 미리 Connection을 생성하고 재활용해 서버에 부하를 줄여줄 수 있다.
  • 서버의 한정적인 자원을 효율적으로 사용할 수 있다.

Maven?

자바용 프로젝트 관리도구

JDBC(Java DataBase Connectivity)?

자바 프로그램이 데이터베이스와 연결되어 데이터를 주고 받을 수 있게 해주는 프로그래밍 인터페이스

응용프로그램과 DBMS간의 통신을 중간에서 번역해주는 역할을 한다.

*DBMS(DataBase Management System) Oracle, Mysql등등

자바 dependency가 저장되는 경로

tree 명령어 사용해 확인

/Users/bang-yeeun/.m2/repository/org

MyBatis?

자바에서 데이터베이스 프로그래밍을 할 때 JDBC API를 사용하는데, JDBC를 이용하려면 작성해야 할 코드가 많다.

MyBatis는 SQL Mapper를 통해 자바의 메서드와 SQL을 맵핑재누고 사용하기 쉽게 만든다.

Spring Boot

  1. 폴더구조

    src > main > resources > static에 정적파일 작성.

    templates폴더에서 jsp는 작동하지 않는다.

    • 사진 Untitled
  2. jsp 사용 https://antdev.tistory.com/27

    Maven을 사용한다면 pom.xml에 추가하고, Gradle을 사용한다면 build.gradle에 추가

Untitled

MySQL

id auto_increment 1로 초기화

ALTER TABLE [테이블명] AUTO_INCREMENT=1;

이미 만들어진 table auto_increment 설정 추가하기

ALTER TABLE [테이블명] MODIFY [컬럼명] [자료형(int)] AUTO_INCREMENT;

이미 만들어진 table에 created_at 추가하기

ALTER TABLE [테이블명] MODIFY COLUMN [컬럼명] timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP;

다른연동 방법

https://velog.io/@ghd64845/Spring-boot-MyBatis를-이용하여-MySQL-연동하기

java type VS sql type

https://honsal.blogspot.com/2017/04/mysql-java.html

성공한 블로그

https://limjunho.github.io/2021/08/11/spring-mysql.html

데이터 테이블 컴포넌트

0개의 댓글