목록전체 글 (164)
개발 공부
코딩테스트 연습-해시-완주하지 못한 선수 https://programmers.co.kr/learn/courses/30/lessons/42576 import java.util.*; class Solution { public String solution(String[] participant, String[] completion) { String answer = ""; Map hm = new HashMap(); for(String pt : participant){ if(hm.get(pt) == null){ hm.put(pt,1); }else{ hm.put(pt, hm.get(pt)+1); } } for(String cp : completion){ hm.put(cp, hm.get(cp)-1); } for(Str..
코딩테스트연습-정렬-k번째수 https://programmers.co.kr/learn/courses/30/lessons/42748 import java.util.*; class Solution { public int[] solution(int[] array, int[][] commands) { int[] answer = new int[commands.length]; for(int i = 0 ; i < commands.length ; i++){ int[] comArr = commands[i]; int[] newArr = new int[comArr[1]-comArr[0]+1]; int index = 0; for(int j = 0; j < newArr.length; j++ ){ //System.out.prin..
코딩테스트 연습-완전탐색- 모의고사 https://programmers.co.kr/learn/courses/30/lessons/42840 import java.util.*; import java.lang.*; class Solution { public int[] solution(int[] answers) { int[] answer = {}; int[] scores = new int[3]; int[] answer1 = {1,2,3,4,5}; int[] answer2 = {2, 1, 2, 3, 2, 4, 2, 5}; int[] answer3 = {3, 3, 1, 1, 2, 2, 4, 4, 5, 5}; scores[0] = 0; scores[1] = 0; scores[2] = 0; for(int i = 0 ;..
소켓 통신 과정 중 데이터를 주고 받을 때 InputStream.read() 와 OutputStream.write() 로 데이터를 주고 받음을 이해했다. 이를 구현한 JAVA 소스를 보던 중 한가지 의문점이 들었다. A - B 간의 socket 통신에서 1. A가 B 와의 Socket 통신을 요청 2. B가 accept 3. A가 B에게 OutputStream.write() 로 데이터 요청 정보를 송신 4. B가 InputStream.read() 로 데이터 요청 정보 수신 5. B가 필요한 비즈니스 로직 수행 5. B가 A에게 OutputStream.write() 로 데이터를 송신 6. A가 InputStream.read() 로 요청한 데이터를 수신 위와 같은 flow에서 서버 A가 OutputStrea..
노션에서 보기 바로가기 한마디로 가상메모리 (Virtual Memory) 페이지와 프레임 페이지 부재 (page fault) 페이지 교체 한마디로 메모리 효율을 향상시키기 위한 가상메모리를 운용하는 기법 중 하나로 프로세스를 고정 크기로 분할하여 가상메모리에 할당하고 물리메모리를 이와 동일한 크기인 프레임으로 나누어 프로세스에 필요한 페이지만 프레임에 적재하여 사용하는 기법 가상메모리 (Virtual Memory) 주기억장치(물리메모리) 메모리의 용량을 확장하기 위해 보조기억장치를 마치 주기억장치인 것처럼 활용하는 방법 가상메모리는 프로세스마다 논리적 주소공간을 가지고 이 주소공간의 일부는 물리적 메모리에 적재되고 일부는 스왑영역에 존재한다. 장점 프로세스의 일부만 올리기 때문에 메모리 사용량이 감소한다..
1) ACL은 윗줄부터 순서대로 수행된다. 때문에 ACL은 좁은 범위 설정이 먼저 되어야 한다. 2) ACL의 마지막은 deny any 가 생략되어 있다. 즉, 마지막에 permit any가 없을 경우 ACL 조건에 없는 모든 address는 deny 된다. 3) numbered ACL은 순서대로 입력되기 때문에 중간 삽입이나 중간 삭제가 불가능하다. 즉, 중간에 리스트가 틀렸어도 중간 삽입, 수정, 삭제가 불가능하다. * 예외 named ACL의 경우는 중간 삭제 및 추가 삽입이 가능하다. 4) Interface에 별 다른 ACL이 정의가 되어있지 않으면 아무런 필터링이 동작하지 않는다. 참고 : http://cocotp10.blogspot.com/2018/01/acl-access-control-lis..
[구성] 1. Controller - Service - ... - @RestController로 설정하는 경우 자동으로 responseBody 설정이 된다. 2. @ControllerAdvice, @ExceptionHandler 를 설정한 advice + Error를 컨트롤할 ErrorResponse 객체 - @RestControllerAdvice로 설정하는 경우 자동으로 responseBody 설정이 된다. 3. ResponseBodyAdvice를 implement하는 result wrapper - ResponseBodyAdvice 는 @ResponseBody가 설정된 controller가 return 할 때 실행된다. - Exception advice 이후에 실행된다. (설정 순서 조정 가능) - @..
1. logback 자동적용 활성화 시킨다. ... (seconds 나 기타 단위 설정이 없으면 밀리초로 설정됨) 2. logger에 root 패키지 설정 3. 개발 시 TRACE 나 DEBUG로 로깅 설정 4. 평상시에는 root 패키지의 logger level을 INFO로 해놓고 사용하다가 DEBUG가 필요하면 DEBUG로 바꾸면 된다 참고 : 로그레벨은 TRACE > DEBUG > INFO > WARN > ERROR > FATAL 순 입니다. # Log Level # TRACE : 추적 레벨은 Debug보다 좀더 상세한 정보를 나타냄 # DEBUG : 프로그램을 디버깅하기 위한 정보 지정 # INFO : 상태변경과 같은 정보성 메시지를 나타냄 # WARN : 처리 가능한 문제, 향후 시스템 에러의 ..
@CreatedBy, @CreatedDate, @LastModifiedBy and @LastModifiedDate와 같이 기본적으로 Spring Data에서 제공하는 어노테이션이외에 soft delete 등의 경우에 사용할 수 있는 방법 1. entity에 markedAsDeleted라는 삭제 확인 boolean 값 설정 2. entity에 @EntityListeners(DeletionListener.class) 설정3. DeleteionListener.class 에서는 @preUpdate가 설정되어있고 if문으로 1번의 boolean 값을 확인하고 true이면 delete 관련 field 수정 참고 : https://code-held.com/2020/01/28/additional-auditing/
Setter setter의 무분별한 사용은 코드의 의도를 가지기 어렵다. 객체의 일관성이 깨진다. Initializer & Builder 대안으로 생성자나 빌더를 사용할 수 있다. 하지만 생성자의 경우 채워야할 필드가 무엇인지 명확하게 지정할 수 없다. 따라서 builder의 사용을 권장한다. 참조 : https://velog.io/@dahye4321/%EC%8A%A4%ED%94%84%EB%A7%81-%EA%B0%80%EC%9D%B4%EB%93%9C-2