본문 바로가기

전체 글

(75)
ID Token OAuth 2.0 기반의 인증과 식별 표준 Oauth2.0 으로 사용자 인증을 수행하기 위한 상호 운용 방식을 정의 OpenID 커넥트는 ID 토큰은 서명된 JWT 로서 일시적인 OAuth 액세스 토큰과 함께 클라이언트 애플리케이션에게 전달된다. 액세스 토큰과 달리 ID토큰은 RP 로 보내져 그것의 내용에 파싱된다. RP = Relying Party OP = OpenID Provider access token 처럼 id 토큰에도 인증 세션에 대한 클레임이 포함된다. 즉, 사용자 식별자(sub) 와 토큰을 발급한 이슈 제공자를 위한 식별자 (iss) 그리고 생성된 토큰을 발급받는 클라이언트 식별자(aud) 클레임이 포함된다. 또한 ID 토큰은 토큰 자체의 유효시간 윈도우(exp와 iat 클래임으로) 에 대..
[JPA] 상속관계 전략 (Joined, Single Table, Inheritance) 관계형 데이터베이스에는 객체지향 언어에서 다루는 상속이라는 개념이 없다. 위 Item 을 상속받는 3개의 클래스 Album, Movie, Book 을 상속관계가 없는 관계형 데이터 베이스에 적용 하려면 객체의 상속개념과 가장 유사한 슈퍼타입, 서브타입 관계라는 모델링 기법을 사용한다. 객체의 상속관계를 슈퍼타입, 서브타입이라는 테이블로 구현할때는 3가지 방법을 선택할 수 있다. 1) Joined Table - 조인전략 2) Single Table - 단일 테이블 전략 3) Table per Class - 구현 클래스마다 테이블 전략 4) MapptedSuperclass - 위 세가지와는 성격이 조금 다르다. 테이블과는 관계가 없고 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모아주는 역할을 할 뿐이다...
DB Lock 동시성 제어의 종류와 구현 방법 1. 동시성 제어 방법 2. DataBase Lock 종류 3. DataBase Lock 구현 동시성 제어하는 여러 방법을 살펴보고 그중 DataBaseLevel 에 해당하는 DB Lock 의 종류와 사용방법을 정리한다. 출처는, 재고시스템으로 알아보는 동시성이슈 해결방법 - 인프런 | 강의 동시성 이슈란 무엇인지 알아보고 처리하는 방법들을 학습합니다., - 강의 소개 | 인프런 www.inflearn.com 1. 동시성 제어 방법 Lock은 열쇠와 같다. CriticalSection (얻고자 하는 데이터 영역) 에 접근하기위에는 Lock 을 얻고(acquire) 데이터를 사용한 뒤에 Lock 을 다시 반납(Release) 한다. 이렇게 데이터에 대해 동시성 제어를 하여 race Condition(공유되..
[book] The one thing -1- 전문가의 길을 향해 걸어라. 검은띠 수준에서 나오는 창의성은 일단 흰 띄 수준의 기본 동작을 모두 익히는 데서 나온다. 배움에서 언제나 더 높은 또 다른 수준이 있기 때문에 궁극적인 경지는 존재하지 않는다고 생각할 수 있다. 달리 말하면 우리는 경험한 것들에게 대해서는 '달인' 이 되는 반면, 앞으로 해야 할 것들에 대해서는 '견습생'이 된다. 바로 경지에 이르는 것을 여정이라 부르는 이유다. 유명한 기타리스트 에드워드 밴 헤일런의 형인 알렉스는 자기가 밤에 외출을 할 때마다 동생은 침대 맡에 앉아 기타를 연습했고, 몇 시간 후 집에 돌아와 보면 여전히 같은 자리에 앉아 연습 중이었다고 말한 적이 있다. 그것이 바로 끝나지 않는 전문가가 되는 길이다. ,무엇보다도 전문성은 투자한 시간에 비례한다...
[Spring] Transaction PROPAGATION.REQUIRES_NEW 의 '독립'이란 의미? 결론부터 말하자면, 스프링 트랜잭션중에 하나인 Requires_new 의 트랜잭션 스레드는 독립적이지 않다. 스프링 트랜잭션의 독립이란 물리적인것이 아닌 논리적 독립을 의미할 것이다. 아래 테스트 코드를 살펴보자. OuterClass에서 addItem() 에서 InnerService의 addCount()를 호출하고 addCount() 는 REQUIRES_NEW 의 속성을 갖는다. 새로운 독립적인 트랜잭션을 갖는다면 새로운 스레드를 생성하는것이 아닐까 착각할 수 있지만 아래와 같이 같은 쓰레드 값을 가진다. 그래서 만약, 아래처럼 InnerClass 에서 Exception 이 발생한다면 Propagation.REQUIRES_NEW 의 속성을 가졌다고 하더라도 아래처럼 outerService로 InnerCl..
[토비의 스프링 3.1] 3장 - 템플릿/콜백의 응용 [토비의 스프링 3.1] 3장에 정리된 내용. 중복된 코드를 고민하고 이를 템플릿/ 콜백 패턴을 통해 해결하는 과정이 순차적으로 정리되어 있다. 비슷한 코드를 실무에서 어떻게 고민하고 해결해야 할지 참고하여 적용해 볼 수 있을것 같다. 익숙해 질때까지 보고 또 보면 좋을 것 같아 정리해 둔다. 스프링을 사용하는 개발자라면 당연히 스프링이 제공하는 템플릿/콜백기능을 잘 사용할 수 있어야 한다. 동시에 팀플릿/콜백이 내장된 것을 원리도 알지 못한채로 기계적으로 사용하는 경우와 적용된 패턴을 이해하고 사용하는 경우는 큰 차이가 있다. 고정된 작업 흐름을 갖고 있으면서 여기저기서 자주 반복되는 코드가 있다면 중복되는 코드를 분리할 방법을 생각해보는 습관을 기르자. 중복된 코드는 먼저 메소드로 분리하는 간단한 시..
[Vue] 실행 모드(운영/개발)와 환경 변수 분리하기 - 사용자 실행모드를 추가할 수 있다. - 실행 모드별로 필요한 환경 변수를 다르게 설정 할 수 있다. package.json 파일에 스크립트 정보 추가 "[모드명]" : " vue-cli-service serve --mode [모드명]" package.json 에 cli 실행 스크립트에 모드 정보를 붙여 추가해 준다. 내가 추가한건 live, local, dev 이고 아래와 같이 실행 가능하다. npm run [모드명] 으로 실행 가능하다. npm run live npm run local npm run dev 모드명에 맞춰 환경 변수 파일 생성 ( .env.live, .env.dev) - package.json 과 같은 위치 (root) 에 두어야 한다. - .env.[mode].local 로 생성시에..
오늘 하루만은 하나, 오늘 하루만은 행복하게 지낼 것이다. 대부분의 사람은 마음먹은 만큼만 행복하다는 에이브러햄 링컨의 말은 사실이다. 행복은 우리 안에서 나온다. 환경의 문제가 아니다. 둘, 오늘 하루만은 주어진 상황에 적응하고 내가 바라는 것에 나를 맞추려 들지 않겠다. 나는 가족, 일, 행운을 있는 그대로 받아들이고 거기에 나 자신을 맞추겠다. 셋, 오늘 하루만은 몸을 잘 돌보겠다. 운동을 하고, 정성껏 돌보고, 영양을 충분히 공급하고, 학대하거나 무시하지도 않음으로써 내 몸을 내 마음대로 움직일 수 있는 완벽한 기계로 만들겠다. 넷, 오늘 하루만은 정신을 단련하겠다. 유용한 것을 배우며 정신적으로 나태해지지 않겠다. 집중해서 생각하고, 의미를 파악하고자 노력해야만 이해할 수 있는 글을 읽겠다. 다섯, 오늘 하루..
[JAVA] Try-with-Resouce가 코드를 만들어 주는 방법 자바 7부터 try-with-resource 가 등장했다. try-with-resource를 사용하면 코드의 가독성이 훨씬 좋아진다는 장점이 있다. 아래의 예제를 통해 살펴보자. [기존 try-catch-finally] static void copy(String src, String dst) throws IOException { InputStream in = new FileInputStream(src); try{ OutputStream out = new FileOutputStream(dst) ; try{ byte[] buf = new byte[BUFFER_SIZE]; int n; while ((n = in.read(buf)) >= 0) out.write(buf , 0 , n); } finally { ou..
코어의 수 확인하기(Get OS-level system information) 1. 코어의 수 확인하기 https://stackoverflow.com/questions/25552/get-os-level-system-information Get OS-level system information I'm currently building a Java app that could end up being run on many different platforms, but primarily variants of Solaris, Linux and Windows. Has anyone been able to successfully extract inform... stackoverflow.com 2. 스레드 풀의 적정 크기는? 스레드 풀의 적절한 사이즈는? [스레드 풀/Thread Pool] 스레드 풀..
[REDIS] Generic Redis Template 사용하기 https://stackoverflow.com/questions/23208010/drying-up-a-generic-redistemplate-in-spring-4 DRYing up a generic RedisTemplate in Spring 4 I've read that you can have @Autowired generics as of Spring 4, which is awesome. I have an abstract RedisService class in which I want to have @Autowired a generic RestTemplate, like so: public stackoverflow.com 코드는 아래. Redis 의 hash operation 에만 사용된다 @Componen..
[JAVA]옵저버 패턴 예제 옵저버 패턴으로 트위터 같은 커스터 마이즈된 알림 시스템을 설계하고 구현할 수 있다. 다양한 신문 매체(뉴욕 타임즈, 가디언, 르몽드)가 뉴스 트윗을 구독하고 있으며 특정 키워드를 포함하는 트윗이 등록되면 알림을 받고 싶어한다. 우선 다양한 옵저버를 그룹화할 Observer 인터페이스가 필요하다. Observer 인터페이스는 새로운 트윗이 있을때 주제(Feed) 가 호출할 수 있도록 notify라고 하는 하나의 메서드를 제공한다. public interface Observer { void notify(String tweet); } public class NYTimes implements Observer { @Override public void notify(String tweet) { if(tweet !..
[JAVA] stream으로 데이터 필터링 하기 요즘 스트림을 공부하고 있다가 SQL 문에서가 아닌 자바단에서 필터링을 동적으로 할 수 있는 방식을 만들어 보았다. null 일 경우에는 체크가 되지 않고(true 로 필터링 되지 않음) null 이 아닐 경우에는 체크하여 각 필드와 같은 데이터를 리스트로 반환한다. 스트림을 사용하면 for문과 달리 직접 요소를 반복하지 않아 편리하고 가독성이 좋은 것 같다. 아래는 멤버리스트를 조회하는 클래스인데 조건 필드에 데이터가 있을 경우에만 비교해서 리스트를 반환해준다. public class MemberTest { private List members; public MemberTest(List members) { this.members = members; } public List getByRequest(Str..
[Spring boot] Spring actuator 사용하기 - health check, healthIndicator custom 1. 스프링 액추에이터란? 스프링 액추에이터는 애플리케이션에 대한 모니터링 정보를 엔드포인트를 통해 제공한다. db, matrix 등의 상태 정보를 제공하며 만약 actuator/health(기본값) 을 통해 접근하면 애플리케이션의 건강 상태를 (up, down.. 등으로) 제공 받을 수 있다. 또한 다양한 설정을 통해 사용자에 맞게 수정 가능하다. Actuator endpoints let you monitor and interact with your application. Spring Boot includes a number of built-in endpoints and lets you add your own. For example, the health endpoint provides basic app..
[JAVA] 람다식 실용예제 - 실행 어라운드 패턴 실행 어라운드 패턴 자원처리에 처리하는 **순환 패턴 Recurrent pattern 은 자원을 열고, 처리한 다음에, 자원을 닫는 순서로 이루어 진다. 설정과 정리 과정은 대부분 비슷하다. 실행 어라운드 패턴은 실제 자원을 처리하는 코드를 설정과 정리 두 과정이 둘러싸는 형태를 갖는다. 아래의 코드에서 기존의 설정, 정리과정은 재사용하고 processFile 메서드만 다른 동작을 수행하도록 명령 할 수 있다. 1단계 : 동작 파라미터화 public String processFile() throws IOEception { try(BufferedReader br = new BufferedReader(new FileReader("data.txt"))) { return br.readLine(); } } 2단계..
[Book] 햇빛은 찬란하고 인생은 귀하니까요 - "선택할 수 있는것과 선택할 수 없는 것" -1- 뜻대로 할 수 없는 일이 많다. 부모를 선택하는 일. 국적을 선택하는 일 우리는 자신을 구성하는 모든 요소를 거의 선택할 수 없다. 죽는 날을 선택하는 것도 그러하다. 물론 스스로 목숨을 끊는 비극도 있을 수 있고 이민을 떠나 귀화하는 방법도 있겠지만 애초에 태어난 국적은 어찌할 수가 없다. 누군가는 부유한 나라의 국적을 갖고 태어나 세계 어디를 가나 대접을 받고 누군가는 가난한 나라의 일원으로 태어나 지구촌 곳곳에서 천덕꾸러기 취급을 당한다. 작은 고무보트 한 척에 생사를 걸고 유럽으로 건너와 구걸 행각을 벌이는 난민을 볼 때는 대상이 없는 분노가 올라온 나머지 무력감마저 든다. 누구나 이런 삶을 선택하고 싶어 하지 않는다는 걸 알기에. 피부색도, 부모도, 국적도 아무것도 선택할 수 없었던 존재..
[JAVA] 전략 패턴 - 동작 파라미터화 [출처 : 스프링 인 액션] 우리가 어떤 상황에서 일을 하던 소비자 요구사항은 바뀐다. 예를들어 농부가 재고 목록 조사를 쉽게 할 수 있도록 돕는 애플리케이션이 있다고 가정하자. 농부는 이렇게 말할 것이다. "녹색 사과를 모두 찾고 싶어요" 첫번째 시도 : 녹색 사과 필터링 enum Color { RED, GREEN} public static List filterGreenApples(List inventory, Color) { List result = new ArrayList(); for (Apple apple : inventory) { if(apple.getColor().equals(color) { result.add(apple); } } return result; } 그 다음날 농부는 이렇게 말할 수..
[JAVA] JDK 버전별 정리 JDK 버전별 변화와 특징을 정리하였다. 1996년 자바 개발 키트(JDK 1.0) 1997년 자바 1.1 자바 1.0 스레드 락, 심지어 메모리 지원했지만 저수준 기능을 온전히 활용하기 어려움이 있다. JDK 5 특징) 자바 5는 이전 버전과 비교해서 언어적으로 큰 변화가 있었다, 스레드 풀, 병령 실행 컬렉션의 강력한 도구 도입 릴리즈) 1. 제너릭 자바 5의 가장 중요한 신규 기능이다. 기존에 컬렉션 프레임워크를 이용해 발생할 수 있는 ClassCastExption 을 컴파일 시간에 검증 할 수 있다. 이러한 컴파일 검증 기능 뿐만 아니라 코드에 대한 데이터를 명확히 해서 가독성을 높일 수 있다. 2. for 루프 개선 for each 구문을 사용할 수 있다. 3. 컨커런스 API API 를 사용해..
디자인 패턴(Design Pattern) - 목적에 따른 분류 디자인 패턴이란? (소프트웨어) 디자인 패턴이란 특정 문맥에서 공통적으로 발생하는 문제에 대해 쓰이는 재사용 가능한 해결책 목적별로 일정한 패턴이 제시되어 있음 완전한 정답이 되는 알고리즘과 달리 현재 상황에 맞춰 최적화된 패턴을 결정하여 사용하는 것이 좋음 대표적으로 구체화된 디자인 패턴은 GoF(Gang of Four) 에서 제시한 23개의 패턴이 있음 * Gang of Four : Erich Gamma, Richard Helm, Ralph johnson, john Vissides, 총 4명을 일컬음 디자인 패턴의 장점 개발자 간의 원활한 협업이 가능 소프트웨어의 구조를 파악하기 용이함 재사용을 통해 개발 시간 단축 설계 변경이 있을 경우 비교적 원활하게 조치가 가능 디자인 패턴은 개발자 세계에서 공..
[JAVA] 리플렉션 API 정리 리플렉션이란? Reflection allows us to inspect or/and modify runtime attributes of classes, interfaces, fields, and methods. This particularly comes in handy when we don't know their names at compile time. Additionally, we can instantiate new objects, invoke methods, and get or set field values using reflection. 클래스에 대한 메타 정보로 런타임시 동적 프로그래밍을 하는 개념인 것 같다. 동적 프로그래밍 하기 위한 객체의 정보에 접근 하기 위해서는 Class 클래스가 사용되..
11월 읽어볼 링크 1) Rest API 제대로 알고 사용하기 https://meetup.toast.com/posts/92 REST API 제대로 알고 사용하기 : NHN Cloud Meetup REST API 제대로 알고 사용하기 meetup.toast.com 2) ResponseEntity 란? https://devlog-wjdrbs96.tistory.com/182 [Spring Boot] ResponseEntity란 무엇인가? 먼저 REST API가 무엇인지는 아래 블로그를 먼저 잘 읽어보자. https://meetup.toast.com/posts/92 REST API 제대로 알고 사용하기 : TOAST Meetup REST API 제대로 알고 사용하기 meetup.toast.com 1. ResponseEn.. dev..
Node.js 가 무엇인지 (작성중) Node.js (nodejs.org) Node.js Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. nodejs.org 책은 Node.js 교과서 개정 2판을 참고 하였다. 노드는 서버로 사용된다. 서버란? 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램을 말한다. 저장소에 필요한 리소스(웹 사이트의 화면, 웹 설치 파일, 정보 등등) 넣고. 필요할때마다 서비스나 정보를 꺼내 프로그램에 올린 후 클라이언트에게 필요한 정보를 전송해 준다. 이게 서버이다. 하지만 서버는 서버의 역할만 하는것이 아니다. 다른 클라이언트에게 리소스를 요청하는 클라이언트의 역할 또한 가능하다. (이건 TMI) 그리고 노드..
JPA Repository의 쿼리 메소드는 어떻게 구현될까? https://www.baeldung.com/spring-data-derived-queries Spring Java Persistence Repository 에서 쿼리 메소드를 생성하는 방법, 자 위에 자세히 나와있다. 어떻게 Repository Interface 를 Implement 를 할까? 처음 보았을때는 빌드 후 생성된 바이트 코드도 확인해 볼수 없었기 때문이다. https://stackoverflow.com/questions/38509882/how-are-spring-data-repositories-actually-implemented How are Spring Data repositories actually implemented? I have been working with Spring Dat..
[JAVA]java Serializable 직렬화란? (1) 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크간 전송) 하고 나중에 재구성 할 수 있는 포맷으로 변환하는 과정이다. 오브젝트를 직렬화 하는 과정의 반대로, 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화라고 한다. 위키 백과 - https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC%ED%99%94 (2) 시스템적으로 이야기 하자면 JVM(Java Virtual Machin 이하 JVM) 의 메모리 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM 으로 상주 시키는 형태를 같이 이야기 한..