[Spring Boot 게시판] 1일차

김정현·2022년 9월 23일
0

SPRINGBOOT게시판

목록 보기
1/36

스프링부트 개발환경 세팅

  • window → Preference → html검색 → HTML files 밑에 Editor → (a, b, br, em, font, i, img, label, li, s, select, small, span, strike, strong, sub, sup, td, th, title, input)remove ,Line width 120, Indentation size 2
  • Ctrl + h 에서 Case sensitive 체크, Cutomize클릭 File search빼고 체크해제
  • 롬복 설치
    • C:\Users\Admi~~.m2\repository\org\projectlombok\lombok에서 lombok.jar파일 클릭후 sts4실행파일위치 찾고 선택후 인스톨
  • 프로젝트 생성
    • 우클릭 new → Spring Starter Project클릭 하면 뜨는창에서 Packiging War로 변경, Java version 17로 변경, group명 com.kjh.exam, package명을 com.kjh.exam.demo → next → lombok, Spring Boot DevTools, Spring Web검색후 체크 → next → finish
  • 포트변경 8081
    • src/main/resources
      application.properties 이름를 application.yml(설정파일)로 변경
      application.yml열은후 안에 server: 다음줄에 port: 8081로 변경(주의 : 두줄이 ":"에 맞춰 작성)
  • 프로젝트 이상시 : 프로젝트우클릭 maven → Update~~클릭 → ok

@ResponseBody

	@RequestMapping("/usr/main/home")
	@ResponseBody
	public String showMain() {
		return "ㅎㅇ";
	}
  • /usr/main/home로 요청이 왔을때 @ResponseBody가 붙어있는 showMain()가 응답

브라우저요청시 매개변수

	@RequestMapping("/usr/home/getCount")
	@ResponseBody
	public int getCount() {		
		return count;
	}
	
	@RequestMapping("/usr/home/doSetCount")
	@ResponseBody
	public String doSetCount(int count) {
		this.count = count;
		return "Count의 값이"+ count +"로 초기화 됬습니다.";
	}
  • http://localhost:8081/usr/home/doSetCount?count=10
  • /usr/home/doSetCount 으로 요청이 오면
  • doSetCount(int count)메서드가 실행되는데,
  • 위에 url로 보면 doSetCount?count=10, 매개변수 count가 10으로 넘어가는 것을 볼수있다.

객체의 브라우저 출력

@RequestMapping("usr/home/getMap")
@ResponseBody
public Map<String, Object> getMap() {
	Map<String, Object> map = new HashMap<>();
	map.put("철수나이", 22);
	map.put("영희나이", 33);

	return map;
}

@RequestMapping("usr/home/getList")
@ResponseBody
public List<String> getList() {
	List<String> list = new ArrayList<>();
	list.add("철수나이");
	list.add("영희나이");

	return list;
}
  • 위의 함수가 return한 값이 브라우저에 전달이 되는데
  • 브라우저에서 보여질때 스프링에서 return한 값을 정제하여(문장처리)
  • 아래 문장으로 결과가 보여짐
["철수나이","영희나이"]
{"철수나이":22,"영희나이":33}

private변수 브라우저 출력

    @RequestMapping("usr/home/getArticle")
    @ResponseBody
    public Article getArticle() {
        Article article = new Article();
        return article;
        }
    }

    class Article {
        private int id;
        private String title;
    }
  • Article 클래스의 변수가 private이므로
  • 브라우저에서 에러가 나타남
  • public이라면 {"id":0,"title":null} 의 문장으로 브라우저에 보여짐

Lombok

  • Lombok 이란 Java 라이브러리로 반복되는 getter, setter, toString .. 등의 반복 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리
  • Lombok은 여러가지 @어노테이션을 제공하고 이를 기반으로 반복 소스코드를 컴파일 과정에서 생성해주는 방식으로 동작하는 라이브러리
  • 즉, 코딩 과정에서 롬복과 관련된 어노테이션만 보이고 getter,setter 등의 생략되지만 실제로 컴파일된 결과물 .class 파일에는 코드가 생성되어 있다

자주 사용되는 Lombok 어노테이션

1. 접근자/설정자 자동 생성

1)@Getter와 @Setter 특정 필드에 어노테이션을 붙여주면, 자동으로 생성된 접근자(Getter)와 설정자(Setter) 메소드 생성자 자동 생성

2)@NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성

3) @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 생성

4)@RequiredArgsConstructor 어노테이션은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 생성

4)@NonNull 어노테이션을 변수에 붙이면 자동으로 null 체크를 해준다. 즉, 해당 변수가 null로 넘어온 경우, NullPointerException 예외를 일으켜 줍니다.

2. toString() 메소드 자동 생성

@ToString 어노테이션만 클래스에 붙여주면 자동으로 생성

3. equals, hashCode 자동 생성

1) @EqualsAndHashCode 어노테이션을 사용하면 자동으로 equals, hashCode 메소드를 생성할 수 있습니다.

2) @EqualsAndHashCode(callSuper = true)

    public class User extends Domain {
      private String username;
      private String password;
    }
  • callSuper 속성을 통해 equals와 hashCode 메소드 자동 생성 시 부모 클래스의 필드까지 감안할지 안 할지에 대해서 설정할 수 있다.

  • 즉, callSuper = true로 설정하면 부모 클래스 필드 값들도 동일한지 체크하며, callSuper = false로 설정(기본값)하면 자신 클래스의 필드 값들만 고려

3. @Data
@Data는 위에서 설명드린 @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode을 한꺼번에 설정해주는 매우 유용한 어노테이션

    @Data
    public class User {
      // ...
    }
  • 클래스 레벨에서 @Data 어노테이션을 붙여주면, 모든 필드를 대상으로 접근자와 설정자가 자동으로 생성되고, final 또는 @NonNull 필드 값을 파라미터로 받는 생성자가 만들어지며, toStirng, equals, hashCode 메소드가 자동 생성

@MVC에서 사용하는 주요 어노테이션

이름설명
@Controller해당 클래스가 Controller임을 나타내기 위한 어노테이션
@RequestMapping요청에 대해 어떤 Controller, 어떤 메소드가 처리할지를 맵핑하기 위한 어노테이션
@RequestParamController 메소드의 파라미터와 웹요청 파라미터와 맵핑하기 위한 어노테이션
@ModelAttributeController 메소드의 파라미터나 리턴값을 Model 객체와 바인딩하기 위한 어노테이션
@SessionAttributesModel 객체를 세션에 저장하고 사용하기 위한 어노테이션
@RequestPartMultipart 요청의 경우, 웹요청 파라미터와 맵핑가능한 어노테이션(egov 3.0, Spring 3.1.x부터 추가)
@CommandMapController메소드의 파라미터를 Map형태로 받을 때 웹요청 파라미터와 맵핑하기 위한 어노테이션(egov 3.0부터 추가)
@ControllerAdviceController를 보조하는 어노테이션으로 Controller에서 쓰이는 공통기능들을 모듈화하여 전역으로 쓰기 위한 어노테이션(egov 3.0, Spring 3.2.X부터 추가)

@RequestMapping

  • @RequestMapping은 URL을 컨트롤러의 메서드와 매핑할 때 사용하는 스프링 프레임워크의 어노테이션
  • 클래스나 메서드 선언부에 @RequestMapping과 함께 URL을 명시하여 사용 URL외에도 HTTP 요청 메서드나 헤더값에 따라 매핑되도록 옵션을 제공
  • 메서드 레벨에서 정의한 @RequestMapping은 타입 레벨에서 정의된 @RequestMapping의 옵션을 상속
  • 참고로, 메서드 내에서 viewName을 별도로 설정하지 않으면 @RequestMapping의 path로 설정한 URL이 그대로 viewName으로 설정
  • 간단하게 정리하면, 클라이언트는 URL로 요청을 전송하고, 요청 URL을 어떤 메서드가 처리할지 여부를 결정하는 것이 바로 @RequestMapping

@ResponseBody

  • 클라이언트에서 서버로 필요한 데이터를 요청하기 위해 JSON 데이터를 요청 본문에 담아서 서버로 보내면, 서버에서는 @RequestBody 어노테이션을 사용하여 HTTP 요청 본문에 담긴 값들을 자바객체로 변환시켜, 객체에 저장한다.

  • 서버에서 클라이언트로 응답 데이터를 전송하기 위해 @ResponseBody 어노테이션을 사용하여 자바 객체를 HTTP 응답 본문의 객체로 변환하여 클라이언트로 전송한다.

0개의 댓글