Fairy ' s

[Spring] 게시판 / 함수 & 개념 정리 #1 본문

Study/Spring

[Spring] 게시판 / 함수 & 개념 정리 #1

berafairy 2023. 1. 2. 13:21

 

 

개념 정리 #1

 


Spring Security Framework

  • 자바 서버 개발을 위해 필요로 한 인증, 권한 부여 및 기타 보안 기능을 제공하는 프레임 워크

 


Logger (BoardController.java) // 참고

  • Logging (실행 기록) : 프로그램 개발, 운영시  생기는 문제점을 관리, 모니터링 할 수 있는 데이터
  • Console 창에서 확인할 수 있음, System.out.println() 으로도 확인이 되지만, 시스템이 느려질 수 있고,
    파일로는 저장이 불가능하기 때문에 주로 log를 사용해서 파일로 저장해 분석할 필요성이 있음
  • 사용 방법은 변수 선언한 후 명령어를 호출(logger.info("로그타이틀 {}", 출력 값))하는 방식, 아래 코드 참고

 

// BoardController.java

@Controller
@RequestMapping("/board/*")
public class BoardController {

	private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
    ...
	@RequestMapping(value = "/board/writeView", method = RequestMethod.GET)
	public void writeView() throws Exception{
		logger.info("writeView");
	}
    ...
}

 

 


BCryptPasswordEncoder (MemberController.java)  // 참고

  • 비밀번호를 암호화하는 데 사용할 수 있는 메서드를 가진 '클래스'
  • BCrypt 해싱 함수를 사용해 비밀번호를 인코딩해주는 메서드 (1), 사용자에 의해 제출된 비밀번호 (2), 
    저장소에 저장되어 있는 비밀번호의 일치 여부 (3)를 확인해주는 메서드 제공
  • spring-security.xml 네임스페이스 bean 체크 후 코드에 BCryPasswordEncoder bean 코드 작성
    pom.xml에 스프링 시큐리티 추가, web.xml 기본 설정 추가

 

spring-security.xml ▷ 하단 Namespaces ▷ beans, security 체크

 

// spring-security.xml
<beans:bean id="bcryptPasswordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder" />


// web.xml
<!-- Processes application requests -->
<servlet>
	<servlet-name>appServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/spring/appServlet/servlet-context.xml
			/WEB-INF/spring/spring-security.xml
			/WEB-INF/spring/context-common.xml
		</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>


// pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-core -->
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-core</artifactId>
	<version>5.0.8.RELEASE</version>
</dependency>
			
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-web</artifactId>
	<version>5.0.8.RELEASE</version>
</dependency>
		
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-config</artifactId>
	<version>5.0.8.RELEASE</version>
</dependency>

 

Ex ))

// MemberController.java
@Inject
BCryptPasswordEncoder pwdEncoder;

@Controller
@RequestMapping("/member/*")
public class MemberController {
	...
	// 회원가입 post
	@RequestMapping(value = "/register", method = RequestMethod.POST)
	public String postRegister(MemberVO vo) throws Exception {
    	...
		String pwd = pwdEncoder.encode(inputPass);
		vo.setUserPass(pwd);
        ...
	}
    ...
}

 

 


HTTP Request GET / POST (*Controller.java) //참고1 // 참고2

  • GET - base url 뒤에 원하는 값을 쿼리 형태로 붙여서 request 보내는 것
    (GET을 붙이지 않아도 default값으로 GET이 붙음) 
  • POST - base url 뒤에 request시 값이 붙지않고 HTTP 패킷의 BODY에 보내는 것
  • GET은 서버의 리소스에서 데이터를 요청할 때,  POST는 서버의 리소스를 새로 생성하거나 업데이트할 때 사용함
    (DB로 따지면 GET - SELECT, POST - CREATE)
  • GET은 리소스를 조회, 여러 번 요청하더라도 응답이 같음 / POST는 리소르를 새로 생성, 업데이트

 

// BoardController.java

// 게시판 글 작성
@RequestMapping(value = "/write", method = RequestMethod.POST)
public String write(BoardVO boardVO, MultipartHttpServletRequest mpRequest) throws Exception{
	logger.info("write");
	service.write(boardVO, mpRequest);
	
	return "redirect:/board/list";
}

// 게시판 목록 조회
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(Model model, @ModelAttribute("scri") SearchCriteria scri) throws Exception{
	logger.info("list");
	
	model.addAttribute("list",service.list(scri));
	
	PageMaker pageMaker = new PageMaker();
	pageMaker.setCri(scri);
	pageMaker.setTotalCount(service.listCount(scri));
	
	model.addAttribute("pageMaker", pageMaker);
	
	return "board/list";
}

 

 


Model 객체, @ModelAttribute (BoardController.java) // 참고

  • Model 객체 : Controller에서 생성된 데이터를 담아 View로 전달할 때 사용하는 객체
  • @ModelAttribute : HTTP body 내용과 HTTP 파라미터 값들을 Getter, Setter, 생성자를 통해 주입하기 위해 사용       일반 변수는 model 객체를 통해 전달

 

@RequestParam

  • 사용자가 전달하는 값을 1:1로 매핑해주는 어노테이션
  • 파라미터를 통해 값을 전달할 때 자주 사용

 

HttpServletResponse, MultipartHttpServletRequest / (BoardController.java) // 참고1 // 참고2

  • Servlet Container의 객체
  • Servlet : JAVA를 사용하여 웹을 만들기 위해 필요한 기술, 클라이언트의 요청에 따른 결과 전송
  • Servlet은 HttpServletResponse객체에 Content Type, 응답코드, 응답 메시지 등을 담아서 전송함
  • MultipartHttpServletRequest로 파일을 여러 개 받아올 수 있고, getFiles 메소드를 통해 List 형태로 받을 수 있음

 

// BoardController.java

@RequestMapping(value = "/updateView", method = RequestMethod.GET)
public String updateView(BoardVO boardVO, 
						 @ModelAttribute("scri") SearchCriteria scri, 
						 Model model) throws Exception {
	logger.info("updateView");
	model.addAttribute("update", service.read(boardVO.getBno()));
	model.addAttribute("scri", scri);
	List<Map<String, Object>> fileList = service.selectFileList(boardVO.getBno());
	model.addAttribute("file", fileList);
	return "board/updateView";
}

@RequestMapping(value = "/update", method = RequestMethod.POST)
public String update(BoardVO boardVO, 
					 @ModelAttribute("scri") SearchCriteria scri, 
					 RedirectAttributes rttr,
					 @RequestParam(value="fileNoDel[]") String[] files,
					 @RequestParam(value="fileNameDel[]") String[] fileNames,
					 MultipartHttpServletRequest mpRequest) throws Exception {
	logger.info("update");
	service.update(boardVO, files, fileNames, mpRequest);
	rttr.addAttribute("page", scri.getPage());
	rttr.addAttribute("perPageNum", scri.getPerPageNum());
	rttr.addAttribute("searchType", scri.getSearchType());
	rttr.addAttribute("keyword", scri.getKeyword());
		return "redirect:/board/list";
}

 

 


Attribute (BoardController.java)

  • model.addAttribute();의 addAttribute는 Model에 데이터를 담을 때 사용
  • RedirectAttribute는 "redirect:/ "; 사용 시 데이터를 전달할 때 사용
// BoardController.java

// 게시판 목록 조회
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String list(Model model, @ModelAttribute("scri") SearchCriteria scri) throws Exception{
	...
	model.addAttribute("list",service.list(scri));
    ...
}
  • model.addAttribute("list",service.list(scri)); 는 service.list(scri) 에 담긴 데이터를 "list"라는 이름으로 담는다는 뜻

 

 


파일 추가

  • pom.xml에 Maven Dependency 추가
  • webapp ▷ WEB-INF ▷ spring ▷ context-common.xml 생성, 코드 추가
  • web.xml <param-value> </param-value> 사이 /WEB-INF/spring/context-common.xml 추가
  • FileUtils.java 작성
// pom.xml

<!-- MultipartHttpServletRequset -->
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.0.1</version>
</dependency>
		 
<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.2.2</version>
</dependency>



// web.xml

<!-- Processes application requests -->
<servlet>
	<servlet-name>appServlet</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/spring/appServlet/servlet-context.xml
			/WEB-INF/spring/spring-security.xml
			/WEB-INF/spring/context-common.xml
		</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>



// context-common.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:context="http://www.springframework.org/schema/context" 
		xmlns:p="http://www.springframework.org/schema/p" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xmlns="http://www.springframework.org/schema/beans" 
		xmlns:mvc="http://www.springframework.org/schema/mvc" 
		xmlns:cache="http://www.springframework.org/schema/cache" 
		xmlns:aop="http://www.springframework.org/schema/aop" 
		xsi:schemaLocation="http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-3.0.xsd 
		http://www.springframework.org/schema/mvc 
		http://www.springframework.org/schema/mvc/spring-mvc.xsd 
		http://www.springframework.org/schema/cache 
		http://www.springframework.org/schema/cache/spring-cache.xsd">
		
	<!-- MultipartResolver 설정 --> 
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
		<property name="maxUploadSize" value="100000000" /> 
		<property name="maxInMemorySize" value="100000000" /> 
	</bean> 
</beans>

 

'Study > Spring' 카테고리의 다른 글

[Spring] Annotation  (0) 2023.01.17
[Spring] 게시판 / 함수 & 개념 정리 #3  (0) 2023.01.06
[Spring] 개발 환경 구축  (0) 2023.01.04
[Spring] 게시판 / 함수 & 개념 정리 #2  (0) 2023.01.02
[Spring] 게시판 / 작동 순서  (0) 2023.01.02
Comments