Spring TIL - 커뮤니티 로그인, 회원가입

Jieun·2023년 4월 21일
0

📝 Spring 환경설정 및 커뮤니티 로그인, 회원가입
#230421

💻 작업파일
> [src/main/java] - [edu.kh.comm.common.filter] - InitFilter.java
> [src/main/java] - [edu.kh.comm.member.controller] - MemberController.java
> [src/main/java] - [edu.kh.comm.member.vo] - Member.java
> [src/main/resources] - log4j.xml
> [src/main/resources] - [spring] - [appServlet]- servlet-context.xml

> [src] - [main] - [webapp] - [WEB-INF] - web.xml
> [src] - [main] - [webapp] - index.jsp
> [src] - [main] - [webapp] - [WEB-INF] - [lib]
~~> pom.xml
~~


  1. MemberController 클래스 생성

  2. Member vo 클래스 생성

  3. index.jsp 중간부분 name값 vo와 통일해서 수정하기
    (MemberController 작업순서에 따라)

  4. debug로 서버연결해보기

  • debug 하고싶은 숫자적힌 행부분에 더블클릭하면 동그란 점(?)이 찍힘
  • [프로젝트 우클릭] - [Debug As] - [Debug on Server]
  • 알림뜨면 Switch mode 클릭
  • 알림창 [Switch] 클릭
  • debug 모드 해제시 오른쪽 상단에 나뭇잎모양 클릭하기

inputEmail 👉 memberEmail
inputPw 👉 memberPw

  1. servlet-context.xml 안에 주석 달기
    resolves views selected~~~ 밑에

POJO기반 프레임워크 : 외부 라이브러리 상속 X

CLASS: 객체를 만들기 위한 설계도

👉 객체로 생성되어야지 기능 수행 가능

IOC(제어의 역전, 객체 생명주기를 스프링이 관리)를 이용하여 객체 생성
👉 이 때, 스프링이 생성한 객체를 bean 이라고 한다

bean 등록

스프링이 객체로 만들어서 가지고 있어라 **

Controller

요청/응답을 제어하는 역할을 하는 클래스

@Component

해당 클래스를 bean으로 등록하라고 프로그램에게 알려주는 주석(Annotation)

@Controller

생성된 bean이 Controller임을 명시 + bean 등록 하는 어노테이션

@RequestMapping

클라이언트 요청(url)에 맞는 클래스 or 메서드를 연결 시켜주는 어노테이션

[ 위치에 따른 해석 ]

  • 클래스 레벨 : 공통 주소

  • 메서드 레벨 : 공통 주소 외 나머지 주소

    단, 클래스 레벨에 @RequestMapping이 존재하지 않는다면,
    메서드 레벨 : 단독 요청 처리 주소

[ 작성법에 따른 해석 ]

1) @RequestMapping("url")
요청 방식(GET/POST) 관계 없이 url이 일치하는 요청 처리

2) @RequestMapping(value = "url", method = RequestMethod.GET | POST)
요청 방식에 따라 요청 처리함

❗메서드 레벨에서 GET/POST 방식을 구분하여 매핑할 경우
@GetMapping("url") / @postMapping("url") 상용하는 것이 일반적
(메서드 레벨에서만 작성 가능!)


✔️ Logger객체 : 해당 클래스에 대한 log를 출력하는 객체

기존에 자바에서 사용하던 print 구문 사용 x

logger를 이용해서 출력하는 방법

trace - debug - info - warn - error

debug : 개발의 흐름 파악
ex) 이게 실행이 되었는지, 파라미터가 현재 무엇인지 확인할 때)

info : 메소드 실행 파악
ex) 이 필터가 생성이 되었다 라는 정보를 출력하고 싶다! info가 제일 적절함

logger.info("초기화 필터 생성");

// InitFilter.java 참고 

@WebFilter(filterName="initFilter", urlPatterns="/*")
public class InitFilter extends HttpFilter implements Filter {
    
	// Logger 객체 사용 (해당 클래스에 대한 log를 출력하는 객체)
	private Logger logger = LoggerFactory.getLogger(InitFilter.class);
	
    // 필터가 생성될 때 실행
	public void init(FilterConfig fConfig) throws ServletException {
    
     	//이 필터가 생성이 되었다 라는 정보를 출력하고 싶다! info가 제일 적절함
    	logger.info("초기화 필터 생성");
	}
	
	
	// 필터가 파괴될 때 실행 (서버는 켜져있는데 백엔드 코드가 수정되었을 때)
	public void destroy() {
		logger.info("초기화 필터 생성");
	} 

....   뒤에는 생략 

//log4j.xml

Appenders

출력되는 로그의 형태를 지정하는 부분으로, 로그를 뒤에 계속 남기는 역할을 한다

<appender name="console"
	class="org.apache.log4j.ConsoleAppender">
	<param name="Target" value="System.out" />
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern"
			value="%d{yyyy-MM-dd HH:mm:ss} [%p] %m%n" />
	</layout>
</appender>

<!-- sql 로그 출력용 패턴 지정 -->
<appender name="sql-console" class="org.apache.log4j.ConsoleAppender">
	<param name="Target" value="System.out" />
	<layout class="org.apache.log4j.PatternLayout">
		<param name="ConversionPattern" value="%m%n" />
	</layout>
</appender>

Application Loggers

이 패키지 이하에서 출력되는 로그들을 출력하겠다.

log4j 로그레벨 : trace < debug < info < warn < error < fatal


// servlet-context.xml

<resources mapping="/resources/**" location="/resources/" />
                       
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<beans:property name="prefix" value="/WEB-INF/views/" />
	<beans:property name="suffix" value=".jsp" />
</beans:bean>
	
<context:component-scan base-package="edu.kh.comm" />

➡️ 컨트롤러에서 jsp로 렌더링하는 것을 처리하는 부분
➡️ 컨트롤러의 응답을 jsp로 보낼 때 어떻게 처리할 것인가? 를 작성하는 부분

View Resolver

Controller에서 반환된 문자열 앞/뒤에
접두사(prefix), 접미사(suffix)를 추가하여 만들어진 경로의 jsp로 요청을 위임(forward)**

member/signUp
/WEB-INF/views/member/signUp
/WEB-INF/views/member/signUp.jsp
forward !

단, 반환된 문자열의 시작이 redirect: 구문이면 재요청(redirect) 진행
redirect:/ 최상위로 재요청.


web.xml (배포 서술자)

WAS(Web Application Server)

  • 동적 웹(요청에 따라 응답페이지 생성)에서 사용하는 서버
  • WAS가 실행(배포 시작)될 때 가장 처음으로 읽어들이는 문서
  • 서버 실행 시 초기 설정 내용 또는 설정 내용이 작성된 파일을 읽고 수행하도록 함.

DispatcherServlet

요청/응답을 나눠주는 서블릿

Front Controller

모든 요청을 앞에서 받아들여 알맞은 Controller로 연결을 해주고
Controller의 반환 결과에 따라서
알맞은 view를 선택해 클라이언트에게 응답하는 역할


// pom.xml

<modelVersion>4.0.0</modelVersion> <!-- Maven 2 버전 이후 POM의 경우 항상 4.0.0 -->
<groupId>edu.kh</groupId> <!-- 최상위 패키지 1, 2레벨 -->
<artifactId>comm</artifactId> <!-- 최상위 패키지 3레벨 == context-path -->
<name>comm</name> <!-- 프로젝트 명 -->
<packaging>war</packaging> <!-- 배포 형식 -->
<version>1.0.0-BUILD-SNAPSHOT</version>

dependencies

Maven 프로젝트는 외부 저장소와 의존 관계를 맺고 있어
프로젝트에 필요한 파일을(라이브러리) 사용자가 직접 받을 필요 없이
해당 태그 내에 지정된 형식으로 작성하면
네트워크를 통해 외부 저장소에서 자동으로 얻어와 세팅함

<!-- Spring 모듈 -->
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>${org.springframework-version}</version> 
    <!-- 위에 properties 에 있는 5.3.14 말하는거임  변수선언!!! -->
	<exclusions>
		<!-- Exclude Commons Logging in favor of SLF4j -->
		<exclusion>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-webmvc</artifactId>
	<version>${org.springframework-version}</version>
</dependency>

profile
👩‍💼👩‍💼➡️➡️➡️👩‍💻👩‍💻 생산자의 삶을 살기 위해 개발공부중

0개의 댓글