210706-TIL

Jane·2021년 7월 6일
0

TIL

목록 보기
72/103
post-thumbnail

오늘 한 일

✔️ 이슈트레커 프로젝트 코드리뷰 반영

✔️ fork 저장소 잔디 복사

  • git clone --bare [fork 저장소 주소]
  • git push --mirror [새 저장소 주소]

✔️ postsquad 회의

  • 기획 선정 회의
  • 세부 기능 정의

✔️ 자바 스터디

  • Enum
    • Fail-Safe Iterator
      • 실제 컬렉션의 복사본에서 작동하기 때문에 컬렉션의 최신 정보를 반영하지 않을 수도 있다.
      • 컬렉션의 복사본을 만드는 overhead가 발생한다.
    • @Enumerated(EnumType.STRING)를 선언하면 Enum 필드를 테이블에 저장할 때 숫자형이 아닌 Enum의 name이 저장된다.
    • 상태와 행위를 한곳에서 관리
    • 활용 사례
  • IO
    • 데코레이터 패턴
    • 스트림
      • 데이터를 운반하는데 사용되는 연결 통로
      • 단방향 통신만 가능 → 입출력을 한 번에 처리할 수 없음
      • 동기적 / 블로킹 방식
      • 선입선출 구조
      • 바이트 단위로 데이터를 전송
    • 버퍼
      • byte, char, int 등 기본 데이터 타입을 저장할 수 있는 저장소
      • 입출력 전송 속도 차이에 대한 성능을 보완
      • 채널을 통해서 소켓, 파일 등에 데이터를 전송할 때나 읽어올 때 가비지량을 최소화
        • GC 회수 감소 → 서버 전체 처리량 증가
      • 버퍼를 사용하면 좋은 이유🌟 (동 선생님이 강조)
        • OS레벨에 있는 시스템 콜의 횟수를 줄이기 때문에 성능이 개선된다.
    • NIO
      • 자바 1.4 버전에 java.nio 패키지가 추가됨
      • 자바 1.7 버전에 NIO.2가 java.nio.file로 묶여 추가됨
      • Buffer, CharsetDecoder, Channel, Selector 지원
      • 양방향 입출력 가능 → 입력과 출력 스트림을 따로 생성하지 않아도 된다.
      • 기존 IO에서는 InputStream과 OutputStream 각각에 버퍼를 연결해야 하고 입력 버퍼에 저장된 데이터를 출력 버퍼로 이동하는 과정이 필요했지만, NIO에서는 생략 가능하다.
        • allocate 말고 allocateDirect 메서드를 사용하면 Direct 버퍼를 생성한다.
        • ByteBuffer buf = ByteBuffer.allocateDirect(1024);
      • 가상머신이 생성하고 유지하는 버퍼는 Non-direct 버퍼이며, Non-direct 버퍼를 사용할 경우 파일>운영체제>가상버신 버퍼>실행중인 자바 프로그램의 흐름으로 데이터가 전달된다.
      • Direct 버퍼를 사용하면 이 과정이 파일>운영체제 버퍼>실행중인 자바 프로그램으로 단축된다.
      • 그러나 Direct 버퍼는 Non-direct 버퍼에 비해 할당과 해제에 드는 비용이 크기 때문에 할당과 해제가 빈번히 일어난다면 Non-direct 버퍼의 성능이 더 좋을 수 있다.
구분IONIO
입출력 방식Stream 방식Channel 방식
버퍼 방식Non-BufferBuffer
비동기 방식지원 X지원 O
Blocking / Non-Blocking 방식Blocking 방식만 지원Blocking, Non-Blocking 모두 지원
Use Case연결 클라이언트가 적고, 전송 데이터가 대용량이면서 순차적으로 처리되어야 하는 경우연결 클라이언트가 많고 하나의 IO작업이 오래걸리지 않는 경우

느낀 점

  • 어떤 entity를 aggregate로 삼고 repository를 만들어서 관리할까 결정할 때는 도메인 객체의 생명주기를 고려하면 쉽다고 k가 알려주었다. 우아한객체지향 세미나를 보면서 이것에 관련하여 더 공부해봐야겠다.
  • 드디어 postsquad 기획이 구체화되었다. 생각보다 재밌을 것 같다😆 열심히 해서 알림기능까지 구현해보자!
  • 프로젝트 하면서 새로운 기술 도입해보고 기능 구현하는 건 너무 재밌지만 공부도 해야한다... 프로젝트와 학습의 시간을 잘 조정해야겠다.
  • fork한 저장소에서 작업하여 코드스쿼드에서 진행했던 프로젝트의 잔디가 심기지 않고 있었는데 오늘 복사하는 법을 적용해서 잔디를 심었다.

7월 2째주 📑

학습

  • 그림으로 공부하는 IT 인프라 구조 8장 (完)
  • 프로그래머스 레벨 1~2단계 전부 풀어보기

스터디

  • 알고리즘 스터디
  • 백기선 자바 스터디 (Enum, I/O)

기타

  • 이슈트레커 프로젝트 (테스트코드, CI/CD)
  • postsquad 프로젝트 회의
  • GDG 썸머 해커톤 (무박 2일)

0개의 댓글