IT 55

Hello 서블릿 실습

서블릿 실습을 진행하기 위해서 프로젝트는 생성해준다. 프로젝트는 다음과 같이 생성해준다. 프로젝트를 생성할 때 보통 Packaging를 War이 아닌 Jar로 많이 생성하는데 JSP에 대해서 공부를 진행하기 위해서 Jar이 아닌 War을 선택해서 생성하겠다. 다음으로는 사진과 같이 Spring Web, Lombok를 선택 후 생성해준다. 이어서 다음과 같이 셋팅을 해준다. File -> Settings -> 검색창에 annotation processors 이어서 https://www.postman.com/downloads/에 접속 후 postman을 다운받아준다. 서블릿은 톰캣 같은 웹 애플리케이션 서버를 직접 설치하고, 그 위에 서블릿 코드를 클래스 파일로 올린 다음, 톰캣 서버를 실행하면 되지만 매우..

HTML, HTTP API, SSR, CSR

정적 리소스 ● 고정된 HTML 파일, CSS, JS, 이미지, 영상 등을 제공 ● 주로 웹 브라우저 HTML 페이지 ● 동적으로 필요한 HTML 파일을 생성해서 전달 ● 웹 브라우저 : HTML 해석 HTTP API ● HTML이 아니라 데이터를 전달 ● 주로 JSON 형식 사용 ● 다양한 시스템에서 호출 ● 데이터만 주고 받음, UI 화면이 필요하면, 클라이언트가 별도 처리 ● 앱, 웹 클라이언트, 서버 to 서버 HTTP API - 다양한 시스템 연동 ● 주로 JSON 형태로 데이터 통신 ● UI 클라이언트 접점 - 앱 클라이언트(아이폰, 안드로이드, PC 앱) - 웹 브라우저에서 자바스크립트를 통한 HTTP API 호출 - React, Vue.js 같은 웹 클라이언트 ● 서버 to 서버 - 주문 ..

서블릿, 동시 요청 - 멀티 쓰레드

서블릿이란? 웹 통신에서 요쳥과 응답을 처리하는 자바 객체이다. 주요 클래스로는 HttpServlet가 있다. 서블릿 특징 urlPatterns(/hello)의 URL이 호출되면서 서블릿 코드가 실행 HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse 개발자는 HTTP 스펙을 매우 편리하게 사용 서블릿 HTTP 요청, 응답 흐름 HTTP 요청시 WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출 개발자는 Request 객체에서 HTTP 요청 정보를 편리하게 꺼내서 사용 개발자는 Response객체에 HTTP 응답 정보를 편리하게 입력 WAS는 Response 객체에 ..

웹 서버, 웹 애플리케이션 서버(WAS)

클라이언트에서 서버로 데이터를 전송할 때 서버에서 클라이언트로 데이터를 응답할 때 모두 HTTP를 기반으로 데이터를 전송하고 응답한다. 그러므로 모든것이 HTTP를 기반으로 전송을 하고 응답을 하게 된다. 예를 들어 HTML, TEXT, IMAGE, 음성, 영상, 파일 등이나 요즘에 많이 사용하는 API의 문서양식인 JSON, XML등이 있다. 거의 모든 형태의 데이터 전송이 가능하고 서버간에 데이터를 주고 받을 때도 대부분 HTTP 프로토콜을 사용한다. 웹서버(Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적HTML, CSS, JS, 이미지 등등 EX) NGINX, APACHE 웹 애플리케이션 서버 (WAS-Web Application Server) HTTP 기반으로 ..

SpringBoot - AOP (2)

AOP (1)에 이어서 두번째 AOP시간이다. 우선 오늘 처음으로 공부한 내용은 메소드의 실행시간을 가지고 서버의 부하, 서버의 현재 상태를 로깅으로 남길 수 있기 때문에 로깅을 남기는 실습을 먼저 진행하겠다. 하지만 이번엔 단순하게 AOP만 만드는 것이 아니라 커스텀 된 annotation을 하나 만들어서 해당 annotation을 가지고 annotation이 설정된 메소드만 기록을 할 수 있도록 실습을 진행하였다. @Around를 활용해 반복되는 logic을 AOP로 따로 빼네서 반복하지 않고 관리하고 실행할 수 있도록 하는 실습을 진행하였다. 우선 aop패키지에 TimerAop.java파일을 생성해 준다. 이어서 annotation패키지를 생성해 주고 Timer.java파일로 Timer annota..

Spring Boot/AOP 2023.05.01

SpringBoot - AOP (1)

AOP ( Aspect Oriented Programming) 관점지향 프로그램 스프링 어플리케이션은 대부분 특별한 경우를 제외 하고는 MVC 웹 어플리케이션에서는 Web Layer, Business Layer, Data Layer로 정의한다. - Web Layer : REST API를 제공하며, Client 중심의 로직 적용 - Business Layer : 내부 정책에 따른 logic를 개발하며, 주로 해당 부분을 개발 - Data Layer : 데이터 베이스 및 외부와의 연동을 처리 주요 Annotation Annotation 의미 @Aspect 자바에서 널리 사용하는 AOP프레임워크에 포함되며, AOP를 정의하는 Class에 할당 @Pointcut 기능을 어디에 적용시킬지, 메소드? Annotat..

Spring Boot/AOP 2023.05.01

DB-SQL명령어

데이터베이스란? 데이터베이스란 구조화된 정보 또는 데이터의 조직화된 모음으로서 일반적으로 컴퓨터 시스템에 전자적으로 저장이 된다. 데이터베이스는 일반적으로 데이터베이스 관리 시스템(DBMS)에 의해 제어되고 이러한 데이터를 정의, 제어, 조작하는 명령어가 존재하는데 이런 명령어를 쉽게 SQL이라고 할 수 있다. SQL이란? Structured Query Language의 약자로 데이터를 쿼리, 조작 및 정의하고 액세스 제어를 제공하기 위해 거의 모든 관계형 데이터베이스에서 사용되는 프로그래밍 언어이다. 그럼 SQL은 왜 필요할까? SQL은 CRUD기능 중 하나인 R(Read)를 엄청나게 편하게 만들어 준다. 그리고 데이터를 손쉽고 깔끔하게 정리/분석하는 기능도 지원하기 때문에 원하는 데이터를 빠르게 찾아..

데이터베이스 2023.04.27

정렬 알고리즘(java)

3번 정렬 알고리즘 평균 수행 시간이 O(n^2)인 알고리즘 ● 버블 정렬, 삽입 정렬, 선택 정렬 ● 각 요소가 다른 요소와 평균 한번 이상씩 비교를 하여 정렬 됨 Insertion Sort (삽입정렬)구현 ● Insertion Sort의 기본 개념은 이미 정렬된 상태의 요소에 새로운 요소를 추가할 때 정렬하여 추가하는 개념이다. ● 두 번째 요소 부터 이전 요소들과 비교하면서 insert될 위치를 찾아가며 정렬하는 알고리즘 package ch03; public class InsertionSort { public static void insertionSort(int[] arr, int count) { int i = 0, j = 0; int temp = 0; for(i = 1; i < count; i++..

코딩테스트 2023.04.26

정렬된 수에서 하나의 수의 위치 찾기(java)

문제 정의 ● 여러 개의 수가 정렬된 수서로 있을 때 특정한 수를 찾는 방법 ● 단순 반복문을 이용하면 수의 개수에 따라 비교 횟수가 증가하는 O(n)의 수행이 이루어짐 ● 수가 정렬된 상태에서는 이진 탐색을 활용하면 매번 비교되는 요소의 수가 절반으로 감소될 수 있으므로 O(logN)의 수행으로 원하는 수를 찾을 수 있음 ● 수의 예 : [12, 25. 31, 48, 54, 66, 70, 83, 95, 108] ● 83의 위치 찾기 ● 88의 위치 찾기 문제 해결방법 ● 수가 정렬된 상태이므로 중간의 값을 하나 선택한다. 찾으려는 값이 그보다 크면 범위를 오른쪽으로 그보다 작으면 범위를 왼쪽으로 좁힐 수 있다. ● 한번 비교 할때 마다 1/2씩 범위가 좁혀진다. 배열애 포함된 숫자를 입력했을 때의 코드..

코딩테스트 2023.04.26

ArrayList를 이용한 DB코딩

오늘 공부한 내용은 나만의 맛집 리스트 프로젝트를 진행하기 위해 필요한 데이터베이스를 mySQL과 같이 데이터베이스 관리 시스템을 사용하지 않고 ArrayList를 이용해 JPA를 흉내내는 데이터베이스를 사용하였다. ​ MemoryDbEntity.java package com.example.restaurant.db; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @Data public class MemoryDbEntity { protected int index; } MemoryDbRepositoryAbstract.java pac..