본문 바로가기
반응형

전체 글202

[JAVA] PriorityQueue 란? 필자는 코딩테스트를 볼 때 우선순위를 구해야 할 때 굉장히 손쉽게 구할 수 있다는 장점이 있어서 자주 사용하였다. 하지만 "어떻게 동작하는지 설명 해주실 수 있나요?" 라는 질문에 머리를 한대 맞은 느낌이었다. 내가 원리를 제대로 알고 사용하지 않았구나 하고 반성을 했으며 공부 해보았다. PriorityQueue란? 우선 순위 힙을 기반으로하는 제한되지 않은 우선 순위 큐이다. 출처 : docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html 우선순위 큐란 들어가는 순서에 상관없이 우선순위가 높은순서대로 나오는 큐를 뜻한다. PriorityQueue (Java Platform SE 7 ) An unbounded priority queue based .. 2021. 2. 22.
[JUnit] 테스트에 필요한 Request 객체 만들기 저는 메소드인자로 Request를 받는 메소드를 만들었습니다. 이 메소드를 테스트 하기 위해서는 실제요청이 필요했습니다. 하지만 실제요청을 계속보내며 테스트하기는 번거로웠습니다. 이럴 때 사용할 수 있는 유용한 라이브러리를 소개하려고 합니다. easymock 이라는 라이브러리입니다. 저도 오늘 알게된 라이브러리이며 공식문서조차 보지않고 만들었으므로 퀄리티는 굉장히 낮다는것을 감안하고 봐주길 바랍니다. 일단 실제 제가 원하는 테스트를 할 수 있는지 먼저 테스트해보고 테스트코드를 고도화시킬 생각입니다. maven을 이용하여 easymock을 디펜던시에 추가합니다. EasyMock의 createMock 메소드를 이용하면 Request 객체를 만들 수 있다. 만든 후에 필자가 사용해야 할 Request의 메소드.. 2021. 2. 4.
[JAVA] Spring Controller를 직접 만들어보자 (5) - 리팩토링 소스주소 : github.com/sangyongchoi/spring-controller-copy 현재 우리는 아래와 같은 기능을 만들었다. Handler Mapping Parameter Binding Method invoke 하지만 누구나 다 느낄 수 있듯 현재 객체들의 책임분배가 올바르지 않다. 어떤 객체는 2~3개의 역할을 하고있다. 책임을 적절하게 분배하는 작업을 하도록 하겠다. 1. HandlerMapping 리팩토링 HanddlerMapping은 이름에 알맞게 Handler에 대한 정보만 가지고 매핑작업만 이루어져야 한다. 현재는 매핑작업 뿐만 아니라 파라미터 파싱, 메소드실행 까지한다. 현재 동작 방식 1. 요청에 알맞는 Method 정보가 있는지 검사 2. 파라미터 파싱 3. 메소드 실행 변.. 2021. 1. 30.
[JAVA] Spring Controller를 직접 만들어보자 (4) - 파라미터 바인딩 소스주소 : github.com/sangyongchoi/spring-controller-copy 대략적인 라우팅기능은 만들었다. 이제는 파라미터 바인딩기능을 만들거다. Request -> Class로 변환하기위해 Jackson 라이브러리를 사용할 것이다. 편리한 개발을위해 lombok을 사용할 것이다. 테스트코드 작성을 위해 JUnit5를 사용할 것이다. 아래와 같이 의존성추가를 해준다. 테스트 케이스를 작성한다. 일단은 Json -> Class 기능만 만들것이므로 해당 기능이 정상적으로 동작하는지 확인한다. 테스트 코드를 위한 Class @Builder @NoArgsConstructor @AllArgsConstructor @Getter @ToString @Setter public class TestDt.. 2021. 1. 28.
[Spring] Controller에 파라미터 바인딩은 어떻게 이루어질까 ? 맞춤법 검사를 원하는 단어나 문장을 입력해 주세요. 요즘 개인적으로 Spring Controller를 모방하여 만드는 중이다. Spring의 Controller는 라우팅도 해주지만 개인적으로 제일 편리했던 거는 파라미터 바인딩이었다. 그래서 만들 때 파라미터 바인딩을 나도 해줘야겠다는 생각이 들었다. Method의 Parameter 타입을 검사해서 request 값이랑 대조해서 매칭하면 되겠지만 Spring은 어떤 방식으로 하고 있을까? 궁금하여 분석을 하고자 한다. 1. DispatcherServlet.doService 요청이 들어오면 DispatcherServlet의 doService메소드가 호출된다. doService 메소드 안에서는 doDispatch 메소드가 실행된다. 2. DispatcherS.. 2021. 1. 26.
[javascript] 현재 스크롤 비율 구하는법 세로 스크롤 비율 var scrollPercentage = Element.scrollTop === 0 ? 0 : 100 * (Element.scrollTop + Element.clientHeight) / Element.scrollHeight; 가로 스크롤 비율 var scrollPercentage = Element.scrollLeft === 0 ? 0 : 100 * Element.scrollLeft / (Element.scrollWidth-Element.clientWidth); 2021. 1. 22.
[Spring] Bean은 어떻게 등록되는 것일까? 요즈음 재미로 Spring의 Controller를 모방하던 도중 Request가 올때마다 new Instance()를 통하여 매번 Class (Controller 객체) 를 생성 해야했다. 너무 비효율적이라고 느꼇고 나중에 BeanFactory도 만들어야겠다는 생각을 가지게됐다. BeanFactory의 동작원리는 알았지만 Spring은 어떻게 효과적으로 관리할까? 라는 의문이 생겨서 소스를 뜯어보았다. 바로 알아보도록 하겠다. 어떤식으로 동작하는지 이해하시기 위해서는 직접 디버깅 해보시는게 제일 좋습니다. 1. Spring Application Run Spring Application을 실행하게 되면 main메소드가 실행되고 SpringApplication.run 을 실행하게 된다. 2. SpringAp.. 2021. 1. 17.
[JAVA] Spring Controller를 직접 만들어보자 (3) - 핸들러 매핑 지난편에서 Controller를 만들고 Controller의 매핑정보를 만들었다. 그렇다면 이제 실제로 매핑을 해서 페이지이동 및 결과를 돌려주는 간단한 로직을 작성해보도록 하겠다. 먼저 Controller에 등록되어있는 매핑정보와 return value를 수정해준다. @RestController public class RestTestController { @PostMapping("/rest/posttest") public String restPostMapping(){ return "post"; } @GetMapping("/rest/gettest") public String restGetMapping(){ return "get"; } } @Controller public class TestControll.. 2021. 1. 16.
[JAVA] Spring Controller를 직접 만들어보자 (2) - 핸들러 등록 Spring의 Controller 방식을 흉내만 내기에 방식이 다를 수 있습니다. 필자는 Spring을 사용하다가 Controller를 직접 만들어보면 어떨까? 라는 생각을 했었다. 지금 그 생각을 펼쳐보려 한다. 개발환경 IntelliJ JDK 1.8 1. Annotation 생성 Page 요청 : @Controller JSON 반환 : @RestController Get Mapping : @GetMapping Post Mapping : @PostMapping Controller종류는 Class위에 선언할 것이므로 Target을 Type으로 설정한다. Mapping종류는 Method위에 선언할 것이므로 Target을 METHOD로 설정한다. 2. Filter 생성 및 등록 어떠한 방식으로 초기화와 핸들.. 2021. 1. 15.
[JAVA] Spring Controller를 직접 만들어보자 (1) - 프로젝트 생성 Spring의 Controller 방식을 흉내만 내기에 방식이 다를 수 있습니다. Spring은 base package하위에 있는 class들을 읽어서 Bean으로 등록 가능한지를 검사하고 가능하다면 등록하는 방식입니다. Spring에서 어떻게 Bean 등록을 하는지 궁금하신분은 제 블로그에 Bean을 어떻게 등록할까? 게시물을 참고하시면 감사하겠습니다. 이를 모방하여 저는 base package 하위에 있는 class들을 읽어서 Controller라면 등록하는 방식으로 진행하겠습니다. 필자는 Spring을 사용하다가 Controller를 직접 만들어보면 어떨까? 라는 생각을 했었다. 지금 그 생각을 펼쳐보려 한다. 개발환경 IntelliJ JDK 1.8 1. JAVA Web Project 만들기 프로젝.. 2021. 1. 12.
[JAVA] Parameter name arg0이 나올 때 JAVA 8부터 Reflection을 사용하여 Parameter name을 가져올 수 있다고 들었다. 그래서 시도를 했더니 arg0, arg1 이런식으로 나왔다. 조금 찾아봤더니 옵션을 추가해야했다. 컴파일시 -parameters 옵션을 추가해야한다. 2021. 1. 10.
[Tomcat] war파일 없이 배포하기 Tomcat에서 war파일 없이 배포하는 방법을 알아보도록 하겠다. symbolic link를 이용하여 배포할 수 있다. Tomcat/webapps 하위에 Symbolic link를 설정해서 따라가게 할 수 있다. tomcat/webapps 경로에 Symbolic link 생성 ln -s 소스경로 ROOT tomcat/bin/start.sh 실행 2021. 1. 2.