토이 프로젝트로 Upbit 관련 자동매매를 Spring 사용하여 구현중.. RSI 계산, Websocket 연동, 매매 까지 테스트 완료. 실제 구현해나가는데 지속해서 막히는 부분 생김. Websocket Listener 쪽에서 Message 수신해주는 메서드쪽에 RSI계산, 매매 로직 삽입하려 하지만 지속 실패. (물론 RSI계산, 매매 로직 등을 따로 spring에 위임하지 않은 class로 작성했으면 됐겠지만 DB 사용이 필요했기에 지속 spring 위임 한채로 시도.) 원인을 찾아보니 Websocket Listener를 주입해서 불러오지 않고 생성자를 통해 생성해줌. 따라서 Spring에 위임되지 않은 새로운 Websocket Listener가 불러와짐. 해당 Listener에서 Spring에 일..
맨날 까먹어서 구글링하기 귀찮아서 정리 *.properties 안에 value 값들을 지정해서 관리할때 property config 구성 후 bean 등록을 통해 value 값을 접근할 수 있다. example config @Configuration public class PropertyConfig { @Bean(name = "key") public PropertiesFactoryBean propertiesFactoryBean() throws Exception{ PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean(); ClassPathResource classPathResource = new ClassPathResource("k..
서버 모니터링을 하다보니 언제부턴가 다음 에러가 지속 찍히는걸 확인 할 수 있었다. org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String "//" URL에 /test 이런식이 아니라 //test 이런식의 문자열이 포함되어 나타나는 에러라고 한다. // 말고도 StrictHttpFireWall 클래스를 확인하면 블랙리스트 문자열을 확인할 수 있다. https://docs.spring.io/spring-security/site/docs/4.2.7.RELEASE/apidocs/org/springfr..
ex ) http://120.0.0.7:8080/test/calMax?a=8&b=10 위 URL접근시 java 단에서 HttpServletRequest 객체를 통해 접근 가능. spring 사용시 톰캣에서 자동으로 만들어줌. HttpServletRequest 주요 메서드는 다음과 같음. http : getScheme() 52.78.79.190 : getServerName() 8080 : getServerPort() test : getContextPath() calMax : getServletPath() /test/calMax : getRequestURI() a=8&b=10 : getQueryString() http://120.0.0.7:8080/test/calMax : getRequestURL()

01) 개요 - 마이페이지 개발중 이미지파일이 프로젝트 내부가 아닌 외부 경로 파일을 보여주려함. (업로드 했던 파일) - ex) Spring에서 파일업로드를 구현할때 File 객체를 생성해서 최상위 경로를 C드라이브로 잡게되는데 로컬에 있는 파일은 브라우저 보안상 접근이 불가함. - 다행히 Spring에선 외부 경로에 있는 리소스를 접근할 수 있는 방법을 제공함. 02) 외부경로 생성 및 이미지 추가 03) Java 설정 코드 추가 - WebConfiguration을 WebMvcConfigurer를 상속받아 작성 package com.kjc.workplus.configuration; import org.springframework.beans.factory.annotation.Value; import o..
01) 대표 케이스 Type 1 -> http://127.0.0.1?index=1&page=2 Type 2 -> http://127.0.0.1/index/1 Type1의 경우 파라미터의 값과 이름을 함께 전달하는 방식으로 게시판 등에서 페이지 및 검색 정보를 함께 전달하는 방식을 사용할 때 많이 사용함. Type2의 경우 Rest api에서 값을 호출할 때 주로 많이 사용함. 02) @RequestParam 사용하기 - Type 1의 URL을 처리할 때 @RequestParam을 사용하게 됨. 아래의 예제와 같이 Controller 단에서 사용함. @GetMapping("read") public ModelAndView getFactoryRead(@RequestParam("no") int factroyId..

01) Spring MVC Framework and REST - 전통적인 Spring MVC 컨트롤러와 RESTful 웹 서비스 컨트롤러의 주요 차이점은 http 응답 본문이 생성되는 방식임. - 기존 MVC 컨트롤러는 View 기술에 의존하지만 RESTful 웹 서비스 컨트로럴는 단순히 객체를 반환하고 객체 데이터는 json/xml로 http 응답에 직접 작성됨. 02) @RestController @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { @AliasFor( annotation = Controller...

01) 정의 - Servlet Container에서 HTTP 프로토콜을 통해 들어오는 모든 요청을 프레젠테이션 계층의 제일 앞에 둬서 중앙집중식으로 처리해주는 프론트 컨트롤러(Fron Controller). dispatch는 보내다라는 뜻을 가지고 있음 - 클라이언트로부터 어떠한 요청이 오면 Tomcat(톰캣)과 같은 서블릿컨테이너가 요청을 받는데, 이때 제일 앞에서 서버로 들어오는 모든 요청을 처리하는 프론트 컨트롤러를 Spring에서 정의하였고, 이를 DispathcerServlet이라고 함. 그래서 공통 처리 작업을 DispatcherServlet이 처리한 후, 적절한 세부 컨트롤러로 작업을 위임함. - 물론 Dispatcher-Servlet이 처리하는 url 패턴을 지정해주어야 하는데 일반적으로 ..

1 ) Container - 개발자를 대신하여 Bean을 생성, 관리, 제거 한다. - 컨테이너가 Bean을 관리하기에 개발자는 모듈 간에 의존 및 결합으로 인해 발생하는 문제로부터 자유로워 졌다. - 독립적인 코드를 작성한 후 Annotaion만 남겨주면 컨테이너가 개발자가 원하는 상황에 코드를 실행한다. - 개발자가 run 메소드를 호출하지 않지만, 컨테이너에 의해 run 메서드가 수행 - 컨테이너가 개발자를 대신해 메소드가 호출될 때와 메소드가 필요한 자원을 전달하는 설계 구조를 IoC(Inversion of Control)이라 함. IoC는 메소드가 필요로 하는 자원을 코드가 실행되는 타임에 전달하는데, 이를 Dependency Injection(DI) 이라 함. 2) 스프링 컨테이너 두 종류 빈..