Spring MVC - 유효 범위(scope)와 속성(attribute)
2022. 9. 17. 13:24
Spring/Ch2. Spring MVC
유효 범위(scope)와 속성(attribute) 4개 영역 저장소 기본 객체 유효 범위 설명 pageContext 1개 JSP 페이지 JSP페이지의 시작부터 끝까지. 해당 JSP 내부에서만 접근가능. 페이지 당 1개 request 1개 이상 JSP페이지 요청의 시작부터 응답까지. 다른 JSP로 전달 가능. 요청마다 1개 session n개 JSP페이지 session의 시작부터 종료까지(로그인~로그아웃). 클라이언트 마다 1개 application context 전체 Web Application 의 시작부터 종료까지. context 내부 어디서나 접근 가능 모든 클라이언트가 공유. context마다 1개 속성 관련 메서드 설명 void setAttribute(String name, Object value..
Spring MVC - JSP, Servlet
2022. 9. 16. 18:45
Spring/Ch2. Spring MVC
Servlet vs Controller Servlet 은 class 마다 @WebServlet 을 사용해야 하기 때문에 클래스가 무한정 늘어나는 단점이 있다. 또한 HttpServlet 을 상속 받아야 하고 Service 메서드를 override 받아야 하기 때문에 한계가 명확하다. 파라미터 또한 HttpServletRequest, HttpServletResponse 를 모두 받아야 한다. 이런 점에서 Controller 가 더 발전된 형태이다. Servlet 의 생성주기 package com.fastcampus.app; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebS..
Spring MVC - servlet-context.xml
2022. 9. 16. 17:21
Spring/Ch2. Spring MVC
jsp 경로 지정 반환타입이 String 이면 /WEB-INF/views/yoil.jsp 반환 @Controller public class YoilTellerMVC { @RequestMapping("/getYoilMVC") // http://localhost/app/getYoilMVC?year=2021&month=10&day=1 public String main(int year, int month, int day, Model model) throws IOException { if(!isValid(year, month, day)) { return "yoilError"; } // 2. 처리 char yoil = getYoil(year, month, day); model.addAttribute("year", ..
Spring MVC - 관심사의 분리
2022. 9. 15. 22:16
Spring/Ch2. Spring MVC
객체 지향 프로그래밍 5대 원칙 SOLID SRP(단일 책임의 원칙), Single Responsibility Priciple OCP(개방-폐쇄 원칙), Open-Closed Priciple LSP(리스코프 치환 원칙), Liskov Substitution Priciple ISP(인터페이스 분리 원칙), Interface segregation principle DIP(의존 역전 원칙), Dependency Inversion Priciple SRP - 단일 책임의 원칙 하나의 메서드는 하나의 책임(관심사) 분리 : 1. 관심사 2. 변하는 것, 변하지 않는 것 3. 중복 코드 공통 코드의 분리 - 입력의 분리
Spring MVC - HTTP(Hyper Text Transfer Protocol)란?
2022. 9. 15. 21:30
Spring/Ch2. Spring MVC
HTTP 단순하고 읽기 쉽다. - 텍스트 기반의 프로토콜 상태를 유지하지 않는다. - Stateless : 클라이언트 정보를 저장 하지 않아. 같은 클라이언트가 요청한 것인지 구별 하지 못함 해결 방법을 쿠키와 세션을 사용 확장 가능하다. - 커스텀 헤더(header) 추가 가능 : 대소문자 구분 X, 공백 무시 HTTP 메서드 - GET, POST GET POST - 서버의 리소스를 가져오기 위해 설계 - QUERY STRING 을 통해 데이터를 전달(소용량) - URL 에 데이터 노출 되므로 보안에 취약 - 데이터 공유에 유리 ex. 검색엔진에서 검색단어 전송에 이용 - 서버에 데이터를 올리기 위해 설계됨 - 전송 데이터 크기에 제한이 없음(대용량) - 데이터를 요청 메시지에 body 에 담아 전송 ..
Spring MVC - server.xml, web.xml
2022. 9. 15. 17:15
Spring/Ch2. Spring MVC
톰캣설치경로/conf/server.xml : Tomcat 서버 설정 파일 톰캣설치경로/conf/web.xml : Tomcat의 모든 web app의 공통 설정 웹앱이름/WEB_INF/web.xml : web app의 개별 설정 sever.xml Server(Tomcat) --> Service(catarina) Connector port 를 80으로 하면 localhost:8080 에서 8080 안 써도 됨 Host web.xml(공통) 원격프로그램 1. 서블릿 등록 2. URL 연결 지금은 어노테이션으로 많이 함 1. 서블릿 등록 ==> @Controller default org.apache.catalina.servlets.DefaultServlet debug 0 listings false 1 2. UR..
중고헌터 - mybatis 설정
2022. 9. 15. 15:06
프로젝트/중고헌터
maven repository 에서 mybatis 다운 https://mvnrepository.com/search?q=mybatis 1. MyBatis 3.5.9 버전 다운 2. MyBatis 2.0.7 버전 다운 pom.xml 태그에 주입 1. mybatis SqlSessionFactory - SqlSession 을 생성해서 제공 SqlSession - SQL 명령을 수행하는데 필요한 메서드 제공 2. mybatis spring SqlSessionFactoryBean - SqlSessionFactory를 Spring 에서 사용하기 위한 빈 SqlSessionTemplate - SQL 명령을 수행 하는데 필요한 메서드 제공. thread-safe root.xml SqlSessionTemplate 이 th..
중고헌터 - MySQL 연결
2022. 9. 15. 14:22
프로젝트/중고헌터
MySQL Workbench 를 이용해 usedhunter스키마를 만들자 테이블은 임시로 user_info로 만들었다. 이후에 추가하자 intellij 에서 데이터 베이스 연결 MySQL 포트, user와 비번, 데이터베이스 이름을 적어주자 창 하단에 Test Connection을 눌러 연결 유무를 확인하자 데이터 베이스가 잘 추가 되었다. board 테이블 만들자 create table board ( bno int auto_increment, title varchar(100) not null, content TEXT not null, writer varchar(30) not null, view_cnt int default 0 null, comment_cnt int default 0 null, reg_d..
Spring - pom.xml
2022. 9. 14. 09:33
Spring
POM( Project Object Model) 프로젝트의 구조와 내용을 설명, 프로젝트 관리 및 빌드에 필요한 환경 설정, 의존성 관리 4.0.0 com.mycompany.app my-app 1 라이브러리 경로 C:\Documents and Settings\Administrator\.m2\repository ※ 모듈의 라이브러리 파일명은 artifactId + "-" + 버전명 +".jar" 로 표시
Spring - web.xml
2022. 9. 13. 09:18
Spring
index.jsp 추가 프로젝트를 처음 생성하게 되면 기본적으로 views 폴더에 있는 home.jsp가 실행됩니다. 그렇지만 일반적으로 웹 프로그램이 시작되면 index 페이지가 기본값으로 보여지도록 약속되어 있습니다. 이를 위해 index.jsp를 추가합니다. web.xml 설정 변경 web.xml은 WAS가 처음 구동될 때, WEB-INF 디렉토리에 있는 web.xml을 읽고 웹 애플리케이션 설정을 구성합니다. web.xml 통해서, 이 프로젝트가 시작되면 index.jsp를 호출하도록 변경할 수 있습니다. web.xml web.xml 은 서블릿 역활을 하는 설정 파일의 경로를 지정할 수 있습니다. servlet-context.xml : 서버로 들어오는 모든 요청을 처리 후, 알맞은 컨트롤러로 연결..
Spring - Maven
2022. 9. 13. 09:13
Spring
Spring Legacy Project -> Spring MVC Project 생성 후 기본 구조 Maven 이란? Apache Project 중 프로젝트의 라이브러리를 관리하는 기능을 합니다. 기존에는 라이브러리를 다운받아서 이클립스에서 WEB-INF/lib 안에 라이브러리를 추가해서 사용하였으나, 관리에 어려움이 있었습니다.메이븐을 사용할 경우, Pom.xml 파일에 라는 태그를 추가함으로써 자동으로 찾아서 추가해줍니다. 메이븐은 스프링 안의 Pom.xml 에 필요한 라이브러리를 선언하게 되면 기본적으로 {C:\Users\사용자}\.m2\repository 에 다운로드 됩니다. Maven Repository 변경 Eclipse MarketPlace 에서 STS3 을 다운로드 받았다면 , 아래와 같은 ..
STS - sts3 설치
2022. 9. 13. 05:42
설정/STS
https://github.com/spring-attic/toolsuite-distribution/wiki/Spring-Tool-Suite-3 GitHub - spring-attic/toolsuite-distribution: the distribution build for the Spring Tool Suite and the Groovy/Grails Tool Suite the distribution build for the Spring Tool Suite and the Groovy/Grails Tool Suite - GitHub - spring-attic/toolsuite-distribution: the distribution build for the Spring Tool Suite and the Gro..
eclipse - eclipse, sts4 설치
2022. 9. 13. 05:36
설정/Eclipse
설치파일 다운로드 https://spring.io/tools#main Spring Tools 4 is the next generation of Spring tooling Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE. spring.io https://www.eclipse.org/downloads/ Eclipse Downloads | The Eclipse Foundation The Eclipse Foundation - h..
Spring - Spring DI(1)
2022. 9. 13. 03:03
Spring/Ch3. Spring DI, AOP
변경에 유리한 코드 분리 하자 1. 변하는 것, 변하지 않는 것 2. 관심사 다른 것 3. 중복 코드(ex : AOP) Main1.java package com.fastcampus.ch3.diCopy1; import java.io.FileReader; import java.util.Properties; class Car {} class SportsCar extends Car {} class Truck extends Car{} public class Main1 { public static void main(String[] args) { Car car = new SportsCar(); System.out.println("car = " + car); } static Car getCar() throws Exce..
Spring Boot - SQL 설정(hibernate, logging)
2022. 9. 13. 00:17
Spring Boot
레거시 프로그램의 경우 StringBuilder를 통해 쿼리문을 문자열로 만들어서 실행하는 코드 StringBuilder sb = new StringBuilder(some_appropriate_size); sb.append("select id1, id2, id3, id4, ... "); sb.append(id2); ... sb.append(" from "); ... sb.append(" where "); ... sb.append(" order by "); ... return sb.toString(); hibernate.show_sql spring.jpa.properties.hibernate.show_sql=true spring.jpa.properties.hibernate.show-sql=true http..
JPA - 권한에 맞는 화면 구성 및 API 호출
2022. 9. 13. 00:11
JPA
Admin 권한을 가진 User가 게시글 삭제 가능한 기능 추가 삭제 버튼 추가 취소 삭제 확인 Thymeleaf sec role 기능 사용 취소 삭제 확인
JPA - Jpa로 조회방법(FetchType) 설정하기
2022. 9. 12. 20:15
JPA
N+1 문제 User 를 조회 시 board 도 함께 조회가 된다. @OneToMany(mappedBy = "user", fetch = FetchType.EAGER) @JsonIgnore private List boards = new ArrayList(); Hibernate: select user0_.id as id1_2_, user0_.enabled as enabled2_2_, user0_.password as password3_2_, user0_.username as username4_2_ from user user0_ Hibernate: select boards0_.user_id as user_id4_0_0_, boards0_.id as id1_0_0_, boards0_.id as id1_0_1_,..
JPA - Jpa를 이용하여 @OneToMany 관계 설정하기
2022. 9. 11. 18:59
JPA
연관관계 설정 board 테이블에 user_id 컬럼 생성 후 user 테이블의 외래키로 설정 Board.java package com.toy.board.domain; import lombok.Data; import javax.persistence.*; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; @Entity @Data public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotNull @Size(min=2, max=30, message = "제목은 2자이상 30자 이하입니다."..
JPA - 다대다 관계 한계 극복
2022. 9. 11. 11:57
JPA
package com.toy.board.domain; import lombok.Data; import javax.persistence.*; import java.util.List; @Data @Entity public class Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToMany(mappedBy = "roles") private List users; } package com.toy.board.domain; import lombok.Data; import javax.persistence.*; import java.util.ArrayList; import ja..
JPA - Spring Security를 이용한 로그인 처리
2022. 9. 10. 19:15
JPA
로그인 기능 만들기 spring.io 에서 의존성 복사 https://spring.io/guides/gs/securing-web/ Securing a Web Application this guide is designed to get you productive as quickly as possible and using the latest Spring project releases and techniques as recommended by the Spring team spring.io implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.security:spring-sec..