서버/Spring boot 15

#CORS 설정하기

#SOP(Same-Origin Policy) 같은 Origin에만 요청을 보낼 수 있게 제한하는 보안 정책 Origin의 구성 URI Schema(ex. http, https) Hostname(ex. localhost, naver.com) Port(ex. 80, 8080) 이 중에 하나라도 구성이 다르면 SOP 정책에 걸림! #CORS(Cross-Origin Resource Sharing) 서로 다른 Origin끼리 요청을 주고 받을 수 있게 정해둔 표준 1. Annotation 이용하기 origins, methods, maxAge, allowedHeaders를 각각 지정할 수 있다. 메소드에도 지정가능. @GetMapping("/api/get") @CrossOrigin(origins = "*", all..

서버/Spring boot 2022.02.12

#에러처리

예측이 가능한 에러를 exception처리를 하고 나서 HTTP status와 errorMessage를 보내줄 수 있다. 예를 들어, 클라이언트에서 입력값과 관련된 에러는 500 Internel Server Error가 아니라 400 Bad Request + 에러메세지를 보내서 어떤 부분에서 에러가 난 것인지 알려줄 수 있다. 프론트에서는 이 메세지를 활용해 팝업 등으로 보여줄 수 있다. 스프링에서 제공하는 ResponseEntity를 사용하면 HTTP status Code, HTTP headers, HTTP body를 선언할 수 있다. 그리고 이 클래스를 이용하여 원하는 내용을 클라이언트로 보낼 수 있다. package com.sparta.week03project.exception; import lom..

서버/Spring boot 2022.02.07

#AOP

#AOP란? 각 API별 수행해야 할 비즈니스 로직인 핵심기능 외에 부가기능이 있을 수 있다(로그 기록, API 수행시간 저장 등) AOP(Aspect Oriented Programming)을 통해 부가기능을 모듈화 할 수 있다. 스프링에서 제공하는 AOP를 사용해 부가기능을 별도로 설계, 구현할 수 있다. #스프링 AOP 부가기능을 제공하는 annotation을 사용하면 포인트컷에 맞춰 핵심기능을 구현하기 전/후에 부가기능이 실행된다. DispatcherServlet에서는 이전과 동일하게 controller로 요청을 보내지만 중간에 AOP 프록시 객체가 중간에 삽입되어 부가기능이 실행된다. #스프링 AOP 어노테이션 @Aspect : 스프링 빈(Bean) 클래스에만 적용이 가능하다. @Aspect @C..

서버/Spring boot 2022.02.07

#ORM, JPA, Spring data JPA, SQL

#SQL(Structured Query Language) 관계형 데이터베이스 관리시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. 데이터 정의 언어(DDL: Data Definition Language) 데이터 조작 언어(DML : Data Manipulation Language) 데이터 제어 언어(DCL: Data Control Language) #ORM 객체(Object)라는 개념을 구현한 클래스와 관계형(Relational) 데이터베이스에서 쓰이는 데이터인 테이블을 자동으로 연결(Mapping)하는 것을 의미한다. 클래스와 테이블은 서로 호환가능성을 두고 만들어..

서버/Spring boot 2022.02.05

#Spring security

#설정 build.gradle // 스프링 시큐리티 implementation 'org.springframework.boot:spring-boot-starter-security'​ 스프링 시큐리티 활성화 : 기존의 configure을 override해서 원하는 기능으로 구현 import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org...

서버/Spring boot 2022.01.28

#DI, IoC, Bean

#DI 강한 결합이란? 다음과 같이 각각 새로운(new) 생성자를 만들어 구현하는 것. 문제점 : 일부 변경시 모든 코드를 다 수정해주어야 함 → 느슨한 결합을 지향 느슨한 결합 새로운 생성자를 만드는 것이 아니라 이미 생성된 객체를 가져다 씀! Repository에 객체 repository1를 만들고 Service는 이 객체를, 그리고 Controller는 이 service객체를 가져다 사용한다. Class Service1 { private final Repository1 repitory1; // repository1 객체 사용 public Service1(Repository1 repository1) { this.repository1 = new Repository1(); this.repository1 ..

서버/Spring boot 2022.01.28

#Spring MVC

MVC? MVC(Model - View - Controller) 디자인 패턴을 말한다. Controller의 장점 HTTP request, response 처리를 위해 매번 작성해 줘야하는 중복코드들을 생략할 수 있다. API마다 파일을 만들 필요가 없고, 유사한 성격의 API를 하나의 Controller로 관리할 수 있다. Controller 내 메소드 명도 자유롭게 사용할 수 있다(Handler mapping에서 API - Controller 매칭) 서버에서 HTML을 내려주는 경우 1. 정적(static) 웹페이지 Controller는 요청을 Model로 받아서 처리하고, Client에게 View(정적 웹페이지, HTML)을 내려준다. 2. 동적(dynamic) 웹페이지 Controller는 요청을..

서버/Spring boot 2022.01.26

#Model과 ModelAndView

게시판을 만들면서 Model 객체를 사용했었다. controller에서 다음과 같이 Model 객체를 사용해면 addAtrribute를 사용하여 데이터를 저장하고 이 데이터를 view로 보내준다. view는 thymeleaf를 사용해서 html 내의 원하는 곳에 데이터를 뿌려준다. //게시글 상세보기 @GetMapping("/post/{id}") public String detail(@PathVariable("id") Long id, Model model) { BoardDto boardDto = boardService.getBoard(id); model.addAttribute("boardDto", boardDto); return "board/detail"; } 처음에는 thymeleaf를 쓰는 거랑 Mo..

서버/Spring boot 2022.01.26

#자바에서 JSON형식 사용하기

자바에서 JSON을 사용하기 위해서는 JSONObject, JSONArray 클래스가 필요하다 https://mvnrepository.com/에서 필요한 라이브러리를 임포트할 수 있다. JSON을 검색하고 JAVA에서 사용이 가장 많은 라이브러리를 찾는다. Gradle의 경우 아래와 같이 해당 내용을 복사해서 build.gradle>dependencies에 추가하고 Run을 한다. 우측 Gradle에서 새로고침을 한다. 실제 필요한 데이터를 추출하는 과정은 다음과 같다. public static void main(String[] args) { NaverShopSearch naverShopSearch = new NaverShopSearch(); String result = naverShopSearch.se..

서버/Spring boot 2022.01.25