12월 26일 ~ 1월 1일

유수민·2023년 1월 3일
0

인사이트

목록 보기
9/15
post-thumbnail

일주일간 나의 흥미를 끈 인사이트는??

📌목록

📌감상

1. 싱글톤 패턴(Singleton pattern)을 쓰는 이유와 문제점

https://jeong-pro.tistory.com/86
싱글톤 패턴 : 최초 한번만 메모리를 할당하고 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴. 인스턴스를 불필요하게 생성하지 않고 오직 JVM내에서 한개의 인스턴스만 생성하여 재사용을 위해 사용되는 디자인패턴
🌱장점
1) 메모리 낭비 방지
2) 다른 클래스의 인스턴스들이 데이터를 공유할 수 있음
🌱단점
1) 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우, 결합도가 높아져 개방폐쇄원칙을 위반함.
2) 수정이 어려워짐.
3) 멀티쓰레드환경에서 동기화 처리를 안하면 인스턴스가 두개가 생성되는 경우가 발생할 수 있음 ( 동기화에 대한 문제 존재)
-> Thread-safe하지 않음

참고) https://inpa.tistory.com/entry/GOF-%F0%9F%92%A0-%EC%8B%B1%EA%B8%80%ED%86%A4Singleton-%ED%8C%A8%ED%84%B4-%EA%BC%BC%EA%BC%BC%ED%95%98%EA%B2%8C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

2. 도큐먼트 데이터베이스와 MongoDB

https://bbaktaeho-95.tistory.com/m/108
MongoDB를 써본적이 있어서 이에 대한 특징을 정리해보았길래 읽어보게 되었다.

🌱특징
1) 도큐먼트 데이터베이스
2) MongoDB에 저장된 모든 도큐먼드는 _id 키를 가진다
ObjectId는 12 Byte로 구성되며 첫 4 Byte는 타임스탬프, 5 Byte는 랜덤, 마지막 3 Byte 랜덤 카운터로 서로 다른 시스템에서 충돌하는 id를 생성하지 않도록 한다.
3) storage에 BSON 형태로 데이터를 저장한다.
BYTE, INT32, INT64, DOUBLE 타입을 이용해서 데이터를 저장-> 텍스트로 저장하는 것보다 비용 저렴 + 공간적인 절약
4) 분산확장을 고려하여 설계되었다.

이 글을 읽고 MongoDB에 대해 정말 아는 것이 없다는 것을 깨달았다..글에 많은 내용이 써있지만 이해하지 못하는 것이 많았다. ㅠㅠ

3.[Effective Java] 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라

https://jwkim96.tistory.com/m/300
앞서 싱글톤 패턴에 대한 글을 읽어서 이 글을 읽을 때 더 많이 이해가 갔다.
앞선 글에서는 '멀티쓰레드환경에서 동기화 처리를 안하면 인스턴스가 두개가 생성되는 경우가 발생할 수 있음'이라고만 말했는데 여기서는 '싱글톤 구현 시 멀티스레드를 고려하지 않으면 여러 클라이언트에서 하나의 자원에 접근하며 레이스 컨디션이 발생할 수 있습니다.만약 싱글턴의 생성 로직에서 레이스 컨디션이 발생한다면, 여러개의 객체가 생성되는 일도 발생할 수 있습니다.'라고 표현했다. 운영체제 동기화시간에 레이스컨디션이 하나의 자원에 여러 클라이언트에서 접근하는 현상임을 배웠기에 이해가 좀 더 갔다. 이팩티브 자바에서도 싱글턴을 말했다니! 이전에 읽었던 책인데 다시 새롭다.

싱글톤 패턴의 단점을 고려하면서 싱클턴을 구현하는 방법도 소개되었다.
1) public static final 필드
2) 정적 팩터리
3) 열거 타입 활용(enum)

4. 미국 국립표준기술연구소(NIST), 2030년말까지 SHA-1 단계적 폐지 발표

https://news.hada.io/topic?id=8045&utm_source=slack&utm_medium=bot&utm_campaign=T03DN2VDVFG
SHA-1 : 보안 해시 알고리즘
해시는 주로 해당 문서가 변조되었는지 확인하기 위해 쓰인다고 알고 있다. SHA-1은 임의의 길이의 입력 데이터를 160비트의 출력데이터(해시값)으로 바꾸는데 쓰인다. SHA-1은 인터넷 보안 프로토콜과 공개키 인증서에 적용된다고 한다. 왜 폐지되는가? SHA-1은 무차별 대입 공격으로 동일한 해시를 만들 수 있다는 취약점이 발견되었다고 한다. 즉, 암호화 해시 충돌 기법을 이용하면 해커가 중간에 데이터를 가로채 파일을 변조할 수 있다. 구글은 실제로 SHA 해시코드는 동일하지만 내용물이 다른 2개의 PDF 파일을 공개했다고 한다.

5. JPA 영속성 컨텍스트의 시작 범위 (Lazy Loding proxy 객체 조회 시 에러가 나는 이유)

https://thalals.tistory.com/385
다시 새겨 쓴 지식

스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 즉, 트랜잭션 범위와 영속성 컨텍스트의 생존 범위가 같다. 따라서 트랜잭션이 적용되지 않는 레이어에서는 엔티티가 준영속 상태이기 때문에 지연로딩시 프록시 객체가 엔티티를 호출할 수 없다.
응~ 글로만 보면 이해안된다~ 코드 없나...?
관련된 코드를 찾아보니

여기서 현재 service 레이어인데 만약 해당 레이어가 아닌 곳에서
(즉, 트랜잭션 밖에서) return 값인 order를 사용하면, lazy loading 되는 객체들의 참조 시 transaction 관련 에러가 발생할 수도 있고, 다른 레이어에서의 의도치 않은 변경이 발생할 수 있다는 것을 확인하였다. 아마도 다른 레이어에서도 사용할 수 있도록 dto객체를 새로 만들어야 하지 않을까 싶다. 역시 코드로 이해하는 것이 최고!

6. 카카오톡! 왜 계속 업데이트할까?

https://brunch.co.kr/@544643cce09f4e4/11
방금 5분전까지도 사용했던 카카오톡, 사용자 입장에서도 이 어플, 최고의 순위에 있음에도 불구하고 계속 발전하고 있는것이 보인다. 원래 전체복사만 되었었는데 최근에 일부복사가 생겼다. 세세한 기능이 첨가되는 것을 보고 카카오톡이 계속 꾸준히 발전하고 있음을 느꼈다. 물론 이 글이 기술에 관한 글이 아닌 기획자 관점에서 쓰인 글이지만, 전반적으로 카카오톡이 어떤 관점으로 성장을 하려하였는가에 대한 이야기가 쓰여있어서 재미있게 보았다.

7. 1일 1커밋 3년을 달성하다.

https://unluckyjung.github.io//my/2022/12/25/1day-1commit-3year/
지금 거의 2달째 1일 1커밋을 하고 있는데, 이분은 3년을 달성했다고 한다. 이분은 회사에서 깃허브를 쓰고 있고 개인계정과 회사계정을 연결해서 할 수 있었다고 하는데, 그래도 대단했다. 나도 취업을 하면, 꾸준히 1일 1커밋을 달성하고 싶다는 생각을 갖게 되었다. 토이 프로젝트나 하다못해 알고리즘 공부라도!

8. 자바 버전별 한국 도입 예상 년도

https://velog.io/@composite/%EC%9E%90%EB%B0%94-%EB%B2%84%EC%A0%84%EB%B3%84-%ED%95%9C%EA%B5%AD-%EB%8F%84%EC%9E%85-%EC%98%88%EC%83%81-%EB%85%84%EB%8F%84
한국 도입 예상 년도가 제목이지만, JDK 버전별 차이가 간결하게, 읽기 쉽게 정리되어 있다.
자바 8 - 람다, 동시성 프로그래밍 도입
자바 9 - 자바 모듈화
자바 10 - var 도입
자바 11 - 병렬 가비지콜렉터 생김
자바 12 - switch문 간결화
자바 13 - switch형 변수 할당 (yield 구문 추가)
자바 14 - Record 타입 지원을 통한 VO(Value Object) 지원 향상
자바 15 - 클래스 봉인(닷넷의 sealed class는 자바의 final class와 동일한 개념으로 자바에서 말하는 봉인은 상속 한정자를 지정하는 것), 문단 블록 지원 (""" ... """)

profile
배우는 것이 즐겁다!

0개의 댓글