ARP, 플러딩, RARP
·
기초 지식 정리
클라이언트 A와 B가 통신하려고 할때, 상대방 IP주소는 아는데 MAC주소를 모르고있는데 어떻게 통신을 할까? → 이를 위해 ARP프로토콜을 통해서 MAC주소를 알아낸다 ARP IP주소를 이용해 상대방의 MAC주소를 알아오는 프로토콜이다 A와 B클라이언트가 하나의 스위치내에 존재하는 서브넷내에 존재하고 서로 통신하려한다고 생각해보자 A 클라이언트는 B클라이언트와 통신하기위해 MAC주소를 알아야 하는데, 이 경우 A는 자신의 서브넷 게이트웨이의 스위치에게 ARP요청을 보낸다 스위치는 2계층 장비로 2계층까지만 확인하게 된다. 스위치는 MAC주소를 확인해보고 그에 맞는 곳으로 보내주는 역활을 한다. 하지만 해당 요청은 MAC주소를 알기위한 브로드캐스팅이므로 스위치도 브로드캐스팅임을 확인하고 같은 네트워크에 ..
(백준) 2225 - 합분해 [java]
·
알고리즘/백준
https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 🐢 설명 DP문제를 열심히 풀어야 겠다고 생각했다. 문제는 간단한데 점화식을 떠올리는게 쉽지 않았다. N, K가 주어질 때 1 ~ N의 수가 있고 K개를 뽑아서 더해서 N을 만들어야 하는 문제이다. 이를 점화식을 나타내보자면 K개를 골라서 N을 나타내야 하므로 DP[K][N]으로 나타낼 수 있다. 즉, DP[K][N] : 1 ~ N의 수 중에서 K개를 뽑아서 더했을 때 N인 경우의 수 가된다. 이를 이용해서 점화식을 구해보면 DP[K-1][N] + 0 = DP[K][N], DP[K-1][N - 1] + 1 = DP[K][N..
Java Garbage Collection
·
기초 지식 정리
stop-the-world란? stop-the-world는 GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떠한 GC 알고리즘도 stop-the-world는 발생하므로 이 시간을 줄이는 것이 GC 튜닝이다 Garbage Collection이란? JVM의 Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스이다. Heap 영역에는 Object타입의 데이터, String, List, Custom Class들이 들어간다. 이들은 GC Roots들로 부터 Reachable인지 Unreachable인지 확인하게 된다 여기서 G..
API 개발 (6) - OSIV 정리
·
스프링/스프링부트 API 설계 정리
spring boot app을 실행하면 다음과 같은 WARN 경고가 뜨게 된다. 2021-07-30 15:41:37.897 WARN 11366 ---[ restartedMain] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 해석해보면 "open in view가 dafault로 사용가능하게 되어있으므로 view rendering시 db 쿼리가 수행될 ..
API 개발 (5) - OneToMany관계 정리
·
스프링/스프링부트 API 설계 정리
API를 통해서 원하는 엔티티(or DTO)를 조회하는 방법에 대해 알아보았다. 해당 내용들을 정리해보자. 1. 엔티티 조회 V1 - 엔티티 조회해서 그대로 반환 DTO를 통하지 않고 쿼리를 통해 반환 받은 목록을 그대로 반환했다. 엔티티를 그대로 반환하므로 매우 안좋은 방법이다. 순환조회를 막기위해 Entity에 @JsonIgnore를 넣어서 막아야 한다. 따라서 Entity 수정이 필연적으로 발생된다. V2 - 엔티티 조회해서 DTO로 변환 후 반환 Entity를 바로 반환하지 않게 변환했지만 객체 내 LAZY 객체에 대해 접근하면서 즉시 로딩이 되면서 N + 1문제가 발생했다. 또한, LAZY 객체 내 1 : N 객체가 존재해서 1 + N번 쿼리 (LAZY 객체) + N번 쿼리 (Many 객체) +..
API 개발 (4) - One to Many관계 - DTO 직접 조회
·
스프링/스프링부트 API 설계 정리
주문목록 가져오기 V4 QueryDto를 사용해서 바로 조회하는 방법 쿼리용 OrderQueryDto 클래스를 선언해서 해당 타입으로 받는 api @GetMapping("/api/v4/orders") public List orderV4() { return orderQueryRepository.findOrderQueryDtos(); } OrderQueryDto @Data public class OrderQueryDto { @JsonIgnore private Long orderId; private String name; private LocalDateTime localDateTime; private OrderStatus orderStatus; private Address address; private Lis..
API 개발 (3) - One to Many관계 - Entity조회 후 DTO로 변환
·
스프링/스프링부트 API 설계 정리
컬렉션 관계인 일대다 관계를 조회하는 경우에 대해 알아본다. 아래와 같은 Order객체가 있을 때 모든 주문 목록과 각 주문에 포함된 주문 상품목록을 함께 가져온다고 생각해보자. Order 내 OrderItem은 리스트로 존재하므로 1 : N 관계를 가진다. @Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") pr..
(백준) 호석이 두 마리 치킨 - 21278 [JAVA]
·
알고리즘/백준
https://www.acmicpc.net/problem/21278 21278번: 호석이 두 마리 치킨 위의 그림과 같이 1번과 2번 건물에 치킨집을 짓게 되면 1번부터 5번 건물에 대해 치킨집까지의 왕복 시간이 0, 0, 2, 2, 2 로 최소가 된다. 2번과 3번 건물에 지어도 동일한 왕복 시간이 나오지만 더 www.acmicpc.net 🐢 해설 먼저 빌딩과 도로가 존재하고 양방향이며 도로의 비용이 1로 고정되어 있으므로 해당 간선과 정점을 가지고 각 빌딩에 대해서 다른 모든 빌딩에 대한 거리 최소 비용을 구해야한다. 이후 구한 거리값을 가지고 어디에 치킨집을 차렸을 때(2개로 고정) 모든 빌딩의 왕복 합이 낮은지 구하면 된다. 특정 빌딩이 아니라 모든 빌딩에 대해 최소 거리값을 구해야 하므로 플로이..
API 개발 (2) - X to One관계
·
스프링/스프링부트 API 설계 정리
One to One, Many to One 관계를 갖는 객체를 조회할 때 어떻게 조회해서 반환하도록 api를 구현해야하는지 알아본다. Order (주문 객체) @Entity @Table(name = "orders") @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Order { @Id @GeneratedValue @Column(name = "order_id") private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "member_id") private Member member; @OneToMany(mappedBy = "order", casc..
API 개발 (1) - 회원 조회, 수정, 생성
·
스프링/스프링부트 API 설계 정리
API 구현 회원 생성 API 구현 회원 객체 생성 api POST ("api/v2/members") { "name": "최똥꼬", "email": "dnstlr2933@naver.com7", "address": { "zipcode" : "139xx", "streetAdr": "안양시 동안구 동편로 xxx", "detailAdr": "xxx-xxx" } } Member 객체 @Entity @Getter @Setter public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private String name; private String email; @Embedded private Address address..