dev/스프링 (46) 썸네일형 리스트형 Spring WebSocketSession 스프링에서 웹 소켓을 사용할 때 broadcast 방식을 사용하는 경우가 많습니다. broadcast 방식이란 현재 서버에 접속한 모든 클라이언트에게 메시지를 전달하는 것을 뜻합니다. 하지만 특정 클라이언트에게 메시지를 전달해야 하는 경우 WebSocketSession을 사용해야 합니다. 예제 코드를 설명하게 되면 클라이언트의 웹 소켓 세션을 저장하는 sessionList를 생성합니다.(19라인) 클라이언트가 웹 소켓 서버에 접속한 경우 sessionList에 추가합니다.(21~25라인) 클라이언트가 웹 소켓으로 서버에 메시지를 보낸 경우, 송신한 클라이언트에게만 메시지를 다시 전송합니다.(27~44라인) 클라이언트의 웹 소켓 접속이 끊긴 경우 해당 클라이언트의 세션을 sessionList에서 제거합니다.. Spring Boot Jasypt 스프링 부트 프로젝트에서 DB 접속 정보 같은 민감한 정보를 암호화하지 않는다면 보안에 위험할 수 있습니다. 암호화 라이브러리로 Jasypt를 많이 사용하는데 스프링 부트에 적용하겠습니다. pom.xml에 Jasypt 라이브러리를 추가합니다. Jasypt 라이브러리 암복호화 설정을 담당하는 클래스를 생성하고 bean으로 등록합니다. 이 코드에서 주의 깊게 봐야 되는 부분은 19라인입니다. 암복호화에 사용되는 비밀키를 OS 환경변수에서 가져옴으로써 보안성을 강화했습니다. 혹시 환경변수에 있는 값을 못 읽으면 재부팅 한번 하시기 바랍니다. 나머지 코드에 대한 설명은 아래에서 확인하시면 됩니다. 11라인: 스프링 부트 프로젝트에서 설정을 역할을 하는 클래스를 나타내는 어노테이션 12라인: Jasypt 라이브러.. Spring Naver Editor 이미지 업로드 스프링에서 네이버 에디터 이미지 첨부할 때 jsp에서 처리하는 대신에 서버를 통해서 이미지를 첨부하는 방법이 있습니다. attach_photo.js 파일 html5Upload 함수의 이미지 업로드 경로(sUploadURL)를 서버(/uploadEditorImg.do)로 수정합니다. 클라이언트의 이미지 업로드 요청을 컨트롤러가 받아서 서비스로 전달한 뒤 이미지 저장 경로를 response 객체로 출력합니다. 컨트롤러부터 이미지 업로드 요청을 서비스가 처리합니다. 해당 서비스 코드를 간략히 설명하면 먼저 이미지 확장자를 검사합니다.(29~44라인) try-resource를 통해 이미지를 서버 특정 경로에 저장합니다.(45~56라인) 서버에 저장된 이미지 경로를 리턴하는데, 이 경로는 이미지 업로드가 끝나고 .. Spring Boot Logback 스프링 부트에서 로그를 기록할 때 주로 logback을 사용합니다. 먼저 pom.xml에 logback 관련 디펜던시 logback-classic과 logback-core가 있는지 확인합니다. 만약 logback 디펜던시가 없으면 직접 추가해야 합니다. src/resources 디렉토리 밑에 logback-spring.xml 파일을 생성합니다. logback.xml 파일을 생성해도 되지만 스프링 application.yml파일에 있는 로그파일 디렉토리와 로그파일 이름을 참조하기 위해 logback-spring.xml 파일을 생성했습니다. logback-spring.xml 파일에 대한 내용은 아래와 같습니다. 3~4라인: springProperty 태그를 사용하여 application.yml 파일에 있는 .. Spring Enum 활용 여러 코드에서 공통적인 데이터가 필요한 경우 주로 상수를 사용합니다. 하지만 상수가 여러 개 이상이면 관리하기 힘들기 때문에 Enum(열거타입)을 사용하는 것이 좋습니다. 스프링에서 Enum을 사용하는 방법입니다. 위의 예제 코드는 컨트롤러가 리스트를 json으로 반환하는 예제로 Map의 key 타입이 String, value 타입이 Object로 제너릭 설정했습니다. 하지만 Map의 key를 String으로 하면 아무 String이 key로 쓰일 수 있기 때문에 좋지 않습니다. 또한 key가 오타가 입력되어 클라이언트로 보내진다면 에러가 발생할 수 있습니다. 예를 들어 클라이언트에서 "LIST" 키를 기준으로 데이터 파싱을 처리해야 하는데 "list"나 "array"로 키가 전달된다면 데이터 파싱에 문.. Spring Boot WebSocket 웹 소켓은 웹 브라우저와 서버 사이에 양방향으로 데이터를 전송해 주는 통신 기술입니다. 스프링 부트에서 웹 소켓 연계 기능 추가하는 것은 어렵지 않습니다. pom.xml에 spring-websocket dependency를 추가합니다. WebSocketHandler는 스프링에서 웹 소켓 통신을 담당하는 핸들러입니다. 텍스트 데이터를 전달하는 TextWebSocketHandler를 상속하여 WebSocketHandler를 구현했습니다. 클라이언트가 웹 소켓에 접속하면 로그를 남깁니다.(16~19라인) 클라이언트가 보낸 메시지에 "reply-"를 추가하여 다시 전달합니다.(21~33라인) 클라이언트가 웹 소켓 접속을 끊으면 로그를 남깁니다.(35~38라인) 웹 소켓 기능을 활성화하기 위해 WebSocketC.. Spring DI 스프링에서 2개 이상의 같은 타입의 빈을 주입하려고 Autowired 어노테이션만 사용하면 에러가 발생합니다. 아래 예제 코드를 먼저 보겠습니다. TestService를 구현한 클래스 TestServiceImp, TestServiceImp2를 스프링 빈으로 생성합니다. 그리고 TestController에서 TestService 인터페이스 타입의 빈을 주입하려고 하지만 TestService 타입의 빈이 2개 있기 때문에 어떤 빈을 주입해야 할지 몰라 에러가 발생합니다. Autowired는 빈을 주입할 때 먼저 빈의 타입, Qualifier, 이름 순으로 진행합니다. 따라서 이런 문제를 해결하는 방법은 많지만 그중에서 2가지를 소개하면 1. TestService 타입의 빈을 생성할 때 Qualifier 어노.. SSO 로그인 연동 최근에 프로젝트 수행 중에 SSO 로그인 연동 기능을 구현했습니다. 사용자 정보를 확인해서 맞으면 로그인 성공시키고 정보가 틀리면 로그인 페이지로 이동하는 기능입니다. 위의 소스코드는 예제 코드입니다. 서버에 접속했을 때 인증정보가 없으므로 로그인 페이지로 이동합니다.(54라인) 클라이언트 요청 정보를 추출합니다.(56~57라인) 클라이언트 요청 정보가 맞는지 확인합니다.(59라인) 요청 정보가 맞으면 사용자 권한을 생성하고(60~61라인) 사용자 정보 인스턴스를 생성합니다.(63~64라인) 사용자 정보를 인증 토큰에 저장해서 SecurityContextHolder에 추가합니다.(66~68라인) 클라이언트 요청 정보가 틀리면 로그인 페이지로 이동합니다.(71~73라인) 이렇게 구현하면 특정 사용자를 SS.. 이전 1 2 3 4 5 6 다음