본문 바로가기

전체 글

(37)
nest JS queryRunner를 이용한 transaction queryrunner를 이용하여 transaction을 적용하고 unit test에서도 적용 repository 파일에 DataSource 주입 @Inject(DatabaseProvide) private readonly dataSource: DataSource, 원하는 메소드에서 queryRunner 실행 및 startTransaction const queryRunner = this.dataSource.createQueryRunner(); await queryRunner.connect(); await queryRunner.startTransaction(); try{ // 레포지토리 작업 } catch (err) { await queryRunner.rollbackTransaction(); //err에 대한..
N+1문제 1번 조회해야할 것을 N개 종류의 데이터 각각을 추가로 조회하게 되서 총 N+1번 DB조회를 하게 되는 문제 - 주로 @ManyToOne 연관관계를 가진 엔티티에서 주로발생하며, 1:N 또는 N:1에서 발생 - 즉시로딩의 경우 N+1바로발생 - 지연로딩의경우 하위 인티티를 다시 조회하는 경우 발생 해결방법 1. FetchJoin - DB에서 데이터 가져올시 엔티티나 컬렉션을 같이 조회하는 방법 @Query("select u from User u join fetch u.order") List findAll(); - 중복 문제가 발생할 수있다. - 중복데이터를 제거하기위해 DISTINCT를 사용 @Query("select distinct u from User u join fetch u.order") List..
overloading과 overriding 1. 오버로딩 - 메소드에서 매개변수만 다르면 얼마든지 저의하고 사용이 가능 - 메소드의 이름이 같아야함 - 매개변수의 개수나 타입이 달라야함 - 리턴값만 다르면 오버로딩이 불가능 - 매개변수의 차이로만 구현 가능 class OverloadingTest { public static void main(String[] args) { OverloadingMethods om = new OverloadingMethods(); om.print(); System.out.println(om.print(3)); om.print("Hello!"); System.out.println(om.print(4, 5)); } } class OverloadingMethods { public void print() { System.ou..
자료구조(Stack, Queue) 1. Stack - 쌓다라는 뜻으로 데이터를 차곡차곡 쌓아 올린 형태의 자료구조 - 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 구조 - 빨래통을 연상하면 쉬움 - 웹 브라우저 방문기록, 실행취소, 역순 문자열, 후위 표기법 계산 등에 사용됨 2. Queue - 먼저 들어온것이 먼저 나가는 선입 선출 - 삽입 연산을 Enqueue, 삭제 연산을 Dequeue 라함 - 은행 업무, 대기열 순서, 우선순위 작업, 서비스센터 대기시간, 프로세스 관리 등에 사용 Array와 LinkedList의 차이는 https://feeljoy.tistory.com/28 List, Set, Map 자료구조에 List, Set, Map이 존재한다. 1. List - 순서가 있고 중복을 허용하는 자료구조 - 인덱스로 원소 접..
WebSever와 WAS 1. WebServer - HTTP 프로토콜 기반으로 정적 컨텐츠를 제공하는 서버 - HTML, CSS, IMAGE 등 - Apaghe, NginX 등 2. WAS(Web Application Server) - DB 조회 혹은 로직 처리를 요구하는 동적 컨텐츠를 제공하기 위한 어플리케이션 서버 - JSP, Servlet 구동환경을 제공하기에 서블릿 컨테이너, 웹 컨테이너라고도 함 - 웹 서버가 동적 컨텐츠를 요청 받으면 WAS에 해당요청을 넘겨줌 - Web Server의역할도 수행이 가능 - Tomcat, JBoss, SebSphere 등 3. 웹서버와 WAS를 분리해야하는 이유 - WAS는 Webserver와 Web Container의 역할을 모두 수행할 수 있지만 분리해야 좋음 이유는 다음과 같다 1..
TCP와 UDP 네트워크 통신이 일어나는 과정은 7단계인데 TCP UDP는 4계층인 트랜스포트 계층에서 사용되는 프로토콜이다. 프로토콜 즉 통신 약속의 차이인데 TCP와 UDP는 명확한 차이가 있다 1. TCP - 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜 - IP와 함께 사용 - 3way handshaking(양방향 연결) 고정 후 통신을 시작 - 흐름제어 : 데이터 처리속도 차이를 조절 - 혼잡제어 : 패킷 수가 넘치게 증가하지 않도록 방지 - 그러므로 UDP보다 속도가 느림 2. UDP - 비연결형 프로토콜로 일방적으로 데이터를 전달하는 통신 프로토콜 - 비신뢰성으로 패킷 손실이 발생 할수 있음 - 혼잡 제어를 안해 TCP보다 빠름 - handshaking 같은 연결 설정이 없음
트랜잭션의 이해 트랜잭션(Transaction)이란? - 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 - SELECT, INSERT, DELETE, UPDATE 등의 SQL문을 이용해 DB에 접근 트랜잭션의 특징 1. 원자성 - ALL or Nothing - DB에 모두 반영되거나, 아예 안되거나 둘중 하나이다. 2. 일관성 - 작업처리의 결과과 일관 - 데이터 타입이 항상 동일 3. 독립성 - 각각의 트랜잭션은 독립적이라 간섭 불가 4. 지속성 - 트랜잭션이 완료되면 영구적으로 결과에 반영 - commit 되면 지속성 만족 트랜잭션의 Commit과 Rollback 1. Commit - 트랜잭션이 성공적으로 끝나 DB가 일관성있는 상태 2. Rollback - 트랜잭션의 처리가 비정상적으로 종료된 상태 - 롤백이..
Spring에서 Test방법 스프링에서 테스트 하는 방법은 Junit을 이용하는 방법이있다. 그중 @SpringBootTest를 이용하는 방법과, @WebMvcTest를 이용하는 방법이있다. 1. @SpringBootTest - 프로젝트 내부의 있는 스프링 Bean을 모드 등록 - 모두 등록하는 과저엥서 테스트가 느림 - 실제 운영환경에서 사용되는 클래스들을 통합하여 테스트 하는 방식 - 실제 환경과 가장 유사한 테스트 @AutoConfigureMockMvc @SpringBootTest @ActiveProfiles("test") public class TestControllerTest { @Autowired private MockMvc mockMvc; public void hello() throws Exception { mockMv..