Spring boot 공부 (인텔리J)

최주영·2024년 2월 1일
0

인텔리J

목록 보기
1/1


resource : 자바코드파일을 제외한 나머지를 여기에다 넣음 (xml, properties, html 등)
build.gradle : 빌드 작업에 필요한 기본 설정, 동작 등을 정의한 파일
gitignore : 깃관리 해주는 곳(필요한 코드들만 올릴 수 있음)

✅ 스링부트 라이브러리

  • 1, 2, 3 번 다 추가 세팅 해줘야함
    -> 1번 라이브러리 추가시 톰캣과 MVC 패턴 적용됨
  1. spring-boot-starter-web
    • spring-boot-starter-tomcat : 톰캣(웹서버)
    • spring-webmvc : 스프링 웹 MVC
  2. spring-boot-starter-thymeleaf
    • 타임리프 템플릿 엔진(view)
  3. spring-boot-starter(공통)
    • spring-boot : spring-core
    • srping-boot-starter-logging : logback, slf4j

💡 spring-boot-devtools 라이브러리를 추가하면 'html' 파일을 컴파일만해주면 서버 재시작없이 View 파일 변경이 가능하다!

✅ 테스트 라이브러리
1. spring-boot-starter-test
- junit : 테스트 프레임워크
- mockito : 목 라이브러리
- assertj : 테스트 코드를 편하게 작성하게 도와주는 라이브러리
- spring-test : 스프링 통합 테스트 지원


컨트롤러 클래스 위에 어노테이션 @Controller 필수로 적어줘야함

컨트롤러가 리턴값으로 문자를 반환하면 뷰리졸버(viewResolver)가 화면을 찾아서 처리한다
-> 스프링부트 템플릿엔진이 기본 viewName을 매핑

템플릿 엔진 : 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어
HTML 문서에서 필요한 곳만 자바코드를 적용해서 동적으로 변경할 수 있음
ex) -> jsp, php

정적 컨텐츠 이미지

1. hello-static.html 주소의 요청을 보낸다
2. 스프링에서 해당 주소를 먼저 컨트롤러에서 찾는다
3. 컨트롤러에서 찾지못하면 veiwResolver가 resources: static 밑에서 찾아서 있으면 해당 페이지를 그대로 반환한다

동적 컨텐츠 이미지

ResponseBody 사용원리

  • http(통신프로토콜)의 head와 body중 body부분에 데이터를 직접 넣어주겠다는 의미의 어노테이션
  • viewResolver 대신에 HttpMessageConverter 가 동작함
  • 기본 문자 반환일경우 -> StringConverter가 동작해서 문자로 반환됨
  • 기본 객체로 반환일경우 -> JsonConverter가 동작해서 json 형태로 반환됨
  • 객체를 Json으로 바꿔주는 유명한 라이브러리 -> Jackson, Gson
  • 스프링에는 기본적으로 Jackson이 탑재되어 있음

✅ 스프링 빈을 등록하는 방법 2가지
(1) : 컴포넌트 스캔과 자동의 의존관계 설정
(2) : 자바 코드로 직접 스프링 빈 등록하기

(1) : 컴포넌트 스캔 = @Component를 포함하는 어노테이션들은 자동으로 스프링 빈으로 등록됨
-> ex) @Controller, @Service, @Repository
밑에 코드는 memberService와 memberRepository가 스프링 컨테이너에 스프링 빈으로 등록되었음
기본적으로 스프링 컨테이너에 스프링 빈을 등록할 때, 싱글톤으로 등록한다

@Autowired
= 의존성 주입(Dependency Injection) 의 종류 중 하나임 -> 연결시켜줄 때 사용
의존성 주입에는 3가지 방식 -> 생성자 주입, 필드 주입, setter 주입
생성자 주입 만 쓰는 것을 권장!

@Controller
public class MemberController {

    private final MemberService memberService;
	
    // 생성자 주입
    @Autowired // 생성자로 MemberController가 생성이 될 때, 
    		    //스프링 빈에 등록되어있는 memberService의 객체를 가져다 넣어줌
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}
@Service  // 스프링이 올라갈 때, 스프링컨테이너에서 service부분을 등록해줌
public class MemberService {
    private final MemberRepository memberRepository;
	
    // 생성자 주입
    @Autowired // 생성자로 MemberService가 생성이 될 때, 
    		    //스프링 빈에 등록되어있는 memberRepository 객체를 가져다 넣어줌
    public MemberService(MemberRepository memberRepository) {
        this.memberRepository = memberRepository;
    }
}
@Repository  // 스프링이 올라갈 때, 스프링컨테이너에서 repository 부분을 등록해줌
public class MemoryMemberRepository implements MemberRepository{
              ~~~~~~~~~~~~~~~~~~~
}

(2) : 위에 방식과 다르게 @Configuration, @Bean 을 사용해서 진행
MemberService, MemberRepository 클래스에서 Service Repository Autowired 를 제거해야한다

@Controller
public class MemberController {

    private final MemberService memberService;

    @Autowired // 생성자로 MemberController가 생성이 될 때, 
    		    //스프링 빈에 등록되어있는 memberService의 객체를 가져다 넣어줌
    public MemberController(MemberService memberService) {
        this.memberService = memberService;
    }
}
@Configuration
public class SpringConfig {

    @Bean // memberSerivce가 스프링빈으로 등록
    public MemberService memberService(){
        return new MemberService(memberRepository());
    }

    @Bean // memberRepository가 스프링빈으로 등록
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
}

AOP
공통관심사항과 핵심관심사항을 분리하는 것

profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글