2020-11-07

  • 스터디
    • docker
      • spotify - maven plugin (스프링 부트 빌드의 결과를 더 쉽게 도커 컨테이너로 생성 가능)
      • drone io
      • gradle jib
      • docker registry
      • nexus
    • 개발자가 일 더 잘하는 법

2020-09-06

  • https://stackoverflow.com/questions/33860262/how-to-interact-with-back-end-after-successful-auth-with-oauth-on-front-end

    2020-09-05

  • 스터디
    • JMS는 오래된 만큼 요즘에는 안 쓴다.
    • content type

      2020-08-29

  • 스터디
    • assert는 특정 옵션을 줘야 수행된다.

2020-08-25

  • 스터디
    • boxing vs unboxing
      • 참조 타입은 heap에 저장되기 때문에 동기화 문제가 발생
      • 기본 타입은 stack에 저장되기 때문에 thread-safe
      • 참조 타입의 '=='은 주소를 비교하게 된다
    • static vs non-static
      • permanent in heap(java7) -> metaspace(java8) 과정에서 static object가 heap에 저장되어 GC의 관리 대상이 되었다.
        • java7의 permanent 영역은
      • heap 영역이라도 gc가 관리하는 영역이 분리되어 있다(GC가 heap을 모두 관리하지는 않는다)?
      • stat
    • 함수형 인터페이스
      • 함수 하나에 default method 여러 개여도 함수형 인터페이스에 속함
    • java8
      • lambda
      • stream
        • 최종 연산 후에는 stream instance를 재사용 못함
      • optional
        • null일 수 있는 객체 지정?
    • String vs StringBuilder vs StringBuffer
      • String : final -> immutable
      • StringBuilder : non-final -> mutable
        • 동기화 지원 안함
      • StringBuffer
        • 동기화 지원, thread-safe
      • StringBuilder는 single thread, StringBuffer는 multi thread에 적합
    • DispatcherServlet
      • 외부 요청을 특정 컨트롤러로 매핑 위해 Front controller 패턴을 적용한 servlet
      • front controller
    • JPA Persistence
      • 1차 캐시
      • 2차 캐시 : cachable
      • @Transactional
        • save 안해도 block 안에서 값이 변경되면 알아서 update 된다.

          2020-08-22

  • 스터디
    • lambda
    • stream
      • 원소의 나열(유한이든 무한이든)
      • 중간 연산
        • 새로운 스트림을 만든다
      • 종단 연산
        • 보통 원소를 정렬해서 컬렉션에 담거나, 특정 원소를 선택하거나, 모든 원소를 출력한다.

2020-08-08

  • 스터디
    • item29
    • item30
      • utility method

        2020-08-04

  • 스터디
    • Controller Advice
      • @Exception Handler
      • AOP의 exception을 잡을 수 있다.
    • N+1
      • JPA에서 발생
      • join Fetch
        • 단점: paging API를 할 수 없다.
    • 동기화
      • JVM heap, method area
      • concurrentHashMap 권장함
        • thread-safe
      • atomic과 volatile의 차이를 concurrentHashMap으로 설명할 수 있는지
      • synchrosized와 다르게 reetrantLock은 critical section을 지정해줄 수 있다?
      • 회피 방법은?
    • spring security
      • spring
        • OCP(Open-Close Principal)
        • IoC(Inversion Of Controll)
      • SecurityContext
        • Thread간 token이 공유된다.
      • 큰 틀(적어도 Manager와 Provider)만 알고 있으면 될 것 같다. 보통 회사에서 이 틀을 벗어나지 않는다.
      • Manager와 Provider를 통해 유연하게 제공할 수 있다.
    • hash Collision
      • open addressing
      • close addressing
        • seperate chaining(linked list) - java hashmap

2020-08-01

  • 스터디
    • raw 타입
    • sonarLint
    • 보통 명령행 인자로 prod, dev 등의 환경을 세팅한다.

2020-07-28

  • 화요일 스터디
    • 질문 리스트 작성하기
      • spring batch
      • Maven vs Gradle
    • thread safe
      • synchrosized, volatile
    • heap dump
      • OOM(Out of Memory)
      • memory leak으로 인한 오류
      • Tool 존재
      • dump 파일을 vi로 열면 안 된다.
      • eclipse MAT
        • leak suspects를 먼저 확인해보자
      • xlogs? scouter?
    • multi thread, thread safe, thread pool
      • multi thread
        • 자원을 공유
      • thread safe
        • 개발자가 의도대로 동작하는 것
        • 동기화 문제
          • volatile
      • thread pool
        • thread의 최대 개수를 정하여 해당 개수를 넘어가면 더 이상 요청을 못 받는 등의 조치를 취할 수 있다.
        • blocking queue
    • Hashtable vs HashMap
      • HashMap은 동기화가 안 되지만, hashtable은 동기화가 된다.
      • Hashtable은 레거시 클래스, 발전 없음
      • HashMap은 빠르다. (O(1))
    • message queue
      • image 업로드는 별개로 수행한다.
      • 부하가 심하거나, 핵심 데이터가 아닌 경우 메시지 큐에 넣어 수행할 수 있다.
      • 최근에는 Kafka를 많이 쓴다
        • Kafka는 분산 처리에 좋음. 고성능 고가용성
        • RabbitMQ는 구성이 쉽다
        • RabbitMQ는 push 방식인데, kafka는 pull 방식

2020-07-25

  • spring in action - 4. security
    • API를 다 알아야 잘 쓸 수 있다.
    • dependency만 추가하면 기본적으로 로그인 폼이 제공된다.
    • h2는 web으로 DB를 볼 수 있다.
    • bcrypt 알고리즘을 많이 사용한다.
    • redirect나, form을 넘겨주는 뭐 그런 식은 현업에서 거의 쓰지 않는다.
    • method chainning
  • item17
    • companion class
  • item23
    • SRP원칙 위반?
    • OCP원칙

2020-07-21

2020-07-19

  • lambda
    • 줄일건 줄이자

2020-07-18

  • item14 - compareTo
    • 함수형 인터페이스?
    • 숫자, 알파벳, 연대 같은 것은 구현해주는게 좋다
    • 2에서 sgn()을 굳이 쓸 필요가 있나?
    • compareTo와 equals의 차이
      • 객체 타입
      • 하지만, compareTo의 동치성과 equals
        • 문제가 발생하는 예시 확인
      • 솔리드…하위 클래스는 상위 클래스를 대체할 수 있어야 한다?
      • 추상화를 하지 않으면 타입 비교를 넣어서 compareTo 규약을 지킬 수 있긴 하다?
      • compose 개념?
      • view 메서드?
  • item18 - 컴포지션
    • 상속은 is-a, 컴포지션은 has-a
    • 상속은 확장된 클래스
    • 전달 클래스
  • item20
    • 단일 상속, 다중 구현
    • 상위 타입 지정
    • 추상 클래스는 특정 하나의 자식 클래스에 최적화되어 있을 수도 있다.
    • 믹스인
    • 계층구조가 없는 것
    • 인터페이스 제약 중 내가 만들지 않은 인터페이스에는 디포르 메서드 추가 못함…? 무슨 말?
    • setValue가 선택적인 이유?
    • 시뮬레이트한 다중 상속
    • 추상 클래스만의 이점
      • 계층적인 이점
      • 템플릿 메서드 패턴을 적용하고 싶을 때만 사용?
  • item21
    • 디폴트 메서드로 람다의 활용이 커짐
    • 디폴트 메서드는 주 기능이 아닌 부가 기능의 역할에 가깝다.

2020-07-13

  • vimwiki
    • vimwiki에서 wiki.syntax를 설정하지 않으면 default로 vimwiki syntax가 설정된다.
      • markdown syntax로 highlighting 되지 않는다.
      • enter를 통해 link를 생성할 때 vimwiki link 형식으로 생성된다. (형식 : '\[\[words\]\]')
      • :vimwikiRenameLink(deprecated)나 :vimwikiRenameFile을 이용할 때 markdown link 형식만 변환된다.
    • vimwiki에서 wiki.syntax를 markdown 으로 설정하면 markdown syntax가 설정된다.
      • markdown syntax로 highlighting 된다.
      • enter를 통해 link를 생성할 때 markdown link 형식으로 생성된다. (형식 : '[words](link)')
      • :vimwikiRenameLink(deprecated)나 :vimwikiRenameFile을 이용할 때 markdown link 형식만 변환된다.
    • 해결 : wiki.syntax를 default로 설정하고, autocmd를 통해 filetype이 vimwiki일 때 syntax를 markdown으로 변경하면 vimwiki link 형식으로 생성되고, :vimwikiRenameFile 기능을 이용할 수 있으며 markdown syntax로 highlighting 된다.

2020-07-11

  • item6
    • RomanNumerals.isRomanNumeral static method를 사용하여 ROMAN이란 객체를 재사용한다.
    • 지연 초기화 (item87)
      • JPA lazy loading (Entity 정보를 query를 쓰기 전까지는 loading하지 않는다)
      • synchrosized
    • 어댑터 패턴
    • 방어적 복사 (item50)
    • boolean(String) 생성자가 뭐지 찾아보자
    • String s = "bikini"; (heap 영역의 constant pool, String만)
      • 비용 문제로 그렇게 하는것으로 보임
  • item 11
    • 익명 클래스
    • hashcode 요령
      • '31'
    • equals로 또 한 번 체크한다.
  • item 12
    • 디버깅 쉽다
    • 포맷의 문서화
  • item 13
  • item 15
    • 하지만 getter, setter는 그대로 return 타입과 method 이름에 변수 이름이 다 드러난다.
      • getter, setter는 안티패턴
      • 외부에서 진짜 필요한 메소드만 제공을 하는게 더 낫다.
    • 정보 은닉 : 시스템 관리 비용
    • array를
  • chapter3
    • 상용구 코드를 안 써도 된다.
    • double 콜론 (java9)
    • data.sql,
    • JPA
      • @Entity : JPA 애노테이션
      • @NoArgsConstructor private으로
      • @GeneratedValue
      • Order는 sql에서 예약어
      • CrudRepository
      • spring 데이터는 method 이름을 분석한다.
      • 너무 길면 @Query()

2020-07-10

  • virt-what
    • guest OS가 linux인 상황에서 현재 VM으로 OS가 돌아가고 있는지 확인하는 명령어
    • ubuntu에서는 따로 설치해야 한다.
    • centos에는 설치가 되어 있는 듯 하다
    • VM이 아니면 아무것도 출력되지 않는다.
    • Hyper-V의 경우 "hyperv" 라고 출력된다.
    • WSL1도 "hyperv" 라고 출력된다.
    • WSL2는 어떻게 나오는지 모르겠다
    • docker에서도 어떻게 나오련지 모르겠다.
  • hyper-v
    • VM이 실행되고 있었으면 Host가 Reboot되어도 자동 재실행된다.
    • vhd를 resize 할 수 있으나, guest os에서도 disk 및 partition을 resize해주어야 한다. 관련 자료
  • eclipse 단축키
    • ctrl + shift + R : 파일 이름으로 찾기
    • ctrl + shift + T : class이름으로 찾기
    • ctrl + shift + L : text 찾기 (plugin 필요)
  • spring batch
    • 관련 DB에 동일한 parameter로 수행된 이력이 저장되어 있으면 다시 수행해도 수행되지 않는다. (DB 데이터를 지우면 가능하다.)
  • zip 명령어
    • -j 옵션을 통해 압축 파일에 폴더가 저장되는걸 방지

2020-07-09

  • elastic search
    • java 8 (나중에는 java 11 이상 지원할 예정이라고 함)
    • 샤드 : 스토리지를 논리적으로 나누는 단위
    • 레플리카 : 샤드를 몇 개 복사해 놓을 건지
    • cluster 가능 (master-slave)
    • group by 성능 정말 안 나옴, Sum도 성능 안 나옴(통계 관련…)
    • 삭제가 어렵고, modify도 안 된다? (정확한 내용에 대해 검색해보자)
    • ES는 분산 시스템이라고 한다.
    • mysql cluster도 있다.
      • 깨지는 경우가 있어 상용으로 쓰기에는 힘들다는 의견이 있다.
      • 우형이나 카뱅에서 mysql cluster와 proxy sql을 사용한다고 한다.