본문 바로가기

웹 프로그래밍 기초/자바기반의 웹&앱 응용SW 개발자131

자바기반의 웹&앱 응용 SW개발자 양성과정 70일차 -105 스프링 시큐리티 대략적인 기능 사용자 권한에 따른 URI 접근 제어 DB와 연동하는 Local strategy 로그인 쿠키를 이용한 자동 로그인 패스워드 암호화 이외에 여러 기능들이 존재합니다. 개념 시큐리티 사용을 앞서 인증(Authentication)과 권한(Authorization)이라는 개념을 알아야 합니다. 인증은 '증명하다'라는 의미로 예를 들어, 유저 아이디와 비밀번호를 이용하여 로그인하는 과정을 말합니다. 권한은 '권한 부여'나 '허가'와 같은 의미로 사용됩니다. 즉, 어떤 대상이 특정 목적을 실현하도록 허용(Access) 하는 것을 의미합니다. Web에서 인증은 해당 URL은 보안 절차를 거친 사용자들만 접근할 수 있다는 의미이고, 권한이란 URL에 접근한 사용자가 특정한 자격이 있다는 .. 2020. 6. 23.
자바기반의 웹&앱 응용 SW개발자 양성과정 69일차 -104 Tiles 라이브러리 사용하기. Tiles는 웹페이지의 상단 메뉴나 좌측 메뉴, 공통 파일 include 등의 반복적인 부분을 한 곳에서 깔끔하게 관리할 수 있게 도와주는 템플릿 프레임워크입니다. 요구사항 JSTL 필요 STS를 사용하고 있다면 기본적으로 탑재되어 있고, 그렇지 않다면 JSTL Dependency를 Maven에 추가해줘야 함. JSTL이 없으면 아래와 같은 에러 발생 HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config JDK 1.7 이상 Servlet 2.5 이상(2.4도 가능은 함) JSP 2.1 이상(2.. 2020. 6. 19.
자바기반의 웹&앱 응용 SW개발자 양성과정 68일차 -103 get요청과 post요청을 확인해 보려고 했는데 @Controller("adminNoticeController") @RequestMapping("/admin/board/notice/") public class NoticeController { @RequestMapping("reg")//post 요청 public String list() { return "/admin/board/notice/reg"; } } reg컨트롤러에서 전부 get요청과 post요청을 받는 것을 확인했다. get요청과 post요청을 구분 지어 처리할 필요가 있습니다. @GetMapping("reg") public String reg() { return "/admin/board/notice/reg"; } @PostMapping("reg.. 2020. 6. 18.
자바기반의 웹&앱 응용 SW개발자 양성과정 68일차 -102 Mybatis를 이용하기 위해 메이븐에서 라이브러리를 받아야 합니다. 그전에는 우리는 생성할 Dao를 @Repository로 지정한 다음 컨테이너에서 스캔하도록 설정했었습니다. @Repository public class JdbcNoticeDao implements NoticeDao { ...... } 이안에는 DB에 맞는 드라이버를 생성하고 커넥션을 얻고 객체에다 데이터를 담아서 리턴하는 아주 긴 코드가 필요했다. 이러한 반복적인 작업을 편리하게 도와주는 Mybatis가 존재한다. 먼저 스프링 부트를 이용하므로 Maven에서 Mybatis라이브러리를 의존합니다. mybatis-spring-boot-starter 추가합니다. spring은 xml에 spring-boot는 application.proper.. 2020. 6. 18.
자바기반의 웹&앱 응용 SW개발자 양성과정 67일차 -101 다오를 인터페이스로 구현합니다. public interface NoticeDao { List getList() throws ClassNotFoundException, SQLException; Notice get(int id); int insert(Notice notice); int update(Notice notice); int delete(int id); } JDBC를 이용해 데이터베이스를 관리하다 Mybatis로 변경할 일이 생겼습니다. 그럼 Service를 구현하는 곳에서 Dao 객체를 변경해야 합니다. 프로젝트의 크기가 거대하다면 소스코드의 변경에 대한 작업이 상당히 큰 비중을 차지할 수 돼있습니다. 그러하기에 변경될 수 있는 부품들을 외부 설정으로 변경할 수 있도록 코드를 작성합니다. packa.. 2020. 6. 17.
자바기반의 웹&앱 응용 SW개발자 양성과정 67일차 -100 application.properties는 스프링 부트에서 지원하는 Map컬렉션과 비슷한 역할을 합니다. 기본 설정 파일이므로 Key.Value값으로 설정해주면 알아서 적용됩니다. 만약 기본 설정파일을 설정하지 않을 경우에는 controller의 return값으로 경로를 포함한 view페이지를 적어주어야 합니다. spring.mvc.view.prefix=/WEB-INF/view/ spring.mvc.view.suffix=.jsp return "/WEB-INF/view/index.jsp"; JSP, 서블릿을 통해서 자바 코드, JSP파일을 수정한 경우 우리는 서버를 재시작하는 일이 많았습니다. 그러한 불편한 점은 Spring boot에서는 라이브러리를 의존함으로써 자동 재시작하도록 해줍니다. org.spr.. 2020. 6. 17.
자바기반의 웹&앱 응용 SW개발자 양성과정 67일차 -99 스프링 부트 스프링 MVC를 이용해서 DB 연동이 필요한 간단한 웹 애플리케이션을 만들 때에도 준비해야 할 것이 많습니다. MVC설정을 하고 DB 연동에 필요한 DataSource설정 , 트랜잭션 설정 등을 해야 합니다. 메이븐을 사용하면 드라이버 , 모듈을 버전에 알맞게 찾아 의존 추가도 해야 합니다. 스프링 템플릿인 스프링 부트는 최소한의 작업으로 스프링 프로젝트를 시작할 수 있도록 돕는다. 톰캣과 같은 서버를 설치하지 않아도 내장 서버를 이용해 웹 애플리케이션을 바로 실행할 수 있으며 모니터링을 위한 기능도 제공한다. 스프링 부트를 이용해 간단하게 웹 어플리케이션을 만들어 보자. 이클립스에서 Spring Starter Project를 클릭하면 다음과 같은 창이 나옵니다. 각종 사용자에 맞게 아티팩트.. 2020. 6. 17.
자바기반의 웹&앱 응용 SW개발자 양성과정 66일차 -98 Maven 프로젝트의 기본 디렉터리 구조 archetype:generate 골이 성공적으로 실행되면 artifactId에 입력한 값과 동일한 이름의 폴더가 생성된다. 다음에는 프로젝트 명 즉 artifactId를 javaprj로 이클립스를 이용해 만든 파일 구성이다 연습용이므로 skip archetype seletion 체크박스를 클릭했다. 기본적으로 생성되는 폴더를 포함한 Maven 프로젝트의 주요 폴더는 다음과 같다. src/main/java - 자바 소스 파일이 위치한다. src/main/resources - 프로퍼티나 XML 등 리소스 파일이 위치한다. 클래스 패스에 포함된다. src/main/webapp - 웹 애플리케이션 관련 파일이 위치한다. (WEB-INF 폴더, JSP 파일 등) src/.. 2020. 6. 16.
자바기반의 웹&앱 응용 SW개발자 양성과정 65일차 -97 파일 업로드 비동기식 window.addEventListener("load", function(){ var editor = document.querySelector(".editor"); var htmlArea = editor.querySelector(".html-area"); var boldButton = editor.querySelector(".btn-bold"); var italicButton = editor.querySelector(".btn-italic"); var imgButton = editor.querySelector(".btn-img"); var fileButton = editor.querySelector(".btn-file"); fileButton.oninput = function(e){.. 2020. 6. 14.
자바기반의 웹&앱 응용 SW개발자 양성과정 64일차 -96 이벤트 트리거 브라우저마다 파일을 입력하는 폼이 다르며 선택 상자를 직접적으로 컨트롤할 수 없기에 다른 버튼을 만들고 기능을 전달해주는 트리거가 존재합니다. 마우스 이벤트 객체를 만들어서 사용해야 합니다. triggerBtn.addEventListener("click", function () { let event = new MouseEvent("click", { 'view': window, 'bubbles': true, 'cancelable': true }); profileBtn.dispatchEvent(event) }) 또한 이미지를 올렸을 때 미리보기가 가능하도록 구현할 수 있습니다. let reader = new FileReader(); reader.onload = (readerEvent) => {.. 2020. 6. 12.