목록분류 전체보기 (174)
The Debugging Chronicles : "코드의 미학"
IoC ====> 결합도를 낮추고AOP ====> 응집도가 높다 스프링은 유지보수 용이하다!!! AOP 적용은 쉽다.설정대로 하라는 대로 하면 된다.하지만 용어에 초점을 맞추어 봐야한다. 핵심관심, 비즈니스, CURD를 분리해준다. Advice란?== 횡단 관심== 공통 로직 로그를 찍는 공통 로직. 로그는 CRUD가 잘 수행되어서 잘 진입해는지 확인하기 위해 찍는다.개발자 new 하지 않는다멤버변수로 만들어 주입한다.어노테이션 주입 그런데 로그를 모든 곳에 찍어야 한다면?로그 성능을 업데이트 해야한다면? 객체지향프로그래밍(OOP)의 한계; Advice를 교체할때 코드가 많이 변경되므로 개발시간, 컴파일 비용이 많이 필요해진다. 해결 방법>> 스프링 컨테이너야.너 객체 생성 및 관리 할수 있잖아?네..
스프링:IoC와 AOP를 지원하는 경량의 프레임워크 IoC 제어의 역행(역전)new (== 객체 생성 및 관리) 를 원래 개발자>>컨테이너가 한다!DS,HM,VR,Command 객체들,@Component, @Controller,@Repository,@Service ,...+ 의존 주입(DI) : 생성자 주입, setter주입, @Autowired*결합도를 낮출 수 있음* 경량POJO 위주 : 구조, 틀, 구격 : 개발자들의 역량을 상향평준화, 유지보수 용이[AOP]Aspect Oriented Programming관점 지향 프로그래밍----------------------------JAVA == OOP(객체 지향 프로그래밍, Objec..
컨트롤러에서 데이터를 인자에 할당하는 대표적인 방법으로 @RequestBody 와 @RequestParamdl이 이다. @RequestBody@RequestParam객체 생성가능불가능각 변수별로 데이터 저장불가능가능 @Controllerpublic class UserController { @PostMapping("/receive") public String age(@RequestParam String name) { System.out.println("통신 성공"); System.out.println(">>> " + name); return "index"; }}@Controllerpublic class UserController { @PostMapping("/receive") public Strin..
HttpMediaTypeNotSupportedException 오류는 클라이언트가 전송한 요청의 Content-Type이 서버에서 지원되지 않음을 나타냅니다. application/x-www-form-urlencoded는 주로 HTML 폼 데이터 전송에 사용됩니다. 이 오류를 해결하기 위해 몇 가지 방법을 통해 서버와 클라이언트 간의 미디어 타입 일치를 시도할 수 있습니다. 해결방법 1.pom.xml 의존성 추가 com.fasterxml.jackson.core jackson-databind 2.ds-servlet.xml bean추가 전체 코드
searchContent.js를 만들어주고 ajax로 비동기 처리를 해준다. 여기서 ajax의 설정을 자세히 살펴보면 1. url: 'search.do'설명: AJAX 요청이 전송될 서버의 엔드포인트 URL이다. 여기서는 search.do가 서버의 URL **엔드포인트이다.2. method: 'POST'설명: HTTP 요청 메서드를 지정한다. 여기서는 POST 요청을 사용하여 데이터를 서버로 전송한다.3. data: JSON.stringify({ board_condition: condition, board_keyword: keyword })설명: 서버로 전송할 데이터를 지정한다. 이 데이터는 자바스크립트 객체로 작성되어 있으며, JSON.stringify를 사용하여 JSON 문자열로 변환된다board_c..
데이터가 여러개니까 List로 변경arrayList도 동작하는데 상관은 없지만List가 호환성이 좋다. 요청명 맞추기 Check.do로 이제는 응답 데이터 형식을 지정해야한다.default가 string text값이다.자바스크립트는 다른 프레임워크랑도 호환이 되는데 json타입을 주로 받는다. 응답을 JSON으로 요청을 하면주고 받는 모든 데이터들이 JSON으로 정해서 주고 받아진다.그래서 요청도 형식도 지정해주고 실제로 보내는 데이터도 JSON으로 해주어야한다.JSON.stringfy는 JSON 문자열화해서 보낸다는 뜻이다.@RequestBody 어노테이션을 붙여서 주어서 주고 받는 데이터가 JSON이라는 뜻이다. 값이 이제 TRUE FALSE로 오지 않기 때문에 IF -else절은 실행되지 않는다...
비동기 처리할 수 있는 2가지 방법1) String (text) 반환2) Object(object) 반환 - List, Map, DTO, JSON , ...결과창을 띄울 공간을 하나 span 태그로 만든다얘도 비동기처리에 알려줘야하기 때문에 id="mid"추가 ***파라미터 값과 BoardDTO의 데이터 변수명 및 타입 모두 동일해야한다. 외부 스크립트 연결jQuery 추가 mid 태그내용이 바뀌면 값을 가지고 오도록 한다.mid 를 잘 가지고 오는지 로그 찍어 보기 태그에 데이터가 존재할 때 비동기 실행 한다!만약 데이터가 존재하지 않을 때..비동기처리를 일반 컨트롤러한테 요청을 한다.POJO를 쓴다.일반동기로 POST mid를 보내면command 객체가 인지해서 값을 보내준다. 잘되는지..
서비스 레이어가 추가 되었으니까다른 어노테이션이 되기 전에 먼저 new가 되면 어떨까?New의 순서를 컨트롤 하기 위해 고안된 아키텍처(구조)이다 1)service 레이어를 추가했으니2)@service == new service 를 먼저 해주면 어떨까?3) 또 다른 스프링 컨테이너 ( == 루트 컨테이너)를 추가 총 xml이 3개1.web.xml 서블릿 컨테이너(==톰캣)2. ds-servlet.xml 스프링 컨테이너3. applicationContext.xml 스프링 컨테이너 (== 루트 컨테이너) 그럼 컨트롤러가 먼저 new가 되어야 할까 service가 되어야 할까?서비스가 먼저 되어야한다. 그래서 루트 컨테이너가 먼저 된다. dispatcherSevlet 때문에 ds-servlet.xml이 먼저 ..
생각1. DAO가 굳이 매개변수 자리에 있어야 하나?- view에서 쓰지 않는데 굳이 인자로 삼아야할까?생각2. 무언가를 인자로 삼으면, 결합도가 높아진다. 개발을 하면 가장 변동이 심한 것 중하나가 DBMS이다예상 동시 이용 인원 DBMS 이관해야하면 DAO가 바뀐다.MySQL BoradDAOOracle BoradOracleDAOMaira MairaBoradDAO DAO를 인자로 작성하면 이관작업할 떄 마다인자를 따라 다니면서 다 바꿔야한다. ==> 유지보수가 아주 불편한 상태이다 1. DAO를 멤버변수로 위치 시킨다면??=> 그래도 여전히 이관작업할 때 마다 코드를 변경해야함 컴파일 >> 결합도가 여전히 높음 그럼 DAO 상위 객체를 찾아보자 바로 service이다2. service 를 멤버..
get post를 핸들러 맵퍼가 구별할 수 있다면요청명을 줄여 쓸 수 있다.CU가 있으면 POST로 보내고 insertBoard를 get login 은 보안을 다루는 기능이기 때문에 POST로 적어준다. 데이터 보낼때 무엇을 사용해야하는가? modelandView를 사용하지 않고 String 을 사용한 이유는 '경량'이기 때문이다 대부분 model을 사용하는데 그런데 로그인 정보는 어딜 가든 유지 되어야 하기 때문에 Session에 넣어서 보낸다 UserID를 써서 한곳에 묶어 주어서 응집도를 높이고 유지보수를 좋게 했다 리다이렉트가 있는 것과 없는 것과 차이가 있는데 redirect: 가 없으면viewResolver가 개입VR가 포워드가 디폴트 보낼 데이터가 있으면 페이지 이동(==v로 이동..