6/2 Spring 스프링

리무 rimu ·2023년 6월 4일

Spring

목록 보기
1/9

현재 위치 나타내는걸 커서라고 부름
열 위치 커서를 제일 끝으로 옮겨주는 걸 rs.last(); 호출

=> 현재 커서가 존재하는 위치(레코드)가 몇번째인지 구할 수 있음

성능적인 측면에 있어서 Collection 보다는 배열이 좋음

실제로 들어가 있는걸 사이즈라고 했는데
진짜로 몇 개를 넣을 수 있냐의 정보
=> capacity(용량)
만약 10개로 지정해놓으면 11개 넣는다치면
20개로 늘어남!
용량은 다 채우면 2배로 늘어남
원소 갯수가 많으면 많을수록 공간의 낭비가 多

가변길이 데이터가 쓰기도 편하고 기능도 많아서 좋은거 같지만 결국 2배씩 늘어나니까 실제 길이가 그런거처럼 보여주는 것

capacityIncrement : Vector 사이즈가 Vector 용량을 넘었을 때 자동적으로 늘려지는 양
elementCount : 이 Vector 객체 내의 유효한 컴포넌트의 수

capacity를 사용하면 Vector의 현재 용량을 돌려줌
돌아가는 값 : 현재 용량(이 Vector의 원소데이터 필드에 보유되고있는 그 내부 데이터의 배열의 길이)

우린 신경안쓰고 만들어도 된다고 함 😋

질의를 날리더라도 응답주고 응답받고 하는데 시간이 걸림
여러 사람 들어오면 에러나고 그런게 발생하는데 이런식으로 연결하는건 비용이 많이 듬

비용적으로 절감하는 법??? 어떻게 빠르게 응답할 수 있을까??
지금까지는 요청이 들어오면 실시간으로 처리했었는데

DBCP - Database Connection Pool

stream pool : 담아두는 공간
Connection을 실시간이 아니라 미리 만들어두는 것

우리가 만든 어플리케이션이라 생각하고 DB에 요청한다고 하면
아까는 요청할 때 연결됐는데 이제는 미리 만들어 놓고 있다가
DB연결된 상태를 유지해놓다가 필요할 때 사용하고 다시 공간에 담아둠!!
만들어진 Connection을 사용 => 이걸 DBCP라고 함!
(화살표는 Connection 객체라 생각)

이걸 어떻게 구현하나?

잘못 만들면 오히려 안쓴것만 못할 수도 있음
그래서 검증된 라이브러리를 잘 씀!
예를 들면 ~ 상용 WAS (돈 주고 사 쓰는 WAS) - 톰캣 말고 ^-ㅠㅋ
돈 주고 산거랑 아닌거랑은 성능 차이가 장난 아님 ^0^;
우리는 원리를 이해하려고 톰캣 사용

우리는 돈이 없으니 라이브러리를.....................?

https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp

다운받기~




두개 다 다운받아서 lib 에 넣기

워크스페이스에 한글 넣지않기

스프링 개발할 수 있는 환경임!

tc는 톰캣을 말하는거

레거시 : 힘들고 어려운 길..ㅎ
스트링부트 : 마법사같은 느낌

레거시프로젝트를 만들 수 있어야 함!
부트쓰면 동작하는 원리를 알 수 없음 (자동으로 해주는게 많기 때문)
현업에서는 jdk 높은 버전 쓰면 부트 못씀..?

next 누르면 한번만 다운로드 받으면 됨

. . . 3번째가 contextPath가 됨
contextPath 내가 이름 정함

이제 06_02가 아니라 first라고 뜰거임!

X 표시가 처음에 날텐데 기다리면 사라짐!

우린 java랑 webapp만 쓸거임~~!

실행해보기!

서버 접속하면 이렇게 뜹니다..ㅎ

di : defendence injection

HandlerMapping

Controller는 실제 로직을 담당하는 객체에게 호출(일해~)!
어떤 jsp에 가야하는지 정보를 전해줌!

ICmd cmdObj = cmd.get(cmd).action(request);
ICmd cmdObj = cmd.get(cmd); // 이게 handlerMapping
action(request); // controller 라고 생각

실제로 일시키는게 doAction
이 일을 하는게 Controller!!

접두어, 접미어라 생각
MyViewResolver => .jsp 만 붙여서 사용했었음
얘랑 같다고 생각하면 됩니다 😊
차이점은 우리가 이제 만들지 않는다는거
만약 바꾸고 싶으면 value에 내가 원하는 걸로 바꾸면 됨~
jsp 경로까지 지정가능!

value라는 값으로 매칭시킴
root로 들어오면 이 밑에 있는 메서드를 호출하겠서~
스프링은 인터페이스 기반이 아니고 url이 뭐인지에 따라서 컨트롤러가 함!
실제로 일을 하는건 아닌데 일 하는 놈을 따로 부를거임
우린 하나의 클래스로 되어있지만 컨트롤러는 여러개 만들수 있음
annotation 으로
root로 get방식으로 들어오면 home이라는 메서드를 실행하겠다~

package org.green.first;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		// todo : cmd.action(...)
		// 문자열 return 하면 view리저브가 받음
		return "home";
		// /WEB-INF/views/home.jsp
		// 이 경로로 서블릿에게 주고 forward 함
	}	
}

spring에서는 cmd를 서비스라고 부름
우리가 이제 만들어야 할 것들 jsp / 컨트롤러 / DAO / 서비스(cmd)

자바에서는 일을 하는 객체를 cmd(command pattern)라고 부름

input Validation(Client : javaScript / Server : Command Object)
실제로 받은 서버에서 확인하는 작업
우리는 2번 검사했다 라고 얘기하면 됨

무슨 목적으로 사용했다 가 DTO-Pattern

의존도 관리
ICmd 같은거 만들었음
reflection이용해서 properties 읽어왔었음

  • RowMapping 이랑 같은 RowMapper 객체

model2 이해하기!

STS = Spring Tool Suite

package org.green.first;

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	// url매핑을 어노테이션으로 함
	// 경로 /(루트) 고, get방식이면  home이라는 메서드를 실행함!
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home() {
		// todo : cmd.action(...)
		// 문자열 return 하면 view리저브가 받음
		return "home";
		// /WEB-INF/views/home.jsp
		// 이 경로로 서블릿에게 주고 forward 함
		// 폼을 내맘대로 만들 수 있음
	}	
}

WEB-INF안에선 외부에서 요청이 안됨


스프링이 관리하는 객체 bean(빈)

  • xml
  • 어노테이션
  • java code

그림에 붙은 s는 스프링이 관리하는 객체다 라는 뜻~!

프레임워크와 라이브러리의 차이

IOC Pattren : 제어의 역전 / 이때까지는 프로그래머가 프로그램 규칙을 개발자가 정했는데 framework는 정해진 규칙을 그대로 쓰는 것(내가 정하는것 X)

라이브러리는 내가 어떻게 써야하는지 활용 하고 결정
프레임워크는 방식이 정해져 있음

bean으로 등록하는 방법

우리가 안만든 class는 bean으로 어떻게 등록함?
그때는 root-context에서 xml로 등록~

어노테이션 인터페이스로 만들 수 있음
근데 우린 안만들거임~

골라서 사용가능~
이렇게 연결해서 사용

이건 어노테이션에서는 등록안됨?

등록하면 안되는것 : 값 나타내는 객체들
매 상황마다 값이 바껴야하는 객체들을 bean에 등록해서 쓰면 안됨

같은 타입을 2번 등록하는 경우는?

같은 some이지만 다른 데이터 타입인 경우, 다르게 등록가넝~~
처음은 default값이 나오고

setter을 이용해서 값 정의

profile
JAVA / SQL / Spring 을 공부하고 있습니다 🐥

0개의 댓글