IT 강의 정리 26

[섹션8][미니프로젝트-게시판관리] 55~63강(완)

55. 글 작성하기1 로그인한 사용자가 게시글 작성기능 구현하기. 1. 글쓰기 버튼 클릭시 주소창에 인덱스 번호 나타내기 로그인을 하고, 자유게시판을 클릭해보면 주소창에 인덱스번호가 나타난다. 그런데 글쓰기를 누르면 인덱스번호가 나타나지 않는다. 어떤 게시글에서 작성한 글인지 알아야 데이터를 저장할 수 있기 때문에, 파라미터로 전달 될수 있도록 세팅하자. BoardController에서 @RequestParam으로 board_info_idx받아오고, board/main.jsp에 아래와 같이 수정하기 2. write.jsp에 폼 커스텀태그 세팅하기 & BoardController에 writeContentBean주입받기 write.jsp에 modelAttribute 추가하기. BoardController에 ..

[섹션7][미니프로젝트-회원관리] 48~54강

48. 회원가입 - 유효성 검사 처리 1. join.jsp에서 form 태그를 스프링에서 제공하는 커스텀태그로 변경하기 커스텀태그라이브러리 추가 - 수정 전 이름 아이디 중복확인 비밀번호 비밀번호 확인 회원가입 - 수정 후 action을 user/join_pro 로 바꾸고 modelAttribute="joinUserBean"도 추가 form:label, form:input, form:errors 로 변경 이름 아이디 중복확인 비밀번호 비밀번호 확인 회원가입 2. 컨트롤러에서 join메소드의 매개변수 joinUserBean 넣어주기 join.jsp에 modelAttribute="joinUserBean" 이라고 등록을 했으므로 아래와 같이 UserController에서 join메소드에 "joinUserBea..

[섹션6][미니프로젝트-상단메뉴구성] 46~47강

46. 상단 메뉴 구성하기(Java) 데이터베이스에서 게시판 이름들을 가져와 메뉴를 구성해보자. 상단 메뉴는 모든 요청에 대해 처리해야 하므로, Interceptor에서 처리시켜야 한다. 1. 이렇게 쿼리문을 구성해보자. 2. 만든 쿼리문 복사해서 TopMenuMapper인터페이스 생성 & ServletAppcontext에 추가 3. 실제로 데이터베이스에 접속해서 작업을 실행시킬 dao클래스를 만들기 & 만든TopMenuMapper인터페이스 주입받기 4. 만든 dao클래스를 또 service에 주입받기! 5. 인터셉터 만들기 & ServletAppcontext에 추가 이렇게 서비스까지 만들었으니 컨트롤러에서 서비스를 주입받아 사용하면 되는데, 지금 우리는 상단메뉴를 구성해야 하는데, 상단메뉴는 어떤 주소..

[섹션5][미니프로젝트 소개 및 세팅] 40~45강

40. 미니프로젝트 게시판 4개, 게시판당 상위 5개 게시글 표시, 더보기, 로그인, 회원가입, 정보수정, 글쓰기, 첨부파일 업로드 등의 기능을 넣고 게시판을 작성해보자. 41. Spring MVC 프로젝트 구조 클라이언트 요청 발생 → 서버는 요청정보 분석하여 컨트롤러로 전달 → 필요한 작업을 해주는 서비스의 메소드로 전달 (만약 서비스의 메소드 중에서 데이터베이스와 관련된 코드가 있다면 DAO클래스를 만들어 호출시킴) → 컨트롤러는 서비스의 메소드가 전달해준 값을 받아서 브라우저로 전달 @Bean : 메서드를 통해 반환하는 객체를 Bean으로 등록합니다. @Component : 개발자가 만든 클래스의 객체를 생성하여 Bean으로 등록합니다. @Controller : Component의 일종으로 사용자..

[섹션4][Spring MVC 인터셉터와 MyBatis] 34~39강

34. Interceptor Spring Framework강좌에서 AOP를 배웠었다. 스프링프레임워크에서 어떤 메소드를 감시하고 있다가 그 메소드를 호출할 때 그 메소드가 동작되는게 아니라 그 메소드의 호출을 가로채가서 다른 메소드를 호출하는 개념이 AOP이다. 그 AOP를 Spring MVC에서 적용한 요소가 Interceptor이다. Interceptor는 요청주소에 대해 관심을 갖고 요청이 발생하게 되면 요청주소를 확인하여 컨트롤러의 메소드를 호출하기 전이나 후에 다른 메소드를 호출할 수 있도록 가로채가는 개념이다. 요청 발생 시 호출되는 메소드의 코드가 중복되는 부분이 있을 때 인터셉터를 통해 처리하면 중복을 최소화할 수 있다. 로그인 여부 확인, 등급별 서비스 사용권한 확인 등의 작업을 처리할 ..

[섹션3][Spring MVC의 유효성 검사] 27~33강

27. Properties 어플리케이션을 개발할 때 프로그램 실행 중 절대 변하지 않는 값들이 있을 수 있다. 매우 중요한 개념이다. 예를들어, 데이터베이스 접속정보나 업로드폴더경로 등등.. 이러한 값들을 여러군데에서 중복 사용한다면 수정할 때도 여러 코드를 수정해야 하는 번거로움이 있다. 이런 번거로움을 덜기 위해 Properties라는 개념이 있다. 변하지 않는 값들을 properties파일에 작성하고 이를 가져다 사용할 수 있다. 1. 먼저, 아래처럼 data1.properties 파일을 만들어준다. properties파일을 작성해보자. 그런데 이때 Properties파일에 한글을 작성하면 아래와같이 유니코드문자형태로 변환이 된다. 이러면 유지보수에 어렵다. Property Editor설치로 해결이..

[섹션2][Spring MVC에서의 Bean관리] 20~26강

20. RequestScope 브라우저에서 새로운 요청이 발생하면, 브라우저는 서버에 요청에 관련된 정보를 전송한다. 이를 받은 서버는 브라우저가 보낸 요청 정보들을 보관하기 위해 HttpServletRequest객체를 생성해 요청 정보들을 담아둔다.그 요청정보가 담겨있는 HttpServletRequest객체는 응답결과가 브라우저로 전송될 때까지 유지되며 사용이 가능하다.새로운 요청이 발생해 응답결과가 브라우저로 전달 될 때까지요청정보가 담겨있는 Request객체를 사용할 수 있는데, 이 사용 범위를 RequestScope라고 부른다. 이 HttpServletRequest객체는 서버개발자가 필요에 의해 데이터나 객체를 저장할 수 있고 RequestScope내에서 사용이 가능하다. 하나씩 살펴보자. 1. ..

[섹션1][Spring MVC의 다양한 기능들] 10~19강

10. URL Mapping Servlet / JSP URL 주소 - URL주소 : 사용자가 서버에 접속해서 서비스를 받기 위해 입력하는 주소 - URL주소 구성 : 프로토콜://도메인주소(IP)/포트번호/경로1/경로2/경로3/... - 프로토콜 : 서버와 클라이언트간의 통신을 위한 약속 (생략시 http) - 도메인주소(IP주소) : IP주소는 같은 네트워크 망에서 컴퓨터를 구분하기 위해 제공되는 숫자로 구성된 고유 주소. - 포트번호 : 1~65535 번까지 구성된 숫자. 컴퓨터 내에서 프로그램을 구분하기 위해 사용한다.(생략시 80) - 경로1/경로2/경로3..: 이 부분은 서버 혹은 개발 방식이나 분야에 따라 다르게 해석된다. Servlet/JSP에서 첫번째 경로는 Context Path라고 부른..

윤재성의 스프링 입문 강의 정리

04. 자바 프로젝트 만들기 원래 지금까지 하던대로 자바 프로젝트를 만들어 보자. ① 클래스가지고 객체를 먼저 생성하고, ② 해당 객체의 주소값을 참조변수에 넣어주고 , ③그 참조변수를 통해서 뭔가 작업을 하는 식으로 보통 개발을 한다. 그런데, 만약에 내가 만든 HelloWorldEn클래스를 HelloWorldKo클래스로 변경을 하고 싶다면 어떻게 해야 할까? 당연히, 객체를 만들었던 클래스명을 먼저 변경해주고, 객체 생성 코드 변경, 메서드에 매개변수로 넣어줄 데이터타입도 변경해야 한다. 자바프로젝트의 문제점. 밑줄 부분을 모두 수정 해야 한다. 지금까지는, 이렇게 무언가가 변경되었을때 수동으로 모두 수정을 해줘야 했다. 다루기에 매우 번거롭다는 불편함을 가지고 있고, 유지보수에도 어려움이 있었다. ..

[섹션0][Spring MVC 소개 및 프로젝트 세팅] 1~9강

1. Spring MVC 소개 서블릿API를 기반으로 만들어졌으며 스프링이 가지고 있는 다양한 기능들을 이용해서 웹 어플리케이션을 개발할 수 있도록 만들어진 웹 프레임워크이다. Spring MVC에는 웹 어플리케이션 개발을 위한 다양한 라이브러리가 포함되어 있다. 공식이름은 Spring Web MVC이지만 보통 Spring MVC라고 부른다. 본 과정은 스프링 프레임워크5버전으로 진행된다. SpringMVC 개발방식은 SpringFramework와 동일하게 xml을 이용한방법과 자바어노테이션을 이용한 방법을 사용한다. Servlet / JSP + Spring MVC Library 2. 설치할 프로그램 스프링MVC 프로젝트 자체가 자바언어 기반의 웹 어플리케이션을 개발하는 서블릿/JSP 프로젝트에, 스프링..

[섹션7][JDBC&MyBatis] 26강~29강 오라클 데이터베이스 설치/ SQL Developer설치/ Spring JDBC/ MyBatis

26. 오라클 데이터베이스 설치 현재 오라클사이트에서 11g버전의 database가 제공되지 않기때문에 윤재성선생님의 구글드라이브https://drive.google.com/drive/folders/1f11i7pkl2pOFnWARgHevupQsN-ry8sQL에서 다운을 받았다. setup.exe를 눌러 설치를 진행한다. 관리비밀번호는 1234로 했다. 이 창이 뜨면 우측 하단 비밀번호 관리 클릭 - SYS/ SYSTEM/ SCOTT 에 비밀번호 1234로 설정 cmd창에서 아래와같이 설치된 것 확인 27. SQL Devleoper설치 오라클 데이터베이스를 GUI환경에서 관리할 수 있도록 제공되는 도구이다. 깔끔한 환경으로 편리하게 사용가능하다. 오라클에서 다운로드 - sqldeveloper.exe 더블클..

[섹션6][AOP] 23강~25강 AOP/ execution명시자/ @AspectJ어노테이션

23. AOP 특정메소드를 호출할때, 그 메소드를 가로채가서 다른 메소드를 먼저 호출하거나 그 이후에 호출하게 만드는 것. 예를 들어, 특정 웹페이지 요청시 로그인 여부를 검사하게 하는것 등으로 활용한다. method1()메소드가 호출될때, AdvisorClass가 가지고 있는 beforeMethod를 호출해라.(method가 호출되기전에) 라는 뜻으로 아래와 같이 beans.xml에 작성해줄 수 있다. 24. execution 명시자 25. @AspectJ 어노테이션 사용하기 지금까지는 어드바이저 역할을 할 클래스를 만들었었다. xml에 설정해놓은 메소드를 찾아서 자동으로 호출을 했었다. 그런데 @AspectJ 를 활용하면 xml파일이 아닌 어드바이저역할을 할 클래스에 직접 세팅할 수 있다. 먼저 , ..

[섹션5][Component] 20강~22강 Component/Component Bean 기본설정/ Component 자동 주입

20. Component 빈클래스 자체에 등록하는것. 그동안은 xml 파일이나 자바파일에 빈을 등록한 후 사용을 했다. 그런데 @Component를 사용하면, xml파일이나 빈 컴피그파일(자바파일)에 빈을 등록하지 않아도 자동으로 등록이 된다. 빈 등록이라든지 빈에 관련된 여러가지 내용들을 xml이나 자바파일에 등록을 하게 되는데, xml을 이용하는 방식을 사용할때 Comoponent를 쓰게되면 아래와 같이 작성을 해야한다. "이 패키지들의 component를 다 읽어서 빈으로 등록해줘!" Bean Configuration 자바파일을 이용할때는 아래와 같이 작성해야 한다. 컴포넌트 스캔은 하나의 이름만 지정 가능하기 때문에, 여러이름을 지정하고 싶으면 xml파일이나 자바파일에 수동으로 등록해줘야 한다. ..

[섹션4][Annotation] 16강~19강 init, destroy 메서드/ 주입/ 어노테이션을 이용한 빈 설정/ JSR-250어노테이션

16. init, destroy 메서드 xml파일로 init, destroy메서드등록과 자바파일로 등록하는법 비교해보면 아래와 같다. 17. 주입 xml파일로 자동주입등록과 자바파일로 등록하는법 비교해보면 아래와 같다. 18. 어노테이션을 이용한 빈 설정 어차피 만들어질 빈클래스를 xml이나 자바파일에 설정하지말고, 해당 파일(TestBean1)에서 어노테이션으로 간편하게 설정해보자. 우선 아래와 같이 xml파일에 context 네임스페이스를 추가 해줘야 한다. 1) @Required 반드시 주입해야 할 프로퍼티가 있다면 @Required 를 붙여준다. 그러나 스프링 5.1 부터는 @Required를 붙여도 아무런 일이 일어나지 않는다. 반드시 주입해야 할 프로퍼티는 생성자를 통해 주입받는 것을 사용해야..

[섹션4][Annotation] 15강 Java코드를 활용한 Bean등록

15. 빈 등록 지금까지는 xml파일에 빈을 등록했었다. 이제부터는 자바파일에 빈 등록을 배워보자. xml으로 빈을 정의하는것과 자바파일로 빈을 정의하는 것을 비교해보자. 자바 파일은 @Configuration 을 붙여주며 시작한다. 자바파일이 xml파일 역할을 하는것이라고 명시해 주는 것이다. 자바파일로 빈을 정의할때는 , 메소드 형태로 빈을 만들어주는데, 이때 메소드 이름이 빈의 id값이 된다. 여기서는 java1이 id값이 된다. main클래스에서 불러올때 java1을 호출해 주는 것이다. 메인클래스 자바파일 호출하는 괄호안에 BeanConfigClass.class를 적으면 BeanConfigClass.java 파일에 세팅해놓은 @Bean 을 찾아서 , 아 여기에서 빈을 정의했구나 ! 판단하고 이 ..

[섹션3][DI] 14강 자동 주입

14. 자동 주입 지금까지 Bean을 정의할 때 주입할 객체는 생성자를 통한 주입이나 setter를 통한 주입을 사용했다. 스프링에서는 객체를 주입할 때 자동으로 주입될 수 있도록 설정할 수 있는데, 이름, 타입, 생성자를 통해 가능하며 이것을 auto wire라고 한다. 기본자료형(정수, 실수, 문자열)은 자동주입이 불가능하며 기존의 방식으로 주입해야 한다. 자동주입은 객체만 가능하다. 1) 이름을 통한 주입 xml파일에 id값을 지정해주면 , 변수에 바로 넣는게 아니고 setter메소드를 호출하여 주입해준다. 일반주입과 이름을 통한 자동주입을 비교해보자. 2) 타입을 통한 주입 타입을 통한 자동주입은 , 타입만 같으면 무조건 주입하기 때문에 id값은 생략 가능하다. 3) 생성자를 통한 주입 이렇게 x..

[섹션3][DI] 13강 컬렉션 주입

13. 컬렉션 주입 1) List 주입 String, Integer로 이루어진 List컬렉션을 주입해보자. 아래처럼 순으로 값 주기 이번에는 객체로 이루어진 List를 주입해보자. 객체 만들어서 주입 3줄 / 미리 만들어진 빈객체 주입 3줄 property - list - bean class / property - list - ref bean 순으로 작성! 2) Set 주입 set는 중복데이터를 저장하지 않는다. beans.xml에 같은 String, Integer데이터를 넣어도 중복값은 출력되지 않는다. scope를 프로토타입으로 설정해도, 주소가 다른 객체가 생성이 되는데 스프링은 객체의 주소가 달라도 id값이 같으면 중복으로 인지하여 중복값이 출력 되지 않도록 한다. 객체를 계속 생성하고 싶으면 6..

[섹션3][DI] 11~12강 생성자를 통한 주입/ Setter메서드를 통한 주입

11. 생성자를 통한 주입 의존성 주입(Dependency Injection) - Bean객체를 생성할 때 Bean객체가 관리할 값이나 객체를 주입하는 것 - Bean객체 생성후 Bean객체가 가질 기본값을 자바코드로 설정하는 것이 아닌 Bean을 정의하는 xml코드에서 정의하는것 먼저 매개변수가 1개인 자바코드와 생성자주입을 비교해보자. 일반 자바코드에서는 TestBean.java에 int data1를 매개변수로 갖는 생성자를 1개 생성한 후, MainClass.java에서 TestBean t2 = new TestBean(100); 으로 생성자를 호출했다. 생성자를 통한 주입은 TestBean.java에 int data1를 매개변수로 갖는 생성자를 1개 생성한 후(동일), beans.xml에 bean정..

[섹션2][IoC] 07~10강 IoC컨테이너/ 빈 객체 생성하기/ 빈 객체의 생명주기/ BeanPostProcessor

07. IoC 컨테이너 IoC(Inversion of Control, 제어 역전) 일반적으로 프로그래밍을 작성할 때 프로그램이 흘러가는 흐름이나 생성되는 객체에 대한 제어권을 개발자가 가지는 것과 달리 프레임워크가 가지는 것을 의미한다. 개발자가 직접 객체 생성에 관련된 코드를 작성하는 것이 아닌, 프레임워크가 사용하는 파일에 작성하면 이를 토대로 프레임워크가 객체를 생성하여 반환하고 코드가 동작하는 순서를 결정하게 된다. POJO Class(Plain Old Java Object) 자바 모델이나, 기능, 프레임워크 등에 따르지 않고 홀로 독립적이며 단순한 기능만을 가진 객체들을 의미한다. 자바에서는 이러한 객체들을 Bean이라고 부른다. POPO(PHP), POCO(닷넷 프레임워크), PODS(C++)..

[섹션1] 04~06강 자바 프로젝트 만들기/ 다형성 사용하기/ 스프링 프레임워크 사용하기

04. 자바 프로젝트 만들기 원래 지금까지 하던대로 자바 프로젝트를 만들어 보자. 평소대로라면, ① 클래스가지고 객체를 먼저 생성하고, ② 해당 객체의 주소값을 참조변수에 넣어주고 , ③그 참조변수를 통해서 뭔가 작업을 하는 식으로 보통 개발을 한다. package kr.co.softcampus.beans; public class HelloWorldEn { public void sayHello() { System.out.println("Hi~~~"); } } package kr.co.softcampus.main; import kr.co.softcampus.beans.HelloWorldEn; import kr.co.softcampus.beans.HelloWorldKo; public class MainCla..

ch.02 Spring MVC 09~12 관심사의 분리와 MVC패턴

09. 관심사의 분리와 MVC패턴 - 이론 OOP 5대설계원칙 - SOLID 1. SRP - 단일책임의 원칙 : 하나의 메서드는 하나의 책임(관심사)만 진다. 2~5번째는 나중에 배울 것이다. 관심사가 분리되지 않은 YoilTeller코드 앞에서 만들었던 YoilTeller코드를 보자. 크게 입력코드, 요일계산하는코드, 출력코드 이렇게 3부분으로 해야할 작업(관심사)이 나뉘어 있다! 그렇게되면 바로 위의 설계원칙인 SRP-단일책임의 원칙에 위배된다. 하나의 main메서드에서 3가지 작업을 하고 있다..!!! 어떻게 해결할 것인가? 객체지향적코딩을 하려면 코드의 분리를 잘 해야한다. 1) 관심사 분리 2) 변하는것, (자주)변하지않는것의 분리 3) 중복코드의 분리 공통 코드의 분리 - 입력의 분리 입력부분..

ch.02 Spring MVC 07~08 HTTP 요청과 응답, 텍스트와 바이너리, MIME, Base64

07. HTTP 요청과 응답 - 이론 HTTP란? Hyper Text Transfer Protocol. 하이퍼텍스트(html)를 전송하기위한 규칙. 세가지 특징이 있다. 1) 사람이 읽을 수 있는 텍스트 기반의 프로토콜이다. 2) 상태를 유지하지 않는다(stateless). 클라이언트 정보를 저장x -> 보완하기위해 쿠키 & 세션을 사용한다. 3) 확장가능하다 - 커스텀 헤더(header) 추가가능. 표준에 정해놓지 않은 헤더를 맘대로 추가 가능하다. HTTP 요청, 응답 메시지 우리는 단순히 URL을 입력할 뿐이지만, 브라우저가 알아서 요청메시지를 만들어준다. HTTP 메시지 - 응답메시지 HTTP 메시지 - 요청메시지(GET/ POST) 08. 텍스트와 바이너리, MIME, Base64 바이너리 파일..

ch.02 Spring MVC 05~06 클라이언트와 서버, 설정파일(server.xml, web.xml)

05. 클라이언트와 서버 서버의 포트 한대의 서버컴퓨터(IP주소 1개)안의 여러 서버 프로그램이 있을 때, 클라이언트가 요청을 했을때 원하는 서버를 찾기위해 포트번호도 추가로 적어줘야 한다. 웹서버는 기본적으로 80이고, 80은 생략 가능하다. 미리 서버가 포트에서 기다리고(Listening)있어야 클라이언트 요청과 잘 연결(binding)된다. 포트번호 0~1023번까지는 예약된 번호여서 사용불가, 총 65535개의 포트를 사용할 수 있다. WAS란? 웹 어플리케이션 서버(WAS) : 웹 어플리케이션을 서비스하는 서버. 서버에 프로그램을 설치해놓고, 클라이언트가 이 프로그램을 사용할수 있게 해준다. 프로그램을 클라이언트에 설치할수도 있지만, 서버에 설치하는 이유는 ? 예전에는 각 컴퓨터에 프로그램을 다..

ch.02 Spring MVC 03~04 HTTP 요청과 응답

03. HTTP 요청과 응답 - 실습 지금까지는 원격프로그램의 결과를 톰캣의 콘솔에 출력했었는데, 이번엔 톰캣이 아니라 브라우저에 출력을 해보자! 연월일을 입력시 요일을 알려주는 프로그램 (클래스 YoilTeller)을 만들어 보자. package com.spring.fastcampus.ch2; import java.util.Calendar; //연월일을 입력시 요일을 알려주는 프로그램 public class YoilTeller { public static void main(String[] args) { //1. 입력 String year = args[0]; String month = args[1]; String day = args[2]; int yyyy = Integer.parseInt(year); i..

ch.02 Spring MVC 01~02 원격프로그램의 실행, AWS에 배포하기

01. 원격 프로그램의 실행 원격 프로그램을 실행시키려면 2가지가 필요하다. 브라우저와 WAS(톰캣)이다. 브라우저URL에 IP주소를 입력하면 WAS가 8080포트를 호출해서 프로그램을 실행시키는 것이다. 여기서 아무 프로그램이나 실행시킬수 없기때문에 두가지가 필요하다. 1. 프로그램 등록 (@Controller 어노테이션을 클래스 앞에 붙여준다.) 2. URL과 프로그램을 연결 (@RequestMapping 어노테이션을 호출하려는 메서드 앞에 붙여주고, URL키워드를 써준다.) 먼저, ch2 project를 만들어보자. src/main/java폴더 안에는 자동으로 HomeController.java파일이 들어가있다. 열어보면, 이렇게 필수 두가지 어노테이션이 잘 들어가 있다. package com.fa..

ch.01 Spring시작하기

01. Spring Framework는 무엇일까? 강의 내용 1. Spring Framework를 배울 준비 - 개발도구, 설치, 설정 2. Spring MVC - 웹의 기초, HTTP, TCP, IP 3. Spring DI 4. Spring AOP | Spring의 핵심 개념 5. MyBatis - DB 6. REST Api 7. Spring MVC로 웹사이트 만들어 보기 with AWS 수업자료 : https://github.com/castello/spring_basic 02. Spring 개발도구 소개 1. 자바개발도구 : JAVA 11 (Java 11부터는 Oracle JDK와 open JDK가 동일) - JDK 2가지 1) Oracle JDK (공식) 2) open JDK : IBM, RedHa..