ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 우아한테크캠프 Day07
    우아한테크캠프 2018. 7. 11. 09:00

    상태 값을 가지는 객체에 메시지를 보내 일을 시켜라.

    장점

    1. 로직에 대한 중복 제거

    2. 테스트하기 쉬워짐


    테스트하기 어려운 코드(DB에 종속적인 코드)와 테스트하기 쉬운 코드를 분리해야 한다. 


    특히, API를 만드는 관점에서 메소드를 만들면 좋다. 

    (ex. 회원 정보를 업데이트하는 메소드 내에 비밀번호를 검사하는 부분이 없다면, 사용하는 입장에서 둘 다 호출해줘야 하는 불편함이 생긴다.)



    회원 정보를 업데이트하는 메소드 내에 비밀번호 검사하는 부분이 없는 경우

    @PutMapping("/users/{id}/update")
    public String update(@PathVariable int id, User user) {
    User savedUser = users.get(id);
    if (!user.matchPassword(savedUser))
    throw new IllegalArgumentException("You can't edit your information because your passwords do not match.");
    users.set(id, user);
    }


    회원 정보를 업데이트하는 메소드 내에 비밀번호 검사하는 부분이 있는 경우

    public void update(User loginUser, User user) {
    if(!loginUser.matchUserId(userId)) {
    throw new IllegalArgumentException("You can't edit your information because your id do not match.");
    }

    if(!user.matchPassword(password)) {
    throw new IllegalArgumentException("You can't edit your information because your passwords do not match.");
    }
    this.name = user.getName();
    this.email = user.getEmail();
    }




    Day07 학습 내용



    JPA

    객체의 인스턴스 변수를 컬럼이라 생각하고, 세세하게 매핑 할 것

    ※ 프록시라는 개념을 통해 Repository 인터페이스에 대한 구현체를 런타임시에 생성하게 된다.



    스프링

    스프링은 빈 라이프 사이클을 관리한다. 

    따라서, 스프링을 빈 라이프 사이클을 관리한다해서 빈 컨테이너 = DI 컨테이너 = 스프링이라고 혼용해 부른다.


    스프링은 기본적으로 빈을 하나 만들어 놓고, 재사용하는 구조다. 


    빈을 하나만 만들기 때문에 주의해 할 것은 무엇인가?

    상태 값을 가지는 객체를 인스턴스 변수로 사용하면 안 된다. (멀티 스레드 환경이기 때문에)

    상태 값을 가지는 객체는 스레드마다 생성해줘야 한다.

    상태 값을 가지지 않는 객체는 인스턴스 변수로 사용해도 문제가 안 된다.


    멀티 스레드 환경에서 일어날 수 있는 문제는?



    빈 라이프 사이클



    빈 범위



    기본적인 CRUD에 대한 URL 컨벤션을 대표적인 것을 따르고, 나머지 URL에 대해서 더욱 시간을 들여 고민할 것 

    ※ CRUD에 대한 자신만의 URL 컨벤션을 가졌으면 좋겠다.



    의존관계 설정(구현체)을 언제든지 바꿀 수 있도록 구현해야 한다. (레고 바꿔 끼우듯이, 테스트 관점에서도 이것이 좋다)

    ex. DB 말고 메모리 DB를 사용하고 싶다.

    setter 메소드나 생성자를 이용할 수 있다.


    메모리 구조

    스택은 스레드마다 독립적으로 가지게 된다. 힙 메모리는 스레드마다 공유한다. (문제가 생기는 이유)


    메모리 구조에서 스택과 힙의 차이



    세션과 쿠키

    HTTP 특성 : stateless


    stateless 프로토콜에서 state 프로토콜처럼 사용하려면 쿠키 메커니즘밖에는 없다.

    이제는 웹에서도 상태 프로토콜 기반으로 사용할 수 있게 됐다. : WebSocket 


    세션 : 네트워크상으로 전달되는 데이터가 raw data가 아니라 raw data에 대한 session id가 전달된다. 보안상 좋다.

             (세션은 서버상의 어떤 장소에 파일로 저장된다.)

    쿠키 : 네트워크상으로 전달되는 데이터가 raw data가 전달된다. 보안상 취약하다.

    쿠키만 사용하면 보안상 너무 취약하다. 그래서 세션을 사용하는 것이다.

    쿠키를 사용한다면 데이터를 암호화해서 전달하는 게 안전하다.


    쿠키를 사용 할 때와 세션을 사용할 때의 장단점



    스프링에서 세션에 대한 API를 사용하는 것은 크게 어렵지 않다. 다만 메커니즘을 이해하고 사용해야 한다.




    '우아한테크캠프' 카테고리의 다른 글

    우아한테크캠프 Day09  (0) 2018.07.12
    우아한테크캠프 Day08  (0) 2018.07.12
    Git과 Github 정리  (0) 2018.07.10
    우아한테크캠프 Day06  (0) 2018.07.09
    우아한테크캠프 Day05  (0) 2018.07.09

    댓글

Designed by Tistory.