Spring 51

시간 측정하는 간단한 aop

시스템이 느리거나 각 로직별 시간 측정이 필요한 경우 aop 를 사용하여 측정 가능 노가다 안해도 됌 package com.example.whystd.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; // Aspect 를 적어줘야 aop로 사용가능 // Component 사용하면 Component 스캔되어 빈 등록 @Aspect @Component public class TimeTraceAop { @Around("executio..

Spring/Spring boot 2022.12.22

스프링 빈 자바코드로 직접 설정

@Configuration public class SpringConfig { /* * 스프링 빈을 직접 설정 할 때의 장점 * : db 를 변경할때 repository 만 변경해주면 나머지 * 코드를 손대지 않고 변경 가능. * */ @Bean public MemberService memberService() { return new MemberService(memberRepository()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } /* 아래 처럼 변경해주면 끝 @Bean public MemberRepository memberRepository() { return new DbMem..

OAuth 개념

OAuth Open Authorization : 인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 들이 자신들의 정보에 대해 웹사이트나 어플에 정급 권한을 부여하는 공통적인 수단. 한마디로 한 사이트에서 공유를 시작하면 다른 곳에서 따로 인증을 안받아도 된다는 소리임 페이스북 - 인스타 느낌이라고 생각하면 편할듯 OAuth vs OpenID OAuth : 사용자가 누구인지 인증하는것이 아닌, 요청이 권한이 있는지를 확인하는 인가 프로토콜 OpenID : 사용자가 누구인지 인증하는것 용어 사용자 (user) : 서비스 제공자와 소비자를 사용하는 계정을 가지고 있는 개인 소비자 (consumer) : Open API 를 이용하여 개발된 OAuth 를 사용하여 서비스 제공자에게 접근하는 웹사이트 또는 ..

Security 권한처리하기

시작하기 전에 전에 만든걸로 회원 가입을 해주자 manaer admin 현재 권한은 전부 ROLE_USER ! 해당 권한의 페이지로 잘 들어가지는지 확인을 위해 db에서 직접 권한을 수정해주자 가입시에 권한은 따로 만들면 된다 UPDATE user SET role = 'ROLE_MANAGER' WHERE id = 2; UPDATE user SET role = 'ROLE_ADMIN' WHERE id = 3; id는 해당 데이터에 맞게 넣어주면 된다. 그후 manager 로 로그인 후 /manager 을 가보면 페이지를 만들지 않아서 그렇지 밑에 type 과 status 를 보면 제대로 접속이 된걸 확인 할 수 있다 하지만 admin 을 가보면 어떨까 당연히 권한이 없어서 안됨 SecurityConfig p..

security 로 간단한 회원가입과 비밀번호 암호화

Spring boot template 종속성 Srping Boot DevTools Lombok Spring Data JPA mariaDB Driver Spring Security Mustache Spring Web 간단하게 웹에서 회원가입 (비밀번호 암호화) , 페이지 인증처리, JPA 테이블 생성, bean 으로 Ioc 설정을 해보자 완성본을 올리는거라 순서는 안맞음 indexController package com.example.security.controller; import com.example.security.model.User; import com.example.security.repository.UserRepository; import org.springframework.beans.facto..

JPA 로 데이터 액세스

Spring Data JPA 를 사용하여 관계형 데이터베이스에 데이터를 저장하고 검색하는 애플리케이션을 구축해보자 종속성 Spring Data JPA H2 Database Entity 생성 package com.example.accessingdatajpa; import lombok.Data; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; // @Table 주석이 없으므로 이 Entity 는 Customer 이라는 테이블에 매핑된다고 가정 @Entity @Data public class Custom..

Spring/Spring boot 2022.08.17

mariadb로 데이터 액세스

Mariadb 데이터베이스를 만들고 Spring boot 애플리케이션 구축해서 자동으로 컬럼을 생성하고 해당 db와 연동을 해보자 종속성 Spring Web Spring Data JPA Mariadb dirver application.properties spring.jpa.hibernate.ddl-auto=create // create로 설정한 이유 : 데이터베이스 구조가 없음 텅빈 깡통이여서 spring.datasource.url=jdbc:mariadb://localhost:3306/[db이름]?characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=[스키마이름] spring.datasource.password=[비밀번호] sprin..

Spring/Spring boot 2022.08.16

Restful 웹 서비스 구축

http get 요청을 수락하는 서비스를 만들어보자 프로젝트를 만들고 종속성에 Spring Web 을 추가 { "id": 1, "content": "Hello, World!" } 쿼리 매개변수를 보내면? 요런 JSON 데이터를 반환할것임 src/main/java/에 객체를 하나 생성 package com.example.restservice; import lombok.Data; @Data public class Greeting { private final long id; private final String content; } Jackson JSON 라이브러리가 자동으로 JSON 형태로 자동 마샬링 해준다 Jackson Starter에 기본적으로 포함된 기능 리소스 컨트롤러 생성 package com.ex..

Spring/Spring boot 2022.08.16

스프링부트 개념정리 2

스프링부트 동작원리 내장 톰켓을 가지고 있다 socket : 운영체제가 가지고 있는 것 통신 : 연결시 스레드를 생성 > 연결이 계속 유지 > 부하가 심함 http 통신 : 문서를 전달하는 통신 / Stateless 방식 - 한번 연결후 응답을 하면 response 후 연결 끊음 - 부하가 적지만 다시 연결되면 새로운 것으로 인식 (같은 곳에서 요청을 하더라도 전에 요청했던 곳인지 알 수 없음) - 문서전달의 목적으로 만들어짐 html(확장자) 톰켓 소켓을 불러서 사용 (system call) http 기반 = 소켓 톰켓과 웹서버의 차이 ? 웹서버 : url 의 마지막 l = location static 자원 : 정적인 자원 아파치 = 요청을 받고 응답을함 (HTML, CSS, PNG... ) 톰켓 : ..

Spring/Spring boot 2022.07.27

스프링부트 개념정리

class - 설계도 (의자 설계도) abstract class - 추상적 설계도 (가구 설계) interface - 실체화가 된 것 (의자) ioc - 제어의 역전 (주도권이 스프링에 있음) IoC 컨테이너 - 제어의 역전 누누 클래스를 만들었는데 다른곳에서 누누를 쓰고 싶을때 ? 스프링이 객체를 스캔해서 heap 메모리에 저장해둔다 스프링이 객체를 관리 누누를 하나만 만들어서 가져가서 씀 DI dependency injectsion 의존성 주입 IOC 에서 스캔해준 하나의 object를 가져가서 씀 heap 메모리에 A라는 [이름을 가진] 클래스가 없다면 해당 변수에는 null 이 아니고 해당 type를 heap 에서 찾아서 값을 넣어준다. 그것이 DI 많은 필터를 가지고 있다 web.xml 은 필터..

Spring/Spring boot 2022.07.26

Email 보내기 2탄

옛날에 한번 jsp 로 이메일 보내기 글을 쓴적있다. 근데 그냥 2탄으로 한번 써본다. 재공부~ 지금 만드는 이메일 전송법을 대충 설명하자면, 로그인시 해당 유저의 존재여부를 확인하고 있다면 인증코드를 발송하기 위함. 여튼 중요한것은 Email 보내는 거니까 거기에만 집중해보자. 일단 pom.xml 에 Email 을 보내기위한 dependency 를 추가해주자! 아 참고로 메이븐임.. com.sun.mail javax.mail 1.6.1 추가해주고 인텔리제이 기준 우측 상단에 메이븐 업데이트 버튼이 생성되는데 업데이트를 해주자 다음으로 root-context.xml 로 가서 Email 을 보내기 위한 bean 설정을 해주자. smtp true true true 본인의 이메일과 비밀번호를 입력하고 중요한 ..

<![CDATA[]]>

개발을 하다보면 쿼리에 비교연산자를 넣게 되는 경우가 많는데 마이바티스를 사용하면 xml에 일반 비교 연산을 넣게 되면 ex) A > B, A < B 등 안먹힌다 ㅇㅇ. 그럴땐 를 사용하자. 예시_1 SELECT TEST_COLUMN FROM TEST_TABLE WHERE TEST_COLUMN_NUM < 999 ㅇㅇ 이거 안먹힐거임 이렇게 하자 SELECT TEST_COLUMN FROM TEST_TABLE WHERE TEST_COLUMN_NUM 999 인텔리제이 경우 이렇게 파란색으로 나온다. 간지 추가적으로 볼거 있으면 여기로 가보자 https://en.wikipedia.org/wiki/CDATA#:~:text=The%20term%20CDATA%2C%20meaning%20character,a%20mor..

Spring/mybatis 2022.02.17

Spring message properties

spring framework 에서 사용하는 다국어 지원기능 일반적으로 하드코딩 식으로 다국어를 지원하려고 하면 일일이 변경해줘야 하는 상황이 발생하고 다국어를 지원 안하더라도 어떠한 하나의 단어를 변경해야 할 경우 모든 페이지를 찾아서 바꿔줘야하는 번거로움이 생긴다. 그럴때 Spring message 를 사용한다면 설정 파일에서 해당 단어를 찾아 바꿔주기만 한다면 모든 페이지에 적용이 가능하다. 따라서 spring message를 쓰자. 일일이 찾고 싶다면 말리지는 않겠다.. Spring 에서 제공하는 MessageSource 를 bean으로 등록해서 사용하면 관리가 편해지고 >웹어플리케이션의 리로딩 없이도 메시지 변경이 가능 하다고 한다. Spring 에서 제공하는 주요 Messagesource 구현..

Spring MVC Request life cycle

Spring MVC Request life cycle 공부를 하다보니 내가 구조를 잘못 알고 있는가 싶어서 다시 해봄 이거는 그냥 spring 기본 구조 처음부터 싹 다시 훑어봐야겠다 https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/mvc.html 17. Web MVC framework @RequestMapping(method = RequestMethod.POST) public String processSubmit(@ModelAttribute("pet") Pet pet, Model model, BindingResult result) { … } Note, that there is a Model paramet..

CORS (Cross-Origin Resource Sharing) 설정

이렇게 서버간의 통신을 할때 정책상으로 해당서버에 접근을 못하게 차단을 해버리는 일이 발생한다. 그럴때, 해결법. 1. dispatcher-servlet 에 해당 설정을 한다. Java class를 만드는 방법도 있고 따로 xml 파일을 만들어서 import 시키는 경우도 있는거 같은데 걍 간단하게 dispatcher-servlet에 이거만 넣자. 이거만 넣어주면 끝이다 ㅇㅇ.ㄹㅇㅋㅋ 근데 이러면 안됨 세부설정도 해줘야한다. mvc 설정이 안되있다면 추가해주자 (여기서 mvc만 긁어가면 된다.) 2. @CrossOrigin 어노테이션을 장착 여기서는 @CrossOrigin 어노테이션을 장착하겠따. 매우 간단히 빨간 박스자리에 넣기만 해도 된다. class 전체를 지정하겠다. 라면 class 위치 컨트롤러..

boot06 부트스트랩 이용한 게시판 만들기

기본 세팅 pm.xml nz.net.ultraq.thymeleaf thymeleaf-layout-dialect 2.5.3 com.querydsl querydsl-jpa 4.4.0 com.querydsl querydsl-apt 4.4.0 com.mysema.maven apt-maven-plugin 1.1.3 process target/generated-sources/java com.querydsl.apt.jpa.JPAAnnotationProcessor 플러그인을 추가하면 자동으로 생성된다. 안생긴다면 프로젝트의 메이븐을 업데이트! package com.bit.controller; import org.springframework.beans.factory.annotation.Autowired; import o..

JPA

페이징처리 https://gunju-ko.github.io/spring/2018/05/01/Spring-Data-JPA-Paging.html Spring Data JPA를 활용한 페이징 처리 Spring Data JPA를 이용한 페이징 처리 PagingAndSortingRepository PagingAndSortingRepository는 CrudRepository를 상속하고 있는 인터페이스이다. PagingAndSortingRepository는 페이징 처리를 위한 메소드를 제공하고 있다. p gunju-ko.github.io https://itmining.tistory.com/139 [Spring Boot] Pagination과 Sort 1. 개요 Pagination은 큰 데이터를 표현할 때 도움이 됩니..

boot04 회원게시판

spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/jpadb?useUnicode=yes&characterEncoding=UTF-8&useSSL=false spring.datasource.username=root spring.datasource.password=1234 #ddl : Data Definition Language : 데이터 정의 -> create #아래 코드는 JPA 코드 자동생성이라서 한번 생성시키고 주석처리 #spring.jpa.hibernate.ddl-auto=create spring.jpa.hibernate.ddl-auto=update #DDL ..