https://www.it-swarm.dev/ko/html/ltformgt%EC%9D%98-action-%ED%95%84%EB%93%9C%EC%97%90-%EB%A7%A4%EA%B0%9C-%EB%B3%80%EC%88%98%EA%B0%80-%EC%9E%88%EC%9C%BC%EB%A9%B4-%EC%96%B4%EB%96%BB%EA%B2%8C%EB%90%A9%EB%8B%88%EA%B9%8C/957955099/

 

html —

의 action 필드에 매개 변수가 있으면 어떻게됩니까?

 

Method 속성이 GET으로 설정된 경우, 브라우저는 양식 인수 값을 구성하기 전에 action 속성에서 querystring 매개 변수를 삭제합니다. 따라서 귀하의 예에서 제출시 서버에 대한 요청은 다음과 같습니��

www.it-swarm.dev

 

와.. 이걸 몰랐다.. 기억하자

https://motolies.com/707

 

크롬에서 동적 로드된 자바스크립트 디버깅 하기 dynamic load javascript

출처 : https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps?hl=ko 웹 개발을 하다보면 $.load 함수를 사용해서 동적으로 페이지를 넣는 경우가 종종있다. 이 때 크롬으로 디버깅 할..

motolies.com

 

https://nephrolepis.tistory.com/entry/jQuery-load-%ED%95%A8%EC%88%98%EB%A1%9C-%ED%98%B8%EC%B6%9C%ED%95%9C-%ED%8E%98%EC%9D%B4%EC%A7%80%EC%9D%98-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%94%94%EB%B2%84%EA%B9%85

 

jQuery load() 함수로 호출한 페이지의 스크립트 디버깅

보통 아래처럼 호출한 페이지의 스크립트는 $(".Layer").load(url); 브라우저 개발자 도구에서 스크립트 소스가 안나온다. 해당 페이지의 디버깅을 하기 위해 디버깅을 원하는 위치에 debugger; 기록함으로써 디버..

nephrolepis.tistory.com

 

와.. 이거 무조건 정확하게 입력해야한다.

 

//# sourceURL=foo.coffee

 

저기서 변경할 수 있는 부분은 foo.coffee 이부분.. = 에 스페이스바 이런거 넣으면 안됨;;

이 문제를 해결하기 위해 엄청난 삽질을 했습니다..

 

아직도 이런 사소한 에러를 찾는게 저한테는 많이 힘드네요.

 

문제가 되는 소스를 보여드리겠습니다.

 

 

 

 

  • Reference

https://www.slipp.net/questions/480

 

spring boot에 spring security 적용시 post가 동작하지 않는 이슈 해결

정말 아무 것도 아닌 이슈로 몇 시간 삽질했다. 특별히 추가한 설정은 없다. 단순히 pom.xml에 다음 설정을 추가했을 뿐이다. org.springframework.boot spring-boot-starter-security spring boot에 spring security에 대한 의존관계를 추가하면 기본 설정이 적용되면서 csrf에 대한 체크하기 때문에 post method가 정상적으로 동작하지 않는다. 갑자기 post method가 정상적으로 동작

www.slipp.net

 

Spring에서 RESTful API구현 시, 주로 사용되는 @ResponseBody와 @RequestBody 어노테이션의 개념에 대해 알아보겠습니다.

 

@RequestBody

 - HTTP 요청의 body내용을 자바 객체로 매핑하는 역할을 합니다.

 

@ResponseBody

 - 자바 객체를 HTTP요청의 body 내용으로 매핑하는 역할을 합니다.

 

@RestController
public class LoginWebController
{
	//HTTP요청의 내용을 Member객체에 매핑하기 위해 @RequestBody 어노테이션을 설정
	@RequestMapping(value = "/member/login" method = RequestMethod.POST)
    	public MemberResultDto login(@RequestBody Member member) {
    		MemberResultDto memberResultDto memberService.login(member);
        
        	return memberResultDto;
    }
}

 

위의 예제소스에서는 HTTP요청의 body안에 member 데이터를 파라미터로 받기 위해, @RequestBody를 사용하였습니다.

 

@ResponseBody를 사용하지 않은 이유는 @RestController를 사용하였기 때문입니다. @Controller와는 다르게 @RestController는  리턴값에 자동으로 @ResponseBody를 붙게되어 HTTP응답데이터(body)에 자바 객체가 매핑되어 전달됩니다.

(※ @Controller인 경우에는 @ResponseBody를 적어줘야 합니다.)

 

 

 

Reference

 

 

 

form태그 내부에 있는 input text box에서 Enter를 누르게 되면 자동으로 Submit이 되면서 페이지가 재로드 됩니다.

(Ajax를 사용할때, 이 부분에서 상당히 애를 먹었습니다.)

 

이를 방지하기 위한 3가지 방법이 있습니다.

 

1. form태그의 onsubmit속성값 이용

 

<form name="searchForm" onsubmit="return false;" method="post">

onsubmit="return false;"으로 설정해주면 자동 submit을 방지할 수 있습니다.

 

2. keycode 값으로 enter여부를 판단하여 처리

 

<script language="javascript">
	//enter방지
    function captureReturnKey(e) {
    	if(e.keyCode == 13 && e.srcElement.type != "textarea")
        	return false;
    }
</script>

<form name="searchForm" method="post" onkeydown="return captureReturnKey(event)">
	<input type="text" name="test">
</form>

onkeydown으로 키보드 버튼 클릭 시 captureReturnKey함수를 호출하도록 하고, keyCode 13(엔터)일 경우 return false로 엔터키를 방지할 수 있습니다.

 

3. input 박스 추가

 

<div class="srchForm">
	<input type="text" style="display:none;"/>	<!-- 의미없는 텍스트 박스 -->
    	<input type="search" class="input" onkeydown="javascript: if(event.keyCode == 13) {mf_keyDown();}}">
</div>

엔터키를 눌렀을때 자동으로 submit되는 원인은 form내부에 input 박스가 한 개만 존재하기 때문입니다.

따라서, 의미없는 input 박스를 추가하여 이를 방지할 수 있습니다.

 

위 세가지 방식이 있지만 1번 방법이 가장 깔끔한 것 같습니다.

 

 

Reference

https://doublesprogramming.tistory.com/112

 

Spring - 게시판 만들기 연습 (Rest방식으로 댓글 수정, 삭제 구현하기)

Spring - 게시판 만들기 연습 (Rest방식으로 댓글 수정, 삭제 구현하기) 1. 구현 화면 01) 댓글 상세보기 영역 생성 로그인한 회원 본인이 작성한 댓글에 수정 버튼이 보이도록 처리 수정 버튼을 클릭하면 댓글..

doublesprogramming.tistory.com

https://www.youtube.com/watch?v=X7nbS0kWAgw

한참을 찾아다녔습니다.. 그저 Restful API에 대한 알 수 없는 개념들만 접했지만

 

이렇게 Restful API를 활용해서 게시판의 댓글 수정, 목록, 삭제를 구현한 게시물은 처음 접해봤습니다.

 

그만큼 뜻깊은 게시물이고 몇번이고 돌려봐야할 것 같습니다.

spring - 3.txt



1. Spring web.xml이란?


web.xml은 서블릿 배포 기술자 라고 합니다. (설정을 위한 설정파일) web.xml은 WAS(Web Application Server) -> Tomcat이

최초 구동될 때, WEB-INF 디렉토리에 존재하는 web.xml을 읽고, 그에 해당하는 웹 애플리케이션 설정을 구성한다.



web.xml에서 dispatcher-servlet.xml을 호출한다. 만약 호출하는 코딩이 없어도 dispatcher-servlet.xml 자체 이름을 디폴트로

생각하고 호출합니다. (만약 dispatcher-servlet.xml의 파일 이름을 사용자가 임의로 변경한다면, web.xml에 명시해야합니다.)


web.xml의 자세한 내용은 아래 링크에 있습니다.


출처 : 

https://m.blog.naver.com/PostView.nhn?blogId=blogpyh&logNo=221128330192&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F


https://gmlwjd9405.github.io/2018/10/29/web-application-structure.html



2. JSTL Formatting 태크란?


JSTL Formatting태그는 이름에서 알 수 있듯이 데이터의 포멧형태등을 정해주고 변경할때 사용하는 태그입니다.

JSTL Formatting을 사용하기위해선 JSP페이지 상단에 선언을 해주셔야합니다.


<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>


JSTL Formatting의 다양한 태그 라이브러리를 확인하거나, JSTL의 다양한 라이브러리를 확인하려면 아래 링크에서 할 수 있습니다.


출처 : https://bvc12.tistory.com/237



3. Exeption을 사용할때, 웹 프로젝트에서는 모든 예외처리를 Controller에서 처리한다. Service, DAO클래스에서는 throws로 컨트롤러까지 예외를 던져준다.



4. error페이지를 처리할 수 있는 곳 ==> Controller, web.xml, HandlerMapping


dispatcher-servlet.xml에서 예외페이지를 처리하는 경우 아래를 참고하여 설정


<!-- Exception Handler..... -->

<bean  class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">

<property name="exceptionMappings">

<props>

<prop key="org.springframework.dao.EmptyResultDataAccessException">Error1</prop>

<prop key="java.lang.Exception">Error2</prop>

</props>

</property>

</bean>



5. AJAX를 사용할때는 컨트롤러에 어노테이션 @ResponseBody를 넣어줘야 한다.



5. 보안에 따른 view page 저장위치


view page들을 예전에는 WebContent폴더 아래에 새로운 폴더를 생성하여 웹 페이지를 저장했지만, 이러한 기법의 문제는 

웹 브라우저에서 주소창에 직접 주소를 입력하여 접근이 가능하기 때문에 보안상 좋지않다.

그래서 요즘은 WEB-INF폴더 아래에 새로 폴더를 만들어서 웹 페이지를 저장한다.

이러한 방식은 웹 브라우저에서 직접 주소를 입력하여 접근할 수 없으므로, 보안상 좋다.



6. AJAX를 사용할 경우, XML데이터는 무조건 VO(DTO)로만 데이터가 이동 가능하다. int, String, Map, List와

같은 자료형은 데이터 이동이 불가능하다. (그래서 보통 JSON을 사용한다.)



7. Java는 DB연결에 있어서 무조건 try catch를 사용해서 에러를 잡아줘야하지만, Spring에서는 모든 에러를

Runtime exception을 상속받고 있어서, 따로 처리하지 않아도 에러는 나지 않습니다.



<질문>


session id를 쿠키에 저장해서 이동하는데 만약 사용자가 쿠키기능을 막으면 ??


답변 : 쿠키 기능을 완전 막으면 session기능은 사용할 수 없습니다. 따라서, 세션을 사용한다는 의미는 쿠키를 사용한다는 의미와 같습니다.


프로세스 -> 싱글톤 => 싱글톤인데 프로세스 여러개 생성가능?

스레드 -> 싱글톤 => 메모리 과부하 ?? 어떻게 여러명이 하나의 클래스파일을 로드할수있지?

스레드 -> 싱글톤x => 프로세스로 생성하는거랑 무슨차이?



답변 :  - 만약 웹 서비스를 프로세스 단위로 사용자에게 제공하면 싱글톤의 의미자체가 없다.

         - 웹 서비스를 스레드 단위로 사용자에게 제공하면 싱글톤의 유무가 중요하다. 만약 싱글톤을 사용하지 않는다면,

           사용자들은 지속적으로 클래스파일을 로드하여 메모리에 문제가 생길것이다.

           그러나, 싱글톤을 사용한다면 사용자들은 하나의 클래스 파일을 카피하여 사용하므로, 메모리관리에 효과적이다.

           (내용정리가 필요할듯 ....)


db커넥션풀에는 아래와 같은 계정이 생성된다. 하나의 계정으로 모든 사람이 접속하는건가?


<context:property-placeholder location="classpath:/config/jdbc.properties"/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  destroy-method="close">

<property name="driverClassName" value="${jdbc.driverClassName}"/>

<property name="url" value="${jdbc.url}"/>

<property name="username" value="${jdbc.username}"/>

<property name="password" value="${jdbc.password}"/>

<property name="maxActive" value="${jdbc.maxPoolSize}"/>

</bean>


답변 : 그렇다. bean객체로 생성한 하나의 계정을 DB커넥션풀에 생성하여 사용자들에게 계정을 빌려준다. (보통 5개 이상 만들지 않습니다. 그만큼 계정의 사용과 반납 과정이 빠릅니다.)

교육내용을 잊어버리기 전에 다시 정리합니다.


Spring - 2.txt



1. 하드웨어 성능향상에 따른 개발론


   - 요즘 하드웨어가 좋기때문에 성능이슈보다 유지보수확장성에 집중하여 개발한다.

      (예전 성능이슈때문에 유행했던 알고리듬이 요즘 다시 곽광받고 있는 이유는 AI와 빅데이터 때문이다.) 



2. XML은 플랫폼 독립적으로 동작한다.


    A. XML

       

       - Extensible Markup Language의 약자로, 마크업 언어를 정의하기 위한 언어, 확장이 가능한 언어이다.


    B. HTML과의 비교

   

       - HTML과 흡수한 Markup language이지만 Tag를 정의할 수 있고 데이터를 기술할 수 있는 마크업 언어이다.

         XML은 데이터가 무엇인지에 초점을 맞춰 데이터를 기술하기 위해 고안되었고

         HTML은 데이터가 어떻게 보일지에 초점을 맞춰 데이터를 표시하기 위해 고안되었다.


     C. 탄생배경

  

        - XML이란 전자적으로 데이터를 교환하기 위한 표준이다. HTML의 한계를 극복하고 SGML의 복잡함을 해결하는

          방안으로써 탄생하였다.


        - 웹 상에서 구조화된 문서를 전송 가능하도록 설계된 표준화된 텍스트 형식의 마크업 언어로써 인터넷에서 바로

          사용가능한 문서를 표현하는 표준이다.


     D. 특징


        - 기존 웹의 인터넷 기반 프로토콜, 매커니즘과 함께 사용할 수 있다.


        - 언어에 대해 독립적이고 여러 Application을 사용 가능하도록 지원한다.


        - 사용자 정의 태그를 사용한다. 때문에 정보 교환이 용이하다.


        - 문서 재사용이 가능하다.


        - 웹에서 정보 교환이 가능하다.


        - 자료의 표현과 내용이 분리되어있어 정확한 검색이 가능하고 교환에 용이하다.



        XML은 어떠한 데이터를 설명하기 위해 이름을 임의로 지은 태그를 데이터로 감싼다.


출처 : https://asfirstalways.tistory.com/98



3. XML - JSON - YAML - CSV 언제 사용하고 어떤걸 선택해야 하는가?



출처 : https://stackoverflow.com/questions/34723651/xml-json-yaml-or-csv-for-storing-articles-on-server



4. IDL이란??


인터페이스 정의 언어 (Interface  Description Language 또는 Interface Definition Language, IDL)는 소프트웨어 컴포넌트의

인터페이스를 묘사하기 위한 명세 언어이다. IDL은 어느 한 언어에 국한되지 않는 언어중립적인 방법으로 인터페이스를

표현함으로써, 같은 언어를 사용하지 않는 소프트웨어 컴포넌트 사이의 통신을 가능하게 한다. 예를 들면, C++을 사용하여

작성한 컴포넌트와 자바를 사용한 컴포넌트 사이에서 국한되지 않고, 인터페이스를 묘사하는 개념이다.


<IDL의 특징>


  - IDL은 특정 언어에 독립적인 인터페이스 정의 언어이다. 따라서, 구현 언어가 아닌 정의 언어이며, 구현언어로의 매핑을

    지원한다.


  - IDL은 객체지향 개념을 기초로 하고 있으며, 다중상속 및 동적 호출 매커니즘을 지원한다.



출처 : https://blog.naver.com/neos_rtos/30185472655



5. GOF디자인 패턴에 대한 내용 (Spring은 많은 디자인 패턴을 내포하고있다.)



출처 : https://gmlwjd9405.github.io/2018/07/06/design-pattern.html





6. 클래스 다이어그램 내용 정리 (개발자들과의 의사 소통을 위해 필수로 익혀야한다.)



출처 : https://gmlwjd9405.github.io/2018/07/04/class-diagram.html




7. Spring AOP에 적용된 Proxy


d스프링은 프록시를 이용하여 AOP를 구현합니다. 스프링은 Aspect의 적용대상이 되는 객체에 대한 프록시를 만들어

제공합니다. 비즈니스 로직에 접근할 때 대상 객체로 바로 접근하는게 아닌 프록시를 통해서 간접적으로 접근하게 됩니다.

이 과정에서 프록시는 공통 기능을 실행한 뒤 대상 객체의 실제 메서드를 호출한 후에 공통 기능을 실행합니다.

                                           


출처 및 참고 : https://minwan1.github.io/2017/10/29/2017-10-29-Spring-AOP-Proxy/

                   https://jojoldu.tistory.com/71




<AOP에 대한 필기 내용>


app.xml에서 aop를 정의할 때 return값, 메소드명, 파라미터는 생략할 수 없다.

     ( ex. execution(* search(int)) ) ==> 해당 메소드가 보이면 무조건 aop를 적용시킨다.

                        - * : return value

                        - search : mthod name

                        - int : prameter name



annotation으로 AOP를 설정하려면  app.xml에 <aop:aspectj-autoproxy/> 를 입력해야한다.






8. @Autowired는 @Component를 상속하고 있는가?


상속받지 않습니다. 둘은 다른 개념입니다.


@Component

@Service

@Repository

@Controller

등의 spring stereo type @Annotation 이 붙은 클래스들은 

스프링 어플리케이션이 기동될 때 자동으로 검색되어 객체가 생성되고, 스프링에 의해 관리됩니다.


@Autowired 는 스프링에 의해 관리되고 있는 빈 객체를 스프링이 알아서 주입해달라는 용도입니다.



출처 : https://okky.kr/article/357029



spring.txt

교육을 듣고 곧바로 내용정리를 해야하는데 밥먹고 몸이 나른해지니 늦게 글을 씁니다 . . . .


좀 더 부지런하게 움직여야하는데, 내일은 퇴근하고 바로 작성해야지요.. !


전체적으로 중요한 내용 또는 내가 이해하지 못했던 내용들을 위주로 자세히 풀어나갈 것 입니다.



1. 객체지향 기반 5대 원칙


  A. SRP (단일책임의 원칙 : Single Responsibility Principle)


      - 작성된 하나의 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중

        되어 있어야 한다는 원칙.


      - 클래스는 자신의 이름이 나타내는 일을 해야 합니다. 올바른 클래스 이름은 해당 클래스의 책임을 책임을 나타낼 수 

        있는 가장 좋은 방법입니다.


  B.  OCP (개방폐쇄의 원칙 : Open Close Principle)


      - 소프트웨어의 구성요소(컴포넌트, 클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야 한다는 원리입니다.

        이것은 변경을 위한 비용은 가능한 줄이고 확장을 위한 비용은 가능한 극대화 해야 한다는 의미로, 요구사항의 변경이

        나 추가사항이 발생하더라도, 기존 구성요소는 수정이 일어나지 말아야 하며, 기존 구성요소를 쉽게 확장해서 재사용

        할 수 있어야 한다는 뜻입니다.



더 많은 내용은 아래 링크 


출처 : http://www.nextree.co.kr/p6960/



2. 멀티 프로세스(Multi Process)와 멀티스레드(Multi Thread)


   A. 멀티 프로세스 특징


      - 부모 - 자식 관계라고 해도 자신만의 메모리 영역을 가지게 된다.


      - 환경변수와 프로세스 핸들 테이블이 상속 가능할 뿐 결국 독립적인 관계이다.


      - fork를 통해 프로세스를 복사한다.


      - 유닉스 계열에서 ps 명령어로 현재 수행되고 있는 프로세스를 확인할 수 있다.

  

      - 프로세스 간의 통신을 하려면 IPC(Inter Process Communication)를 통해야 한다.


           


    B.  멀티 스레드 특징


       - 하나의 프로세스가 다수 개의 작업을 각각 스레드를 이용하여 동시에 작동 시킬 수 있다.


       - 스레드는 다음과 같은 공유 메모리를 가진다.


        



   C. 멀티 스레드는 멀티 프로세스에 비해 상당한 이점을 가진다.


      1. 컨텍스트 스위칭(Context Switching)시에 공유 메모리 만큼의 시간(자원) 손실이 줄어든다.

          : 프로세스 간의 컨텍스트 스위칭시 단순히 CPU 레지스터 교체 뿐만이 아니라 RAM과 CPU사이의 캐쉬메모리 대한

            데이터 까지 초기화 되므로 상단한 부담이 발생한다.


      2. Stack을 제외한 모든 메모리를 공유하기 때문에 global(전역), static(정적)변수 그리고 new, malloc에 의한 모든 자료를

         공유할 수가 있다.

          : 이는 프로세스간 통신(ex. pipe)과 같이 복잡한 과정을 거치지 않고 보다 효율적인 일처리가 가능하다는 것을 뜻한다.

            (핸드 테이블과 환경변수는 덤이다.)


출처 : https://you9010.tistory.com/136



3. HTTPD란?


   httpd란 HTTP Protocol을 지원하는 daemon입니다. HTTP Protocol이란 통신규약중 하나로서 브라우저에서 해독가능한

   파일, 즉 HTML 파일을 전송해주는 규약입니다. 마찬가지로 FTP를 지원하는 daemon은 ftpd이며, telnet을 지원하는

   daemon은 telnetd입니다. httpd란 다른말로 http를 지원하는 서버라 할 수 있으며, 우리가 흔이 Web Server를 구축한다는

   말은 좁은뜻으로 httpd를 수행한다는 말과 같습니다. 현재 전세계적으로 가장 많이 사용되는 httpd로는 apache이며, 이는

   Open Source로 제공하기 때문에 Linux의 기본 httpd입니다.



4. Spring Framework LifeCycle



브라우저로 부터 요청(Request)을 받고 응답(Response)하기까지 Spring MVC의 처리 흐름은 위와 같다.


※ Contoller, Service, DAO는 개발자가 구현하는 부분이고, 객체를 생성하고 관리하는 것은 DI기법으로 관리한다.


1. 먼저 브라우저로부터 요청이 들어오면 일단 Filter을 거치게 된다. Filter에서 하는 대표적인 처리를 보면 Encoding이 있다.




2. 다음으로 DispatcherServlet이 Controller에 요청을 전달하기 전에 가로챈다. 요청을 가로챈 후 HandlerMapping을 통해

   요청에 해당하는 적절한 Controller을 찾게 된다. 그리고 DispatcherSelvlet에 그것을 전달한다.


3. DispatcherServlet은 실행할 Controller정보를 HandlerAdapter에 전달하게 된다.


4. HandlerAdapter는 해당 Controller를 호출하게 된다.


5. Controller에서는 전달된 요청을 처리한다. 예를 들어 게시판의 글 목록을 가져오는 요청을 받으면 Controller는 게시판

   Service를 호출하고 Service에서는 DAO를 통해 게시판 글 목록을 가져오게 된다.


요청을 처리한 후 그 결과를 Model에 담고, View의 이름을 HandlerAdapter에게 전달하게 된다.


6. 전달받은 View의 이름을 가지고 ViewResolver에서 매핑된 View를 찾아서 반환한다.


7. DispatcherServlet은 반환된 View를 넘기게 된다.






※ 글을 작성하는 도중 갑자기 브라우저가 다운되어 전부 날아감.. 너무 화가나고 손이 바들바들떨림..

   고로 그냥 수업시간때 받아적은 텍스트 파일을 첨부.

   어차피 아래에 큰 내용은 없으니까 가볍게 읽을 수 있음.......

















@Autowired와 bean은 둘 다 싱글톤 객체를 만드는 녀석들입니다.


이 두가지를 이해하지 못해 여러가지 정보를 찾아보니 아래 링크에서 좀 명확하게 답을 얻었습니다.


bean은 servlet-context.xml or root-context.xml안에서 정의합니다.


@Autowired는 controller 또는 dao 이런곳에서 보통 정의를 하고 사용합니다.


즉, bean은 스프링이 초기화시에 직접 객체를 생성해서 컨테이너에 넣어놓고. 사용자 요청에 따라 그 라이프 싸이클이 관리되는 모든 클래스, 객체


들을 말합니다.


https://okky.kr/article/271453

+ Recent posts