TIL 2021.03.13

스프링부트 String return

매핑한 것을 리턴할때 기본적으로 return "login"; 라고 하면
static 폴더의 login.html 파일에 접근하는 것으로 알고있었다.

근데 return "/users/login"; 이라고 하면 templates 컨트롤러에서 저 경로를 매핑하는 메서드를 실행시킨다.

return 너무 헷갈린다.

호눅스가 return "login"; 라고 하면 controller -> model -> view 이렇게 가는거랬다.

음. 아직도 모르겠다. 아 몰라

@Autowired

repository를 스프링 프레임워크가 관리하고 있는데 사용하고싶을떄 부를수있따
예를 들어서

    @Autowired
    private UserRepository userRepository;

이런식으로 사용하는데 @Autowired가 없으면 userRepository를 사용하는 곳에서는 당연히 아무것도 담지 않았다고 인식하기 때문에 NullPointerException이 발생할것이다.

근데 Exception이 발생하지 않는이유는 @Autowired에 의해서 스프링한테 이 값에다가 즉 userRepository에다가 User들을 할당하라고 알려주는거다

그러니까 UserRepository에서 관리하고 있는 인스턴스들을 여기에 전달해달라고 요청하는거다. 그리고 UserRepository는 인터페이스인데, 구현체가 없다. 이거에 대한 구현체를 생성하는 부분이 스프링프레임워크에서 전부해준다. 구혀네를 생성해서 인스턴스를 만들어서 관리까지 하고 있는거고, 스프링프레임이 관리하고있는 그 인스턴스들를 필드에다가 할당해달라고 명령하는것이다.

내부적으로 어떻게 구현체가 만들어지고 필드에 할당되는지는 지금은 상태에서는 몰라도 상관없다. (자바지기님)

public interface UserRepository extends JpaRepository<User,Long> {
    User findByUserId(String userId);
}

그런데 @Autowired를 붙여주면 마법이 발생해서 이런식으로 UserRepository에 객체를 찾는 추상메서드를 선언해주면

    @Autowired
    private UserRepository userRepository;
    
    @PostMapping("/login")
    public String login(String userId, String password, HttpSession session) {
       User user = userRepository.findByUserId(userId);
       
       [..구현 코드 생략..]

마법에 의해서 메서드 안에 새로운 user를 선언해서 써먹을 수 있다.

스프링부트 Getter

질문목록 나오는거 구현다하고 Getter가 없을 때를 보니까 뷰에서 값을 할당받지 못한거같다. Getter가 없어도 h2.console로 확인하니까 인스턴스는 잘 생성되었다. 그건 Setter로 하는거니까. 근데 이제 질문목록 나오는거 같은경우에 QuestionRepository를 이용해서 가져오는데 인스턴스에는 저장되어있지만 Getter가 없으니까 View에 전달이 안되는거같다

좋은 웹페이지 즐겨찾기