목록전체 글 (320)
날아라쩡글이의 블로그입니다.
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설정 정보를 로딩해서 객체 생성하고, 조립하는 시점에 결정된다. 소스네벨에서 의존하는 객체가 결정되어 있으면, 의존하는 객체를 변경해야할 때, 소스를 수정하고, 컴파일을 다시해야한다. 의존성 주입을 사용하면, 소스 코드 수정없이 환경설정파일에서 의존성 주입할 객체를 변경하기만 하면 된다. 둘이 느슨하게..
의존성 주입의 수동 주입 방법 setter setter injection(setter메소드를 이요한 의존성 주입) 의존하는 객체를 담는 멤버변수를 정의한다. 멤버변수 갯수만큼 setter메소드를 정의한다. 스프링 bean설정파일에서 태그를 이용해서 의존하는 객체를 주입시킨다. //name : setter메소드이름, ref:setter메소드의 매개변수로 전달되는 객체의 빈 아이디 public class SampleController{ //의존성 주입을 통해서 전달받은 객체를 저장하는 변수 UserService userService; //멤버변수의 타입은 의존성 주입을 받는 객체의 부모타입이다. ProductService productService; //의존하는 객체를 전달받을 setter메소드 public..
Spring은 POJO기반의 javaEE 애플리케이션 개발을 지원하는 경량(light-weight)의 프레임워크이다. POJO plain old java object 평범한 옛날 자바 객체 plain 특별한 라이브러리, 특별한 실행환경이 필요하지 않은 객체 특정환경에 종속되지 않는 객체 개발하기 쉽다. 재사용성이 높다 테스트가 용이하다. old EJB등장이전의 평범한 자바객체로 개발하던시절 new키워드로 객체를 생성하고 사용하던 시절 특별한 실행환경이 필요없던 시절 특별한 환경 혹은 라이브러리에 종속되지 않는 재사용성이 높고, 테스트하기 쉬운 객체 특징 경량의 프레임워크다. 여러개의 라이브러리로 구성되어 있다. 필요없는 기능은 뺴버려도된다. 꼭 필요한 라이브러리로 구성할 수 있다. 경량의 프레임워크다. ..