목록무한긍정파워걸 story (322)
날아라쩡글이의 블로그입니다.
완전한 Rest는 자원의 이름으로 구분하여 해당자원의 상태(자원)을 주고 받는 것이다. HTTP URL을 사용해서 자원의 이름을 명시하고 HTTP method를 사용해서 해당자원의 대한 작업을 지정하는 것이다. 지난번에는 RestController로 JSON을 올리는 방식을 진행했다. 그러면 삭제를 진행하면 어떻게 될까? 요청JSON을 올리면 응답데이터로 뭔가가 와야한다. 1. 방금 삭제한 것을 다시 내려준다. 2. 삭제 데이터에 대한 성공과 실패여부를 내려줘야한다. 삭제를 진행하게되면 우리는 지운 데이터가 다시 내려오는 것을 원치 않는 다 그렇기 때문에 삭제가 성공 혹은 실패에 대한 내용을 내려주는 것이 좋다. 모든 응답을 정형화해서 내려주는 것이 좋다. true - 잘못된 내용이다. JSON텍스트가 ..
이제는 body부내에 자바스크립트를 작성할 예정이다. HTML DOM객체가 준비되면 즉시 코딩된 스크립트가 실행된다. (HTML DOM이 화면에 렌더링 되기 전에 미리 스크립트 작업이 완료된다. 즉, 엘리먼트에 이벤트 핸들러 함수를 등록하는 것, 특정엘리먼트를 감추는 것, 서버와 통신해서 초기화면에 필요한 데이터를 획득하는 작업 등 다양한 작업을 HTML DOM이 화면에 렌더링 되기전에 수행할 수 있다. 함수안에서 선언한 모든 변수, 함수, 객체들은 그 함수의 범위를 벗어나지 않는다. 즉, 브라우져 전역객체(Window객체)를 오염시키지 않는다. 사용자가 정의한 변수나 함수가 이미 다른 사용자가 정의한 변수나 함수를 덮어쓸 가능성을 없애준다. 단점은 html태그에서 function안에 선언된 함수를 이용..
AJAX처리를 위해 RestController설정방법과 자바객체를 json텍스트로, json형식의 텍스트를 자바객체로 변환시키는 라이브러리 의존성 추가 maven에서 jackson을 검색하고 databind의 의존성을 추가한다. com.fasterxml.jackson.core jackson-databind 2.13.1 방법이 2가지가 존재한다. 첫번째는 restController의 패키기지를 만들어서 @RestController어노테이션을 붙이고 @RequestMapping("/rest/book")으로 경로를 설정하는 방법이 있다. 두번째는 일반 @Controller의 어노테이션을 붙이고 return의 객체 앞에 @ResponseType을 붙이고 작성하는 방법이다. 요청핸들러 메소드가 반환하는 값을 응답..
springMVC 실행순서 클라이언트가 웹서버로 요청을 보낸다. 웹서버가 요청객체와 응답객체를 생성한다. 웹서버가 DispatcherServlet의 Service(Request req, Response res :앞으로는 변수명으로 작성예정) 메소드를 실행한다. Handler Mapping에게 요청 URL을 보낸다, Handler Mapping은 요청 URL을 분석해서 요청URL과 mapping된 요청 핸들러 메소드를 실행할 HandlerAdapter객체를 반환한다. DispatcherServlet은 HandlerAdapter의 Handler(req, res)메소드를 실행한다. HandlerAdapter는 Interceptor를 실행해서 요청핸들러메소드 실행전처리를 수행한다. HandlerAdapter는 ..
Mybatis가 제공하는 타입 명칭 int , string, long, double, date map : map은 인터페이스여서 객체생성이 불가능하다, parameterType에서 사용가능하다. 그릇으로 사용가능하지만 resultType에서는 사용불가능하다. hashMap : resultType에서 사용가능하다. 주로 ResultType에서만 사용한다. bigdecimal java.math.BigDecimal 객체의 프라퍼티는 map의 key와 동일하게 사용한다. 사용자 번호로 검색 * Map map = new HashMap(); * map.put("no",100); * User user = userDao.getUser(map); * * 사용자 아이디로 검색 * Map map = new HashMap()..
opt와value의 값이 하나도 안들어가면 where이 없도록 동적인 다이나믹쿼리를 해주는 것이 where태그이다. where 태그를 이용해서 여러 값을 result해볼예정이다. pagination을 입력하자 요청 URL : localhost/book/list.do localhost/book/list.do?page= ? 이러면 page가 값이 없을 때 error가 발생한다. page가 null이거나 null이 아닐 때는 어떻게 해야할까? @GetMapping("/list.do") public String list(@RequestParam(name = "page", defaultValue = "1", required = false) String page, Criteria criteria ,Model mod..
Criteria : 기준, 표준의 복수형 form 객체로 등록한다. 내용은 opt와 value라는 속성으로 정의하고, 기본생성자와 getter/setter로 정의한다. 이제 검색을 통해보일 Controllerdp Criteria를 매개변수로 정의하고, Controller에는 if(StringUtils.hasText(criteria.getOpt()) && StringUtils.hasText(criteria.getValue())) { // criteria의 opt에 text가 존재하고 또는 criteria의 value에 text가 존재하면 List books = bookService.searchBook(criteria); //객체가 출력되고, model.addAttribute("books",books); /..
자바에서 nullPointerException이 발생하는 것을 방지하기 위해서 만든 API이다. 자바 8에 도입된 API이다. nullPointerException을 피하기 위해서 null인지 아닌지 null을 검사하는 기능이 포함된 optional가 추가되었다. optional는 null이 될수도 있는 ㄱ밧을 값싸는 wapper클래스다. 주요API optional.of(T value) null아닌 값이 저장된 optional객체를 반환한다. optional.ofNullable(T value) null일수도있는 값이 저장된 optional객체를 반환한다. optional.empty() 아무값도 가지고 있지 않은 비어있는 optional객체를 반환한다. ifPresent() optional객체에 저장된 값..
java 8부터 추가된 API이다. 배열이나 콜렉션에 저장된 데이터를 처리하기 위해서 도입했다. 이전에는 for문과 iterate를 사용해서 처리했다. 다양한 방식으로 저장된 데이터를 처리하기 위한 공통적인 처리방법을 제공한다. 배열과 콜렌션, 파일에 저장된 데이터를 통일시켜버린다. stream API의 특징 내부방법을 통해서 작업을 수행한다. List numbers = List.of(10,20,30,40,50); for(int num : numbers) { System.out.println(num); //외부반복 } numbers.stream().forEach(job -> System.out.println(num)); //람다식을 이용한 내부반복 스트림은 단 한번만 사용가능하다. 일회용이다. 연결하려면..
Model은 spring은 Controller와 Request, Response가 직접 연결되는 것을 싫어하기 때문에 Dispatcher을 이용하여 이동하게 된다. Model은 view가 옮겨 놓으며, 내부이동할 때 사용할 수 있는 데이터를 담고 있는 값이다. Redirect경우에는 model에 담으면 안된다. 재요청 URL의 경우 요청객체와 응답객체가 새롭게 생기기 때문에 값을 담아도 새로 만들어지는 요소에는 값이 없기 때문에 Redirect를 할 경우 model의 값을 담으면 안된다. 매개변수로 RedirectAttribute를 설정하고, addAttribute로 담아두면 된다. Session에 해당하는 개인정보들은 addFlashAttribute에 담아두면 된다. Session에 저장되는데, 1회성..
com.sample = 회사 도메인 spring-mybatis = 프로젝트명 0.0.1-SNAPSHOT = 버젼의 넘버링 war 톰켓서버의 배포 Jar 자바의 application을 압축한 폴더 War web package(web)의 package를 압축한 폴더 Ear 자바를 EJB서버를 이용해서 압축한 폴더 우리는 web을 만들기 때문에 war로 설정한다. = 앞으로 작성할 때 사용할 방식 encoding=UTF-8 자바의 버젼=11 스프링의 버젼= 5.3.14 그럼 앞으로 스프링 버젼이 동일하다면 ${spring.version}사용할 수 있다. spring-context 와 spring-webmvc의 차이 spring-context web용 springContainer의 jar파일이다. 웹서버에서 c..
1. model2개발 방식으로 spring boot이용한 프로젝트 협업 , 개인 총 2개 완료하기 (통합테스트까지) 2. 개인 프로젝트는 외부 서버로 호스팅 해보기 3.그림으로 읽는 알고리즘 책 정리하면서 외우고 티스토리 정리하기 (면접준비) 4. 3번완료시 코테 준비 (패턴외우기-코테준비하기 서적 1권 읽기) 5.책으로 읽는 컴퓨터프로그래밍 알아보기 읽던곳부터 다시 준비 6. 정처기 실기준비하면서 면접준비 3월가지 목표!! 힘내자 😀
new ->project ->maven -> new maven project설치 고를 수 있는 project로 All catagory를 클릭한다. org.apache.maven.web클릭 후 완성을 클릭한다. pom.xml에서 UTF-8을 11로 변경하고 maven에서 update를 진행한다. properties-> targetRuntime->아파치를 9로 설정한다. 실무에서는 java8,9를 사용할 것이다. 프로젝트는 유지보수가 중요하기 때문에 검증된 것을 사용할 것이고, 톰캣도 낮아서 걱정할 필요는 없을 것이다. pom.xml설정방법 mvnrepository.com으로 접속한다. 의존성 주입 1. spring web application개발에 필요한 라이브러리 의존성 추가 org.springframe..
myBatis란 SQL mapper Framwork 이다. [파라미터 객체]-[SQL]-[리절트 객체] paramether객체 SQL실행에 필요한 값을 표현하는 객체 result객체 SQL실행결과 값을 표현하는 객체 예시 insert int employees(employee_id, first_name, last_name) values (employees.seq.nextval, ?, ?) 필요한 값이 2개가 필요하다. 파라미터의 객체 : Employee 객체가 필요하다 SQL 실행에 필요한 값을 Employee객체에 담을 수 있다. 리절트 객체는 없다. insert, update, delete작업은 조회하지 않는 작업으로 객체가 존재하지 않는다. 예시 delete from employees where de..
어노테이션의 구성 @Target과 @Retention은 꼭 필수로 입력되어야한다. @Target 어노테이션의 부착대상을 지정한다. ({ElementType.CONSTRUCTOR : 생성자에 부착해도 된다. ElementType.METHOD : 메소드에 부착해도 된다. ElementType.PARAMETER : 매개변수 메소드에 부착해도 된다. ElementType.FIELD : 클래스의 멤버변수에 부착해도 된다 ElementType.ANNOTATION_TYPE : 다른 어노테이션 타입에 부착해도 된다. ElementType.TYPE : 클래스, 인터페이스에 부착해도 된다. }) ({부착대상, 부착대상, 부착대상}) 배열의 형태로도 올 수 있다. @Retention 어노테이션의 유지되는 시점을 정의한다. ..
요청 URL http:// localhost:8080/emp/detail.do?id=102 요청 핸들러 메소드 @RequestMapping("/detail.do") public String detail(){ return "employees/detail.jsp"}; id값이 필요하다. 이제는 jsp에 id=""처럼 넣지 않고, 요청핸들러메소드에서 id가 필요시 detail(int id)처럼 매개변수선언하면 spring이 자동으로 요청파라미터값을 확인하고 해당하는 변수이름 값에 값을 저장한다. 2개면 detail(int id, int cpno)처럼 요청파라미터의 값을 획득할 수 있다. 똑같은 이름의 변수를 선언하면 RequestMappingHandlerMapping이 Arguments: [{}] 핸들러 메소..
기본적으로 Spring Container는 2개로 만들 수 있다. 하나는 Root Spring Container 와 Child Spring Container이다. ServletContext는 web이 시작되는 시점에 만들어진다. 웹서버가 시작될 떄, 웹서버가 종료될 때 실행할 작업을 구현한다. ServletContextListener 인터페이스를 구현한 사용자 정의 ServletContextListener를 정의한다. ServletContextListener의 ContextInitialized()는 ServletContext의 초기화가 완료되면 실행되는 메소드다 ServletContext의 초기화는 서버가 시작될 때 완료 된다. ServletContextListener의 ContextDestroyed()..
BasicDataSource connectionPool을 가지고 있다. 데이터베이스에서 밀리 Connection객체를 만들고 보관, 관리하고 있다. 미리 connection을 맺고 있기 때문에 connection에 대한 시간이 줄어 든다. common-dbcp 라이브러리가 제공하는 BasicDataSource는 가장 일반적으로 많이 사용되는 DataSource의 구현체이다. jdbc드라이버의 클래스명, 데이터베이스 접속 URL, 사용자명, 비밀번호를 제공해야한다. 종류가 많고, DataSource를 구현한 객체이면 된다. JdbcTemplate int update(String sql, object...args) insert, update, delete T queryForObject(String sql, ..
너무 기간이 오래지났지만 합격 소식을 들고 왔습니다 정보처리기사 실기시험을 준비할 때 학원에서 java에 대한 공부를 진행중이였고, SQL에 대한 이해도가 떨어져 실기시험을 32점으로 과락을 맞은 상태여서 SQL에 대해서 공부를 해야겠다!! 하는 마음을 먹고 학원에서 SQL 수업을 진행중일 때 시험 준비를 시작했습니다. 데이터모델링에 대한 기초적인 부분과 어떤식으로 쿼리를 짜야하는지, window함수, join의 여러 방식을 배울 수 있어서 좋은 시간이었고, semi-project때 팀장으로써 팀원들에게 먼저 형태를 보일 table을 짜는데 도움이 많이 되었습니다.
의존성 주입 SampleController는 UserService와 ProductService에 의존하고 있다. 즉, UserService와 ProductService에 대한 구현객체가 필요하다. SampleController는 자신이 의존한 객체의 구체적인 이름대신 인터페이스에 대한 정보만 가지고 있다. SampleController객체가 실제로 사용하게 될 객체는 spring Container가 bean설정 정보를 로딩해서 객체 생성하고, 조립하는 시점에 결정된다. 소스네벨에서 의존하는 객체가 결정되어 있으면, 의존하는 객체를 변경해야할 때, 소스를 수정하고, 컴파일을 다시해야한다. 의존성 주입을 사용하면, 소스 코드 수정없이 환경설정파일에서 의존성 주입할 객체를 변경하기만 하면 된다. 둘이 느슨하게..