목록웹개발 (자바, 스프링, React) (56)
개발 공부
이클립스 실행 시 오류 발생 Failed to load the JNI shared library "C:\Program Files (x86)\Java\jdk1.6.0_45\bin\_\jre\bin\client\jvm.dll". 이는 64bit 환경에서 32bit의 Java 를 사용하여 발생 64bit Java를 설치 후 다시 설정해준다
이클립스 시작 시 에러 발생 An error has occurred. See the log file C:\Users\username\eclipse-workspace\.metadata\.log. 해당경로 파일 확인 아래 에러 발생 java.lang.NoClassDefFoundError: org/w3c/dom/stylesheets/StyleSheet 이는 구버젼의 eclipse를 JAVA9 이상의 환경에서 실행할 때 나는 오류로 JAVA_HOME을 변경해주면 된다. 아래는 전문 !SESSION 2021-07-20 08:56:46.581 ----------------------------------------------- eclipse.buildId=4.4.2.M20150204-1700 java.version..
소켓 통신 과정 중 데이터를 주고 받을 때 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..
[구성] 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
static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; static SecureRandom rnd = new SecureRandom(); String randomString(int len){ StringBuilder sb = new StringBuilder(len); for(int i = 0; i < len; i++) sb.append(AB.charAt(rnd.nextInt(AB.length()))); return sb.toString(); } 여기서 java.security.SecureRandom 은 java.util.Random과 다르게 난수를 생성할 때 seed로 시간을 이용하여 유니크함을 보..
@ResponseStatus(value = HttpStatus.BAD_REQUEST) With {@code HttpServletResponse.sendError}, the response is considered complete and should not be written to any further. Furthermore, the Servlet container will typically write an HTML error page therefore making the use of a {@code reason} unsuitable for REST APIs. For such cases it is preferable to use a {@link org.springframework.http.ResponseE..
1. 데이터 js에서 사용하기 if($("#message").val() != ""){} 2. 데이터 보내기 $("#submit").click(function(){ var serialNumber = $("#serialNumver").val(); $.ajax({ url: "localhost:8070/v1/api/manufacture-info/serial", type : "POST", contentType : "application/json;charset=UTF-8", dataType : "json", data : "{\\"serialNumber\\" : serialNumber }", success : function(response){ } }); }); 오류) Access to XMLHttpRequest a..