전체 글 212

Map key 값 대문자에서 소문자로 변경

오라클을 사용하는데 key 값이 전부 대문자로 리턴이 되고 있어 html에서 역시 대문자로 사용했는데 보기에도 이상하고 입력하기에도 불편해 조치를 취하기로 했다. 구글 검색을 하면 Listorderedmap, EgovMap 등 여러가지가 나오는데 제대로 동작하지 않았다. 그러다 발견한 방법은 HashMap을 상속 받아 재정의하는 것이다. 자바의 기본 개념인 상속을 통해 부모의 필드 메서드를 받아 재정의 또는 그대로 사용할 수 있다. ToLowerCaseMap 클래스를 생성하고 HashMap을 상속 받았다. HashMap 안에 데이터를 넣을 수 있는 put 메소드가 존재하고 이를 재정의하고자한다. 게시글 목록 데이터를 불러올 때 key 값이 대문자로 넘어오는 걸 확인할 수 있다. 그대로 진행을 하면 Has..

[게시판] 글수정

글 수정 역시 해당 글 번호 하나만 넘기면 되기 때문에 글 조회와 같이 @PathVariable을 사용하기로 한다. 기존 글 데이터를 조회해 화면에 넘겨준다 사용자는 화면을 통해 기존에 입력한 내용(story)을 확인할 수 있고 수정도 할 수 있다. 사용자가 수정할 내용을 입력 후 완료 버튼을 누르면 post 방식으로 /board/edit url로 데이터를 넘긴다. 화면에서 넘어온 데이터를 DB에 입력 후 리다이렉트로 목록 조회 화면으로 전환하면 수정은 간단하게 끝

[게시판] 글 조회 (@PathVariable)

글조회를 위해선 해당하는 글의 번호가 필요하다. 여기선 PathVariable 기능을 사용해보려한다. PathVariable을 사용하면 필요한 변수와 값을 url에 고정시켜 개발자가 직접 requestParam을 통해 가져오는 것보다 가독성이나 신뢰도 측면에서 훨씬 좋다. 개발자는 사람이기 때문에 실수가 발생할 가능성이 존재하지만 시스템에 넣어두면 그럴 가능성이 현저하게 줄어든다. @{./stories/{story_no}(story_no = ${story.STORY_NO})} - stories/{story_no} story_no라는 변수가 파라미터로 넘어갈 거라는 의미이다. - {stroy_no = ${story.STORY_NO}} ${story.STORY_NO} 값을 변수에 넣어준다. 스프링에서 제공하..

[게시판] 글쓰기

글쓰기는 글 목록 조회 화면에서 시작한다. 글쓰기 버튼을 누르면 get 방식으로 주소 /board/add에 매핑된다. 가독성을 위해 글쓰기 페이지로의 이동과 글 입력 기능을 같은 주소로 매핑하고 메소드를 통해 이를 구분한다. 스프링에서 주소를 매핑하는 어노테이션은 @RequestMapping, @GetMapping, @PostMapping 3가지가 존재한다. - @RequestMapping : 메소드 상관 없이 매핑 - @GetMapping : GET 메소드만 매핑 - @PostMapping : POST 메소드만 매핑 태그의 href는 GET 메소드로만 데이터를 보내므로 글쓰기 버튼을 눌렀을 때 @GetMapping 어노테이션이 달린 moveToAddForm 메소드와 매핑된다. th:field는 원래 개..

왜 생성자 주입을 써야하는가?

프로젝트를 하며 필요한 객체의 의존성 주입을 해야한다. 의존성 주입 방식에는 필드 주입, 수정자 주입, 생성자 주입 3가지 방식이 있다. 필드 주입은 아주 깔끔하다. 딱 보면 클린 코드 그 자체로 보이지 않는가? 하지만 우리의 인텔리제이님은 추천하지 않는다고 저렇게 줄을 그어놨다. 의존성 주입이라는 건 불변해야하는데 초기화가 되지 않아 final 선언이 불가하다. 결국 언제든 변할 수 있는 상태라는 의미이기 때문에 좋지 않은 코드이다. 또한 저 boardSvcImpl 변수는 BoardController에 종속되어 있기 때문에 결합도가 높고 이는 테스트 코드를 짜고자 할 때 BoardController를 컴파일해서 스프링 컨테이터에 올려야하는 불편함이 있다. 나는 boardSvcImpl만 테스트하고 싶은데..

[게시판] 글 목록 조회

Controller Controller에 @RequestMapping으로 /board 주소를 매핑하였다. - 타임리프에선 resource 밑에 index.html 파일을 두면 root 경로로 접근했을 때 index.html 파일을 호출한다. - a 태그로 글 목록 주소를 매핑하였다. - 자유게시판을 클릭하면 매핑된 주소에 따라 BoardController의 readStories 메소드에 접근한다. - 서비스 -> 매퍼 -> XML (마이바티스)를 통해 DB에서 List 형식으로 모든 글을 조회한다. - 이 객체를 ModelAndView 방식으로 stories.html으로 던진다. - 글 목록 객체는 List이기 때문에 반복문을 통해 화면에 표시해줘야한다. - 타임 리프에서 제공하는 th:each 구문을 ..

스프링 부트 인텔리제이 기본 필요 세팅

Setting 클릭 Annotation Processors를 검색 후 Enable annotation processing를 체크 - 해당 기능을 체크해야 롬복 등 라이브러리를 사용 가능하다. Build tool 설정 - 기본 gradle로 설정되어 있지만 인텔리제이로 설정해야 좀 더 빠르게 WAS를 실행할 수 있다. * 구글에 검색해 본 결과 gradle은 WAS 실행 이외에도 동작하는 기능이 많기 때문에 속도가 더 느리다고 함 한글 깨짐 방지를 위해 인코딩은 UTF-8로 설정한다.

스프링 부트 프로젝트 생성

Project - 프로젝트 빌드 툴을 설정하는 탭이다 - 메이븐 또는 그래들 선택 Language - 프로젝트에서 사용할 언어를 설정하는 탭 Spring Boot - 스프링 버전을 선택할 수 있다. - () 괄호가 붙은 버전은 최종 릴리즈가 되지 않은 베타 버전이며 최종 릴리즈 버전은 괄호 없이 숫자만 표시된다. Dependencies - 라이브러리 의존성을 추가해줄 수 있다. - 프로젝트 생성 이후에도 추가 가능 Group, Artifact - 패키지명으로 Group이 상위 계층이고 그 아래 Artifact가 위치한다. - Group은 회사명, Artifact는 그 안의 큰 기능으로 볼 수 있다. Name - 패키지 프로젝트명을 지정 Packaging - 배포 방식을 선택한다. Java - 위에서 선택..