IT 23

[IT]코드 의존성에서의 위험

left-pad IT계의 대표적인 보안 사고 중 하나로 "left-pad" 이슈가 있다. 이 문제는 일종의 Supply Chain Attack의 예로, 개발자가 많이 사용하는 JavaScript 라이브러리인 "left-pad"가 갑자기 npm(Node Package Manager) 저장소에서 삭제됨으로써 일어났다. 이를 기반으로 하여 다양한 공격 기법들이 발생하였고, 여러 조직이 피해를 입었다. 이에 대표적인 사건하나가 있는데 2016년 3월, Node.js 생태계에서 매우 유명한 패키지인 "left-pad"가 배포 중단되면서 큰 파장을 일으켰다. 이 패키지는 문자열을 왼쪽으로 채우는 함수를 제공하며, 거의 모든 Node.js 개발자들이 일상적으로 사용하는 패키지 중 하나였다. "left-pad" 이슈는..

IT최신동향 2023.05.01

[queryDsl] fetchFirst() NullPointerException 에러

fetchFirst() NullPointerException 에러가 발생했을 때 이유는 fetchFirst() null을 반환할 경우 발생한다. 이 경우 fetchOne()을 사용하면 해당 에러를 해결할 수 있지만 하지만 fetchOne()은 더 많은 리소스를 사용하여 성능에 영향을 미칠 수 있어 다른 방법을 고려해야한다. 먼저, etchFirst()가 null을 반환하는 이유를 확인해 보자 예를 들어, 조건에 맞는 데이터가 없는 경우 null을 반환하는 것이 의도된 동작이라면, fetchFirst()를 그대로 사용하는 것이 올바른 방법이다. 하지만, fetchFirst()가 null을 반환하는 것이 예상치 못한 결과일 떄 필요한 데이터만 선택적으로 가져오는 등의 방법으로 쿼리를 최적화할 수 있다. 예를..

[ProblemSolver] @Transactional(readOnly = true)는 왜 필요한가?

회사에서 소스코드를 분석하고 에제코드를 작성해보면서 단순히 왜 쓰는지에 대해 이해도가 전혀없이 @Transactional(readOnly = true) 을 주었다. 트렌젝션 일어나는 insert, update, delete 에는 쓰기가 가능하도록 별도록 @Transaction 어노테이션을 메서드에 선언해야한다. Class Level에는 공통적으로 적용되는 읽기전용인 @Transacrtion (readOnly = true) 어노테이션을 선언만하고 실행을 시켜본 결과 당연히 되지않았다. 그래놓고 왜 update가 왜 안될까 고민하고 있었다. 아래와 같이 트렌젝션 일어나는 insert, update, delete 에는 쓰기가 가능하도록 @Transactional 어노테이션을 달아줘야한다. @Service @T..

네트워크와 CS 2022.10.24

[queryDsl] queryDsl에서 데이터 insert하는 방법

queryDsl QueryDSL을 사용하여 쿼리를 Build 하기 위해서는 JPAQueryFactory가 필요하다. JPAQueryFactory를 사용하면 EntityManager를 통해서 질의가 처리되고, JPQL을 사용한다. EntityManager? JPAQueryFactory는 insert()를 가지고 있지않기 때문에 insert를 하려면 EnityManager를 사용한다. @Service @Transactional(readOnly = true) class BoardServiceImpl( val boardRepository: BoardRepository, val em: EntityManager ) : BoardService { /** 작성글 작성 **/ @Transactional override ..

JPA 사용할 때 주의해야할 점 2편_관계매핑의 정의와 mappedBy 이해하기

그렇다면 양방향 관계 해결 방법은?? Entity01 BookStore @Entity @Getter @Setter public calss BookStore { @Id @GenerateValue private Integer id; private String name; @OneToMany(mappedBy ="bookStore") private Set books = new HashSet(); //add 메세지로 책을 책방에 추가한 것 void add(Book book){ book.setBookStore(this); this.books.add(book); } } book.setBookStore(this); 의 의미는 무엇일까? book.setBookStore(this); 를 추가하고 실행시키면 데이터 베이스 결..

Hibernate JPA 사용할 때 주의해야할 점. 원리를 모르면 그냥 쓰지마세요 1편

QueryDSL?? QueryDSL은 정적 타입을 이용해서 SQL 등의 쿼리를 생성해주는 프레임워크이다. QueryDSL의 장점 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다. 자동 완성 등 IDE의 도움을 받을 수 있다. 동적인 쿼리 작성이 편리하다. 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다. 잘못된 예제코드와 정상예제코드 작성을 통해 학습해보기 간단하게 entity가 두개가 있다. 이 둘은 양방향 관계이다. 일대다 양방향 관계이다. Entity01 BookStore @Entity @Getter @Setter public calss BookStore { @Id @GenerateValue private Integer id; privat..

MSA 아키텍쳐

"하나의 큰 어플리케이션을 여러개의 작은 어플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐" 이것은 마치 레고놀이와 같다. 작은 레고블록(Microservice) 하나하나를 붙여 어떠한 큰 결과물을 만드는 형태를 MSA 라고한다. small services, each running in its own process(스스로 돌아 갈 수 있는 작은 서비스) 와, independently deployable(독립적 배포 가능) 이 MicroService를 설명해 줄 수 있는 가장 핵심적인 문구라고 생각합니다. microService의 정의 이 MicroService를 설명해 줄 수 있는 가장 핵심적인 문구 small services, each running in its own process(스스로..

DesignPattern 2022.10.05

디자인 패턴 SOLID : Open- closed principle 개방 폐쇄 원칙

Open- closed principle 개방 폐쇄 원칙 개방폐쇄법칙에 대해 알아보면 extension에 대해서는 open modification에 대해서는 closed라고 써있다. 확장에 대해서는 개방 수정에 대해서는 페쇄라는 뜻인데 전혀 감이 오지않습니다. 이게 코드에 대한 제안이 아니라 코드에 behaviour에 대한 principle이기 때문에 이해가 바로 와닿진 않는다. 예제코드를 써보면서 감을 잡도록하겠다. 먼저 open- closed를 준수하지않은 코드를 먼저 보자. # Animal 클래스 하나를 생성 class Animal: #내부에 그 동물의 그 타입 프로퍼티를 가지고 있는다. # a_type에는 코양이 혹은 강아지와 같은 동물의 종류를 넣는 것이다. def __inti__(self, a..

DesignPattern 2022.10.05