본문 바로가기
반응형

개발/JAVA31

Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-200] Mybatis, JUnit, H2를 이용하여 예제파일을 만들다가 Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-200] 이런 오류를 만났다. 원인은 포트가 중복으로 떳다는 것이고 이미 실행중인 포트를 죽이면 해결된다고 한다. h2 실행을 중지시키고 다시 test하니 정상적으로 실행됐다. 2021. 3. 7.
[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.
[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.
[Mybatis] 동적쿼리를 어떻게 만들까? 동적쿼리를 어떻게 판단할까?에 이은 동적쿼리를 어떻게 생성하는지를 알아보겠습니다. 어떻게 판단하는지는 아래 게시물에 나와있으니 참고 부탁드립니다. csy7792.tistory.com/307 [Mybatis] Mybatis는 어떻게 동적쿼리인지 판단할까? Mybatis는 동적쿼리를 작성할 수 있는 기능을 제공한다. 어떠한 원리로 동적쿼리인지 아닌지 판단하는건지 궁금해서 Mybatis 소스를 분석해보았다. Mapper 등록과정은 아래에서 보실 수 있습니다. csy7 csy7792.tistory.com 아래와 같은 동적쿼리가 있을 때 어떻게 동작하는지 알아보도록 하겠습니다. select id, col1, col2, col3 from dynamic_query col1=#{test1} AND col2=#{test.. 2020. 12. 31.
[Mybatis] Mybatis는 어떻게 동적쿼리인지 판단할까? Mybatis는 동적쿼리를 작성할 수 있는 기능을 제공한다. 어떠한 원리로 동적쿼리인지 아닌지 판단하는건지 궁금해서 Mybatis 소스를 분석해보았다. Mapper 등록과정은 아래에서 보실 수 있습니다. csy7792.tistory.com/301 [Mybatis] Mapper는 어떻게 등록되는 것일까 ? Mybatis를 처음 접하게되면 xml 또는 JAVA로 설정만 해주면 어디서든 가져다쓸 수 있다는것이 마법같이 느껴질 수 있다. 어떠한 원리로 그렇게 사용할 수 있는지 알아보도록 하겠다. MybatisConfiguration. csy7792.tistory.com 지금부터는 작성한 쿼리가 동적쿼리인지 아닌지 어떻게 판단하는지 알아보겠습니다. 1.XMLConfigBuilder.mapperElement 등록할.. 2020. 12. 31.
[Mybatis] StatementType Executor에서 Handler를 만들 때 RoutingStatementHandler를 통해서 Handler를 생성한다. 이 Handler가 무슨역할을 할까 궁금하여 들어가보니 아래와 같은 역할을 하고 있었다. StatementType별로 다른 Handler를 생성하는 역할을 하고 있었다. 그렇다면 StatementType은 무엇일까? 쿼리를 날리는 방식인 것 같다. STATEMENT, PREPARED는 Statement, PreparedStatement 와 동일하다. CALLABLE은 프로시저를 실행할 때 사용하는 Type이다. Default값은 PREPARED이다. 2020. 12. 28.