분류 전체보기
-
[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로 처리하는 상당 부분의 코드와 파..
-
[Spring Boot] 스프링부트에서 JSP 사용하는 법Server/Spring Boot 2020. 8. 18. 13:43
이번 글에서는 스프링 부트에서 jsp를 사용하기 위해 설정하는 법에 대해서 정리하려 한다. spring-boot-starter-web 에 포함된 tomcat 은 JSP 엔진을 포함하고 있지 않다. jsp 파일은 Springboot 의 templates 폴더안에서 작동하지 않는다. 그래서 jsp를 적용하기 위해서는 아래와 같은 의존성을 추가해야한다. pom.xml javax.servlet jstl org.apache.tomcat.embed tomcat-embed-jasper build.gradle dependencies { implementation 'javax.servlet:jstl' implementation "org.apache.tomcat.embed:tomcat-embed-jasper" } 기본적으..
-
[Spring Boot] 클라이언트 REST API 응답보내기Server/Spring REST API 2020. 8. 18. 00:03
이번 글에서는 서버가 클라이언트에게 응답을 할 때 JSON 형태로 주는 것을 정리해보려 한다. 간단히 포스트맨으로 로그인 요청을 했을 때 로그인 성공, 실패의 응답을 주는 예제를 정리해보자. (HTTP 상태코드, 비밀번호 암호화, JWT에 대해서는 정리하지 않겠다.) HTTP 상태코드는 아래링크를 참고하자. https://developer.mozilla.org/ko/docs/Web/HTTP/Status 먼저 최근에 클라이언트에게 응답을 할 때는 아래와 같은 JSON 형태로 주는 것이 일반적이다. { "status": 200, "message": "로그인 성공", "data": { "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWRIjoib3..
-
[NodeJS] KAKAO BOOK OPEN API 사용하는 법Server/NodeJS 2020. 8. 14. 13:50
이번 글에서는 NodeJS를 이용해서 KAKAO OPEN 책 검색 API를 요청해보는 예제를 진행해보려 한다. (REST API 키는 발급받았다는 가정하에 글을 쓰도록 하겠다.) https://developers.kakao.com/docs/latest/ko/daum-search/dev-guide Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 위의 사이트에 들어가서 "책 검색" 부분을 찾아보자. 그러면 위와 같이 설명이 되어 있는 부분을 찾을 수 있을 것이다. 어떻게 호출을 해야 하는 것인지에 대해서 간략하게 살펴보자. 먼저 Parameter를 ..