본문 바로가기

dev/스프링

(46)
spring profile 설정 spring 개발할 때 profile 환경 설정을 따로 하는 것이 좋습니다. 그 이유는 개발 PC에서 작업할 때, 개발서버와 운영서버에 반영할 때 DB 접속 정보나 로그 레벨 등등 따로 관리하는 것이 효율적이기 때문입니다. 아래 예시는 spring boot 프로젝트에서 profile 설정하는 것입니다. resources-dev: 개발서버에 적용되는 spring profile resources-local: 개발 PC에 적용되는 spring profile resources-release: 운영서버에 적용되는 spring profile spring profile을 적용하려면 maven pom.xml에 따로 profile을 설정해야 합니다. 개발서버에 적용할 application.yml을 작성합니다. 운영서버에..
spring security sessionRegistry 스프링에서 중복 로그인을 방지하려면 sessionRegistry를 사용하면 됩니다. 기존의 사용자 세션은 유지하고 새로 시도하는 로그인은 막는 것으로 하겠습니다. sessionRegistry를 적용하려면 http 태그 안에 session-management 필터를 추가합니다. 그리고 중복 로그인을 막기 위해 concurrency-control 태그를 작성하고 각각의 속성을 다음과 같이 설정합니다. max-sessions="1" (로그인한 사용자가 동시에 접속할 수 있는 세션의 수) error-if-maximum-exceeded="true" (true, 중복 로그인이 발생했을 때 기존의 로그인한 사용자 세션은 유지하고 다음에 로그인 시도한 사람은 실패. 반대로 하려면 false) expired-url="/..
Spring SecurityContextHolder spring 개발하다 보면 중간중간에 현재 사용자 인증정보가 필요할 때가 있습니다. 그럴때 SecurityContextHolder를 활용하면 간단하게 해결할 수 있습니다. 위의 소스를 보시면 SecurityContextHolder를 통해 인증정보를 가져오는 것을 확인할 수 있습니다. 그리고 인증정보(authentication)에서 현재 사용자 정보를 조회할 수 있습니다. 디버깅 모드에서 사용자 정보를 위와 같이 확인할 수 있습니다.
압축파일 다운로드 스프링에서 압축파일 다운받는 코드입니다. 간단하게 예제로 작성했고 자세한 설명은 코드 내의 주석 참고하면 됩니다. 압축파일이 아니라 텍스트, 엑셀, csv 등의 파일을 다운하고 싶다면 32~54라인 압축관련 소스 제외하고 56라인의 FileInputStream 객체를 생성할 때 File객체를 파라미터로 넘기면 됩니다. 예를 들면 ============================================================================ File testFile = new File("파일 전체 경로"); InputStream is = new FileInputStream(testFile); ==================================================..
TooManyResultsException 에러 스프링에서 DB 데이터 조회하다가 다음과 같은 에러가 발생했습니다. 위와 같은 에러가 발생한 이유는 해당 Mapper 쿼리가 조회하는 row 개수가 2개 이상이기 때문입니다. 즉 Mapper 쿼리는 1개의 row만 조회하는 것으로 예상했는데 2개 이상 row가 조회돼서 이런 에러가 발생한 것입니다. 기존의 Mapper가 1개의 row만 받는 것으로 되어있다면 2개 이상의 row를 받을 수 있도록 다음과 같이 수정해야 합니다.
ajax 배열 파라미터 전달 ajax 파라미터로 배열을 전달하는 방법은 간단합니다. 위의 코드처럼 ajax data 속성에 배열을 추가하면 됩니다. 서버에서 배열을 받으려면 @RequestParam "배열 이름[]"으로 받으면 됩니다. 코드를 실행했을 때 예제로 작성한 배열목록이 출력되면 ajax로 배열이 제대로 전달되었음을 확인할 수 있습니다.
IllegalStateException parameter 에러 클라이언트에서 서버로 ajax 요청을 하다가 다음과 같은 에러가 발생했습니다. 에러가 발생하는 원인은 스프링에서 파라미터로 전달되는 데이터의 default 값이 없기 때문입니다. 정확하게 말하면 "required=false"인 파라미터가 비록 전달되지 않더라도 default 값이 설정되지 않으면 에러가 발생합니다. 따라서 에러를 발생하지 않게 하려면 컨트롤러에서 "required=false"인 파라미터에 "defaultValue" 속성을 추가해주면 됩니다.
UnsatisfiedDependencyException 에러 처리 스프링 개발중에 처음 보는 에러를 아래와 같이 발겼했습니다. 이런 에러가 발생하는 원인은 스프링에 의해 생성된 bean이 자기가 의존하는 bean이 아직 생성되지 않기 때문에 발생한 것이 원인입니다. 스프링에서 bean 생성 순서를 정하지 않았다면 일반적으로 패키지 알파벳 순서대로 bean이 생성되는데 이때 참조대상의 bean이 참조하려는 bean보다 늦게 생성된다면 위와 같은 에러가 발생하는 것입니다. 따라서 의존성을 주입할 때(DI) bean 생성 순서를 고려해야 할 것입니다.