목록분류 전체보기 (89)
빠에야는 개발중
프로젝트 명 : Sloot 백엔드Spring frameworkMaven(추후에 gradle로 변환)tomcatslf4j DBmysqlmybatis(추후에 jpa로 변환) 프론트엔드react.js(학습 필요) 기타aws(ubuntu 16.04)jenkinsgitgithub(버전 관리+칸반보드)source treeslack 추후 수정
적절한 주제를 결정하는 것은 쉬운 일이 아니다. 평소에 아이디어를 갖고 있어야 하고 개발 기간도 생각해야하기 때문이다. 안타깝게도 나는 평소에 개발 아이디어를 별로 가지고 있지 않았기에 며칠을 생각해야했다. 최종적으로 선정된 주제는 동아리 홈페이지 이다. 이유는 다음과 같다. 첫번째는 흥미이다. 일단 내가 하고싶어 해야 개발에 진척이 있을 것이라고 생각했기 때문이다. 맨 처음 생각했던 것은 내가 좋아하는 맥주나 리듬게임 같은 주제였는데 이것들은 이미 유사한 서비스가 있고 벤치마킹을 하더라도 독창적인 요소를 넣을 여지가 적다. 그리고 데이터를 파싱하는데 있어서 라이센스나 기술적 문제도 있을 것이라 판단했다. 그래서 다른 주제를 생각하던 중 지난 학교생활을 갈무리 할 수 있는 주제를 해볼까 싶어서 떠올린 것..
준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다.지구를 나타내는 숫자를 E, 태양을 나타내는 숫자를 S, 달을 나타내는 숫자를 M이라고 했을 때, 이 세 수는 서로 다른 범위를 가진다. (1 ≤ E ≤ 15, 1 ≤ S ≤ 28, 1 ≤ M ≤ 19)우리가 알고있는 1년은 준규가 살고있는 나라에서는 1 1 1로 나타낼 수 있다. 1년이 지날 때마다, 세 수는 모두 1씩 증가한다. 만약, 어떤 수가 범위를 넘어가는 경우에는 1이 된다.예를 들어, 15년은 15 15 15로 나타낼 수 있다. 하지만, 1년이 지나서 16년이 지나면 16 16 16이 아니라 1 16 16이 된다. 이유..
여러 조건을 만족하는 정렬을 구현해보자. 우선 정렬할 객체를 생성할 클래스를 작성한다. 여기서는 Student로 하겠다.1234567891011class Student { int num; String name; String address; Student(int num, String name, String address) { this.num = num; this.name = name; this.address = address; }}Colored by Color Scriptercs 그 다음 Comparator 인터페이스를 구현하는 StudentCompare 클래스를 작성한다. 이때 Comparator 인터페이스의 제네릭 타입을 정해줘야한다. Student 끼리 비교하기 때문에 Student로 설정한다.Stu..
실습을 진행하면서 Controller의 메소드들 중 getBoard와 getBoardList의 리턴형이 ModelAndView였던 것을 String으로 통일시켜주는 부분이 있었다. 코드의 깔끔함이라는 관점에서는 납득을 하였지만, 정확히 어떻게 작동을 하는지는 확인해보지 않고 넘어갔었다. 이 부분을 짚고 넘어가고 싶었다. getBoardList 메소드의 코드를 살펴보면1234567891011@RequestMapping("/getBoardList.do")public String getBoardList(BoardVO vo, Model model) { if(vo.getSearchCondition() == null) { vo.setSearchCondition("TITLE"); } if(vo.getSearchKey..
JPA 이번에는 JPA를 사용해보자. ORM은 쿼리를 자동으로 생성해주는 등 편리한 점이 많기 때문에 꼭 써봐야겠다고 생각했다. 입문 저번처럼 스프링에 적용하기 전에 연습을 해보자. 먼저 maven 프로젝트를 하나 생성하고, 디펜던시 설정을 해준다. Project facets에 JPA를 체크하면 persistence.xml 파일이 자동으로 생성된다. 여기에 클래스 등록을 해준다.12345 com.springbook.biz.board.BoardVO//생략Colored by Color Scriptercs 다음은 엔티티 작성이다. @Entity 어노테이션을 사용하여 VO와 거의 동일하게 작성해준다.12345678910111213141516171819202122232425262728293031package co..
Mybatis 적용 마지막 챕터는 퍼시스턴스 레이어에 대해서 다룬다. 먼저 mybatis를 사용하여 굉장히 보기 싫었던 JDBC 접속 코드를 깔끔하게 만들자. 입문 스프링에 적용하기 전에 별도의 프로젝트를 만들어 적응해보고자 한다. 먼저 디펜던시를 설정해주고, IDE 마켓에서 java orm plugin을 설치해준다. 이녀석이 있으면 편하게 xml 파일을 만들 수 있다. VO는 기존 스프링 프로젝트에서 사용하던 BoardVO를 그대로 사용한다. 다음은 mapper xml을 작성한다. 파라미터의 물음표를 이름으로 바꿔주는 것 외에는 별다른 작업이 필요없다.1234567891011121314151617181920212223242526272829 insert into board(seq, title, write..
비즈니스 레이어 통합 그동안 진행하면서 컨트롤러가 DAO 객체를 직접 가져다 쓰는 코드를 짰었는데, 이런 코드는 좋지 않기 때문에 개선하고자 한다. 우선 그 이유부터 알아보자. 왜 안되는가? 상황 1 : 만약 기존의 DAO가 다른 클래스로 교체된다면? DAO를 참조하고 있는 모든 컨트롤러의 코드를 수정해야만 한다. 상황 2 : AOP를 사용하고 싶다. 그런데 AOP의 동작 시점인 비즈니스 메소드가 호출되지 않기 때문에 어드바이스도 호출되지 않는다. 실제로 지금까지의 코드에서는 AOP 설정을 해놨던 메소드가 전혀 호출되지 않고 있었다. 상황 1의 경우는 OCP를 위반하고 있다. 변경이 일어날 때마다 모든 부분을 수정하기 때문이다. 이는 추상화를 통하여 해결할 수 있다. 상황 2는 비즈니스 레이어를 강요하고..
어노테이션 기반 MVC 스프링은 xml을 통한 설정이 많다. 그래서 xml의 볼륨이 커지기 쉽고 비례적으로 복잡해진다. 따라서 이번에는 어노테이션 설정을 통해서 xml 파일을 날씬하게 만들어본다. 컨트롤러 설정 우선 presentation-layer.xml의 컨트롤러, handler mapping, view resolver 설정을 모두 지우고, 으로 대체한다. 패키지는 com.springbook.view로 설정한다.1234567891011 Colored by Color Scriptercs 그 다음 각 컨트롤러들을 하나로 모아서 BoardController로 묶어준 뒤, @Controller 어노테이션을 붙여준다. 이것만으로도 해당 클래스는 스프링 컨테이너에 의해 컨트롤러로 인식된다. @RequestMap..
Model2로 개선해보자 앞서 만든 게시판은 model1로서 뷰와 컨트롤러가 jsp에 모두 일임 되어있는 구조였다. 이는 유지보수에 매우 부적합한 형태이기 때문에 개선할 필요가 있다. 따라서 이번에는 model2로의 발전을 도모해본다. model2는 model1에서 컨트롤러를 따로 빼낸 형태이다. jsp이 가진 복수의 역할이 분리되므로 깔끔하고 이해하기 쉬운 코드가 될 수 있다. 12345678910111213 action action com.springbook.view.controller.DispatcherServlet contextConfigLocation /WEB-INF/config/presentation-layer.xml action *.doColored by Color Scriptercs우선 w..