스프링 1주차 정리

선장원·2021년 11월 27일
1

Spring

목록 보기
6/16

1주차 정리 (11/22~26)

스프링은 2주차까지 있을 것같군

Spring

프레임 워크(Framework)

  • string
  • js framework
    • React.js, node.js, vue.js,

스프링 프레임워크

  • tool: STS3 3.9.18
  • spring framework version : 5.2.9
  • jdk : 11(open jdk)

웹서버 구축

  • 프론트엔드(front end)
    • html, css, javascript
  • 백엔드(back end)
    • java, db
  • 서버 프로그램
    • tomcat

Spring 프로젝트 만들기

MVC project

네이버 : naver.com
네이버 뉴스 : news.naver.com

  • 스포츠 : sports.news.naver.com
    네이버 증권 : finance.naver.com
    네이버 지도 : map.naver.com

역순으로 입력

spring MVC project

MVC(Model 2방식) : 웹 서비스 구축을 위한 디자인 패턴
M(Model)
V(view)
C(controller)

Model 1방식

Model 2방식

ex) Memberjoin.jsp[V] <>
MemberController.memberJoin() <>
MemberService.memberJoin() [C] <>
MemberRepository.memberJoin() <>
DB.memberTable Insert [M]

스프링 프로젝트의 구조

src/main/java : 자바 클래스 폴더

ssrc/main/resources

  • 로그, db관련 설정 파일
  • 주로 .xml파일을 사용(설정값 지정)

src/test/*

  • 테스트관련
  • 테스트는 Spring boot에서

JRE System Library

  • jdk 관련 라이브러리

Maven Dependencies

  • 해당 프로젝트에서 관리되고 있는 의존성(dependency)
  • 의존성은 외부 라이브러리라고 일단 생각합시다
  • Maven
    • 버전 관리(빌드) 도구
    • 외부 라이브러리 관리
      src/이하 폴더들
  • main/java/com/~~
    • 자바클래스
    • 위의 src/main/java와 동일함
  • main/resources
    • 위의 src/main/resources와 동일
  • main/webapp/
    • resources : 웹의 정적 파일들(css, js, images)
    • WEB-INF/spring
      • root-context.xml : db 관련 설정 내용
      • appServlet/servlet-context.xml : 서블릿 관련 설정 내용
  • WEB-INF/views
    • jsp(java server page)
    • *.jsp 파일이 위치함
    • 사용자에게 보여지는 화면 파일
  • WEB-INF/web.xml
    • 프로젝트 실행시 가장 먼저 읽어지는 파일
    • root-context.xml, servlet-context.xml파일을 차례대로 읽음
  • pom.xml
    • dependency 관련 설정 파일
    • 라이브러리 설정

pom.xml 역할

dependency를 작성하면 maven이 해당 라이브러리를 사용자/.m2/repository폴더에 다운받아 관리해줌

스프링 프로젝트 실행 순서

web.xml > root-context.xml > servlet-context.xml > 기본주소(/)호출 > 기본주소를 처리하는 Controller클래스의 메서드 호출 > 해당 jsp 화면 브라우저 출력

servlet(서블릿)

서블릿이 HttpRequest객체와 HttpResponse객체를 관리하는데 그걸 서블릿 컨테이너를 관리하고 그걸 이제는 스프링 프레임 워크에서 관리를 한다 이런 내용인가??

주소

스프링프로젝트를 실행하면 기본주소는 가장마지막 패키지 이름귀에 /가 붙는다고 보면 됨.
ex) com.icia.study가 기본 패키지라면 실행시 기본 주소는
localhost:포트번호/study/
이후에 다른 주소요청을 하면 기본주소 위에 해장 주소가 붙는다고 보면 됨.

  • 회원가입 요청
    • localhost:포트번호/study/join
  • 로그인요청
    • localhost:포트번호/study/login
  • 회원목록 출력요청
    • localhost:포트번호/study/list

주소 불러오기

homeController에서 메서드를 만들어서

@RequestMapping(value=”/hello”) : 주소값에 /hello가 있으면 메서드를 실행

String 값으로 hi를 보내면 servlet-context에서 ViewResolver라는 것을 실행해
hi 값에 .jsp를 더해서 보이게 해준다.

V(jsp) > C(controller) 파라미터 전달

  • form태그
  • query string
    • search라는 주소로 오늘날씨라는 파라미터를 전송하면
    • search?q=오늘날씨

@RequestMapping

  • value : 요청을 처리할 주소
  • method : http method
    • get or post
    • 차이는 알아서 찾아보세요
    • 이건 쉽지

메소드 방식의 차이


주소가 같아도 방식이 다르면 가능하다

화면에서 전달한 파라미터 받기

1번은 보낼 때(name) 2번은 받을 변수

변수를 받아서 메서드 안에서 사용?

스프링이 관리하는 객체

아래와 같은 Annotation을 붙여주면 프로젝트를 시작할 때 스프링이 해당 클래스를 Spring Bean으로 등록하여 관리해줌

  • @Controller

    • Controller Class로 사용할 클래스에 붙임
    • Controller class의 역할
      • 주소요청에 대한 매핑(Request Mapping을 통해)
      • 비즈니스 로직 처리를 위해 Service클래스 호출
      • 처리결과에 따라 브라우저에 띄울 jsp리턴
  • @Service

    • Service Class로 사용할 클래스에 붙임
    • Service Class의 역할
      • Controller로부터 전달 받은 데이터에 대한 처리(비즈니스 로직(business logic)이라고도 함
      • DB작업이 필요하면 Repository 클래스를 호출함
      • 처리결과를 Controller클래스로 리턴
  • @Repository

    • Repository(DB와 관계된) Class로 사용할 클래스에 붙임
    • Repository Class의 역할
      • 쿼리를 수행할 mybatis 함수호출
      • 처리결과를 Service클래스로 리턴

servlet-context에서 지정한 폴더에서 @어노테이션이 붙어있는 파일들을 찾아서 관리를 한다

매개변수로 받은 데이터를 jsp로 보내주는법

homeController 에서
Model 변수 사용하기
.addAttribute(“ jsp에서 사용할 내용 ”,사용할 매개변수);

jsp에서
${jsp에서 사용할 내용}

${}

Controller에서 보낸 데이터를 jsp에서 사용할 때

#{}

Repository에서 보낸 데이터를 mapper에서 사용할 때

@ModelAttribute

jsp에서 사용한 name값과 DTO 필드값이 똑같아야함

일관성
form에서 사용하는 name속성값=필드이름=DB컬럼이름

lombok설치

일단 sts를 끄고
C:\Users\wkddn.m2\repository\org\projectlombok\lombok\1.18.12

파워쉘에다가
java -jar lom 치고 탭키 엔터

1눌러서 sts.exe파일선택 2번뜨면 3번선택

@Data

이제 DTO클래스에서 클래스명 위에 줄에 @Data를 입력하면
getter, setter, toString등등을 만들지 않아도 할 수 있다

매개변수 포함 생성자는 없다 ㅠ

자바 패키지 나누기

만들었는데 안보이거나 이상하면
리프레쉬 또는 클린 해보기

@Autowired

의존성 주입(DI, Dependency Injection

객체를 선언 할 때 new를 계속 하다보면 메모리를 계속해서 늘려가서 후에 가면 메모리를 엄청 차지하게 된다
그거 막기 위해 @Autowired를 써서 객체를 선언하고 지우는 것을 스프링이 관리하도록 명령하는 것이다

Date타입

DTO에 date타입은
import java.sql.Date;

root-context

root-context를 복붙하자

root-context에서
13~19 는 데이터베이스 이름 계정 비밀번호

21~26 은 mapper 위치

잘 찾아서 내꺼랑 맞춰서 바꾸자

SqlSessionTemplate

sql의 명령어를 사용할 수 있게 해준다??

mapper를 통해서

mapper

 <mapper namespace="Trainee">
 	<insert id="insertTrainee" parameterType="tdto">
		insert into trainee(t_name, t_age, t_phone, t_gender, t_birth, t_address)
			value(#{t_name}, #{t_age}, #{t_phone}, #{t_gender}, #{t_birth}, #{t_address}) 	
 	</insert>
 	<select id="findAll" resultType="tdto"> 
 		select * from trainee
 	</select>
 	<select id="findById" resultType="tdto" parameterType="long">
 		select * from trainee where t_number=#{t_number}
 	</select>
 	
 </mapper>

SqlSessiontemplate에서 sql의 명령어를 입력하는 파일이라고 생각하면 되나

mybatis-config

mapper에서 쓰는 type을 줄여준다?

별칭

C 태그

c태그는 출력을 도와주는 도구

DB데이터 가져오는 순서

링크
jsp(링크) > HomeController > Service > Repository > mapper > DB

메서드 매개변수에 값을 담아서 보낸다

DB > mapper > Repository > Service > HomeController > jsp(출력)

메서드의 리턴으로 객체에 값을 담아서 가져온다

마지막에 모델을 사용해서 jsp로 보낸다

delete

pk값만 넘겨서 delete로 지우면 된다

redirect

삭제가 반영된 목록화면 보여주기


과정
목록에서 삭제링크 클릭
HomeController의 delete메서드 호출
중략
삭제 후 HomeController의 delete메서드의 리턴값의 “redirect:/findAll”에 의해서 서블릿은 컨트롤러의 findAll의 주소를 처리하는 메서드 호출
HomeController의 findAll 메서드 호출

이걸 안쓰면 그냥 jsp만 출력을 하고 DB에서 가져온 데이터는 따로 가져오라고 안했으니 출력 되지 않는다. 한마디로 다시 HomeController의 findAll메서드를 다시 실행 시켜서 findAll페이지를 뜨게 하는 것이다

update

수정
수정화면 요청
수정하고자 하는 데이터를 DB로부터 가져와서 update.jsp에 띄움

수정처리
insert와 같이 form을 사용해 DTO에 값을 담아서 sql update 명령어를 사용해서 수정한다

SelectOne으로 결과 받아오기

ex)로그인 확인

Controller

값이 맞으면 숫자가 넘어오고 틀리면 0이 온다

맞으면 index 틀리면 login

Service

Repository

없으면 null값이 넘어오네

mapper

스프링으로 넘어오니까 뭔가 여러 가지를 한번에 관리해야하다보니 복잡해진 느낌이다
자바 sql Html 등등 한번에 쓰니 어렵긴하다 ㅎㅎㅎ
sql은 기억이 잘 안나서 좀 버벅이고 ㅠㅠ
한번 다시 봐야겠다

profile
코딩도전기

0개의 댓글