들어가며...

생략...

2019-O9-29 일요일 TIL

  • Context Switching 테코톡 발표 준비

2019-O9-30 월요일 TIL

  • Context Switching 테코톡 발표 준비

2019-1O-O1 화요일 TIL

포비 강의

  • 현업에서는 프로젝트에서 모듈 기반으로 폴더를 나눠서 관리한다.
  • 서버에서 쓰레드를 계속해서 만드면 문제점이 많다.
    • 컨텍스트 스위칭 비용이 증가한다.
    • 자원이 계속 소모하여 메모리가 초과한다.
    • 결국 서버가 터진다.
  • 쓰레드풀을 만들어 쓰레드를 재사용하도록 한다.
  • 서버는 살아있는게 더 중요하다.
  • WAS(톰캣)는 대표적으로 쓰레드풀을 관리하는 기능과 파싱하는 기능이 있다.
    • 서버를 안정적으로 유지보수한다.
  • 서블릿은 자바 진영에서 만든 표준이다.
    • HTTP 요청, 응답을 파싱하는 표준
    • 인터페이스의 조합
    • 서블릿이라는 인터페이스 표준을 지키면서 구현하면 나중에 더 좋은 서블릿이 나오면 바꿔치기가 가능하다.(기존 코드 수정없이)
  • 인터페이스의 가장 좋은 점(표준)은 더 좋은 버전이 나왔을 때 기존 코드 수정없이 바꿔치기가 가능하다.
    • 단점으로는 변화에 빠르게 대응하지 못한다.
    • 표준을 만드는 데 느리다.
  • 자바는 표준이 잘 만들어져 있어 하위 버전에 대한 호환성이 매우 좋다.
  • 자바스크립트와 같이 변화가 빠른 언어는 안정성이 떨어지는 단점이 있다.
    • Node.js는 알림 같은 특정 기능에 대한 서버에서 사용할 수 있다.
  • 대부분의 서버들은 쓰레드 풀에서 사용자 요청을 받아서 바로 쓰레드에 할당하지 않는다.
    • 쓰레드 풀 앞단에 큐에 일단 넣은 후 처리
    • 쓰레드 대기 큐, 워크 큐가 꽉차면 그 후의 요청들은 버려진다.(소켓이 끊어짐)
  • 톰캣은 발전하여 임베디드 톰캣이 나왔고 이는 바로 API로 사용할 수 있게 되었다.
    • 과거에는 따로 사용해야 했다. 배포에서 힘들어짐

미션 2 관련

  • nextstep*는 프레임워크와 관련된 코드
  • 애플리케이션이 slipp 모듈에 있다.
  • study: 외부 라이브러리를 사용할 때 학습하기 위한 학습 테스트
  • 애노테이션 기반의 MVC 프레임워크를 만드는게 목표
  • 레거시 코드 리펙토링도 할 수 있다.
    • asis 패키지와 tobe 패키지가 공존 가능한 상태로 만들어야 한다.
    • 각 컨트롤러 클래스를 점진적으로 tobe 프레임워크로 전환하는 작업을 한다.
  • 기존의 UserListController를 새로운 UserController의 메서드로 리펙토링한다.
    • ManualHandlerMapping 의 map에서 빠진다.
    • 새로운 UserController가 동작해야 한다.
    • 결국 점진적인 리펙토링을 하는 것이 목표이다.
    • 서비스가 중단하지 않은 체 리펙토링을 할 수 있어야 한다.

  • 리플렉션은 프레임워크나 라이브러리를 만들 떄 주로 사용함
  • 서블릿은 사용자의 모든 요청을 받은 뒤 파싱하여 처리하며, 사용하는 개발자에서는 요청, 응답 객체만 가지고 모든 헤더 정보를 알 수 있다.
  • 처음 나온 MVC 프레임워크는
    • 요청이 올 때 가장 처음에는 프론트 컨트롤러가 모든 요청을 받는다.
    • 하나의 클래스에 하나의 기능만 구현했다.(스프링 부트는 메서드 단위)
  • 다중 클라이언트를 처리하기 위해 하나의 프로세스 내에서 쓰레드를 여러 개로 사용하는 형식을 따른다.
    • 쓰레드는 프로세스의 자원을 일부분 공유한다.

  • 웹 서버 VS WAS VS 서블릿 컨테이너
    • 톰캣은 서블릿 컨테이너인데 사용자 요청마다 서블릿 인스턴스를 재생성하는 것이 아닌 하나를 생성하고 재사용한다.
    • 멀티쓰레드상황을 고려하자.
  • 서버의 기본 쓰레드 개수는 200개이다.
  • accept-count: 큐 크기
  • 스프링은 서블릿을 추상화하여 사용하며, JPA는 JDBC를 추상화하여 사용한다.
  • MVC 프레임워크 흐름에 대해서는 기본적으로 알고 있어야 한다.

2019-10-O2 수요일 TIL

[웹서버-step2] 미션 피드백

public boolean isStaticRequest() {
    return requestLine.getUri().isFileUri();
}

_웹서버-step2__피드백_1.png

위 코드는 프로그램 관련 3대 법칙 중 디미터 법칙을 어긴 코드이다.

.으로 메서드를 중첩해서 호출할수록 호출한 만큼 메서드끼리 연관성이 생기므로 이러한 연관성을 최대한 줄이라고 하는 목적으로 생각된다.

RequestLine 객체는 uri를 포함하고 있는 객체이므로 isFileUri()보다는 includeFileUri() 라는 이름이 더 적절하게 느껴져서 이로 변경하였다.

2019-10-O3 목요일 TIL

  • 트렐로에 개인 일정, 블로그 작성 글 정리 등등
  • 의식적인 연습 - 반드시 해야하지만 내가 하기 싫어하는 것 정리해서 고쳐나가기
  • [웹서버-step2] 미션 피드백 마무리

2019-1O-O4 금요일 TIL

포비 강의

  • 세미나에서 지식을 얻기는 힘들다. 큰 흐름을 볼 수 있다.

  • 서블릿을 한 단계 추상화한 것이 MVC 패턴
  • 서블릿을 처리하는 것을 담당하는 것이 컨트롤러
  • 인프라 성격: 핵심 비즈니스와는 별개인 것들
    • 권한 관련
    • 성능 측정
    • 해당 메서드에서 로깅 처리
    • 단순 작업이 많다.
    • 예를 들면 컨트롤러 성능 측정을 할 때 컨트롤러 시작 시간, 끝난 시간, 이를 뺀 시간을 모두 추가해야한다.
    • 이를 분리해야한다.
  • 서블릿 필터
    • 서블릿 필터는 스프링 부트에서 인터셉터이다.
    • 이러한 기반 기술을 이해해야 다른 언어나 환경으로 넘어가도 이해할 수 있다.
      • 본질적인 것을 공부하자.
    • 체인 방식으로 동작한다.
    • chain.doFiler()에서 서블릿으로 요청을 보낸다.
    • AOP가 적용되어 있다.
    • 서블릿 필터는 가능한 순서에 상관없이 만든다.
      • 만약 순서가 필요하면 서블릿을 묶은 서블릿 필터를 만들어야한다.
  • 스프링의 인터셉터는 dispatcher servlet과 controller 사이에 있다.
  • CORS 중요!
    • 필터로 구현되어 있다.
  • 뷰는 컨트롤러에서 애플리케이션 개발자가 자유롭게 변경할 수 있도록 만들 수 있어야 한다.
    • 디폴트는 있어야 한다.
  • 현업에는 상당히 많은 비즈니스 로직이 서비스 패키지에 있다.
    • 데이터베이스 로직과 섞여 있으므로 테스트가 힘들다.
    • 그러므로 이를 분리하여 테스트해야 한다.

2019-OO-O5 토요일 TIL

  • [MVC - step1] 미션 마무리

마치며...

이번 주 회고

이번 주는 테코톡 발표를 준비하느라고 대부분 일정대로 진행하지 못했다.

  • 이번 주는 새로운 페어아 미션을 새로 시작하는 주인데, 발표가 끝날때까지 미뤘다.(페어에게 미안하고 고맙다...ㅠㅠ)
  • 운동을 못했다.

물론, 핑계일 수 있지만 발표를 한다는게 부담감이 굉장히 컸다. Context Switching에 대해서도 조금만 깊게 들어가도 어려운 부분이 많아서 공부하는데 역시 어려움을 느꼈다. 조금 자세히 정리하려 했는데 이 역시 하지 못하고 발표를 시작하게 되었다...

다음 주 계획

  • 매일 개인 코딩 한시간 하기
  • 책 읽기
  • 스터디 준비, 미션 진행
  • 꾸준히 운동하기