스프링 기초

·2024년 10월 31일

스프링

목록 보기
2/33

툴은 sts를 사용할 것이다.

혹시라도 프로젝트를 만들 때 mvc가 뜨지 않는다면 만들어둔 파일 spring-workspace에 들어가서 metadata들어가서 플러그 인스 들어가서 아래쪽에 있는 content.core안에 https-content.xml파일을 넣어줘야 한다.

  1. 스프링 레가시로 프로젝트 만들기

  1. mvc 프로젝트 선택, 넥스트

  1. 도메인을 거꾸로 작성했다. 그리고 피니쉬

버전이 안맞는다면 프로젝트 팩트 들어가서 자바 버전을 11로 맞춰주셔야 합니다.

  1. 빌드패스에 서버도 넣어준다.

  1. 브라우저를 크롬으로 설정을 한 다음에 서버를 띄우면 크롬 서버로 브라우저가 띄워진다.

스프링의 진행흐름

① 웹브라우저에게 정보요청을 받은 디스패쳐서블릿은 어느 컨트롤러에 해당 요청을 전송할지 결정

② 디스패쳐 서블릿은 핸들러 매핑에 어느 컨트롤러를 사용할건지 물어봄.

③ 결정된 컨트롤러는 해당요청을 수행하게 됨

④ 해당요청을 처리한 컨트롤러는 디스패쳐서블릿에 결과를 보냄. 이 과정에서 Model이 생성되어 View(JSP)에서 같이 사용됨

⑤ ModelAndView는 실제 JSP정보를 갖고 있지 않기 때문에 뷰리졸버가 실제 JSP이름으로 변환하여 해당 view를 검색함.

⑥ 검색한 결과를 View에 전송

⑦ View는 모든 과정에서 처리된 결과를 화면으로 표현함

⑧ 마지막으로 디스패쳐서블릿이 웹브라우저에 최종결과를 출력


web.xml 설정

  • 서버가 보라고 만든 파일. 웹서버에 요청하는 웹 설정 파일이다. aws로 들어오는 모든걸 처리해라

servlet-context.xml 설정

  • prefix 경로를 / 로 수정한다.

servlet-context.xml 파일은 Spring MVC 애플리케이션에서 웹 요청을 처리하고, 컨트롤러와 뷰 파일을 연결하며, 정적 리소스를 제공하기 위한 다양한 설정을 관리하는 역할을 한다. 이 파일을 통해 컨트롤러, 뷰 리졸버, 리소스 경로 등을 정의하고 애플리케이션의 웹 구성 요소를 설정할 수 있다.


이클립스에 있던 멤버 폴더를 스프링 web-inf 안에다가 넣는다. 이건 외부에서 접근을 할 수가 없는 폴더.

  • wepapp안에 index.jsp 파일 만들어서 주소를 하나 걸어주기

왜 <%=request.getContextPath() %>를 붙여야 하냐고요?

애플리케이션이 어떤 서버에 배포되더라도, 또는 경로가 바뀌더라도 <%=request.getContextPath() %>를 사용하면 JSP 페이지가 항상 현재 애플리케이션의 루트 경로를 기준으로 파일을 찾는다.
예를 들어, 애플리케이션의 Context Path가 /myApp일 경우, <%=request.getContextPath() %>/resources/css/style2.css는 /myApp/resources/css/style2.css로 변환된다. 이렇게 하면 JSP 파일이 항상 루트 경로를 기준으로 CSS 파일을 찾을 수 있다.

요약하자면 <%=request.getContextPath() %>는 애플리케이션의 위치나 배포 환경이 달라지더라도 JSP 페이지에서 상대적인 파일 경로를 일관되게 지정할 수 있도록 돕는 방식.

자꾸 까먹는데 까먹지 말기..ㅠㅠ

  • 컨트롤러 파일을 생성해서 컨트롤러,도메인,서비스 패키지를 생성한다.
    도메인의 뜻은 담다라는 의미를 가지고 있다 vo 같은 객체 담기 위해서
    서비스는 dao 같은 메소드를 만드는 곳

  • 컨트롤러 패키지 안에 컨트롤러 안에다가 멤버컨트롤러 클래스 생성하기
    어노테이션 컨트롤러를 입력하고 import하기
    이렇게 하면 컨트롤러 객체로 생성시켜 달라고 부탁하는거다

메소드를 하나 만들어줍니다.

1.
@RequestMapping은 특정 URL 경로와 이 메서드를 매핑하는 역할을 한다.
value 속성으로 URL 경로를 지정하고, method 속성으로 HTTP 요청 방식을 설정. 여기서는 GET 방식만을 받도록 RequestMethod.GET으로 지정했다.

@RequestMapping으로 특정 URL과 메서드를 매핑하여, 각각의 URL 요청에 맞는 JSP 페이지가 화면에 출력되도록 설정했다. WEB-INF 폴더에 있는 JSP 파일은 직접 URL로 접근할 수 없기 때문에 Spring MVC에서 이렇게 컨트롤러 메서드를 통해 접근하게 된다.

public String?
public String이 사용된 이유는 Spring MVC에서 컨트롤러 메서드가 반환하는 값이 뷰 이름으로 해석되기 때문이다. 이 반환 값은 JSP 페이지나 HTML 페이지를 렌더링할 때 사용된다.

  1. Spring MVC에서 컨트롤러 메서드 반환 값:
    Spring MVC에서 @RequestMapping 어노테이션으로 매핑된 메서드는, 클라이언트의 요청에 응답할 때 뷰 이름(View Name)을 반환한다. 이 반환 값은 뷰 리졸버(View Resolver)에 의해 실제 JSP 파일이나 HTML 파일로 변환된다.



  • resources 안에는 css와 images 폴더를 가져와서 붙여놓는다.
    resources 폴더는 CSS, JavaScript, 이미지 파일 등 웹 애플리케이션에서 사용하는 정적 파일을 저장하는 위치.

  • css는 resources 안에 있기 때문에 memberJoin.jsp에 들어가서 경로를 바꿔줘야 한다.

  • 꼭~ 공통된 것은 하나로 줄이려는 마음이 있기 때문에 requestMapping을 class 위에 올려준다.

MemberController 클래스 안에
private static final Logger logger =LoggerFactory.getLogger(MemberController.class); 를 적어준다.

?? : 이 코드는 Spring 프로젝트에서 로깅(logging)을 위해 사용하는 Logger 객체를 초기화하는 부분. Spring을 포함한 Java 애플리케이션에서는 Logger를 통해 애플리케이션의 실행 정보를 기록하여 개발 및 유지보수에 활용한다.

  • 프린트라인 보다 로거쓰기를 디버깅 코드 찍는걸 권장한다. 리소스를 덜 잡아먹기 때문에 logger.info 이렇게 적어용

pom.xml 파일 설정하기

  • 라이브러리 값을 변경하거나 저장하면 해당되는 라이브러리를 자동으로 다운받는다.

Maven 프로젝트에서 사용하는 설정 파일로, 프로젝트의 의존성(dependencies), 빌드 설정(build configurations), 플러그인(plugins) 등을 관리하는 역할을 한다. Spring이나 Java 프로젝트에서 pom.xml 파일을 통해 라이브러리와 버전 정보를 정의하면, Maven이 해당 라이브러리를 자동으로 다운로드하고 프로젝트에 포함시켜준다.

  • 하지만 맘대로 변경을 하는게 아니고 메이븐 레파지토리 들어가서 원하는 프레임워크를 찾아서 해당되는 코드를 복사해서 dependency 폼 안에 넣어주면 된다.

  • pom.xml로 돌아와서 mysql 커넥터를 폼 안에 넣어준다.

  • 기본적으로 c드라이브로 들어가서 안에 스프링에서 다운받은 애들이 뜬다. 이 위치에 다운받아져 있다.

  • 버전을 바꿔준다. 자바버전 11 4.3.3

  • 스프링 버전을 바꾼뒤에 저장하고 창을닫은 다음에 레파지토리스 안에 있는 파일을 전부 지운다.
    버전 맞추기 위해서!!! 전부 지운뒤에 다시 스프링을 실행하면 자동으로 다운이 받아지고 레파지스토리에는 파일들이 생성된다.

혹시라도 프로젝트에 느낌표가 뜨면 프로젝트 리플레쉬 해주면 됩니다.


root-context.xml

  • root-context.xml은 Spring 애플리케이션에서 애플리케이션 전체에 걸쳐 공유되는 빈을 설정하는 파일이다. servlet-context.xml이 Spring MVC와 관련된 웹 요청 및 뷰 처리 설정을 다루는 반면, root-context.xml은 데이터베이스와 관련된 빈, 서비스 계층, 리포지토리 계층, 그리고 전체 애플리케이션에 필요한 공통 빈들을 설정하는 데 사용된다.

  • namespace들어가서 체크체크

서비스 패키지 안에 test class 패키지 하나생성.

  • 요렇게 적어줍니다. 이 클래스를 빈을 이용해서 사용해볼거다. 다시 루트로 이동

  • tt라는 이름으로 등록하고 어쩌구.. bean 등록

bean 이란?

Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라는 용어로 부른다.

Spring에서의 빈은 ApplicationContext가 알고있는 객체, 즉 ApplicationContext가 만들어서 그 안에 담고있는 객체를 의미한다.

스프링 프로젝트를 처음 실행시

xml 설정파일에서 bean 태그에 등록된 특정 클래스는

스프링 어플리케이션이 bean에 등록되어있는 클래스를 객체 생성시켜서 메모리에 위치시킨다.

bean은 쉽게말하면 개발자가 스프링에게 객체 생성 요청하는 방법이라고 보면 된다.

Bean 등록 방법 2가지 방법

  • 클래스에 @등록

  • xml 설정파일에 직접 bean 태그를 등록



멤버 컨트롤러로 가서 Test를 주입한다.


로거를 찍고 프로젝트를 run as를 돌려보면 콘솔창에 이렇게 뜨게 된다.

아~ 이클립스에서는 객체를 new로 생성해서 사용하고 그랬는데 스프링에서는 bean에 등록을 하고 불러서 사용을 하는구나~~~ 라고 생각해


서블릿 컨텍스트 xml 에 들어가서 설정해주기

	<beans:bean id="uploadPath" class="java.lang.String">
	<beans:constructor-arg value="D:/dev/springUpload"></beans:constructor-arg>
	</beans:bean>
	
	<beans:bean id="multipartResolver" 
	class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
	<beans:property name="maxUploadSize" value="10485760" />	
	</beans:bean>

클래스를 String 타입으로 주고 이름을 uploadPath로 지정하겠다.
경로는 D드라이브 안에 dev안에 springUpload 안에다가 넣겠다.

  • 멀티파트 리졸버도 존재한다고 코드 적어주기. 이미지 넘길 때 사용하는 리졸버
    하지만 아직 기능을 쓰지 않을거라서 주석처리만 해둔다.

스프링은 좀 더 편리하지만 아무래도 설정을 하는것이 어렵고 에러가 났을 때 무조건 404에러가 뜨기 때문에 에러를 잡기가 좀처럼 쉽지 않다고 한다. 팀 프로젝트를 스프링으로 한다고 하는데 에러 나지 않게 조심해야할듯...

0개의 댓글