분류 전체보기
-
[Spring Boot] 스프링 부트에서 비밀번호 암호화하기Server/Spring REST API 2020. 8. 27. 17:59
이번 글에서는 비밀번호 암호화 개념에 대해 정리하고 스프링부트를 이용해서 비밀번호 암호화를 하여 DB에 저장하는 방법에 대해 정리해보려 한다. 단방향 해시 함수 보통 비밀번호를 저장하는 방법은 2가지 정도가 있다. 단순 텍스트(plain text) 단방향 해시 함수(one-way hash function)의 다이제스트(digest) 단순텍스트로 패스워드를 저장하는 것은 범죄를 저지르는 것이나 다름없다. DB가 해킹당하는 순간, 비밀번호를 그대로 해커들에게 넘겨주게 되기 때문이다. 그러면 DB를 해킹당하지 않으면 되지 않나? 라고 할 수 있다. 물론 애초에 DB를 해킹당하지 않도록 보안에 신경써야 겠지만 해야겠지만, 다양한 변수의 상황들이 존재하기 때문에 언제든 해킹 당할 가능성이 존재한다. 따라서 해시함..
-
[Spring] 스프링 웹 계층이란?Server/Spring MVC 2020. 8. 26. 10:44
이번 글에서는 스프링은 어떤 계층이 존재하는지와 계층의 역할을 무엇인지, 프로젝트시 패키지를 어떻게 나누는 것이 좋은지에 대해 정리해보려 한다. 스프링의 계층은 Presentation Layer, Business, Layer, Data Access Layer 크게 3개로 나눌 수 있다. 프레젠테이션 계층 - 브라우저상의 웹 클라이언트의 요청 및 응답을 처리 - 서비스계층, 데이터 엑세스 계층에서 발생하는 Exception을 처리 - @Controller 어노테이션을 사용하여 작성된 Controller 클래스가 이 계층에 속함 서비스 계층 - 애플리케이션 비즈니스 로직 처리와 비즈니스와 관련된 도메인 모델의 적합성 검증 - 트랜잭션 관리 - 프레젠테이션 계층과 데이터 엑세스 계층 사이를 연결하는 역할로서 ..
-
[Java] 빌더 패턴(Builder Pattern)Language/Java 2020. 8. 26. 01:47
1. 빌더 패턴(Builder pattern) Builder 패턴은 인스턴스를 생성할 때 생성자(Constructor)만을 통해서 생성하는데는 어려움이 있어서 고안된 패턴이다. 클래스에 생성자 인자가 많다면 Builder 패턴을 사용하면 좋다. 왜냐하면 생성자 인자가 너무 많다면 어떠한 인자가 어떠한 값을 나타내는지 알기 어렵기 때문이다. 코드를 보면서 이해해보자. public class User { private int userIdx; // 선택 private String name; // 필수 private String part; // 필수 private int age; // 선택 private String email; // 선택 } 위와 같은 User 클래스에서 필수적으로 받아야 하는 정보, 선택적으..
-
[Java] 내부(inner) 클래스와 내부(inner) static 클래스의 차이Language/Java 2020. 8. 25. 16:58
이번 글에서는 클래스 안에 클래스가 존재하는 경우에 대해서 정리해보려 한다. public class Test { class InnerClass { // InnerClass } static class InnerStaticClass { // static InnerClass } } 내부 클래스(Inner Class)란 위와 같이 클래스 안에 클래스가 존재하는 형태이다. 그러면 내부 클래스에서 static이 붙은 것과 붙지 않은 것의 차이점은 어떤 것일까? 라고 생각했을 때 나는 static이 붙었기 때문에 static 변수, static 메소드처럼 공유해서 사용하는 클래스인가? 라고 생각을 하였다. 하지만 나의 생각은 누구나 한번 쯤 할만한 잘못된 생각이었다. 이유가 무엇인지 알아보자. 1. 내부 클래스 pu..
-
[Spring Boot] 스프링 부트에서 JWT 사용하기Server/Spring REST API 2020. 8. 24. 02:22
JWT란? [블로그 링크 예정] 스프링부트에서 로그인을 하였을 때 Access Token을 발급해주는 것과 사용자가 헤더에 토큰을 담아 보냈을 때 접근가능한 사용자인지 아닌지를 체크하는 예제를 진행해보려 한다. 먼저 스프링 프로젝트를 Maven으로 만든 후에 아래의 의존성과 설정을 추가해주자. pom.xml com.auth0 java-jwt 3.4.0 application.properties 내용 추가 # 토크 발급자 JWT.ISSUER=TEST # JWT 키 (여러 문자가 섞일수록 안전하다) JWT.SECRET=SeCrEtKeY4HaShInG ISSUER : 토큰 발급자 SECRET : 토큰 해쉬 키 값, 여러 문자가 섞일수록 안전하지만 암호화 시간이 오래걸린다.(노출하면 안되는 값이기 때문에 giti..
-
[Java] 제네릭 제한된 타입 파라미터, 와일드카드Language/Java 2020. 8. 24. 02:03
제한된 제네릭 클래스 타입 문자로 사용할 타입을 명시하면 한 종류의 타입만 저장할 수 있도록 제한할 수 있지만, 그래도 여전히 모든 종류의 타입을 지정할 수 있다는 것에는 변함이 없다. class FruitBox { // Generic } FruitBox fruitBox = new FruitBox(); fruitBox.add(new Toy()); 그렇다면 타입 매게변수 T에 지정할 수 있는 타입의 종류를 제한할 수 있는 방법은 없을까? class FruitBox { // Fruit의 자손만 타입으로 지정가능 // Logic } 여전히 한 종류의 타입만 담을 수 있지만, Fruit 클래스와 같거나 자손들만 담을 수 있다는 제한이 추가 되었다. FruitBox appleBox = new Fruit(); //..
-
[Java] 제네릭 메소드(Generic Method)란?Language/Java 2020. 8. 22. 11:00
제너릭 메소드 제네릭 메소드는 메소드의 선언 부에 적은 제네릭으로 리턴 타입, 파라미터의 타입이 정해지는 메소드이다. 제너릭에 대한 예시를 보면서 이해해보자. public class Student { static T name; } 먼저 static 변수는 제너릭은 사용할 수 없다. 왜냐하면 Student 클래스가 인스턴스가 되기 전에 static은 메모리에 올라가는데 이 때 name의 타입인 T가 결정되지 않기 때문에 위와 같이 사용할 수 없는 것이다. public class Student { static T getName(T name) { return name; } } static 메소드에도 제너릭을 사용하면 에러가 발생하는 이유는 static 변수와 마찬가지로 Student 클래스가 인스턴스화 되기 ..
-
[Spring Boot] 스프링부트에서 Mybatis 사용하기Server/MyBatis 2020. 8. 19. 02:32
먼저 Mybatis를 얘기하기 전에 JAVA의 ORM이 무엇이 있는지 어떤 것인지에 대해서 정리해보자. ORM(Object Relational Mapping)이란? ORM에서 Object는 객체지향 언어의 객체를 의미한다. Relational은 관계형 데이터베이스(Relational Database)의 데이터를 의미한다. Mapping이 의미하는 것은 객체지향 언어의 객체와 관계형 데이터를 서로 변환해 준다는 것이다. 관계형 데이터베이스에서 조회한 데이터를 Java 객체로 변환하여 리턴해 주고, Java 객체를 관계형 데이터베이스에 저장해 주는 라이브러리 혹은 기술을 말한다. Java ORM 기술로 유명한 것은 JPA, Hibernate가 있다. Mybatis는 JDBC로 처리하는 상당 부분의 코드와 파..