전체 글
[JPA] N+1 문제
[JPA] N+1 문제
2023.04.03N+1 문제? N+1 문제란 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상을 말한다. 예를 들어, Member와 여러 Member를 가지는 MemberGroup의 관계가 있다고 하자. Member와 MemberGroup Entity는 다음과 같이 구성되어 있다. @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToOne @JoinColumn(name ..
[Java] 함수형 인터페이스
[Java] 함수형 인터페이스
2023.04.03함수형 인터페이스? 함수형 인터페이스는 오직 하나의 추상 메서드를 가지고 있는 인터페이스이다. 함수 디스크립터 함수형 인터페이스의 추상 메서드는 람다 표현식의 시그니처를 묘사한다. 함수형 인터페이스의 추상 메서드 시그니처를 함수 디스크립터라고 한다. 다양한 람다 표현식을 사용하려면 공통의 함수 디스크립터를 기술하는 함수형 인터페이스 집합이 필요하다. 자바 API는 Comparable, Runnable, Callable 등의 다양한 함수형 인터페이스를 포함하고 있다. 여기서 Java 8 라이브러리는 java.util.function 패키지에서 새로운 함수형 인터페이스를 제공하는데, 그 중에서 Predicate, Consumer, Function 인터페이스를 살펴보자. Predicate java.util.f..
[Java] 람다 표현식 소개
[Java] 람다 표현식 소개
2023.03.31람다 표현식? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것이다. 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트는 가질 수 있다. 특징 익명: 보통의 메서드와 달리 이름이 없으므로 익명이라 표현한다. 함수: 람다는 메서드처럼 특정 클래스에 종속되지 않으므로 함수라고 부른다. 전달: 람다 표현식을메서드 인수로 전달하거나 변수로 저장할 수 있다. 간결성: 익명 클래스처럼 많은 자질구레한 코드를 구현할 필요가 없다. 람다 표현식을 이용하면 동적 파라미터 형식의 코드를 더 쉽게 구현할 수 있다. 예를 들어, Comparator 객체를 기존보다 간단하게 구현할 수 있다. [기존] Comparator byWeight = new Comparator..
[Baekjoon] 11401: 이항 계수 3
[Baekjoon] 11401: 이항 계수 3
2023.03.30문제 간단히 이항계수 (n k)를 구하는 문제이다. 풀이 대표 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Q11401 { public static final int MOD = 1000000007; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] nk = br.readLine().split(" "); int n = Integer.parseInt(nk[0..
[Network] 서브넷 마스크(Subnet Mask)
[Network] 서브넷 마스크(Subnet Mask)
2023.03.30서브넷 마스크(Subnet Mask)? 흔히 사용되는 IPv4 주소 체계는 클래스를 나누어 IP를 할당한다. 예를 들어, 어떤 기관에 B 클래스를 할당한다고 하면 65,536개의 호스트를 할당할 수 있게 된다. 그런데, 기관에서 10,000개의 호스트만 할당한다고 했을 때 나머지 55,536개의 호스트가 낭비되게 된다. 이렇듯 이 방식은 매우 비효율적이기 때문에, 서브넷을 사용하여 네트워크 영역을 부분적으로 나눌 필요가 있다. 이 역할을 수행하는 것을 서브넷 마스크라고 한다. 서브넷(Subnet) 서브넷은 IP 주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크를 뜻한다. 이러한 서브넷을 만들 때 사용되는 것이 바로 서브넷 마스크이다. 즉, 서브넷 마스크는 IP 주소 체계의 Network ID와 Ho..
[Algorithm] 벨만-포드 알고리즘(Bellman-Ford Algorithm)
[Algorithm] 벨만-포드 알고리즘(Bellman-Ford Algorithm)
2023.03.30벨만-포드 알고리즘(Bellman-Ford Algorithm)? 벨만-포드 알고리즘은 한 정점에서 다른 정점까지의 최단 거리를 구하는 알고리즘이다. 특징 벨만-포드 알고리즘의 시간 복잡도는 O(VE)로, O((V+E)logV)인 다익스트라보다 시간 복잡도가 더 크지만, 다익스트라는 가중치가 음수인 경우에는 사용할 수 없다. 반면, 벨만-포드 알고리즘은 가중치가 음수인 경우에도 사용할 수 있기 때문에 음수인 가중치가 존재한다면 벨만-포드 알고리즘을 사용할 필요가 있다. 구현 P[A][B]는 A와 B사이의 거리라고 가정한다. 출발점으로부터 최단거리를 저장할 배열 d[v]를 만들고, 출발 노드에는 0을, 출발점을 제외한 다른 노드들에는 매우 큰 값 INF를 채워 넣는다. 실무에서는 보통 d의 원소 타입에 대한..
[Network] 라우터
[Network] 라우터
2023.03.29라우터(Router)? 라우터는 서로 다른 네트워크를 연결해주는 장치로써, 현재의 네트워크에서 다른 네트워크로 패킷을 전송하는 기능을 제공한다. 스위치가 데이터링크 계층에서 동작하는 것과 달리, 라우터는 네트워크 계층에서 동작한다. 스위치는 브로드캐스트 도메인을 나눌 수 없기 때문에, 대역폭을 낭비할 우려가 있다. 반면, 라우터는 브로드캐스트 도메인을 나누어 이를 방지할 수 있다. 특징 라우터는 라우팅 테이블을 이용하여 경로 정보를 등록하고 관리하며 라우팅 테이블을 기반으로 가장 효율적인 경로를 설정한다. 그 외에 다음과 같은 기능들이 있다. 패킷 필터링 기능 로드 분배 기능 QoS(Quality of Service) 기능: 프로토콜, 데이터 크기, 중요도 등을 따져 트래픽의 전송 순서를 조정하는 기능 ..
[Network] 허브 & 스위치
[Network] 허브 & 스위치
2023.03.28허브? 허브는 전기적인 신호를 증폭시켜 LAN의 전송거리를 연장시키고, 여러 대의 디바이스를 연결해 네트워크를 만들어주는 장비이다. 허브는 크게 더미 허브와 스위치 허브로 나뉘는데, 우리는 보통 더미 허브를 허브라 부르고, 스위치 허브를 스위치라 부른다. 허브 (L1 더미 허브) 허브는 다음과 같이 두 가지 기능으로 많이 사용된다. 멀티포트: 한 번에 많은 장치를 연결할 수 있는 기능 리피터: 전기적인 신호를 증폭시켜 들어온 데이터를 재전송하는 기능 LAN의 최대 전송거리가 연장되고 접속할 수 있는 장비의 수도 많아진다. 하지만 허브는 단순한 분배 중계기에 불과하여 IP를 할당할 수 없고 디바이스 수에 따라 데이터 전송 대역을 분리하는 역할만 한다. 예를 들어, 10Mbps를 제공하는 이더넷에 8포트 허..
[Java] 동작 파라미터화 코드 전달하기
[Java] 동작 파라미터화 코드 전달하기
2023.03.28동작 파라미터화? 동작 파라미터화란 아직은 어떻게 실행할 것인지 결정하지 않은 코드블록을 의미한다. 이 코드 블록은 나중에 프로그램에서 호출한다. 예를 들어, 나중에 실행될 메서드의 인수로 코드 블록을 전달할 수 있다. 결과적으로 코드 블록에 따라 메서드의 동작이 파라미터화 된다. 변화하는 요구사항마다 새로운 파라미터를 받는 메서드를 만들어야 하는 상황이 생길 수 있다. 하지만 동작 파라미터화 코드를 전달하면 해결이 가능하다. 변화하는 요구사항에 대응하기 농장 재고목록 애플리케이션에서 재고 파악하는 예제를 통해 요구사항의 변화에 대응해보자. 요구사항 1. 녹색 사과만 필터링 사과 색을 정의하는 다음과 같은 Color enum이 존재한다고 가정하자 enum Color { RED, GREEN } public..
[Network] DHCP(Dynamic Host Configuration Protocol)
[Network] DHCP(Dynamic Host Configuration Protocol)
2023.03.27DHCP(Dynamic Host Configuration Protocol)? DHCP란 호스트의 IP 주소와 각종 TCP/IP 프로토콜의 기본 설정을 클라이언트에게 자동적으로 제공해주는 프로토콜을 말한다. DHCP에 대한 표준은 RFC 문서에 정의되어 있다. DHCP는 네트워크에 사용되는 IP 주소를 DHCP 서버가 중앙집중식으로 관리하는 클라이언트/서버 모델을 사용하게 된다. DHCP지원 클라이언트는 네트워크 부팅과정에서 DHCP서버에 IP주소를 요청하고 이를 얻을 수 있다. 장단점 장점 DHCP를 사용하면 IP 주소가 자동 할당되므로 사용자가 일일히 IP에 대한 정보를 설정할 필요가 없어지고, IP 주소가 중복되어 사용이 불가능하게 되는 상황을 방지할 수 있다. 단점 IP 주소 할당을 DHCP 서버에..
[Network] TCP/UDP
[Network] TCP/UDP
2023.03.22TCP/UDP? TCP와 UDP는 OSI 표준모델과 TCP/IP 모델의 전송 계층에서 사용되는 프로토콜이다. 전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고 IP에 의해 전달되는 패킷의 오류를 검사하며 재전송 요구 제어 등을 담당하는 계층이다. TCP와 UDP는 같은 계층의 프로토콜이지만, 신뢰적인(정확한) 전송이 우선인가, 속도가 우선인가에 따라 서로 차이점이 있다. 그럼 각 프로토콜의 특징을 자세히 살펴보자. TCP TCP는 신뢰성 있는 데이터 전송을 지원하는 연결지향형 프로토콜이다. 일반적으로 IP와 같이 사용되는데 IP는 패킷 전달 여부를 보증하지 않기 때문에, 데이터 전송을 담당하고 TCP는 패킷을 추적하고 관리하는 역할을 한다. TCP는 연결지향형 프로토콜이기 때문에 3-way ..
[Java] 바이트코드 조작
[Java] 바이트코드 조작
2023.03.22코드 커버리지 측정 코드 커버리지는 테스트 코드가 프로덕션 코드를 얼마나 실행했는지를 백분율로 나타내는 지표이다. 즉, 테스트 코드가 실제로 프로덕션 코드를 얼마나 검증하고 있는지를 나타낸다. 코드 커버리지를 통해 현재 작성된 테스트 코드의 수가 충분한 것인지 논의할 수 있다. 그럼 코드 커버리지 툴을 사용해서 코드 커버리지를 측정해보자. 대표적으로 JaCoCo가 있다. 여기선 JaCoCo를 통해 측정해보도록 하자. Jacoco 먼저 JaCoCo 플러그인을 추가하고 task를 설정해보자. plugins { id 'jacoco' } jacoco { toolVersion = '0.8.5' } JaCoCo Gradle 플러그인에는 다음과 같은 task가 있다. jacocoTestReport: 바이너리 커버리지..