Supersett
개발자의 하루
Supersett
Blockchain Dev
전체 방문자
오늘
어제
  • 분류 전체보기
    • 프론트
    • 회사생활
    • 블록체인
    • 프로젝트
      • 창업 프로젝트 (DRF + AWS)
      • Spring 프로젝트
    • [중앙대]멋쟁이 사자처럼
    • 기술서적
    • Problem Solving
      • 알고리즘
    • 일기장
      • 하루 정리
      • 삽질 일기
      • 조급할 때 눌러보기

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 프로젝트
  • java
  • 글리치해커톤
  • 디프만16기
  • 신입개발자
  • 블록체인정보가공
  • 자바
  • 국비지원
  • Multichain API
  • 비트코인
  • 니어프로토콜
  • 컴퓨터학원
  • 블록체인 서버설계
  • Luniverse
  • 구글소셜로그인
  • DEPROMEET
  • Near Scan
  • 면접준비
  • 멋쟁이 사자처럼 서류
  • Near Explorer
  • 국비
  • 국비교육
  • 해커톤
  • 멋사 중앙대
  • 자바스크립트
  • 초보개발자
  • 멋쟁이 사자처럼 면접
  • 취업준비
  • 멋쟁이사자처럼 중앙대
  • 멋쟁이 사자처럼

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Supersett

개발자의 하루

220314 [월] HTTP 상태코드 , SpringDAO, 동기
일기장/하루 정리

220314 [월] HTTP 상태코드 , SpringDAO, 동기

2022. 3. 14. 10:24

공부하자..

남는시간에 유투브 의미없는거보단 취업에 조금이라도 도움이 될만한 키워드로 검색해서 찾아보고 정리하자.


▶

학교강의들으면서 스프링강의 들을수 있을까,, 2주만 고생하자...


[오늘의 키워드]
1. 어제 받았던 질문 (http 통신방식, 에러 200 400 500) 정리하기

 

400 Bad Request 응답 상태 코드는 서버가 클라이언트 오류(예: 잘못된 요청 구문, 유효하지 않은 요청 메시지 프레이밍, 또는 변조된 요청 라우팅) 를 감지해 요청을 처리할 수 없거나, 하지 않는다는 것을 의미

 

500 에러의 경우 서버의 동작에서 발생하는 에러 중 더 정확한 에러 코드가 아닌 경우

- 서버 통신의 Timeout 시간 지연 오류
- 서버 트래픽 과부하
- 서버 언어의 구문 에러(스크립트 문법 오류)

  • 1xx (정보): 요청을 받았으며 프로세스를 계속한다
  • 2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
  • 3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
  • 4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
  • 5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다

 

2. api 적용하는데 어떤 특징이있는지? <<맞나?





[오늘의 계획]
1. 수업내용 복습(스터디)

2. 부트스트랩 커먼게시판쪽 마무리하기

3. 


[오늘의 공부]


실제로 만들어보자
Spring DAO 설정하기

- dataSource 설정 

- ojdbc 필요 -> maven repository 들어가서 ojdbc 11을 다운받습니다.

 -> jdbc 기능을 제공하기 위한 oracle driver 라이브러리

 

-spring jdbc 라이브러리 다운로드

-> spring dao 기능을 제공하는 라이브러리 - datasource 관련기능

=> 이걸 빌드하면 Transaction Manager도 같이 빌드처리 된다!

 

[bean configutaion 파일 설정]

apache가 제공하는 commons-dbcp2 라이브러리의 basicDataSource 클래스를 Spring bean으로 등록한다.

-> Connection 객체를 생성 관련 정보를 필드에 전달하여 저장 - setter injection한다

	<bean class="org.apache.commons.dbcp2.BasicDataSource">
		<property name="driverClassName" value="oracle.jdbc.driver.Oracledriver"/>
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:oracle"/>
		<property name="username" value="BITUSER"/>
		<property name="password" value="1004"/>
	</bean>

 

[SpringDAO 클래스 작성]

spring dao 기능을 이용하여 dao 클래스 작성 - spring-jdbc 라이브러리 빌드 선행 필수

- JdbcTemplate 클래스의 템플릿 메소드를 호출하여 dao 클래스 작성

JdbdTemplate 객체를 이용하는 방법

- JdbcTemplate 객체를 제공받아 필드에 저장 ㅡ  DI 이용 (권장)

- JdbcDaoSupport 클래스 상속 - JdbcTemplate 객체를 저장한 필드 사용

 

- injection을 위해서는 Setter 메소드가 필요.

- Bean Configuration File에서 StudentDAOImpl 클래스를 Spring Bean 으로 등록할 때 JdbcTemplate 클래스의 Spring bean을 필드에 인젝션 처리하여 의존관계 설정 ㅡ DI

 

 

JdbcTemplate.update(String sql, Object,,(0개이상의) object) : sql명령(insert,update,delete)를 dbms 서버에 전달하여 실행하는 메소드 - 조작행의 갯수를 반환한다. 

=> 매개변수의 sql 명령과, inparameter(?) 에 저장될 값을 차례대로 나열하여 전달.

insert,update,delete : 같은 경우는 springDAO 사용하는게 편리하다.

하지만, select는 MyBatis가 훨씬 강력하다.

 

[오후수업 포인트]

xml에서 스프링빈으로 등록해서 사용하는게 중요하다.

SpringMVC에 대해서 살펴볼것임.

 

(괴상하게 생겼네)

jdbcTemplate.queryForObject(sql, new RowMapper<Student>(){ 오버라이드 메소드 } ,no);

 

public List<Student> selectStudentList(){ }

- 익명클래스를 만들어주네

- 익명의 내부클래스 대신 사용하고자 하는 클래스를 선언한다 - 재사용성을 위해서!! 

 

프로그램이 dao를 갖다쓰는것이 아니고, service가 dao를 갖다가 쓴다.


프로젝트 시작

[web.xml]

:  was 실행시 프로젝트 자원을 컨텍스트(웹자원)로 제공하기 위한 정보를 설정한 파일

=> 리스너설정, 필터 설정, 서블릿 설정, 에러페이지 설정

context-param : 컨텍스트로 존재하는 모든 클래스에 값을 제공하기 위한 엘리먼트


listener : was 실행시 listener 클래스를 객체로 생성하기 위한 엘리먼트

Listener 클래스 :  ServletContextListener 인터페이스를 상속받은 자식클래스

└ contextInitialized() 메소드 : listener 객체 생성 후 자동으로 호출되는 메소드 - 초기화 작업

└ contextDestroyed() 메소드 : listener 객체 소멸 전 자동으로 호출되는 메소드 - 마무리 작업

 

was가 실행되자마자 가장 먼저 객체를 만들어준다

★ContextLoaderListener 클래스 : WebApplicationContext(Spring Container) 객체를 생성하고 Bean Configuration File을 읽어 Spring Bean으로 등록된 모든 클래스를 객체로 생성하여 컨텍스트로 존재하는 모든 클래스에서 사용할 수 있도록 제공하는 Listener 클래스.

Bean Configuration File : context-param 엘리먼트의 contextConfigLocation 이름으로 제공되는 파일


servlet : 서블릿 클래스를 웹프로그램(서블릿)으로 등록하는 엘리먼트 

=> DispatcherServlet 클래스(Front Controller)를 웹프로그램으로 등록

DispatcherServlet 클래스 : 클라이언트의 모든 요청을 처리하기 위해 Spring Framework에서 제공하는 Front Controller 클래스

-> webApplicationContext 객체로 Bean Configuration File을 읽어 서블릿에서 사용될 Spring Bean객체를 생성하여 등록한다.

====> WebServlet한테만 스프링 객체를 제공한다. 

init-param : servlet 클래스에서 필요한 값을 제공하기 위한 엘리먼트

★ 이거랑 위에 리스너랑 차이점이 무엇일까요?

 

왜 두개나 만들었음??????

사용할수있는 범위가 좀 다름 

리스너 : 컨텍스트로 존재하는 모든 클래스

디스패쳐 : appServlet으로 등록된 servlet에서만 사용가능

 

왜? -> servlet 엘리먼트를 사용하여 front Controller기능을 제공하는 servlet을 여러개 등록 가능.

 

<load-on-startup> : was 실행시 서블릿 클래스를 객체로 생성하기 위한 엘리먼트

->클라이언트의 요청 없이 was 실행시 미리 서블릿 클래스를 객체로 생성하기 위해 사용

->엘리먼트의 값은 0보다 큰 정수값을 사용하며 값이 작을수록 먼저 객체로 생성한다.


★ 어디에 어떤 스프링빈 파일을 만들어줘야하는지 구분이 되어야 한다.

 


mvc 실습하기

1. ListController 클래스

- Command Controller : 클라이언트의 요청을 처리하기 위한 클래스 - model

=> 인터페이스가 필요했었음.. 하지만 만들필요가 없다. 스프링이 제공해 주기 때문이다.

implements Controller..!

 

@Override

handelRequest() :  Front Controller(DispatcherServlet)에 의해 자동 호출되는 메소드

- was가 만들어주는 request 객체와 response 객체를 매개변수로 제공받아 요청처리한다.

- 뷰 관련정보를 스프링에서 제공하는 ModelAndView 객체에 저장하여 반환한다

ModelAndView : 응답관련 정보를 저장하기 위한 클래스

-> 요청에 대한 처리결과와 뷰페이지 관련 정보를 저장하여 front Controller에게 저장한다.

 

프론트컨트롤러 : 요청을 받는애, 요청을 분석해 알아서... 요청에 맞는 컨트롤러를 줘

커맨드컨트롤러 : 요청을 처리하는애

Spring MVC

 

SimpleUrlHandlerMapping : Front Controller에게 클라이언트 요청을 처리하기위한 Command Controller 클래스의 Spring Bean 객체의 beanName을 제공하기 위한 클래스

 

핸들러매핑 -> 디스패쳐 : 달라고해서 컨트롤러 객체를 넘겨준다.

모델앤뷰 : 처리결과와 뷰네임이 있음

 

  1. 사용자의 요청이 front Controller(dispatcherServlet)에 들어온다.
  2. front controller가 받은 요청정보를 처리하기위해 
    handlerMapping에게 정보를 넘기고 그에 맞는 
    컨트롤러 객체(command Controller)를 전달받는다.
  3. command Controller(model)가 일을한다
  4. -> 처리결과를 model에 담고 뷰네임을 view에 담아서 돌려준다.
    요청에 대한 처리결과와 뷰페이지 관련 정보를 저장하여 front Controller에게 저장한다.
  5. ViewResolver는 사용자가 요청한 것에 대한 응답 view를 렌더링하는 역할. view 이름으로부터 사용될 view 객체를 맵핑하는 역할
  6.  

5.

 

 

 

'일기장 > 하루 정리' 카테고리의 다른 글

220316 [수] OT , @ModelAttribute , @SessionAttribute  (0) 2022.03.16
220315 [화] Annotation MVC 설정  (0) 2022.03.15
220311 [금] AOP  (2) 2022.03.11
220310 [목] 검색 동적 Query 완성, Mapper 입력  (0) 2022.03.10
220309 [수] MySql , query 짜기  (0) 2022.03.09
    '일기장/하루 정리' 카테고리의 다른 글
    • 220316 [수] OT , @ModelAttribute , @SessionAttribute
    • 220315 [화] Annotation MVC 설정
    • 220311 [금] AOP
    • 220310 [목] 검색 동적 Query 완성, Mapper 입력
    Supersett
    Supersett
    하루를 돌아보고 공부한 티를 내기 위해 블로그를 만들었습니다.

    티스토리툴바