목록전체 글 (229)
DevKim

🏃 01. 인터럽트 interrupt 🏃 오늘날에는 컴퓨터에는 많은 주변 장치들이 있기 때문에, CPU가 모든 입출력에 관여하게 된다면 작업 효율이 현저하게 떨어지게된다. 이러한 문제를 해결하기 위해 등장한 것이 인터럽트 방식이다. 요리사가 주방 보조를 두는 것과 유사하다. [ 얻을 수 있는 이점 ] CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 효율을 높일 수 있다. [ 동작 과정 ] 1. CPU가 입출력 관리자에게 입출력 명령을 보냄 2. 입출력 관리자는 명령받은 데이터를 메모리에 가져다놓거나 메모리에 있는 데이터를 저장장치로 옮김 3. 데이터 전송이 완료되면 입출력 관리자는 CPU에게 완료신호 (인터럽트)를 보냄 4. 이때 CPU는 입출력 관리자에게 명령을 보내고 다른 일을 하다가..
https://programmers.co.kr/learn/courses/30/lessons/81302 코딩테스트 연습 - 거리두기 확인하기 [["POOOP", "OXXOX", "OPXPX", "OOXOX", "POXXP"], ["POOPX", "OXPXP", "PXXXO", "OXXXO", "OOOPP"], ["PXOPX", "OXOXP", "OXPOX", "OXXOP", "PXPOX"], ["OOOXX", "XOOOX", "OOOXX", "OXOOX", "OOOOO"], ["PXPXP", "XPXPX", "PXPXP", "XPXPX", "PXPXP"]] [1, 0, 1, 1, 1] programmers.co.kr [ 알고리즘 ] BFS [ 접근 방법 ] * 조건 * 1. 벽이 없는 경우에 2. 맨해튼 ..
간단한 게시글 저장의 service layer을 검증해보며 BDDMockito를 사용해보자. 1. 우선 필요한 Mock 객체들을 생성한다. @Mock - mock 객체를 생성한다 @InjectMocks - @Mock이 붙은 mock객체를 @InjectionMocks이 붙은 객체에 주입시킬 수 있다. 실무에서는 @InjectionMocks (Service) @Mock(DAO) 이런식으로 Service 목객체에 DAO 목객체를 주입시켜 사용한다고한다. @ExtendWith(MockitoExtension.class) class CommentServiceTest { @InjectMocks private HoneyService honeyService; @Mock private HoneyRepository hone..

🏃 게시글,댓글 연관관계 매핑 개선 🏃 지난 번에 연습삼아 구현했던 게시판 페이지를 개선해보려고한다. 만약 하나의 페이지에서 모든게 다 진행이되었다면, 큰 문제는 아니었겠지만 Multi page의 게시판이기 때문에 화면을 넘어갈 때, 해당 글의 id값을 어떻게 넘겨받을 수 있을지 고민이 참 많이 됐다. 요즘엔 SPA 방식을 많이 사용한다지만, 그렇다고해서 이걸 그냥 무시하고 넘어가버리기엔 찝찝하기도해서 찝찝했던 부분을 해결해보려고한다. 📌 1. 첫 번째 방법 URL 파씽해서 id값 얻어오기 + FK 역할을 할 임의의 Id값을 처음부터 Column에 넣어버리기 단순하지만 사람들이 가장 많이 쓰는 방법인 것 같다. (JPA 연관관계 매핑을 사용하지 않은 것과 같다.) 예를들어, boardDetail?id=1..

🏃 Mock을 이용한 단위 테스트 🏃 ✔ 단위 테스트 VS. 통합 테스트 - 단위 테스트 (Unit Test) 장점: 하나의 모듈이나 클래스에 대해 세밀한 부분까지 테스트 가능 단점: 모듈 간에 상호 작용 검증 못함 - 통합 테스트 (Integration Test) 장점: 두 개 이상의 모듈이 연결된 상태를 테스트 모듈 간의 연결에서 발생하는 에러 검증 가능 단점: 너무 무거움 지금까진, 항상 @SpringBootTest를 사용하여 통합 테스트만을 진행했었다. 사실 지금까지 큰 프로젝트는 진행한적이 없기에, 무겁다는 느낌은 많이 못 받았는데 실무에선 단위 테스트가 빠르게 테스트코드를 작성할 수 있으면서도 가장 효과적이어서 자주 쓰이는 것 같으니 미리 연습해두려고한다. 실습은 간단한 CRUD 기능을 만들고..
https://programmers.co.kr/learn/courses/30/lessons/42628 코딩테스트 연습 - 이중우선순위큐 programmers.co.kr [ 알고리즘 ] 힙 큐 알고리즘 [ 접근 방법 ] 최대힙과 최소힙 두개를 써서 해결하느냐, 최소힙 하나로 해결하느냐로 결정되는 문제이다. 최소힙에서 최대값을 pop할 수 없으니 다른 방법으로 생각을 해봐야한다. 그렇다고 Level.03 문제인데 힙을 2개를 써서 무식하게 풀라고 낸 문제는 아닌 것 같았다. 해답은 heapq.nsmallest에 있다. heapq.nsmallest(n,iterable) 을 사용하여 가장 최대인 값을 제외하고 최소인 것들로 다시 힙을 만들어주면된다. 백트래킹 풀다가 이 문제를 보니 너무 사랑스러울 지경이다 ㅎ ..
" 현재 주문과 회원은 N:1의 관계이고, 주문과 주소의 관계는 1:1관계이다. " - 현재 각각 다른 회원이 2개의 주문을 넣어놨고, 주문에서 회원과 주소를 조회하려고하는 상황이다. ( = 주문 + 배송정보 +회원 조회) - XToOne의 관계이므로 모두 지연로딩 관계로 설정해놓은 상태이다. *참고* 지연로딩은 조회시 영속성 컨텍스트에 있으면 SQL 실행 X 영컨에 없으면 SQL 실행 - 지연로딩 때문에 발생하는 성능 문제를 단계적으로 해결해보자. [ Case #1. ] 엔티티를 DTO로 변환해서 조회하기 : 어쩌면 제일 보편적으로 사용하고 있는 방법이다. @GetMapping("/api/orders") public void order01() { List orders = orderRepository.f..
@Valid를 사용하면, 객체 안에 들어오는 값에 대해 검증을 할 수 있다. ✔ 최신 springboot에서는 validation 을 따로 꼭 추가해주어야함 만약 이런 controller가 존재한다고 가정했을 때, @Valid 를 추가함으로써 MemberDto를 검증할 수 있다. @GetMapping("api/orders") public void Orders(@RequestBody @Valid MemberDto memberDto) { ... } 검증에 대한 추가적인 조건들은 따로 객체 안에 정의를 해두어야한다. public class MemberDto{ @NotNull private String name; @Email private String email; private String address; } ..