일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 리액트 Context 사용방법
- 스프링 엑셀 다운로드 기능
- 스프링 엑셀 다운로드 의존성
- JSTL 초기세팅
- 리액트 훅 사용하기
- 인텔리제이 콘솔 한글깨짐 해결방법
- 인텔리제이 콘솔 한글안됨
- 스프링 문자 인증
- 인텔리제이 콘솔 한글깨짐
- 엑셀 다운로드 기능
- HTML
- 소셜로그인 API
- 스프링 시큐리티
- 자바스크립트 변수 상수 차이
- 자바 문법
- 프론트엔드개발자
- 스프링 문자보내기 구현
- JSTL 사용방법
- 자바스크립트
- 프론트엔드
- css 레이아웃
- 스프링 문자보내기 API
- SQL 문법
- 문자보내는 API
- 문자보내는 API사용방법
- 스프링 엑셀 다운로드 기능 만들기
- css layout
- sql 타입
- CSS
- coolSMS 사용방법
- Today
- Total
keembloo
스프링 기본 패턴과 어노테이션(Annotation) 본문
@ 어노테이션(Annotation)
- 사전적 의미로는 주석
- 클래스와 메소드에 추가하여 특별한 의미, 기능을 수행하도록 하는 기술
- 장점 : 코드량이 감소하고 유지보수하기 쉽다. 생산성이 증가한다.
어노테이션의 종류는 2가지로 나뉜다
1. 표준 어노테이션
자바가 기본적으로 제공하는 어노테이션
ex) @Override
2. 메타 어노테이션
메타 데이터를 제공하는 어노테이션(어노테이션을 위한 어노테이션)
메타 데이터
- 컴파일 과정과 실행 과정에서 코드를 어떻게 컴파일하고 처리할 것인지 알려주는 정보
- 스프링 프레임워크를 사용하는데 있어서 중요함
- 스프링은 라이브러리자체를 제공함
자주쓰는 어노테이션
< 1 > 스프링
1. @SpringBootApplication
스프링 부트 실행 관련 제공
2.@ServletComponentScan
서블릿을 찾아서 컨테이너에 빈 등록
3.@Autowired
컨테이너에서 빈 찾아서 객체를 주입한다
스프링 프레임워크에서 빈 객체를 주입받기 위한 방법은 3가지가 있다
@Autowired
생성자 (@AllArgsConstructor 사용)
setter
4.@Bean
개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 등록할때 사용한다
< 2 > MVC
1. @Component
개발자가 생성한 class를 Bean에 등록할때 사용하는 어노테이션
2. @ComponentScan
스프링은 @ Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면
bean (스프링 컨테이너 = 스프링이 객체들을 관리하는 메모리공간 )으로 등록한다.
@ComponentScan 어노테이션이 있는 클래스의 하위 패키지를 스캔한다.
상위 패키지는 검색 불가능 하다 (동일 패키지, 하위 패키지는 가능)
3. @Controller
스프링에게 해당 클래스가 Controller 역할을 한다고 명시하기 위해 사용한다.
서블릿 기능을 제공받는다.
4. @RestController
스프링에게 해당 클래스가 Controller 역할을 한다고 명시하기 위해 사용한다.
Controller와 차이점은 @ResponseBody 를 생략할 수 있다.
해당 클래스내 모든 함수들은 자동으로 @ResponseBody 주입된다.
5. @ResponseBody
리턴(반환)되는 값이 View 로 출력되지 않고 HTTP Response Body에 직접 쓰여지게 된다
return 시에 json , XML 데이터를 반환한다.
해당 함수의 반환타입에 따른 응답타입을 자동 설정해준다
response.setContentType | 해당 함수의 반환타입 |
String | "text/html; charset=utf-8" |
Dto | "application/json; charset=utf-8" |
List | "application/json; charset=utf-8" |
return에 응답할 데이터 작성
response.setContentType("text/html; charset=utf-8"); | public String deleteOrange ( ) { } |
response.getWriter().printIn("정상응답"); | return "정상응답"; |
- JSP 프로젝트 사용했던 ObjectMapper 사용할 필요가 없어짐
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString( loginDto );
6. @RequestMapping
들어온 요청과 어노테이션의 value 값이 일치하면 해당 클래스나 메소드가 실행된다.
Controller 객체 안에서 적용 가능하다.
매핑 즉 연결해준다.
외부 HTTP 요청으로부터 해당 함수와 매칭을 연결해주는 어노테이션
주의점 : 프로젝트내 절대적으로 동일한 매핑URL과 HTTP함수 모두 동일하게 정의할수 없다
해당 클래스내 메소드 매핑URL들의 공통 URL 정의 가능
7. @GetMapping
HTTP 요청 GET 함수 매핑
8. @PostMapping
HTTP 요청 Post 함수 매핑
9. @PutMapping
HTTP 요청 Put 함수 매핑
10. @DeleteMapping
HTTP 요청 Delete 함수 매핑
11. @Service
스프링에게 해당 클래스가 Service 역할을 한다고 명시하기 위해 사용한다.
컨트롤러와 서비스의 차이
컨트롤러 - 매핑만 함
서비스 - 로직만 짬
컨트롤러와 서비스를 나눈 이유 : 매핑과, 로직 함께 작성하면 복잡하니까
12. @RequestParam
URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜서 파라미터를 받아서 처리할 수 있게 한다
JSON형식의 BODY를 JAVA 객체로 변환시킨다
즉 쿼리스트링 형식의 요청 매개변수 매핑
URL?매개변수=값?매개변수=값
13. @PathVariable
경로상의 매개변수 형식의 요청 매개변수 매핑
URL/값/값
14. @RequestBody
Body에 전달되는 데이터를 메소드의 인지와 매칭시켜 데이터를 받아서 처리할 수 있게 한다
클라이언트가 보내는 HTTP 요청 본문(JSON , XML 등) 을 JAVA 오브젝트로 변환한다
즉 HTTP body( Post/Put ) 형식의 요청 매개변수를 객체로 매핑 (JSON)
15. @ModelAttribute
클라이어트가 보내는 HTTP 인자, BOCY 내용을 Setter 함수를 통해 1:!로 객체에 데이터를 연결한다
RequestBody와 다르게 HTTP Body 내용은 multipart/form-data 형태를 요구한다.
RequestBody 와 차이점 : RequestBody가 json을 받는 것과 달리 ModenAttribute 의 경우에는 json 처리 불가능.
16. @Repository
Spring 에서 리포지토리
< 3 > Lombok
Lombok은 코드를 크게 줄여주어 가독성을 크게 높힐 수 있는 라이브러리.
1. @NoArgsConstructor
빈생성자 자동 생성
2. @AllArgsConstructor
풀생성자 자동 생성
3. @Getter
필드의 getter메소드 자동 생성
4. @Setter
필드의 setter메소드 자동 생성
5. @ToString
필드의 toString메소드 자동 생성
6. @Builder
필더 패턴 유연하게(생성자 단점 보완 ) 객체 생성 도와주는 함수 제공
생성자의 파라미터 순서, 갯수에 상관없이 쓸 수 있게 해준다.
- 스프링 부트 시작
꼭 main 스레드 안에서 작성해야한다
public static void main(String[] args) {
SpringApplication.run(현재클래스명.class)
}
- 주의할점
@SpringBootApplication 를 사용하는 해당 클래스는 항상 최상위 위치에 생성해야한다
- 내장 톰캣 사용시 port 변경하는 방법
프로젝트폴더 -> SRC -> Main -> 리소스 우클릭 -> 파일생성 -> application.properties 이름으로 파일생성한다
스프링에서의 외부설정을 등록하는 곳
파일명에 오타가 있을 경우 스프링이 해당 파일을 못찾아서 설정 등록이 안됨
# 주석
# 1. 내장톰캣의 포트 변경
server.port = 8080
'Spring' 카테고리의 다른 글
JPA Auditing 정리 (0) | 2023.10.18 |
---|---|
Spring 아키텍처 (0) | 2023.10.17 |
Spring 이란? 스프링 기본 정리 (0) | 2023.10.12 |
다른 클래스 메소드를 호출하는 방법 (0) | 2023.10.05 |
스프링 매핑관련 정리 (0) | 2023.10.04 |