탁구치는 개발자
close
프로필 배경
프로필 로고

탁구치는 개발자

  • 분류 전체보기 (424)
    • WebRTC (7)
    • 프로그래밍 (139)
    • AI 활용 (3)
    • 서버 (49)
    • 개발툴 (102)
    • 개발이야기 (10)
    • 장애 경험 (1)
    • 유용한 도구 (4)
    • 끄적끄적 (17)
    • 독서 (90)
    • 회고 (1)
    • 재테크 (1)
  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

Spring Controller 테스트 하기 (MockMvc 사용)

스프링 테스트 프레임워크에서 제공하는 MockMvc를 이용하여 Controller 테스트 하기 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "/dispatcher-servlet.xml", "/spring.xml" }) @WebAppConfiguration public class TestControllerTest { @Autowired private WebApplicationContext context; @Autowired private MessageSource reloadableResourceBundleMessageSource; private MockMvc mockMvc; @Before public void set..

  • format_list_bulleted 프로그래밍
  • · 2016. 5. 18.
  • textsms

jedis returnBrokenResource 메서드에 대한 오해

jedis의 returnBrokenResource 메서드에 대해 잘못 알고 있는 부분이 있어 정리한다. @Beforepublic void init() { GenericObjectPoolConfig config = new GenericObjectPoolConfig();config.setMaxTotal(20);config.setBlockWhenExhausted(true);config.setMaxWaitMillis(1000); JedisShardInfo shard1 = new JedisShardInfo("test.com", 6300);JedisShardInfo shard2 = new JedisShardInfo("test.com", 6301);JedisShardInfo shard3 = new JedisShard..

  • format_list_bulleted 프로그래밍
  • · 2016. 3. 9.
  • textsms
Spring Scoped Proxy Beans (prototype 빈 DI로 주입해서 사용)

Spring Scoped Proxy Beans (prototype 빈 DI로 주입해서 사용)

Spring 에서의 IoC 방식은 두 가지가 있다. DI, DL 방식DI 방식은 주입되는 객체의 인스턴스가 싱글톤일 때 사용하고,DL 방식은 매번 새로운 인스턴스를 생성하여 빈을 사용하고자 할 때 이용되는 것으로만 알고 있었다. 허나, 팀 동료로부터 새로운 정보를 들었는데DI 방식으로 의존성 주입된 빈을 사용할 때마다 새로운 인스턴스의 빈으로 연결 받을 수 있다고 하였다. 새로운 사실에 놀라 자료를 찾아보고 테스트를 해보니 정말로 가능하다는 것을 알게 되었다. MemberService는 prototype이 선언된 빈이다.테스트 클래스에 MemberService를 DI 받고 getMember() 메소드를 10번 호출해 보면 단 한 번의 인스턴스만 생성된 것을 확인할 수 있다.@Component @Scope..

  • format_list_bulleted 프로그래밍
  • · 2016. 1. 14.
  • textsms

Spring RestTemplate 사용 시 HTTP request, response 로그 남기기

spring의 RestTemplate을 이용하면 대게 다음의 exchange 메소드를 이용하여 외부 API와 연동을 하게 된다.ResponseEntity response = restTemplate.exchange(requestUrl, httpMethod, requestEntity, p); 위의 exchange 메소드를 이용하여 연동을 할 때 HTTP request, response 전문을 로그로 남기고 싶을 때가 있어서 그 방법을 찾아보게 되었다. 첫 번째 방법은 log4j를 이용하여 로그를 남기는 방법인데 이 방법은 한 줄 로그로 남길 수 없다는 단점이 있어 포기했다. 무슨 말이냐하면 아래와 같이 여러 줄로 로그가 기록된다는 것이다. 여러 줄로 출력되는 로그는 멀티 쓰레드 환경에서는 오류에 대한 원인을..

  • format_list_bulleted 프로그래밍
  • · 2015. 10. 16.
  • textsms

@InitBinder를 이용한 사용자 로그인 정보 @ModelAttribute 객체에 저장하기

@InitBinderpublic void initBinder(WebDataBinder binder){binder.registerCustomEditor(String.class, "userId", new PropertyEditorSupport() {@Overridepublic void setAsText(String text) throws IllegalArgumentException { super.setValue(text);}});}userId=1111로의 파라미터 요청 시 setAsText 메소드의 text 매개변수는 1111 값이 맵핑되어져 있다. binder.registerCustomEditor를 위와 같이 등록하게 되면 파라미터 Class가 String 타입이고, userId 파라미터 명인 경우 pro..

  • format_list_bulleted 프로그래밍
  • · 2015. 3. 4.
  • textsms

@Async 사용 시 spring security 세션 정보 추출 주의사항

로그인 되어 있는 상태에서 다음의 메소드를 Async 방식으로 호출한 후 로그인 사용자의 계정 정보를 추출하면 항상 null 값이 나온다.@Asyncpublic void searchLog(Search search) {Authentication auth = SecurityContextHolder.getContext().getAuthentication();String userId = auth.getName();} 스프링 시큐리티는 사용자 인증 후 ThreadLocal 객체에 값을 저장하기 때문에 @Async 기능으로 인한 새로운 쓰레드에서는 사용자 세션 정보를 가져올 수 없다.-> spring security 필터를 통과한 쓰레드만 사용자 로그인 정보를 ThreadLocal에 담는다.

  • format_list_bulleted 프로그래밍
  • · 2015. 3. 4.
  • textsms
@RequestMapping value에 property values 주입하기

@RequestMapping value에 property values 주입하기

@RequestMapping의 value에 선언하는 스트링 값을 프로퍼티에서 관리할 수 있는 방법에 대해서 알아보았다. 아래와 같이 Controller에 선언되어 있는 @RequestMapping 이 존재한다.@RequestMapping(value = "/loginPage", method = RequestMethod.GET)public String loginPage() {return "login/loginPage";} 위의 맵핑 애노테이션 정보를 다음과 같이 수정한 후 테스트를 진행해 보았다.물론, properties 파일에는 cont.req.name=loginPage 라고 선언이 되어 있는 상태이다.@RequestMapping(value = "/${cont.req.name}", method = Requ..

  • format_list_bulleted 프로그래밍
  • · 2014. 12. 5.
  • textsms

스프링 빈 등록 (Java 코드 이용)

빈 등록을 XML이 아닌 코드로 해야 할 일이 있어 찾아보니 DefaultListableBeanFactory를 이용하면 가능하다는 것을 알게 되었다. 스프링 웹 애플리케이션을 구동하면 다음과 같이 DefaultListableBeanFactory 클래스에서 생성된 빈 정보를 출력하는 것을 확인 할 수 있다.[2014-08-13 13:12:09 INFO o.s.b.f.s.DefaultListableBeanFactory][598] - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@7c24d3f1: defining beans [loggingAOP,scheduleTest,appli..

  • format_list_bulleted 프로그래밍
  • · 2014. 8. 13.
  • textsms

bean 엘리먼트의 parent attribute 사용

예전 스프링 스터디를 하면서 bean 에리먼트의 parent 어트리뷰트를 정의하는 것을 배운적이 있다. 사실 그때까지만해도 이 기능을 사용할 일이 있을까라는 생각을 했는데 오늘 난 이 기능을 사용하게 되었고 유용함을 느꼈다. 내가 사용하게 된 계기는 interceptor의 property 에 validator bean을 추가하는 과정에서 중복이 발생한다는 것이였다.예를 들어 /a 라는 URL 패턴으로 접근하는 요청에 대해서 A라는 인터셉터가 동작하고 A라는 인터셉터에서는 valid_1, valid_2, valid_3 가 동작해야 한다./b 라는 URL 패턴에서는 B라는 인터셉터가 동작하고 valid_1, valid_2, valid_4 가 동작해야 한다.여기서 확인할 수 있는 것은 valid_1, vali..

  • format_list_bulleted 프로그래밍
  • · 2014. 5. 22.
  • textsms
spring util:map 사용 시 key와 value 타입 지정

spring util:map 사용 시 key와 value 타입 지정

spring에서 제공해 주는 util:map 기능을 사용하여 xml 파일에 다음과 같이 에러 코드를 정의해 주었다. 이와 같이 선언하게 되면 key, value 는 String 타입으로 지정되어 HashMap 객체에 저장이 된다. 아이러니한건 스프링 DI 방식을 이용하여 다음과 같이 객체 주입을 해도 예외가 발생되지 않는 다는 것이다.@Resource(name = "loginCheckErrorCodes")private Map loginCheckErrorCodes; 에러가 발생될 것이라 예상을 하게된 이유는 DI로 주입 받는 Map 클래스의 key 타입이 Integer로 되어 있기 때문이다. 자동으로 type conversion이 발생되어 key 타입이 Integer형으로 바뀐것일까? 만약 type con..

  • format_list_bulleted 프로그래밍
  • · 2014. 5. 17.
  • textsms
Spring MappingJacksonJsonView modelKey가 하는 역할

Spring MappingJacksonJsonView modelKey가 하는 역할

현재 개발하고 있는 API 서버는 모든 HTTP Response 메세지를 JSON 스트링으로 리턴한다.일단 JSON으로 리턴하지만 언젠가 "XML도 재공해 주세요." 라는 말이 나올수 있으므로 ContentNegotiatingViewResolver로 설정하여 개발을 하고 있는데 한 가지 이상한 현상이 있었다. 다음의 Controller 코드를 보면 GET 방식으로 /orderform 요청이 들어오면 파라미터 정보는 ModelAttribute인 OrderformDto에 담고 해당 DTO 객체를 orderService.orderform 으로 넘겨 데이터를 받아와 Result객체에 담은 후 DispatcherServlet으로 return 하는 코드이다.@RequestMapping(value = "/orderf..

  • format_list_bulleted 프로그래밍
  • · 2014. 3. 15.
  • textsms

spring security ajax session timeout 체크 방법

웹 애플리케이션에서 사용자 세션 만료 시 로그인 페이지로 강제 이동시키는 경우가 있다.만약 ajax를 이용하여 서버와의 비동기 방식으로 통신하는 경우 사용자 세션이 만료되어 있다면 이를 어떻게 처리해야 할까? 스프링 시큐리티에서 커스텀 필터를 등록하여 사용자 세션 만료에 대한 exception을 catch한 후 예외 처리 하는 방법으로 ajax 통신에 대한 세션 타임 아웃 체크가 가능하다. security-context.xml client에서의 request 요청 시 header name 중 AJAX가 있는지 여부를 체크하기 위해서 ajaxHeader property 셋팅 AjaxSessionTimeoutFilter.java@Override public void doFilter(ServletRequest..

  • format_list_bulleted 프로그래밍
  • · 2014. 1. 8.
  • textsms

spring mvc:resources를 이용한 정적 리소스 캐쉬 문제 해결 방안

라이브 운영 중인 사이트에 일부 javascript를 수정할 일이 발생하였다.기존에 만들어져 있는 purchase() 함수의 기능 중 일부를 주석 처리하는 간단한 일이었다.바로 주석 처리 후 테스트를 진행하였고 아무 문제가 없어 라이브에 배포하였다.헌데, 주석 처리했던 소스의 기능이 동작을 한다는 것이다.그 순간 떠오른 것이 캐쉬 문제였다.긴급한 건이기에 아래와 같이 파라미터에 버전을 추가하여 사용자 브라우저에서 javascript를 재 다운로드 받도록 처리하여 재 배포하였다. 배포가 완료된 후 고민을 하게 되었다.매번 기존에 있는 css, js 변경 시 파라미터 뒤에 버전을 붙여준 후 배포를 해야 하는 걸까?나의 이 고민을 이미 다른 분이 했었고, 그 분이 작성한 글을 읽은 후 해결 방법을 찾게 되었다..

  • format_list_bulleted 프로그래밍
  • · 2014. 1. 2.
  • textsms

logback if condition 사용 시 주의 사항

logback을 이용하여 개발, 스테이징, 라이브 환경에 따른 로그 레벨을 분기하기 위해서 다음과 같이 조건문을 추가하였다. spring.profiles.active의 값은 java 실행 시 -Dspring.profiles.active="dev" 아규먼트를 추가하여 각 서버를 구분지었다. 헌데 웹 애플리케이션을 구동하면 로그 레벨이 각 환경에 맞게 적용이 안 된다. 문제는 janino library가 추가되어 있어야 했다. pom.xml 파일에 아래 라이브러리를 추가하여 문제 해결org.codehaus.janino janino 2.6.1

  • format_list_bulleted 프로그래밍
  • · 2013. 12. 23.
  • textsms

스프링 시큐리티 적용하기 (properties 인증 방법)

개인 프로젝트인 스프링 3.1 기반의 웹 애플리케이션에 시큐리티를 추가해 보기로 했다. 최종 구현 목표는 DB로 인증 및 URL 관리를 하는 것이며 일단 단계적으로 시큐리티가 어떤 기능을 지원하는지를 알아가기 위해서 오늘은 프로퍼티를 이용한 인증 및 권한 부여 방법에 대해서 설명하려고 한다. 먼저 스프링 시큐리티를 적용하기 위해서는 pom.xml에 라이브러리를 추가한다. org.springframework.security spring-security-core ${spring.security.version} org.springframework.security spring-security-config ${spring.security.version} org.springframework.security spri..

  • format_list_bulleted 프로그래밍
  • · 2013. 4. 20.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • navigate_next
전체 방문자
오늘
어제
전체
전체 카테고리
  • 분류 전체보기 (424)
    • WebRTC (7)
    • 프로그래밍 (139)
    • AI 활용 (3)
    • 서버 (49)
    • 개발툴 (102)
    • 개발이야기 (10)
    • 장애 경험 (1)
    • 유용한 도구 (4)
    • 끄적끄적 (17)
    • 독서 (90)
    • 회고 (1)
    • 재테크 (1)
최근 글
최근 댓글

캘린더

«   2025/08   »
일 월 화 수 목 금 토
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
태그
  • #maven
  • #VirtualBox
  • #JUnit
  • #제너릭
  • #shellscript
  • #algorithm
  • #Eclipse
  • #tomcat
  • #vagrant
  • #Wireshark
  • #Apache
  • #fiddler
  • #개발주의사항
  • #Database
  • #javascript
  • #SourceTree
  • #ant
  • #JPA
  • #git
  • #Kubernetes
  • #Docker
  • #Elasticsearch
  • #Spring
  • #리눅스
  • #Jenkins
  • #JQuery
  • #java
  • #SQL
  • #HTTP
  • #회고
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바