본문 바로가기

CS 잡지식

세상에서 가장 좋은? Error는 Compile Error!!!! Compile Error는 RunTime Error에 비해 상대적으로 좋은? 에러이다. ( 에러 중에 좋은 에러가 있으려나?ㅋㅋㅋ ) 왜냐하면, 즉시 에러를 잡을 수 있기 때문이다. (좋은 IDE를 쓰면 컴파일하기도 전에 빨간색으로 밑줄을 긋어 줘서 오류를 잡아줌) 그러나, Runtime Error는 고객에서 서비스 중에 발생하는 것이므로 최악의 에러이다. 컴파일 타임 때 Error를 잡아 주는 어떤 종류의 기능이 존재한다면 그것을 적극적으로 활용하여 Error를 잡는 시간을 최소화하자! 더보기
JPA의 성능 최적화의 KEY POINT - Fetch Join JPA는 지연 로딩을 기본적으로 사용한다. 지연 로딩은 필연적으로 (N+1) 문제를 야기하기에 성능이 매우 안 좋아 질 가능성이 크다. (실무에서 JPA 성능 문제의 80%는 이 [N+1] 문제라고 함) 고로, 이러한 [N+1] 문제가 발생을 하면, Fetch Join으로 성능 최적화를 하자 더보기
지연 로딩(Lazy)의 단점 : (N+1) Problem과 Solution 즉시 로딩(EAGER) : 연관된 엔티티를 같이 조회하기에 SQL문에서 join 연산이 일어난다. -> 연관된 엔티티가 100개이면 100번의 JOIN 연산이 일어나기에 , 실무에서는 모~~든 조회는 [지연 로딩] 사용 (즉시 로딩에서도 위와 같은 경우를 [N+1]의 문제라고 부른다. 다만 즉시 로딩에서 발생하는 [N+1] 문제는 Lazy Loading 으로 바꾸는 것으로 해결이 된다. 우리는 여기서 Lazy Loading에서도 발생하는 [N+1] 문제를 알아 보고, 그 해결법은 Fetch Join에 대해서 알아 본다) 지연 로딩의 단점 : 아래 사이트 참조! https://jbluke.tistory.com/382 Solution : Fetch Join을 사용!!!! -> Fetch Join은 [지연 로.. 더보기
Git,Git Hub 기본적인 사용법 Git 설치 & 환경설정 🔍 Git 설치하기 : https://git-scm.com/ 설치 완료 후 Git bash 열기 git bash 에서 환경설정 하기 Step 1 : 유저이름 설정 git config --global user.name "your_name" Step 2 : 유저 이메일 설정하기 git config --global user.email "your_email" Github가입시 사용한 이메일을 써주세요! Step 3 : 정보 확인하기 git config --list Github에 처음 코드 업로드하기 🏋️‍♂️ 초기화 git init 추가할 파일 더하기.(점) 은 모든 파일이라는 뜻, 선택적으로 올리고 싶으면 add뒤에 파일 이름 붙여주면 됨 (예. git add index.html) g.. 더보기
다중성(1:1, 1:多 등)은 DB [Table]를 설계하기 위한 것이다. 위 그림은 Member Table : Team Table = 多 : 1 관계에 있음을 뜻한다. 이 의미는 [1개의 팀에는 여러 멤버들이 소속된다]이다. 예를 들어 보자 메시, 호날두(Member들)가 같은 하나의 팀(맨유) 소속이고(多:1), 손흥민, 김민재(Member들)가 같은 하나의 팀(바르셀로나) 소속(多:1)이라고 해보자. 이때 DB의 Table은 Member Table 2개와 Team Table 2개가 있을 것이며 구체적인 Table은 아래와 같다. ==================================================================== Member Table 1 Member_ID = 10번 Member_ID = 11번 USERNAME = 메시 USERNMAE.. 더보기
동적(dynamic)의 의미!!! 1. 실행 중에, 뭔가가 결정이 된다. 2. 1 : 1 매칭이 아니라, 1 : 多 매칭! -> 예를 들어, A 인터페이스로 그 구현체인 B,C,D 중 개발자가 임의로(동적으로) 적용되는 구현체를 바꿀 수가 있다. 더보기
클라이언트와 서버에 대한 오해, 그리고 Proxy Pattern과 Decorator Pattern....... 클라이언트( Client )와 서버( Server )라고 하면 개발자들은 보통 서버 컴퓨터를 생각한다. 사실 클라이언트와 서버의 개념은 상당히 넓게 사용된다. 클라이언트는 의뢰인이라는 뜻이고, 서버는 '서비스나 상품을 제공하는 사람이나 물건'을 뜻한다. 따라서 클라이언트와 서버의 기본 개념을 정의하면 클라이언트는 서버에 필요한 것을 요청하고, 서버는 클라이언트의 요 청을 처리하는 것이다. 이 개념을 우리가 익숙한 컴퓨터 네트워크에 도입하면 클라이언트는 웹 브라우저가 되고, 요청을 처리하는 서버는 웹 서버 가 된다 이 개념을 객체에 도입하면, 요청하는 객체는 클라이언트가 되고, 요청을 처리하는 객체는 서버가 된다. 직접 호출과 간접 호출(Proxy 객체 사용) 클라이언트와 서버 개념에서 일반적으로 클라이언.. 더보기
스프링 Bean의 등록 방법 1. 스프링 빈으로 등록할 클래스가 인터페이스의 구현체 인 경우 -> 구현체 [클래스]에 @Controller, @Service, @Repository 등의 애노테이션을 붙여서 [자동]으로 빈 등록 -> or @Configuration 애노테이션을 이용하여 [수동]으로 빈 등록 2. 스프링 빈으로 등록할 클래스가 인터페이스의 구현체가 아닌 경우 -> 1과 같은 방법으로 수동/자동으로 등록! 3. 인터페이스의 존재 유무와 상관없이, @component 스캔으로 자동 등록 -> @Compoenent, @Controller, @Service, @Repository 등을 이용하여 [자동] 등록 시, 주의 사항이 있다. ( scanBasePackeg 옵션과 Import 애노테이션을 사용하여, 수동 등록과 자동 등.. 더보기