목록분류 전체보기 (500)
공부한것들을 정리하는 블로그 입니다.
MSA의 개념과 이후 개발 패러다임에 대해 알아보도록 하겠습니다. Microservice는 SOA (Service Oriented Architecture) 의 경량화 버전으로 (Service: 특정 기능의 집합, service의 범위 정의가 중요) 모놀리틱 아키텍처(monolithic architecture)를 쪼개서 독립적으로 구분합니다. Microservice는 독립적으로 디플로이 / 확장 될 수 있는 서비스들을 조합하여 large 어플리케이션을 구성하는 아키텍처 패턴입니다. 일반적으로 Service Discovery, API Gateway, Orchestration, Choreography, Context Boundary등의 서비스들의 조합으로 이루어져있습니다. Netflix, Twitter, Am..
우리가 흔히 쓰는 웹 브라우저(Chrome, Internet Explorer, Firefox)에 URL(Uniform Resource Locator)을 입력하고 Enter를 치면 어떻게 웹페이지가 우리 눈에 보여질까? 1. 주소표시줄에 URL을 입력하고 Enter를 입력한다. 2. 웹 브라우저가 URL을 해석한다. 3. URL이 문법에 맞으면 Punycode encoding을 url의 host부분에 적용한다. 4. HSTS (HTTP Strict Transport Security)목록을 로드해서 확인한다. - HSTS 목록에 있으면 첫 요청을 HTTPS로 보내고, 아닌경우 HTTP로 보낸다. 5. DNS(Domain Name Server) 조회한다. 1) DNS에 요청을 보내기 전에 먼저 Browser에..
2019.11.28 면접 예상 질문 및 답변 Q. 세션과 쿠키의 차이점은? A. 세션은 서버에 저장되는 값이며, 쿠키는 클라이언트에 저장되는 값입니다. Q. 본인이 만든 프로젝트는 톰캣을 내렸다가 올리면 로그인이 풀리지 않나요? 톰캣을 내렸다가 올려도 로그인이 풀리지 않으려면 어떻게 해야할까요? A. 톰캣은 설정으로 세션을 유지시키는 방법이 가능하다. 톰캣의 설정파일(server.xml)에 관련설정(saveOnRestart)을 추가함으로써 세션을 유지시킬 수 있다. 따라서 서버 재구동시마다 세션 정보를 저장히지 않도록 처리 할 수 있다. (참고) * 이는 톰캣이 StandardManager를 사용하기 때문에 톰캣을 중지하는 시점에 세션 정보를 파일로 저장하기 때문이다. 별도의 pathname을 지정하지 ..
1. React란 무엇인가? - Facebook 등에서 사용하는 (망할 일 없는) 인기있는 프론트엔드 라이브러리 / 프레임워크 이다 2. 프론트엔드 라이브러리 / 프레임워크란? - 단순히 정적 페이지를 만들려면 HTML과 CSS 만으로도 가능하다. (JavaScript나 프론트엔드 라이브러리 필요 x) - 만약 JavaScript를 더해주면 동적 페이지로 구현 가능하다. (유저의 행동흐름에 따르는 ; 동적페이지) - But, 요즘의 웹은 단순히 웹페이지가 아니라 웹 애플리케이션 이다. => 브라우저 상으로도 자연스러운 흐름으로 매우 많은 것들을 할 수 있다. 예를들어) 어떤 유저 인터페이스를 동적으로 나타내려면, 정말 수 많은 상태를 관리해줘야 한다. HTML Counter 0 + JavaScript v..
1. @SessionAttributes 사용하기 - @SessionAttributes 는 수정 작업을 처리할 때 유용하게 사용할 수 있는 어노테이션이다. - @SessionAttributes 를 이용하여 특정 컬럼값이 null로 업데이트되지 않도록 처리 할 수 있다. - 실행결과, 클라이언트가 요청할때 따로 넘겨주지 않은 파라미터들이 모두 넘어오는 것을 확인 할 수 있다. ( ex) 넘겨주도록 명시한 파라미터 : title, content, / 넘겨주도록 명시하지 않은 파라미터 : writer, regDate, cnt ) - 클래스명 상단에 입력한 @SessionAttributes("board") 설정으로 인하여, Model에 "board"라는 이름으로 저장되는 데이터가 자동으로 세션(HttpSessio..
1. @RequestParam 사용하기 - Command 객체(VO)를 이용하면 클라이언트에서 넘겨준 요청 파라미터 정보를 받아낼 수 있다 - 하지만 이를 위해서는 반드시 요청 파라미터와 매핑될 변수와 Setter 메소드가 Command 클래스에 선언되어 있어야 한다. - 하지만 Command 객체에는 없는 파라미터를 Controller 클래스에서 사용해야 할 경우가 있다. - Spring MVC에서는 HTTP 요청 파라미터 정보를 추출하기 위한 @RequestParam을 제공한다. 2. @ModelAttribute 사용하기 - 매개변수에 사용되는 @ModelAttribute는 Command 객체(VO)의 이르믕ㄹ 변경 할 목적으로 사용 할 수 있다. - 메소드에 사용되는 @ModelAttribute는,..
1. Controller 통합하기 - 기존 Controller들 전부 삭제 - BoardController 신규 생성 package com.springbook.view.board; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.springbook.biz.board.BoardVO; import com.springbook.biz.board.impl.BoardDAO; @Controller /*@SessionAttributes("board")*/ public class Bo..
게시판 구조 변경 이유 : (Spring MVC 구조) -> (어노테이션 기반 MVC) - 스프링은 어노테이션 기반 설정을 제공함으로써 과도한 XML 설정으로 인한 문제를 해결한다. - Spring MVC도 스프링 설정파일에 HandlerMapping, Controller, ViewResolver 같은 여러 클래스를 등록해야 하므로 어노테이션 설정을 최대한 활용하여 XML 설정을 최소화 할 수 있다. 1. 스프링 설정파일에서 어노테이션 관련 설정을 해준다. - 스프링 설정파일에 으로 스프링 컨테이너가 컨트롤러 객체들을 자동으로 생성해주도록 수정한다. 2. WEB-INF 하위에 위치한 JSP 파일들의 위치를 src/main/webapp 폴더 밑으로 수정한다 - WEB-INF 하위 폴더 및 파일은 웹서버로 ..
1. 브라우저에서 도메인주소 또는 ip주소 입력 ( http://localhost:8080/biz/login.do ) 2. web.xml에서 *.do에 대해 servlet-name 'action'으로 SpringSpring FrameworkServlet 'DispatcherServlet' 실행 3. web.xml에서 설정해놓은 presentation-layer.xml에 진입, '/login.do'에 매핑된 엘리먼트 실행. 4. 엘리먼트의 경로로 지정되어있던 LoginController 실행 5. login.jsp 실행 ( url : http://localhost:8080/biz/login.jsp ) ** 참고 최초 커밋 : DAY03 까지 완료된 상태 : https://github.com/cyh789/B..
1.모듈이란? 2.모듈화 3.Node.js 4.라이브러리 5.라이브러리사용하기 1.모듈이란? 프로그램은 작고 단순한 것에서 크고 복잡한 것으로 진화한다. 그 과정에서 코드의 재활용성을 높이고, 유지보수를 쉽게 할 수 있는 다양한 기법들이 사용된다. (아주 좋은 부품을 만들어서 사용한다 생각하면된다 ) 그 중의 하나가 코드를 여러개의 파일로 분리하는 것이다. 이를 통해서 얻을 수 있는 효과는 아래와 같다. 자주 사용되는 코드를 별도의 파일로 만들어서 필요할 때마다 재활용할 수 있다. 코드를 개선하면 이를 사용하고 있는 모든 애플리케이션의 동작이 개선된다. 코드 수정 시에 필요한 로직을 빠르게 찾을 수 있다. 필요한 로직만을 로드해서 메모리의 낭비를 줄일 수 있다. 한번 다운로드된 모듈은 웹브라우저에 의해서..
마이크로 서비스 아키텍쳐 (MSA의 이해) 배경 마이크로 서비스 아키텍쳐(이하 MSA)는 근래의 웹기반의 분산 시스템의 디자인에 많이 반영되고 있는 아키텍쳐 스타일로, 특정 사람이 정의한 아키텍쳐가 아니라, 분산 웹 시스템의 구조가 유사한 구조로 설계 되면서, 개념적으로만 존재하던 개념이다. 얼마전 마틴파울러(Martin folwer)가 이에 대한 MSA에 대한 개념을 글로 정리하여, 개념을 정립 시키는데 일조를 하였다. 이 글에서는 대규모 분산 웹시스템의 아키텍쳐 스타일로 주목 받고 있는 MSA에 대한 개념에 대해서 알아보도록 한다. 모노리틱 아키텍쳐(Monolithic Architecture) 마이크로 서비스 아키텍쳐를 이해하려면 먼저 모노리틱 아키텍쳐 스타일에 대해서 이해해야 한다 모노리틱 아키텍쳐..
서론. 이전에 진행했던 [ 토이 프로젝트/(완료)(2019) BoardWeb - MVC1,MVC2 ] 에서는 MVC1 패턴, MVC2 패턴, MVC 프레임워크로 예제를 진행하였습니다. 이번에 진행되는 [ 토이 프로젝트/(진행중)(2019) BoardWeb2 - SpringMVC ] 에서는 위와 동일한 비즈니스 로직을 Spring MVC로 진행 할 예정입니다. 기존에 진행했던 실습과의 차이점은 스프링 프레임워크에서 제공하는 Servlet을 사용한다는 것입니다. 또한 실습하는 과정에서 기능이 추가 될 것입니다. 환경설정. (작성중) 깃헙. https://github.com/cyh789/BoardWeb2_2019
1. 동기 비동기 처리 - ajax는 기본적으로 비동기이므로 동기로 사용하려면 async : false 를 주는 것을 잊으면 안됨 - ajax의 succecss() 내부에 로직을 구현하여 대체하려고 할때 if(data != null) 이런식으로 구현하는 것은 의미가 없음 2. JAVA instance variable JSP를 호출하는 경우에는 jsp 내부의 instance variable 문제를 조심해야함. - 예를들어 db conn를 호출하는 경우 Connection, PreparedStatement, ResultSet 생명주기를 고려할 것 3. 호이스팅 함수 선언식(function 함수명(){}) 과 함수 표현식(var 함수명 = function(){}) 을 구분하여 사용 할 경우 호이스팅을 고려할 ..
파일저장 기능 설명 - HTML관리 페이지에서 - 출력되어있는 html의 내용을 수정 후 (1번째 라인에 "수정사항을 새로 입력해보겠습니다." 추가) - 파일저장 버튼을 클릭한다 - 파일저장 버튼 클릭시 jsp를 호출하기 때문에 화면이 새로고침된다 - 출력된 화면에서 수정된 사항이 확인되지 않는다 - 그 이유는 서버에서 리로드가 되지 않았기 때문이다(따로 설정 필요) - 지정된 파일이 존재하는 경로로 가서 파일을 직접 리로드해주자. 이클립스에서는 더블클릭으로 열거나 새로고침 해주면 된다. - 다시 도메인으로 가서 새로고침 해보면 바뀐 것을 확인 가능하다 - 이때 방법2만 수정사항이 적용 된 이유는 캐싱때문이다. - 자세한 사항은 이전 글을 참고바란다. 참고 : https://drsggg.tistory.c..
내맘대로 급하게 만든 코드라서 좀 지저분하다. 아마 구글링해보면 더 깔끔한 코드가 있지않을까 싶다. // 캐싱처리(날짜 timestamp) function autoCache(){ var d = new Date(); var s = leadingZero(d.getFullYear(), 4) + '-' + leadingZero(d.getMonth()+1, 2) + '-' + leadingZero(d.getDate(), 2) + '_' + leadingZero(d.getHours(), 2) + ':' + leadingZero(d.getMinutes(), 2) + ':' + leadingZero(d.getSeconds(), 2); return "?v=" + s; } // 캐싱처리(timestamp format) f..
불러오기 전 불러 온 후 방법1. XMLHttpRequest를 이용하는 방법(ActiveX) $(document).ready(function() { drawImageContainer(); $("#btnPrintHTML").trigger("click"); }); function startRequest() { createXMLHttpRequest(); var queryString = "uploadFile/sample.html"; // http://localhost:8080/biz/700_FileMngSys/result.txt 404 xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("GET", queryString, true); xmlHttp.sen..
ie에서는 ie라고 팝업되고 ie 이외에는 chrome이라고 출력된다
손쉽게 구현 가능한 엑셀 다운로드 기능은 크게 2가지가 있습니다. 1. Java 대용량 엑셀 다운로드 2. JavaScript 엑셀 다운로드 1. Java 대용량 엑셀 다운로드는 POI 라이브러리 또는 JXLS 라이브러리를 이용하는 방법입니다. 자바에서 제공해주는 템플릿을 토대로 원하는 데이터를 엑셀 속성에 담아 다운로드 받을 수 있습니다. 참고 : https://ddoriya.tistory.com/entry/JXLS-POI-JAVA%EC%97%90%EC%84%9C-Excel-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%EA%B5%AC%ED%98%84-%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EC%A2%85%EB%A5%98-%EB%B9%84%EA%B5%90 2. Jav..
IE 강력 새로고침(캐시 초기화) 단축키 : Ctrl + F5 크롬 강력한 새로고침(캐시 초기화) 단축키 : Ctrl + Shift + R or Ctrl + F5 크롬 강력한 새로고침 수동(개발자모드) 1. F12버튼 클릭 후 개발자모드 활성화 2. 새로고침 버튼 우클릭 후 캐시 비우기 및 강력 새로고침 클릭
SpringBoot에서 정적 요소 변경 했는데.. - 개발을 진행하는 도중 Font-end단 작업을 해야 해서 html 요소를 변경하고, 브라우저를 새로고침하였지만 변경이 되지 않았습니다. - 그래서 이 부분을 찾아본 결과 Thymeleaf같은 템플릿 엔진을 사용할 경우 정적 리소스 갱신을 위해 서버를 재시작 해야 하는 것이었습니다. - Spring을 이용하여 개발을 할 경우 webapp 디렉토리에서 정적 리소스를 담당하기에 바로바로 화면 갱신을 하여 확인할 수 있었습니다. - 그러나 SpringBoot에서는 resources 디렉토리에서 정적 리소스를 관리하기에 변경을 확인하기 위해서는 톰캣같은 WAS를 재시작 해야 합니다. 위와 같이 정적 리소스 변경을 확인하기 위해서 매번 서버를 재시작하는 것은 너..