TIL - day17

정상화·2023년 3월 15일
0

TIL

목록 보기
13/46
post-thumbnail

IoC 컨테이너

스프링은 컴포넌트들을 IoC컨테이너에 저장해 두고 필요할 때 꺼내쓴다.

사용할 때마다 new로 객체생성 안한다.

필드주입

필드에 직접 컨테이너의 요소를 주입한다.

@Autowired
private MemberRepository memberRepository;

생성자 주입

@Autowired
public MemberService(MemberRepository memberRepository){
	this.memberRepository = memberRepository;
}

요청, 응답처리 추상화

HttpServletRequest,HttpServletResponse 객체를 이용하여 요청과 응답에 대한 설정을 직접 구현하는 것은 Controller에서 이루어질 관심사가 아니다.
해당 작업만을 하는 클래스의 객체를 따로 생성하는 것이 효율적이다.

아래는 요청과 응답의 쿠키설정을 하는 Rq클래스의 코드이다.

@RestController
@RequiredArgsConstructor
@RequestMapping("/member")
public class MemberController {

    private final MemberService memberService;

    @GetMapping("/login")
    public RsData login(HttpServletResponse res, String username, String password) {
        Rq rq = new Rq(null, res);
        if (username == null || password == null) {
            return RsData.result("F-3", "Username 과 password를 입력해주세요.");
        }

        RsData rsData = memberService.tryLogin(username, password);
        if (rsData.isSuccess()) {
            rq.setCookie("user", rsData.getData().toString());
        }

        return rsData;
    }

    @GetMapping("/logout")
    public RsData logout(HttpServletRequest req, HttpServletResponse res) {
        Rq rq = new Rq(req, res);
        rq.removeCookie("user");

        return RsData.result("S-1", "로그아웃 되었습니다.");
    }

    @GetMapping("/me")
    public RsData me(HttpServletRequest req) {
        Rq rq = new Rq(req, null);
        String username = rq.getCookie("user", "anonymous");

        if (username.equals("anonymous")) {
            return RsData.result("F-1", "로그인 후 이용해주세요");
        }

        return RsData.result("S-1", String.format("당신의 username은 %s입니다.", username));
    }
}
profile
백엔드 희망

0개의 댓글